feat(icons): 添加离线图标生成脚本并更新依赖

- 新增脚本 generate-offline-icons.js 用于自动生成离线图标集合
- 将手动维护的 menu-icons.ts 替换为脚本生成的 offline-icons.ts
- 更新 @iconify/json 依赖版本至 2.2.431
- 在 icons 包中添加 @iconify/json 作为工作区依赖
- 在根 package.json 中添加生成离线图标的 npm 脚本
This commit is contained in:
dap
2026-01-23 11:37:31 +08:00
parent 87706ad425
commit fa4d16c542
7 changed files with 422 additions and 127 deletions

View File

@@ -55,7 +55,8 @@
"test:e2e": "turbo run test:e2e",
"update:deps": "npx taze -r -w",
"version": "pnpm exec changeset version && pnpm install --no-frozen-lockfile",
"catalog": "pnpx codemod pnpm/catalog"
"catalog": "pnpx codemod pnpm/catalog",
"generate-offline-icons": "node scripts/generate-offline-icons.js"
},
"devDependencies": {
"@changesets/changelog-github": "catalog:",

View File

@@ -55,6 +55,7 @@
"@iconify/icons-tabler": "^1.2.95",
"@iconify/icons-uiw": "^1.2.6",
"@iconify/icons-vscode-icons": "^1.2.29",
"@iconify/icons-wpf": "^1.2.3"
"@iconify/icons-wpf": "^1.2.3",
"@iconify/json": "catalog:"
}
}

View File

@@ -3,7 +3,7 @@ import { createIconifyOfflineIcon } from '@vben-core/icons';
import dingdingFill from '@iconify/icons-ri/dingding-fill';
import giteeIcon from '@iconify/icons-simple-icons/gitee';
import './menu-icons';
import './offline-icons';
// 第三方登录相关图标
export const DingdingIcon = createIconifyOfflineIcon(

View File

@@ -1,123 +0,0 @@
import { addIcon } from '@vben-core/icons';
import schedule from '@iconify/icons-akar-icons/schedule';
import settingOutline from '@iconify/icons-ant-design/setting-outlined';
import antdTool from '@iconify/icons-ant-design/tool-outlined';
import UserAntd from '@iconify/icons-ant-design/user-outlined';
import Operation from '@iconify/icons-arcticons/one-hand-operation';
import BaseLineHousesFill from '@iconify/icons-bi/houses-fill';
import BxPackage from '@iconify/icons-bx/package';
import modelAlt from '@iconify/icons-carbon/model-alt';
import taskApproved from '@iconify/icons-carbon/task-approved';
import redisWordmark from '@iconify/icons-devicon/redis-wordmark';
import springWordmark from '@iconify/icons-devicon/spring-wordmark';
import vscode from '@iconify/icons-devicon/vscode';
import evergreenTree from '@iconify/icons-emojione/evergreen-tree';
import RoleBindingOutlined from '@iconify/icons-eos-icons/role-binding-outlined';
import SystemGroup from '@iconify/icons-eos-icons/system-group';
import NoticePush from '@iconify/icons-fe/notice-push';
import leave from '@iconify/icons-flat-color-icons/leave';
import plus from '@iconify/icons-flat-color-icons/plus';
import builDefinition from '@iconify/icons-fluent-mdl2/build-definition';
import Dictionary from '@iconify/icons-fluent-mdl2/dictionary';
import flow from '@iconify/icons-fluent-mdl2/flow';
import leaveUser from '@iconify/icons-fluent-mdl2/leave-user';
import from24 from '@iconify/icons-fluent/form-24-regular';
import BaseLineHouse from '@iconify/icons-ic/baseline-house';
import monitor from '@iconify/icons-ic/baseline-monitor';
import roundLaunch from '@iconify/icons-ic/round-launch';
import MenuSharp from '@iconify/icons-ic/sharp-menu';
import Appointment from '@iconify/icons-icon-park-outline/appointment';
import SettingTwo from '@iconify/icons-icon-park-twotone/setting-two';
import boolOpenText from '@iconify/icons-lucide/book-open-text';
import copyright from '@iconify/icons-lucide/copyright';
import table from '@iconify/icons-lucide/table';
import cloudDoneOutlineRounded from '@iconify/icons-material-symbols/cloud-done-outline-rounded';
import generatingTokensOutline from '@iconify/icons-material-symbols/generating-tokens-outline';
import LogoDevOutline from '@iconify/icons-material-symbols/logo-dev-outline';
import expressionIcon from '@iconify/icons-material-symbols/regular-expression-rounded';
import ccOutline from '@iconify/icons-mdi/cc-outline';
import tools from '@iconify/icons-mdi/tools';
import workflowOutline from '@iconify/icons-mdi/workflow-outline';
import DepartmentLine from '@iconify/icons-mingcute/department-line';
import profileLine from '@iconify/icons-mingcute/profile-line';
import UserDuotone from '@iconify/icons-ph/user-duotone';
import userList from '@iconify/icons-ph/user-list';
import users from '@iconify/icons-ph/users-light';
import insatnceLine from '@iconify/icons-ri/instance-line';
import todoLine from '@iconify/icons-ri/todo-line';
import Authy from '@iconify/icons-simple-icons/authy';
import FolderWithFilesOutline from '@iconify/icons-solar/folder-with-files-outline';
import monitorBoldDuotone from '@iconify/icons-solar/monitor-bold-duotone';
import monitorCameraOutlined from '@iconify/icons-solar/monitor-camera-outline';
import monitorPhoneOutlined from '@iconify/icons-solar/monitor-smartphone-outline';
import InterfaceLoginDialPadFingerPasswordDialPadDotFinger from '@iconify/icons-streamline/interface-login-dial-pad-finger-password-dial-pad-dot-finger';
import categoryPlus from '@iconify/icons-tabler/category-plus';
import code from '@iconify/icons-tabler/code';
/**
* 这里添加菜单图标
*/
addIcon('eos-icons:system-group', SystemGroup);
addIcon('ph:user-duotone', UserDuotone);
addIcon('ant-design:user-outlined', UserAntd);
addIcon('eos-icons:role-binding-outlined', RoleBindingOutlined);
addIcon('ic:sharp-menu', MenuSharp);
addIcon('mingcute:department-line', DepartmentLine);
addIcon('icon-park-outline:appointment', Appointment);
addIcon('fluent-mdl2:dictionary', Dictionary);
addIcon('icon-park-twotone:setting-two', SettingTwo);
addIcon('fe:notice-push', NoticePush);
addIcon('material-symbols:logo-dev-outline', LogoDevOutline);
addIcon('arcticons:one-hand-operation', Operation);
addIcon(
'streamline:interface-login-dial-pad-finger-password-dial-pad-dot-finger',
InterfaceLoginDialPadFingerPasswordDialPadDotFinger,
);
addIcon('solar:folder-with-files-outline', FolderWithFilesOutline);
addIcon('simple-icons:authy', Authy);
addIcon('solar:monitor-smartphone-outline', monitorPhoneOutlined);
addIcon('ic:baseline-house', BaseLineHouse);
addIcon('ph:users-light', users);
addIcon('bi:houses-fill', BaseLineHousesFill);
addIcon('ph:user-list', userList);
addIcon('bx:package', BxPackage);
addIcon('solar:monitor-bold-duotone', monitorBoldDuotone);
addIcon('solar:monitor-camera-outline', monitorCameraOutlined);
addIcon('material-symbols:generating-tokens-outline', generatingTokensOutline);
addIcon('devicon:redis-wordmark', redisWordmark);
addIcon('devicon:spring-wordmark', springWordmark);
addIcon('akar-icons:schedule', schedule);
addIcon('mdi:tools', tools);
addIcon('ant-design:tool-outlined', antdTool);
addIcon('tabler:code', code);
addIcon('flat-color-icons:plus', plus);
addIcon('devicon:vscode', vscode);
addIcon('lucide:table', table);
addIcon('emojione:evergreen-tree', evergreenTree);
addIcon('fluent-mdl2:leave-user', leaveUser);
addIcon('mdi:workflow-outline', workflowOutline);
addIcon('tabler:category-plus', categoryPlus);
addIcon('carbon:model-alt', modelAlt);
addIcon('fluent-mdl2:build-definition', builDefinition);
addIcon('fluent-mdl2:build-definition', builDefinition);
addIcon('icon-park-outline:monitor', monitor);
addIcon('ri:instance-line', insatnceLine);
addIcon('ri:todo-line', todoLine);
addIcon('fluent:form-24-regular', from24);
addIcon('carbon:task-approved', taskApproved);
addIcon('ic:round-launch', roundLaunch);
addIcon('material-symbols:cloud-done-outline-rounded', cloudDoneOutlineRounded);
addIcon('mdi:cc-outline', ccOutline);
addIcon('lucide:book-open-text', boolOpenText);
addIcon('lucide:copyright', copyright);
// 个人中心
addIcon('mingcute:profile-line', profileLine);
// oss配置
addIcon('ant-design:setting-outlined', settingOutline);
// 请假
addIcon('flat-color-icons:leave', leave);
// flow
addIcon('fluent-mdl2:flow', flow);
// 流程表达式
addIcon('material-symbols:regular-expression-rounded', expressionIcon);

View File

@@ -0,0 +1,258 @@
// 该文件由脚本 generate-offline-icons.js 生成 ,不要手动修改
// 该文件由脚本 generate-offline-icons.js 生成 ,不要手动修改
// 该文件由脚本 generate-offline-icons.js 生成 ,不要手动修改
import { addIcon } from '@vben-core/icons';
addIcon('eos-icons:system-group', {
body: '<path fill="currentColor" d="M17 1H3a2 2 0 0 0-2 2v9h2V3h14Z"/><path fill="currentColor" d="M21 5H7a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h5.53v1.53H11V22h6v-1.48h-1.52V19H21a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m0 12H7V7h14Z"/>',
width: 24,
height: 24,
});
addIcon('ant-design:user-outlined', {
body: '<path fill="currentColor" d="M858.5 763.6a374 374 0 0 0-80.6-119.5a375.6 375.6 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1c-.4.2-.8.3-1.2.5c-44.8 18.9-85 46-119.5 80.6a375.6 375.6 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8c2-77.2 33-149.5 87.8-204.3c56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2M512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362s17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362s-17.9 89.1-50.4 121.6S557.9 534 512 534"/>',
width: 1024,
height: 1024,
});
addIcon('eos-icons:role-binding-outlined', {
body: '<path fill="currentColor" d="M23 19a4 4 0 0 1-4 4h-2v-2h2a2 2 0 0 0 0-4h-2v-2h2a4 4 0 0 1 4 4M9 19a4 4 0 0 1 4-4h2v2h-2a2 2 0 0 0 0 4h2v2h-2a4 4 0 0 1-4-4"/><path fill="currentColor" d="M14 18h4v2h-4zM9 5a3 3 0 1 0 3 3a3.01 3.01 0 0 0-3-3m0 4a1 1 0 1 1 1-1a1.003 1.003 0 0 1-1 1m-3.69 6A7 7 0 0 1 9 13.88a6 6 0 0 1 .778.064A5.97 5.97 0 0 1 13 13h.254A9.4 9.4 0 0 0 9 11.89c-2.03 0-6 1.07-6 3.58V17h4.349a6 6 0 0 1 1.188-2Z"/><path fill="currentColor" d="M16 2h-4.18a2.988 2.988 0 0 0-5.64 0H2a2.006 2.006 0 0 0-2 2v14a2.006 2.006 0 0 0 2 2h5.141a3.6 3.6 0 0 1 0-2H2V4h14v9h2V4a2.006 2.006 0 0 0-2-2M9 3.25a.756.756 0 0 1-.75-.75a.75.75 0 0 1 1.5 0a.756.756 0 0 1-.75.75"/>',
width: 24,
height: 24,
});
addIcon('ic:sharp-menu', {
body: '<path fill="currentColor" d="M3 18h18v-2H3zm0-5h18v-2H3zm0-7v2h18V6z"/>',
width: 24,
height: 24,
});
addIcon('mingcute:department-line', {
body: '<g fill="none" fill-rule="evenodd"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"/><path fill="currentColor" d="M15 6a3 3 0 0 1-2 2.83V11h3a3 3 0 0 1 3 3v1.17a3.001 3.001 0 1 1-2 0V14a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v1.17a3.001 3.001 0 1 1-2 0V14a3 3 0 0 1 3-3h3V8.83A3.001 3.001 0 1 1 15 6m-3-1a1 1 0 1 0 0 2a1 1 0 0 0 0-2M6 17a1 1 0 1 0 0 2a1 1 0 0 0 0-2m12 0a1 1 0 1 0 0 2a1 1 0 0 0 0-2"/></g>',
width: 24,
height: 24,
});
addIcon('icon-park-outline:appointment', {
body: '<g fill="none" stroke="currentColor" stroke-width="4"><circle cx="24" cy="11" r="7" stroke-linecap="round" stroke-linejoin="round"/><path stroke-linecap="round" stroke-linejoin="round" d="M4 41c0-8.837 8.059-16 18-16"/><circle cx="34" cy="34" r="9"/><path stroke-linecap="round" stroke-linejoin="round" d="M33 31v4h4"/></g>',
width: 48,
height: 48,
});
addIcon('fluent-mdl2:dictionary', {
body: '<path fill="currentColor" d="M1664 0v2048H256q-53 0-99-20t-82-55t-55-81t-20-100V256q0-49 21-95t57-82t82-57t96-22zm-128 1664H256q-27 0-50 10t-40 27t-28 41t-10 50q0 27 10 50t27 40t41 28t50 10h1280zm-1408-94q60-34 128-34h1280V128H256q-23 0-46 11t-41 30t-29 41t-12 46zM384 384h896v384H384zm128 256h640V512H512z"/>',
width: 2048,
height: 2048,
});
addIcon('ant-design:setting-outlined', {
body: '<path fill="currentColor" d="m924.8 625.7l-65.5-56c3.1-19 4.7-38.4 4.7-57.8s-1.6-38.8-4.7-57.8l65.5-56a32.03 32.03 0 0 0 9.3-35.2l-.9-2.6a443.7 443.7 0 0 0-79.7-137.9l-1.8-2.1a32.12 32.12 0 0 0-35.1-9.5l-81.3 28.9c-30-24.6-63.5-44-99.7-57.6l-15.7-85a32.05 32.05 0 0 0-25.8-25.7l-2.7-.5c-52.1-9.4-106.9-9.4-159 0l-2.7.5a32.05 32.05 0 0 0-25.8 25.7l-15.8 85.4a351.9 351.9 0 0 0-99 57.4l-81.9-29.1a32 32 0 0 0-35.1 9.5l-1.8 2.1a446 446 0 0 0-79.7 137.9l-.9 2.6c-4.5 12.5-.8 26.5 9.3 35.2l66.3 56.6c-3.1 18.8-4.6 38-4.6 57.1c0 19.2 1.5 38.4 4.6 57.1L99 625.5a32.03 32.03 0 0 0-9.3 35.2l.9 2.6c18.1 50.4 44.9 96.9 79.7 137.9l1.8 2.1a32.12 32.12 0 0 0 35.1 9.5l81.9-29.1c29.8 24.5 63.1 43.9 99 57.4l15.8 85.4a32.05 32.05 0 0 0 25.8 25.7l2.7.5a449.4 449.4 0 0 0 159 0l2.7-.5a32.05 32.05 0 0 0 25.8-25.7l15.7-85a350 350 0 0 0 99.7-57.6l81.3 28.9a32 32 0 0 0 35.1-9.5l1.8-2.1c34.8-41.1 61.6-87.5 79.7-137.9l.9-2.6c4.5-12.3.8-26.3-9.3-35M788.3 465.9c2.5 15.1 3.8 30.6 3.8 46.1s-1.3 31-3.8 46.1l-6.6 40.1l74.7 63.9a370 370 0 0 1-42.6 73.6L721 702.8l-31.4 25.8c-23.9 19.6-50.5 35-79.3 45.8l-38.1 14.3l-17.9 97a377.5 377.5 0 0 1-85 0l-17.9-97.2l-37.8-14.5c-28.5-10.8-55-26.2-78.7-45.7l-31.4-25.9l-93.4 33.2c-17-22.9-31.2-47.6-42.6-73.6l75.5-64.5l-6.5-40c-2.4-14.9-3.7-30.3-3.7-45.5c0-15.3 1.2-30.6 3.7-45.5l6.5-40l-75.5-64.5c11.3-26.1 25.6-50.7 42.6-73.6l93.4 33.2l31.4-25.9c23.7-19.5 50.2-34.9 78.7-45.7l37.9-14.3l17.9-97.2c28.1-3.2 56.8-3.2 85 0l17.9 97l38.1 14.3c28.7 10.8 55.4 26.2 79.3 45.8l31.4 25.8l92.8-32.9c17 22.9 31.2 47.6 42.6 73.6L781.8 426zM512 326c-97.2 0-176 78.8-176 176s78.8 176 176 176s176-78.8 176-176s-78.8-176-176-176m79.2 255.2A111.6 111.6 0 0 1 512 614c-29.9 0-58-11.7-79.2-32.8A111.6 111.6 0 0 1 400 502c0-29.9 11.7-58 32.8-79.2C454 401.6 482.1 390 512 390s58 11.6 79.2 32.8A111.6 111.6 0 0 1 624 502c0 29.9-11.7 58-32.8 79.2"/>',
width: 1024,
height: 1024,
});
addIcon('fe:notice-push', {
body: '<defs><path id="SVGt6KFdcQE" fill="currentColor" d="M17 11a4 4 0 1 1 0-8a4 4 0 0 1 0 8M5 5h6v2H5v12h12v-6h2v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2"/></defs><use href="#SVGt6KFdcQE"/>',
width: 24,
height: 24,
});
addIcon('material-symbols:logo-dev-outline', {
body: '<path fill="currentColor" d="M6 15h2.4q.475 0 .813-.337t.337-.813v-3.7q0-.475-.337-.812T8.4 9H6zm1.15-1.15v-3.7H8.4v3.7zM10.875 15h2.45v-1.15h-2.05v-1.3h1.3V11.4h-1.3v-1.25h2.05V9h-2.45q-.325 0-.537.212t-.213.538v4.5q0 .325.213.538t.537.212m5.15-.025q.325 0 .563-.213t.312-.537L18.3 9h-1.2l-1.075 4.1L14.95 9h-1.2l1.4 5.225q.075.325.313.538t.562.212M5 21q-.825 0-1.412-.587T3 19V5q0-.825.588-1.412T5 3h14q.825 0 1.413.588T21 5v14q0 .825-.587 1.413T19 21zm0-2h14V5H5zM5 5v14z"/>',
width: 24,
height: 24,
});
addIcon('solar:folder-with-files-outline', {
body: '<path fill="currentColor" fill-rule="evenodd" d="M6.86 1.25h.127c.351 0 .577 0 .798.02a4.75 4.75 0 0 1 2.474.98h6.299c.409 0 .687 0 .931.032a3.75 3.75 0 0 1 3.248 3.427a3 3 0 0 1 .77.503q.15.133.281.28c.529.588.754 1.303.86 2.144c.102.812.102 1.838.102 3.111v2.31c0 1.837 0 3.293-.153 4.432c-.158 1.172-.49 2.121-1.238 2.87c-.749.748-1.698 1.08-2.87 1.238c-1.14.153-2.595.153-4.433.153H9.944c-1.838 0-3.294 0-4.433-.153c-1.172-.158-2.121-.49-2.87-1.238c-.748-.749-1.08-1.698-1.238-2.87c-.153-1.14-.153-2.595-.153-4.433V6.86c0-.797 0-1.303.082-1.74A4.75 4.75 0 0 1 5.12 1.331c.438-.082.944-.082 1.74-.082m12.287 4.078a2.25 2.25 0 0 0-1.853-1.559c-.134-.017-.306-.019-.794-.019h-4.689c.643.64.935.906 1.266 1.09q.328.182.689.286c.413.117.866.124 2.062.124h.425c1.162 0 2.119 0 2.894.078M6.95 2.75c-.917 0-1.271.003-1.553.056a3.25 3.25 0 0 0-2.59 2.591c-.054.282-.057.636-.057 1.553V14c0 1.907.002 3.262.14 4.29c.135 1.005.389 1.585.812 2.008s1.003.677 2.009.812c1.028.138 2.382.14 4.289.14h4c1.907 0 3.262-.002 4.29-.14c1.005-.135 1.585-.389 2.008-.812s.677-1.003.812-2.009c.138-1.027.14-2.382.14-4.289v-2.202c0-1.336-.001-2.267-.09-2.975c-.087-.689-.246-1.06-.487-1.328a2 2 0 0 0-.168-.168c-.268-.241-.64-.4-1.328-.487c-.707-.089-1.639-.09-2.975-.09h-.484c-1.048 0-1.724 0-2.363-.182c-.35-.1-.689-.24-1.008-.417c-.58-.324-1.058-.801-1.8-1.543l-.077-.078l-.55-.55a8 8 0 0 0-.503-.482a3.25 3.25 0 0 0-1.771-.734a8 8 0 0 0-.696-.014m5.3 7.25a.75.75 0 0 1 .75-.75h5a.75.75 0 0 1 0 1.5h-5a.75.75 0 0 1-.75-.75" clip-rule="evenodd"/>',
width: 24,
height: 24,
});
addIcon('solar:monitor-smartphone-outline', {
body: '<path fill="currentColor" fill-rule="evenodd" d="M9.944 1.25h5.59c1.139 0 2.04 0 2.766.062c.743.063 1.37.195 1.94.499a4.75 4.75 0 0 1 1.95 1.95c.303.569.435 1.196.498 1.939c.062.725.062 1.627.062 2.766V8.5a.75.75 0 0 1-1.5 0c0-1.18 0-2.018-.056-2.673c-.055-.646-.16-1.044-.328-1.359a3.25 3.25 0 0 0-1.334-1.334c-.315-.168-.713-.273-1.359-.328c-.655-.055-1.493-.056-2.673-.056H10c-1.907 0-3.261.002-4.29.14c-1.005.135-1.585.389-2.008.812S3.025 4.705 2.89 5.71c-.138 1.029-.14 2.383-.14 4.29v1q-.001.687.004 1.25H11a.75.75 0 0 1 0 1.5H2.807q.018.234.046.442c.099.734.28 1.122.556 1.399c.277.277.665.457 1.4.556c.754.101 1.756.103 3.191.103h3a.75.75 0 0 1 .75.75v5a.75.75 0 0 1-.75.75H8a.75.75 0 0 1 0-1.5h2.25v-3.5H7.945c-1.367 0-2.47 0-3.337-.116c-.9-.122-1.658-.38-2.26-.982s-.86-1.36-.981-2.26c-.049-.36-.077-.762-.094-1.206a.75.75 0 0 1-.01-.327c-.013-.541-.013-1.142-.013-1.804V9.944c0-1.838 0-3.294.153-4.433c.158-1.172.49-2.121 1.238-2.87c.749-.748 1.698-1.08 2.87-1.238c1.14-.153 2.595-.153 4.433-.153m8.004 9h.104c.899 0 1.648 0 2.242.08c.628.084 1.195.27 1.65.726c.456.455.642 1.022.726 1.65c.08.594.08 1.344.08 2.242v3.104c0 .899 0 1.648-.08 2.242c-.084.628-.27 1.195-.726 1.65c-.455.456-1.022.642-1.65.726c-.594.08-1.343.08-2.242.08h-.104c-.899 0-1.648 0-2.242-.08c-.628-.084-1.195-.27-1.65-.726c-.456-.455-.642-1.022-.726-1.65c-.08-.594-.08-1.343-.08-2.242v-3.104c0-.899 0-1.648.08-2.242c.084-.628.27-1.195.726-1.65c.455-.456 1.022-.642 1.65-.726c.594-.08 1.343-.08 2.242-.08m-2.043 1.566c-.461.063-.659.17-.789.3s-.237.328-.3.79c-.064.482-.066 1.13-.066 2.094v3c0 .964.002 1.612.066 2.095c.063.461.17.659.3.789s.328.237.79.3c.482.064 1.13.066 2.094.066s1.612-.002 2.095-.067c.461-.062.659-.169.789-.3s.237-.327.3-.788c.064-.483.066-1.131.066-2.095v-3c0-.964-.002-1.612-.067-2.095c-.062-.461-.169-.659-.3-.789s-.327-.237-.788-.3c-.483-.064-1.131-.066-2.095-.066s-1.612.002-2.095.066M16.25 20a.75.75 0 0 1 .75-.75h2a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1-.75-.75" clip-rule="evenodd"/>',
width: 24,
height: 24,
});
addIcon('ph:users-light', {
body: '<path fill="currentColor" d="M112.6 158.43a58 58 0 1 0-57.2 0a93.83 93.83 0 0 0-50.19 38.29a6 6 0 0 0 10.05 6.56a82 82 0 0 1 137.48 0a6 6 0 0 0 10-6.56a93.83 93.83 0 0 0-50.14-38.29M38 108a46 46 0 1 1 46 46a46.06 46.06 0 0 1-46-46m211 97a6 6 0 0 1-8.3-1.74A81.8 81.8 0 0 0 172 166a6 6 0 0 1 0-12a46 46 0 1 0-17.08-88.73a6 6 0 1 1-4.46-11.14a58 58 0 0 1 50.14 104.3a93.83 93.83 0 0 1 50.19 38.29A6 6 0 0 1 249 205"/>',
width: 256,
height: 256,
});
addIcon('ph:user-list', {
body: '<path fill="currentColor" d="M152 80a8 8 0 0 1 8-8h88a8 8 0 0 1 0 16h-88a8 8 0 0 1-8-8m96 40h-88a8 8 0 0 0 0 16h88a8 8 0 0 0 0-16m0 48h-64a8 8 0 0 0 0 16h64a8 8 0 0 0 0-16m-96.25 22a8 8 0 0 1-5.76 9.74a7.6 7.6 0 0 1-2 .26a8 8 0 0 1-7.75-6c-6.16-23.94-30.34-42-56.25-42s-50.09 18.05-56.25 42a8 8 0 0 1-15.5-4c5.59-21.71 21.84-39.29 42.46-48a48 48 0 1 1 58.58 0c20.63 8.71 36.88 26.29 42.47 48M80 136a32 32 0 1 0-32-32a32 32 0 0 0 32 32"/>',
width: 256,
height: 256,
});
addIcon('bx:package', {
body: '<path fill="currentColor" d="M22 8a.8.8 0 0 0 0-.21v-.08a1 1 0 0 0-.07-.16a.4.4 0 0 0-.05-.08l-.1-.13l-.08-.06l-.12-.09l-9-5a1 1 0 0 0-1 0l-9 5l-.09.07l-.11.08a.4.4 0 0 0-.07.11a.4.4 0 0 0-.08.1a.6.6 0 0 0-.06.14a.3.3 0 0 0 0 .1A.8.8 0 0 0 2 8v8a1 1 0 0 0 .52.87l9 5a1 1 0 0 0 .13.06h.1a1.06 1.06 0 0 0 .5 0h.1l.14-.06l9-5A1 1 0 0 0 22 16zm-10 3.87L5.06 8l2.76-1.52l6.83 3.9zm0-7.72L18.94 8L16.7 9.25L9.87 5.34zM4 9.7l7 3.92v5.68l-7-3.89zm9 9.6v-5.68l3-1.68V15l2-1v-3.18l2-1.11v5.7z"/>',
width: 24,
height: 24,
});
addIcon('solar:monitor-camera-outline', {
body: '<path fill="currentColor" fill-rule="evenodd" d="M14.95 1.25h1.1c.664 0 1.237 0 1.696.062c.492.066.963.215 1.345.597c.236.236.383.505.476.792l.76-.316l.041-.017c.277-.116.557-.233.796-.293c.265-.067.657-.113 1.03.135c.372.248.48.628.52.899c.036.244.036.546.036.847v2.088c0 .3 0 .604-.036.848c-.04.27-.148.65-.52.898c-.373.248-.765.202-1.03.135a6 6 0 0 1-.796-.293q-.02-.007-.041-.017l-.76-.316c-.093.287-.24.556-.476.792c-.382.382-.854.531-1.345.597c-.459.062-1.032.062-1.697.062h-1.098c-.665 0-1.238 0-1.697-.062c-.492-.066-.963-.215-1.345-.597s-.531-.854-.597-1.345c-.062-.459-.062-1.032-.062-1.697v-.098c0-.665 0-1.238.062-1.697c.066-.491.215-.963.597-1.345s.853-.531 1.345-.597c.459-.062 1.032-.062 1.697-.062m4.8 4.5l1.154.48c.135.057.247.103.344.142c.002-.105.002-.226.002-.372V4c0-.146 0-.267-.002-.372q-.145.058-.344.141l-1.154.481zM18.25 5c0-.728-.002-1.2-.048-1.546c-.044-.325-.115-.427-.172-.484s-.159-.128-.484-.172c-.347-.046-.818-.048-1.546-.048h-1c-.728 0-1.2.002-1.546.048c-.325.044-.427.115-.484.172s-.128.159-.172.484c-.046.347-.048.818-.048 1.546s.002 1.2.048 1.546c.044.325.115.427.172.484s.159.128.484.172c.347.046.818.048 1.546.048h1c.728 0 1.2-.002 1.546-.048c.325-.044.427-.115.484-.172s.128-.159.172-.484c.046-.347.048-.818.048-1.546M9.451 1.25H9.5a.75.75 0 1 1 0 1.5c-1.662 0-2.843.001-3.749.108c-.889.105-1.415.304-1.813.63a3.3 3.3 0 0 0-.45.45c-.326.398-.525.924-.63 1.813c-.107.906-.108 2.087-.108 3.749V11q-.001.687.004 1.25h18.492q.005-.563.004-1.25v-1a.75.75 0 0 1 1.5 0v1.055c0 .662 0 1.263-.013 1.804a.75.75 0 0 1-.01.327c-.017.444-.045.845-.093 1.206c-.122.9-.38 1.658-.982 2.26s-1.36.86-2.26.982c-.867.116-1.97.116-3.337.116H12.75v3.5H16a.75.75 0 0 1 0 1.5H8a.75.75 0 0 1 0-1.5h3.25v-3.5H7.945c-1.367 0-2.47 0-3.337-.116c-.9-.122-1.658-.38-2.26-.982s-.86-1.36-.981-2.26c-.049-.36-.077-.762-.094-1.206a.75.75 0 0 1-.01-.327c-.013-.541-.013-1.142-.013-1.804V9.45c0-1.602 0-2.872.119-3.876c.122-1.03.377-1.88.96-2.588a5 5 0 0 1 .658-.659c.709-.582 1.557-.837 2.588-.96C6.58 1.25 7.85 1.25 9.451 1.25m-6.644 12.5q.018.234.046.442c.099.734.28 1.122.556 1.399c.277.277.665.457 1.4.556c.754.101 1.756.103 3.191.103h8c1.435 0 2.436-.002 3.192-.103c.734-.099 1.122-.28 1.399-.556c.277-.277.457-.665.556-1.4q.028-.207.046-.441z" clip-rule="evenodd"/>',
width: 24,
height: 24,
});
addIcon('material-symbols:generating-tokens-outline', {
body: '<path fill="currentColor" d="M9 20q-3.35 0-5.675-2.325T1 12q0-3.35 2.325-5.675T9 4q3.35 0 5.675 2.325T17 12q0 3.35-2.325 5.675T9 20Zm0-2q2.5 0 4.25-1.75T15 12q0-2.5-1.75-4.25T9 6Q6.5 6 4.75 7.75T3 12q0 2.5 1.75 4.25T9 18Zm-1-2.5h2v-5h2V9H6v1.5h2v5ZM19 9l-1.25-2.75L15 5l2.75-1.25L19 1l1.25 2.75L23 5l-2.75 1.25L19 9Zm0 14l-1.25-2.75L15 19l2.75-1.25L19 15l1.25 2.75L23 19l-2.75 1.25L19 23ZM9 12Z"/>',
width: 24,
height: 24,
});
addIcon('devicon:redis-wordmark', {
body: '<path fill="#636466" d="M21.4 97.6c0 1.8-1.5 3.5-3.5 3.5c-1.5 0-2.8.4-4 1.3c-1.3.8-2.2 1.9-3 3.2c-1.6 2.1-2.4 4.6-2.7 5.5v12.5c0 1.9-1.6 3.5-3.6 3.5c-1.9 0-3.5-1.6-3.5-3.5v-26c0-1.9 1.6-3.4 3.5-3.4c2 0 3.6 1.5 3.6 3.4v.5c.4-.5.9-1 1.4-1.3c2.2-1.4 5-2.6 8.3-2.6c2 0 3.5 1.5 3.5 3.4m-1.9 13c.1-9 7-16.5 16.1-16.5c8.6 0 15.3 6.4 15.9 15.3v.3c0 .1 0 .5-.1.6c-.2 1.6-1.6 2.6-3.4 2.6H27c.3 1.5 1.1 3.2 2.2 4.3c1.4 1.6 4 2.8 6.3 3c2.4.2 5.2-.4 6.8-1.6c1.4-1.4 4.1-1.3 4.9-.2c.9.9 1.5 2.9 0 4.3c-3.2 3-7.1 4.3-11.8 4.3c-8.9 0-15.9-7.5-15.9-16.4m7.1-3.2h18.6c-.7-2.6-4-6.5-9.7-7c-5.6.2-8.3 4.3-8.9 7m58.3 16.1c0 1.9-1.6 3.6-3.6 3.6c-1.8 0-3.2-1.3-3.5-2.8c-2.5 1.7-5.7 2.8-9 2.8c-8.9 0-16-7.5-16-16.4c0-9 7.1-16.5 16-16.5c3.2 0 6.4 1.1 8.8 2.8V84.5c0-1.9 1.6-3.6 3.6-3.6s3.6 1.6 3.6 3.6v26.2zm-16-22.2c-2.4 0-4.5 1-6.2 2.7c-1.6 1.6-2.6 4-2.6 6.6c0 2.5 1 4.9 2.6 6.5c1.6 1.7 3.8 2.7 6.2 2.7s4.5-1 6.2-2.7c1.6-1.6 2.6-4 2.6-6.5c0-2.6-1-5-2.6-6.6c-1.6-1.7-3.7-2.7-6.2-2.7m28.6-15.4c0 2-1.5 3.6-3.6 3.6c-2 0-3.6-1.6-3.6-3.6v-1.4c0-2 1.6-3.6 3.6-3.6s3.6 1.6 3.6 3.6zm0 11.9v25.7c0 2-1.5 3.6-3.6 3.6c-2 0-3.6-1.6-3.6-3.6V97.8c0-2.1 1.6-3.6 3.6-3.6c2.1 0 3.6 1.5 3.6 3.6m4.5 19.8c1.2-1.6 3.5-1.8 4.9-.5c1.7 1.4 4.7 3 7.2 2.9c1.8 0 3.4-.6 4.5-1.3c.9-.8 1.2-1.4 1.2-2c0-.3-.1-.5-.2-.7s-.3-.5-.9-.8c-.9-.7-2.9-1.4-5.3-1.8h-.1c-2-.4-4-.9-5.7-1.7c-1.8-.9-3.4-2-4.5-3.8c-.7-1.2-1.1-2.6-1.1-4.1c0-3 1.7-5.6 3.9-7.2c2.3-1.6 5.1-2.4 8.1-2.4c4.5 0 7.8 2.2 9.9 3.6c1.6 1.1 2 3.2 1.1 4.9c-1.1 1.6-3.2 2-4.9.9c-2.1-1.4-4-2.4-6.1-2.4c-1.6 0-3.1.5-4 1.2c-.9.6-1.1 1.2-1.1 1.5s0 .3.1.5c.1.1.3.4.7.7c.9.6 2.6 1.2 4.8 1.6l.1.1h.1c2.2.4 4.2 1 6.1 1.9c1.8.8 3.6 2 4.7 3.9c.8 1.3 1.3 2.8 1.3 4.3c0 3.2-1.8 5.9-4.1 7.6c-2.4 1.6-5.3 2.6-8.6 2.6c-5.1-.1-9.1-2.4-11.7-4.5c-1.4-1.3-1.6-3.5-.4-5"/><path fill="#a41e11" d="M106.9 62.7c-5 2.6-30.7 13.2-36.2 16c-5.5 2.9-8.5 2.8-12.8.8c-4.4-2.1-31.7-13.1-36.7-15.5c-2.5-1.2-3.8-2.2-3.8-3.1v-9.4s35.6-7.8 41.4-9.8c5.8-2.1 7.8-2.1 12.6-.3c4.9 1.8 34.2 7.1 39 8.8v9.3c.1.9-1 1.9-3.5 3.2"/><path fill="#d82c20" d="M106.9 53.3c-5 2.6-30.7 13.2-36.2 16c-5.5 2.9-8.5 2.8-12.8.8C53.5 68 26.2 57 21.2 54.6c-4.9-2.4-5-4-.2-5.9s32.1-12.6 37.8-14.6c5.8-2.1 7.8-2.1 12.6-.3c4.9 1.8 30.5 12 35.3 13.7c5 1.8 5.2 3.2.2 5.8"/><path fill="#a41e11" d="M106.9 47.4c-5 2.6-30.7 13.2-36.2 16c-5.5 2.9-8.5 2.8-12.8.8c-4.4-2.1-31.7-13.2-36.7-15.5c-2.5-1.2-3.8-2.2-3.8-3.1v-9.4s35.6-7.8 41.4-9.8c5.8-2.1 7.8-2.1 12.6-.3c4.9 1.8 34.2 7.1 39 8.8v9.3c.1.9-1 1.9-3.5 3.2"/><path fill="#d82c20" d="M106.9 38c-5 2.6-30.7 13.2-36.2 16c-5.5 2.9-8.5 2.8-12.8.8c-4.3-2.1-31.7-13.1-36.6-15.5s-5-4-.2-5.9s32.1-12.6 37.8-14.6c5.8-2.1 7.8-2.1 12.6-.3c4.9 1.8 30.5 12 35.3 13.7c4.9 1.7 5.1 3.2.1 5.8"/><path fill="#a41e11" d="M106.9 31.5c-5 2.6-30.7 13.2-36.2 16c-5.5 2.9-8.5 2.8-12.8.8c-4.3-2.1-31.7-13.1-36.6-15.5c-2.5-1.2-3.8-2.2-3.8-3.1v-9.4s35.6-7.8 41.4-9.8c5.8-2.1 7.8-2.1 12.6-.3c4.9 1.8 34.2 7.1 39 8.8v9.3c0 .8-1.1 1.9-3.6 3.2"/><path fill="#d82c20" d="M106.9 22.1c-5 2.6-30.7 13.2-36.2 16c-5.5 2.9-8.5 2.8-12.8.8c-4.3-2.1-31.7-13.1-36.6-15.5s-5-4-.2-5.9S53.2 4.9 58.9 2.9C64.7.8 66.7.8 71.5 2.6c4.9 1.8 30.5 12 35.3 13.7c4.9 1.7 5.1 3.2.1 5.8"/><path fill="#fff" d="m76.2 13l-8.1.8l-1.8 4.4l-2.9-4.9l-9.3-.8L61 10l-2-3.8l6.5 2.5l6.1-2l-1.7 4zM65.8 34.1l-15-6.3l21.6-3.3z"/><ellipse cx="45" cy="19.9" fill="#fff" rx="11.5" ry="4.5"/><path fill="#7a0c00" d="m85.7 14.2l12.8 5l-12.8 5.1z"/><path fill="#ad2115" d="m71.6 19.8l14.1-5.6v10.1l-1.3.5z"/>',
width: 128,
height: 128,
});
addIcon('devicon:spring-wordmark', {
body: '<path fill="#5fb832" d="M1.008 98.82C.402 98.52 0 97.813 0 97.008c0-1.211.906-2.117 2.117-2.117c.403 0 .805.101 1.11.304c2.214 1.512 4.636 2.215 6.75 2.215c2.32 0 3.628-1.008 3.628-2.52v-.1c0-1.813-2.52-2.419-5.238-3.224c-3.43-1.007-7.258-2.421-7.258-6.855v-.102c0-4.433 3.63-7.054 8.266-7.054c2.52 0 5.04.707 7.355 1.918c.707.402 1.31 1.105 1.31 2.015c0 1.207-1.009 2.114-2.216 2.114c-.402 0-.707-.098-1.11-.301c-1.913-1.008-3.827-1.614-5.44-1.614c-2.118 0-3.227 1.008-3.227 2.32v.098c0 1.715 2.52 2.422 5.242 3.329c3.426 1.007 7.254 2.62 7.254 6.754v.097c0 4.942-3.828 7.36-8.664 7.36c-2.926 0-6.149-.907-8.871-2.825m38.398-9.168c0-4.539-3.023-7.46-6.648-7.46c-3.63 0-6.754 3.023-6.754 7.46v.098c0 4.438 3.125 7.46 6.754 7.46c3.625-.202 6.648-3.022 6.648-7.558m-18.543-9.375c0-1.511 1.11-2.722 2.621-2.722a2.71 2.71 0 0 1 2.72 2.722v1.614c1.714-2.418 4.132-4.336 7.862-4.336c5.442 0 10.786 4.336 10.786 11.996v.101c0 7.657-5.243 11.993-10.786 11.993c-3.832 0-6.25-1.915-7.863-4.032v8.164c0 1.512-1.207 2.621-2.719 2.621a2.604 2.604 0 0 1-2.62-2.62v-25.5m26.202-.102c0-1.512 1.11-2.719 2.621-2.719a2.71 2.71 0 0 1 2.723 2.719v1.312c.3-2.015 3.528-3.933 5.844-3.933c1.715 0 2.621 1.11 2.621 2.62c0 1.41-.906 2.321-2.117 2.52c-3.828.707-6.45 3.93-6.45 8.567v7.66c0 1.41-1.21 2.621-2.722 2.621a2.6 2.6 0 0 1-2.617-2.621V80.176m16.324 0a2.71 2.71 0 0 1 2.723-2.719a2.71 2.71 0 0 1 2.722 2.719v18.746c0 1.512-1.21 2.621-2.722 2.621s-2.723-1.11-2.723-2.621zm7.762.101a2.71 2.71 0 0 1 2.722-2.722c1.512 0 2.82 1.21 2.82 2.722v1.11c1.512-2.117 3.833-3.832 7.56-3.832c5.445 0 8.566 3.527 8.566 8.87v12.497c0 1.512-1.207 2.621-2.72 2.621c-1.51 0-2.823-1.11-2.823-2.621V88.039c0-3.629-1.914-5.644-5.14-5.644c-3.224 0-5.442 2.117-5.442 5.742v10.785c0 1.512-1.207 2.621-2.82 2.621c-1.512 0-2.723-1.11-2.723-2.621zm35.578 16.832c-3.73 0-6.852-2.824-6.852-7.457v-.101c0-4.535 3.121-7.461 6.852-7.461c3.73 0 6.953 3.023 6.953 7.46v.102c0 4.434-3.223 7.457-6.953 7.457m9.574-19.453a2.71 2.71 0 0 0-2.719 2.723v1.613c-1.816-2.422-4.234-4.336-8.164-4.336c-5.644 0-11.09 4.336-11.09 12.094v.102c0 7.66 5.446 12.093 11.09 12.093c3.93 0 6.45-1.914 8.164-4.03c-.304 4.233-2.925 6.35-7.562 6.35c-2.719 0-5.137-.706-7.356-1.816c-.3-.101-.605-.199-1.007-.199c-1.31 0-2.32 1.008-2.32 2.215c0 1.008.605 1.715 1.515 2.117c2.922 1.41 5.844 2.117 9.27 2.117c4.335 0 7.66-1.008 9.878-3.125c2.016-1.914 3.125-4.836 3.125-8.77V80.278c-.101-1.511-1.312-2.62-2.824-2.62m-47.469-6.552c0 1.41-1.21 2.622-2.722 2.622s-2.723-1.211-2.723-2.622s1.21-2.62 2.723-2.62c1.511 0 2.722 1.21 2.722 2.62m14.11-17.437c-5.946 7.863-18.746 5.242-27.012 5.543c0 0-1.41.102-2.922.305c0 0 .606-.203 1.207-.504c5.746-1.914 8.469-2.32 11.996-4.133c6.551-3.324 13.102-10.48 14.41-17.941c-2.52 7.156-10.078 13.304-17.03 15.824c-4.74 1.715-13.306 3.328-13.306 3.328l-.3-.203c-5.848-2.723-6.047-15.117 4.636-19.051c4.637-1.711 9.07-.805 14.11-1.914c5.34-1.207 11.59-5.14 14.11-10.281c2.823 8.367 6.25 21.168.1 29.027Zm.101-31.445a21.6 21.6 0 0 1-2.62 4.437c-4.434-4.437-10.583-7.156-17.438-7.156c-13.403 0-24.29 10.683-24.29 23.683c0 6.852 3.024 13 7.762 17.336l.504.504c-.906-.707-1.008-2.015-.304-2.824c.707-.906 2.015-1.008 2.925-.3c.907.706 1.008 2.015.301 2.82c-.707.91-2.016 1.007-2.922.304l.403.301a24.78 24.78 0 0 0 15.62 5.543c12.801 0 23.282-9.773 24.192-21.969c.805-5.949-1.008-13.609-4.133-22.68m42.43 57.048h-.906v1.21h.906c.305 0 .605-.203.605-.605s-.3-.605-.605-.605m.504 3.023l-.906-1.41h-.606v1.41h-.504v-3.426h1.41c.606 0 1.11.403 1.11 1.008a.975.975 0 0 1-.907 1.008l.907 1.41Zm-.805-4.332c-1.41 0-2.621 1.105-2.621 2.52c0 1.41 1.211 2.519 2.621 2.519s2.621-1.11 2.621-2.52c0-1.312-1.21-2.52-2.62-2.52Zm0 5.64c-1.715 0-3.125-1.308-3.125-3.023c0-1.71 1.41-3.023 3.125-3.023c1.711 0 3.125 1.312 3.125 3.023c0 1.613-1.414 3.024-3.125 3.024"/>',
width: 128,
height: 128,
});
addIcon('ant-design:tool-outlined', {
body: '<path fill="currentColor" d="M876.6 239.5c-.5-.9-1.2-1.8-2-2.5c-5-5-13.1-5-18.1 0L684.2 409.3l-67.9-67.9L788.7 169c.8-.8 1.4-1.6 2-2.5c3.6-6.1 1.6-13.9-4.5-17.5c-98.2-58-226.8-44.7-311.3 39.7c-67 67-89.2 162-66.5 247.4l-293 293c-3 3-2.8 7.9.3 11l169.7 169.7c3.1 3.1 8.1 3.3 11 .3l292.9-292.9c85.5 22.8 180.5.7 247.6-66.4c84.4-84.5 97.7-213.1 39.7-311.3M786 499.8c-58.1 58.1-145.3 69.3-214.6 33.6l-8.8 8.8l-.1-.1l-274 274.1l-79.2-79.2l230.1-230.1s0 .1.1.1l52.8-52.8c-35.7-69.3-24.5-156.5 33.6-214.6a184.2 184.2 0 0 1 144-53.5L537 318.9a32.05 32.05 0 0 0 0 45.3l124.5 124.5a32.05 32.05 0 0 0 45.3 0l132.8-132.8c3.7 51.8-14.4 104.8-53.6 143.9"/>',
width: 1024,
height: 1024,
});
addIcon('tabler:code', {
body: '<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m7 8l-4 4l4 4m10-8l4 4l-4 4M14 4l-4 16"/>',
width: 24,
height: 24,
});
addIcon('flat-color-icons:plus', {
body: '<circle cx="24" cy="24" r="21" fill="#4CAF50"/><g fill="#fff"><path d="M21 14h6v20h-6z"/><path d="M14 21h20v6H14z"/></g>',
width: 48,
height: 48,
});
addIcon('devicon:vscode', {
body: '<mask id="SVGescYAbDI" width="128" height="128" x="0" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#fff" fill-rule="evenodd" d="M90.767 127.126a7.97 7.97 0 0 0 6.35-.244l26.353-12.681a8 8 0 0 0 4.53-7.209V21.009a8 8 0 0 0-4.53-7.21L97.117 1.12a7.97 7.97 0 0 0-9.093 1.548l-50.45 46.026L15.6 32.013a5.33 5.33 0 0 0-6.807.302l-7.048 6.411a5.335 5.335 0 0 0-.006 7.888L20.796 64L1.74 81.387a5.336 5.336 0 0 0 .006 7.887l7.048 6.411a5.33 5.33 0 0 0 6.807.303l21.974-16.68l50.45 46.025a8 8 0 0 0 2.743 1.793Zm5.252-92.183L57.74 64l38.28 29.058V34.943Z" clip-rule="evenodd"/></mask><g mask="url(#SVGescYAbDI)"><path fill="#0065a9" d="M123.471 13.82L97.097 1.12A7.97 7.97 0 0 0 88 2.668L1.662 81.387a5.333 5.333 0 0 0 .006 7.887l7.052 6.411a5.33 5.33 0 0 0 6.811.303l103.971-78.875c3.488-2.646 8.498-.158 8.498 4.22v-.306a8 8 0 0 0-4.529-7.208Z"/><g filter="url(#SVGUBw6ic8w)"><path fill="#007acc" d="m123.471 114.181l-26.374 12.698A7.97 7.97 0 0 1 88 125.333L1.662 46.613a5.333 5.333 0 0 1 .006-7.887l7.052-6.411a5.33 5.33 0 0 1 6.811-.303l103.971 78.874c3.488 2.647 8.498.159 8.498-4.219v.306a8 8 0 0 1-4.529 7.208"/></g><g filter="url(#SVGg9RgH3Uo)"><path fill="#1f9cf0" d="M97.098 126.882A7.98 7.98 0 0 1 88 125.333c2.952 2.952 8 .861 8-3.314V5.98c0-4.175-5.048-6.266-8-3.313a7.98 7.98 0 0 1 9.098-1.549L123.467 13.8A8 8 0 0 1 128 21.01v85.982a8 8 0 0 1-4.533 7.21z"/></g><path fill="url(#SVGpqCa3cMW)" fill-rule="evenodd" d="M90.69 127.126a7.97 7.97 0 0 0 6.349-.244l26.353-12.681a8 8 0 0 0 4.53-7.21V21.009a8 8 0 0 0-4.53-7.21L97.039 1.12a7.97 7.97 0 0 0-9.093 1.548l-50.45 46.026l-21.974-16.68a5.33 5.33 0 0 0-6.807.302l-7.048 6.411a5.336 5.336 0 0 0-.006 7.888L20.718 64L1.662 81.386a5.335 5.335 0 0 0 .006 7.888l7.048 6.411a5.33 5.33 0 0 0 6.807.303l21.975-16.681l50.45 46.026a8 8 0 0 0 2.742 1.793m5.252-92.184L57.662 64l38.28 29.057z" clip-rule="evenodd" opacity=".25"/></g><defs><filter id="SVGUBw6ic8w" width="144.744" height="113.408" x="-8.411" y="22.594" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation="4.167"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/><feBlend in2="BackgroundImageFix" mode="overlay" result="effect1_dropShadow_1_36"/><feBlend in="SourceGraphic" in2="effect1_dropShadow_1_36" result="shape"/></filter><filter id="SVGg9RgH3Uo" width="56.667" height="144.007" x="79.667" y="-8.004" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset/><feGaussianBlur stdDeviation="4.167"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/><feBlend in2="BackgroundImageFix" mode="overlay" result="effect1_dropShadow_1_36"/><feBlend in="SourceGraphic" in2="effect1_dropShadow_1_36" result="shape"/></filter><linearGradient id="SVGpqCa3cMW" x1="63.922" x2="63.922" y1=".33" y2="127.67" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient></defs>',
width: 128,
height: 128,
});
addIcon('lucide:table', {
body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M12 3v18"/><rect width="18" height="18" x="3" y="3" rx="2"/><path d="M3 9h18M3 15h18"/></g>',
width: 24,
height: 24,
});
addIcon('emojione:evergreen-tree', {
body: '<path fill="#947151" d="M25 52.1h14V64H25z"/><path fill="#71a03a" d="M32 34.9L2 55.1s14.5 3.4 30 3.4s30-3.4 30-3.4z"/><path fill="#76aa3f" d="M32 23.6L7 43.8s12.1 3.4 25 3.4s25-3.4 25-3.4z"/><path fill="#7cb545" d="M32 12.3L12 32.5s9.7 3.4 20 3.4s20-3.4 20-3.4z"/><path fill="#83bf4f" d="M32 1L17 20.8s7.2 3.8 15 3.8s15-3.8 15-3.8z"/>',
width: 64,
height: 64,
});
addIcon('fluent-mdl2:leave-user', {
body: '<path fill="currentColor" d="M2048 1536v128h-646l211 211l-90 90l-365-365l365-365l90 90l-211 211zm-756-433l-88 93q-89-84-201-128t-235-44q-88 0-170 23t-153 64t-129 100t-100 130t-65 153t-23 170H0q0-117 35-229t101-207t157-169t203-113q-56-36-100-83t-76-103t-47-118t-17-130q0-106 40-199t109-163T568 40T768 0t199 40t163 109t110 163t40 200q0 137-63 248t-177 186q70 26 133 66t119 91M384 512q0 80 30 149t82 122t122 83t150 30q79 0 149-30t122-82t83-122t30-150q0-79-30-149t-82-122t-123-83t-149-30q-80 0-149 30t-122 82t-83 123t-30 149"/>',
width: 2048,
height: 2048,
});
addIcon('mdi:workflow-outline', {
body: '<path fill="currentColor" d="M21 16v-3c0-1.11-.89-2-2-2h-6V8h2V2H9v6h2v3H5c-1.11 0-2 .89-2 2v3H1v6h6v-6H5v-3h6v3H9v6h6v-6h-2v-3h6v3h-2v6h6v-6zM11 4h2v2h-2zM5 20H3v-2h2zm8 0h-2v-2h2zm8 0h-2v-2h2z"/>',
width: 24,
height: 24,
});
addIcon('tabler:category-plus', {
body: '<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4h6v6H4zm10 0h6v6h-6zM4 14h6v6H4zm10 3h6m-3-3v6"/>',
width: 24,
height: 24,
});
addIcon('material-symbols:regular-expression-rounded', {
body: '<path fill="currentColor" d="M2 11.95q0-1.725.563-3.337T4.225 5.65q.275-.325.688-.35t.712.275t.313.713t-.263.762q-.825 1.05-1.25 2.3T4 11.95t.45 2.6t1.25 2.3q.275.35.263.75t-.313.7t-.712.288t-.688-.338q-1.075-1.35-1.662-2.963T2 11.95M9.5 18q-.625 0-1.062-.437T8 16.5t.438-1.062T9.5 15t1.063.438T11 16.5t-.437 1.063T9.5 18m4.475-5q-.425 0-.712-.288T12.975 12v-.775l-.65.4q-.35.2-.762.088t-.613-.463t-.087-.763t.462-.612l.65-.375l-.675-.375q-.35-.2-.45-.612t.1-.763q.2-.375.613-.463t.762.113l.65.375V7q0-.425.288-.712T13.975 6t.713.288t.287.712v.775l.65-.4q.35-.2.763-.088T17 7.75t.088.763t-.463.612l-.65.375l.675.375q.35.2.45.613t-.1.762q-.2.375-.613.463t-.762-.113l-.65-.375V12q0 .425-.288.713t-.712.287M22 11.95q0 1.725-.562 3.338t-1.663 2.962q-.275.325-.687.338t-.713-.288t-.312-.7t.262-.75q.825-1.05 1.25-2.3t.425-2.6t-.45-2.6t-1.25-2.3q-.275-.35-.25-.762t.325-.713t.7-.275t.675.35Q20.825 7 21.413 8.612T22 11.95"/>',
width: 24,
height: 24,
});
addIcon('fluent-mdl2:build-definition', {
body: '<path fill="currentColor" d="M896 1920h128v128H0v-128h128v-832q0-76 28-143t76-119t114-84t142-37l608-627q35-36 82-57t98-21q36 0 72 10t68 29t57 46t41 61l384 858q17 37 17 83q0 40-14 75t-40 61t-61 42t-75 15q-57 0-104-31t-71-83l-251-562l-408 421q2 16 3 31t2 32zm498-1414l198 440l117-50l-220-493q-19 29-45 54t-50 49m394 581q0-20-9-38t-17-36l-118 50q7 15 13 30t15 29t21 21t33 9q27 0 44-19t18-46M644 727q62 23 113 65t85 99l530-546q18-19 27-42t9-49t-10-49t-27-40t-40-27t-49-10q-56 0-94 39zM256 1920h512v-832q0-53-20-99t-55-82t-81-55t-100-20q-53 0-99 20t-82 55t-55 81t-20 100zm256-896q27 0 50 10t40 27t28 41t10 50q0 27-10 50t-27 40t-41 28t-50 10q-27 0-50-10t-40-27t-28-41t-10-50q0-27 10-50t27-40t41-28t50-10m0 128h64zm896 640v-128h640v128zm0-384h640v128h-640zm-256 128v-128h128v128zm256 512v-128h640v128zm-256 0v-128h128v128zm0-256v-128h128v128z"/>',
width: 2048,
height: 2048,
});
addIcon('icon-park-outline:monitor', {
body: '<g fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="4"><path d="M4 10h32v28H4z"/><path stroke-linecap="round" d="m44 14l-8 6.75v6.5L44 34z" clip-rule="evenodd"/><path stroke-linecap="round" d="m17 19l6 5l-6 5"/></g>',
width: 48,
height: 48,
});
addIcon('fluent-mdl2:flow', {
body: '<path fill="currentColor" d="M1408 256h640v640h-640V640h-120l-449 896H640v256H0v-640h640v256h120l449-896h199zM512 1664v-384H128v384zm1408-896V384h-384v384z"/>',
width: 2048,
height: 2048,
});
addIcon('flat-color-icons:leave', {
body: '<path fill="#FFCDD2" d="M5 38V14h38v24c0 2.2-1.8 4-4 4H9c-2.2 0-4-1.8-4-4"/><path fill="#F44336" d="M43 10v6H5v-6c0-2.2 1.8-4 4-4h30c2.2 0 4 1.8 4 4"/><g fill="#B71C1C"><circle cx="33" cy="10" r="3"/><circle cx="15" cy="10" r="3"/></g><path fill="#BDBDBD" d="M33 3c-1.1 0-2 .9-2 2v5c0 1.1.9 2 2 2s2-.9 2-2V5c0-1.1-.9-2-2-2M15 3c-1.1 0-2 .9-2 2v5c0 1.1.9 2 2 2s2-.9 2-2V5c0-1.1-.9-2-2-2"/><path fill="#F44336" d="M22.2 35.3c0-.2 0-.5.1-.7s.2-.4.4-.5s.3-.3.5-.3c.2-.1.5-.1.7-.1s.5 0 .7.1l.6.3c.2.1.3.3.4.5s.1.4.1.7c0 .2 0 .5-.1.7s-.2.4-.4.5s-.3.3-.6.3s-.3.2-.6.2s-.5 0-.7-.1s-.4-.2-.5-.3c-.2-.1-.3-.3-.4-.5c-.1-.3-.2-.5-.2-.8m3.1-4.3h-2.6l-.4-11h3.3z"/>',
width: 48,
height: 48,
});
addIcon('carbon:task-approved', {
body: '<path fill="currentColor" d="M30 20a6 6 0 1 0-10 4.46V32l4-1.894L28 32v-7.54A5.98 5.98 0 0 0 30 20m-4 8.84l-2-.947l-2 .947v-3.19a5.9 5.9 0 0 0 4 0ZM24 24a4 4 0 1 1 4-4a4.005 4.005 0 0 1-4 4"/><path fill="currentColor" d="M25 5h-3V4a2.006 2.006 0 0 0-2-2h-8a2.006 2.006 0 0 0-2 2v1H7a2.006 2.006 0 0 0-2 2v21a2.006 2.006 0 0 0 2 2h9v-2H7V7h3v3h12V7h3v5h2V7a2.006 2.006 0 0 0-2-2m-5 3h-8V4h8Z"/>',
width: 32,
height: 32,
});
addIcon('ic:round-launch', {
body: '<path fill="currentColor" d="M18 19H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h5c.55 0 1-.45 1-1s-.45-1-1-1H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-6c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55-.45 1-1 1M14 4c0 .55.45 1 1 1h2.59l-9.13 9.13a.996.996 0 1 0 1.41 1.41L19 6.41V9c0 .55.45 1 1 1s1-.45 1-1V3h-6c-.55 0-1 .45-1 1"/>',
width: 24,
height: 24,
});
addIcon('ri:todo-line', {
body: '<path fill="currentColor" d="M17 2h3a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h3V0h2v2h6V0h2zm0 2v2h-2V4H9v2H7V4H5v16h14V4zM7 8h10v2H7zm0 4h10v2H7z"/>',
width: 24,
height: 24,
});
addIcon('material-symbols:cloud-done-outline-rounded', {
body: '<path fill="currentColor" d="m10.325 14.125l-1.4-1.4q-.3-.3-.7-.3t-.7.3t-.3.713t.3.712L9.65 16.3q.3.3.7.3t.7-.3l4.225-4.225q.3-.3.3-.725t-.3-.725t-.725-.3t-.725.3zM6.5 20q-2.275 0-3.887-1.575T1 14.575q0-1.95 1.175-3.475T5.25 9.15q.625-2.3 2.5-3.725T12 4q2.925 0 4.963 2.038T19 11q1.725.2 2.863 1.488T23 15.5q0 1.875-1.312 3.188T18.5 20zm0-2h12q1.05 0 1.775-.725T21 15.5t-.725-1.775T18.5 13H17v-2q0-2.075-1.463-3.538T12 6T8.463 7.463T7 11h-.5q-1.45 0-2.475 1.025T3 14.5t1.025 2.475T6.5 18m5.5-6"/>',
width: 24,
height: 24,
});
addIcon('mdi:cc-outline', {
body: '<path fill="currentColor" d="M5 4c-.55 0-1 .18-1.41.57C3.2 4.96 3 5.44 3 6v12c0 .56.2 1.04.59 1.43c.41.39.86.57 1.41.57h14c.5 0 1-.19 1.39-.59c.41-.41.61-.88.61-1.41V6c0-.53-.2-1-.61-1.41C20 4.19 19.5 4 19 4zm-.5 1.5h15v13h-15zM7 9c-.3 0-.53.09-.72.28S6 9.7 6 10v4c0 .3.09.53.28.72S6.7 15 7 15h3c.27 0 .5-.09.71-.28c.2-.19.29-.42.29-.72v-1H9.5v.5h-2v-3h2v.5H11v-1c0-.3-.09-.53-.29-.72C10.5 9.09 10.27 9 10 9zm7 0c-.27 0-.5.09-.71.28c-.2.19-.29.42-.29.72v4c0 .3.09.53.29.72c.21.19.44.28.71.28h3c.3 0 .53-.09.72-.28S18 14.3 18 14v-1h-1.5v.5h-2v-3h2v.5H18v-1c0-.3-.09-.53-.28-.72S17.3 9 17 9z"/>',
width: 24,
height: 24,
});
addIcon('arcticons:one-hand-operation', {
body: '<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M30.809 29.465c-2.362-.033-3.203-1.03-5.434-4.005s-4.618-2.836-5.434-1.941c-.68.744 3.331 9.477 4.528 10.868a19.5 19.5 0 0 0 1.844 1.94s-.043 4.165-.172 7.173m11.104-.736a75 75 0 0 1-1.132-7.827c.065-.324.025-4.658-.004-5.693s-1.128-9.768-1.872-11.418s-3.428-3.817-3.428-3.817"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M24.1 33.87H13.062a2.307 2.307 0 0 1-2.307-2.308V6.807A2.307 2.307 0 0 1 13.062 4.5h15.44a2.307 2.307 0 0 1 2.307 2.307v22.658M10.755 8.672h20.054M10.755 29.697h11.187"/><circle cx="26.47" cy="19.198" r=".75" fill="currentColor"/><circle cx="22.832" cy="19.198" r=".75" fill="currentColor"/><circle cx="19.195" cy="19.198" r=".75" fill="currentColor"/>',
width: 48,
height: 48,
});
addIcon(
'streamline:interface-login-dial-pad-finger-password-dial-pad-dot-finger',
{
body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><path d="M7 13.5V8.25A1.25 1.25 0 0 1 8.25 7h0A1.25 1.25 0 0 1 9.5 8.25V11h2a2 2 0 0 1 2 2v.5"/><circle cx="1" cy="1" r=".5"/><circle cx="5" cy="1" r=".5"/><circle cx="9" cy="1" r=".5"/><circle cx="1" cy="4.5" r=".5"/><circle cx="5" cy="4.5" r=".5"/><circle cx="9" cy="4.5" r=".5"/><circle cx="1" cy="8" r=".5"/><path d="M5 8.5a.5.5 0 0 1 0-1Z"/></g>',
width: 14,
height: 14,
},
);
addIcon('ri:instance-line', {
body: '<path fill="currentColor" d="M4.5 7.653v8.694l7.5 4.342l7.5-4.342V7.653L12 3.311zM12 1l9.5 5.5v11L12 23l-9.5-5.5v-11zM6.499 9.97L11 12.577v5.049h2v-5.049l4.501-2.605l-1.002-1.731L12 10.845L7.501 8.24z"/>',
width: 24,
height: 24,
});
addIcon('skill-icons:java-light', {
body: '<g fill="none"><rect width="256" height="256" fill="#F4F2ED" rx="60"/><path fill="#4E7896" d="M101.634 182.619s-7.68 4.674 5.345 6.011c15.728 2.004 24.044 1.669 41.407-1.668c0 0 4.674 3.009 11.02 5.344c-39.075 16.696-88.497-1.002-57.772-9.687m-5.009-21.705s-8.35 6.346 4.674 7.679c17.028 1.669 30.391 2.004 53.433-2.667c0 0 3.009 3.341 8.015 5.01c-47.083 14.025-99.85 1.333-66.122-10.019zm92.17 38.07s5.676 4.674-6.346 8.35c-22.376 6.678-93.839 8.685-113.876 0c-7.009-3.009 6.347-7.352 10.686-8.015c4.342-1.002 6.678-1.002 6.678-1.002c-7.68-5.344-51.095 11.02-22.041 15.729c79.813 13.027 145.603-5.676 124.896-15.028zm-83.488-60.781s-36.402 8.685-13.028 11.687c10.019 1.333 29.721 1.002 48.089-.335c15.028-1.334 30.09-4.007 30.09-4.007s-5.345 2.338-9.017 4.674c-37.099 9.693-108.23 5.351-87.858-4.668c17.37-8.35 31.724-7.351 31.724-7.351m65.116 36.401c37.407-19.37 20.037-38.07 8.015-35.731c-3.009.667-4.342 1.334-4.342 1.334s1.001-2.004 3.34-2.667c23.709-8.35 42.413 25.046-7.679 38.07c0 0 .335-.335.666-1.002zm-61.444 52.76c36.067 2.339 91.168-1.334 92.505-18.369c0 0-2.667 6.678-29.72 11.688c-30.722 5.676-68.796 5.009-91.168 1.333c0 0 4.674 4.007 28.386 5.344z"/><path fill="#F58219" d="M147.685 28s20.704 21.039-19.702 52.76c-32.394 25.712-7.351 40.408 0 57.101c-19.035-17.028-32.722-32.059-23.377-46.085C118.331 71.083 156.062 61.064 147.685 28M137 123.842c9.683 11.02-2.667 21.039-2.667 21.039s24.711-12.686 13.359-28.387c-10.354-15.028-18.368-22.376 25.046-47.425c0 0-68.461 17.028-35.731 54.766z"/></g>',
width: 256,
height: 256,
});
addIcon('tabler:file-type-xml', {
body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M14 3v4a1 1 0 0 0 1 1h4"/><path d="M5 12V5a2 2 0 0 1 2-2h7l5 5v4M4 15l4 6m-4 0l4-6m11 0v6h3m-11 0v-6l2.5 3l2.5-3v6"/></g>',
width: 24,
height: 24,
});
addIcon('carbon:sql', {
body: '<path fill="currentColor" d="M24 21V9h-2v14h8v-2zM18 9h-4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h1v2a2 2 0 0 0 2 2h2v-2h-2v-2h1a2 2 0 0 0 2-2V11a2 2 0 0 0-2-2m-4 12V11h4v10Zm-6 2H2v-2h6v-4H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h6v2H4v4h4a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2"/>',
width: 32,
height: 32,
});
addIcon('skill-icons:typescript', {
body: '<g fill="none"><rect width="256" height="256" fill="#007ACC" rx="60"/><path fill="#fff" d="m56.611 128.849l-.081 10.484h33.32v94.679h23.569v-94.679h33.32v-10.281c0-5.689-.121-10.443-.284-10.565c-.122-.162-20.399-.244-44.983-.203l-44.739.122zm149.956-10.741c6.501 1.626 11.459 4.511 16.01 9.224c2.357 2.52 5.851 7.112 6.136 8.209c.081.325-11.053 7.802-17.798 11.987c-.244.163-1.22-.894-2.317-2.519c-3.291-4.795-6.745-6.868-12.028-7.233c-7.761-.529-12.759 3.535-12.718 10.321c0 1.991.284 3.169 1.097 4.795c1.706 3.535 4.876 5.648 14.832 9.955c18.326 7.884 26.168 13.085 31.045 20.48c5.445 8.249 6.664 21.415 2.966 31.208c-4.063 10.646-14.141 17.879-28.323 20.277c-4.388.772-14.791.65-19.504-.203c-10.281-1.829-20.033-6.908-26.047-13.572c-2.357-2.601-6.949-9.387-6.664-9.875c.121-.162 1.178-.812 2.356-1.503c1.138-.65 5.446-3.129 9.509-5.486l7.355-4.267l1.544 2.276c2.154 3.291 6.867 7.802 9.712 9.305c8.167 4.308 19.383 3.698 24.909-1.259c2.357-2.154 3.332-4.389 3.332-7.68c0-2.967-.366-4.267-1.91-6.502c-1.991-2.844-6.054-5.242-17.595-10.24c-13.206-5.689-18.895-9.224-24.096-14.832c-3.007-3.25-5.852-8.452-7.03-12.8c-.975-3.616-1.219-12.678-.447-16.335c2.722-12.759 12.353-21.658 26.25-24.3c4.511-.853 14.994-.528 19.424.569"/></g>',
width: 256,
height: 256,
});
addIcon('logos:vue', {
body: '<path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0z"/><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0z"/><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0z"/>',
width: 256,
height: 221,
});
addIcon('flat-color-icons:folder', {
body: '<path fill="#FFA000" d="M40 12H22l-4-4H8c-2.2 0-4 1.8-4 4v8h40v-4c0-2.2-1.8-4-4-4"/><path fill="#FFCA28" d="M40 12H8c-2.2 0-4 1.8-4 4v20c0 2.2 1.8 4 4 4h32c2.2 0 4-1.8 4-4V16c0-2.2-1.8-4-4-4"/>',
width: 48,
height: 48,
});
addIcon('ep:fold', {
body: '<path fill="currentColor" d="M896 192H128v128h768zm0 256H384v128h512zm0 256H128v128h768zM320 384L128 512l192 128z"/>',
width: 1024,
height: 1024,
});
addIcon('lucide:book-open-text', {
body: '<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 7v14m4-9h2m-2-4h2M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4a4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3a3 3 0 0 0-3-3zm3-6h2M6 8h2"/>',
width: 24,
height: 24,
});
addIcon('lucide:copyright', {
body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M14.83 14.83a4 4 0 1 1 0-5.66"/></g>',
width: 24,
height: 24,
});

View File

@@ -24,7 +24,7 @@ catalog:
'@ctrl/tinycolor': ^4.1.0
'@eslint/js': ^9.39.1
'@faker-js/faker': ^9.9.0
'@iconify/json': ^2.2.406
'@iconify/json': 2.2.431
'@iconify/tailwind': ^1.2.0
'@iconify/vue': ^5.0.0
'@intlify/core-base': ^11.1.7

View File

@@ -0,0 +1,158 @@
/* eslint-disable @typescript-eslint/no-dynamic-delete */
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const offlineIconList = [
'eos-icons:system-group',
'ant-design:user-outlined',
'eos-icons:role-binding-outlined',
'eos-icons:role-binding-outlined',
'ic:sharp-menu',
'mingcute:department-line',
'icon-park-outline:appointment',
'fluent-mdl2:dictionary',
'ant-design:setting-outlined',
'fe:notice-push',
'material-symbols:logo-dev-outline',
'solar:folder-with-files-outline',
'ant-design:setting-outlined',
'solar:monitor-smartphone-outline',
'ph:users-light',
'ph:user-list',
'bx:package',
'solar:monitor-camera-outline',
'material-symbols:generating-tokens-outline',
'devicon:redis-wordmark',
'devicon:spring-wordmark',
'ant-design:tool-outlined',
'tabler:code',
'tabler:code',
'flat-color-icons:plus',
'devicon:vscode',
'lucide:table',
'emojione:evergreen-tree',
'fluent-mdl2:leave-user',
'mdi:workflow-outline',
'tabler:category-plus',
'material-symbols:regular-expression-rounded',
'fluent-mdl2:build-definition',
'icon-park-outline:monitor',
'fluent-mdl2:flow',
'flat-color-icons:leave',
'carbon:task-approved',
'ic:round-launch',
'ri:todo-line',
'material-symbols:cloud-done-outline-rounded',
'mdi:cc-outline',
'arcticons:one-hand-operation',
'streamline:interface-login-dial-pad-finger-password-dial-pad-dot-finger',
'ri:instance-line',
'skill-icons:java-light',
'tabler:file-type-xml',
'carbon:sql',
'skill-icons:typescript',
'logos:vue',
'flat-color-icons:folder',
// 其他需要离线的
'ep:fold',
'lucide:book-open-text',
'lucide:copyright',
];
// Deduplicate list
const uniqueIcons = [...new Set(offlineIconList)];
const outputLines = [
'// 该文件由脚本 generate-offline-icons.js 生成 ,不要手动修改',
'// 该文件由脚本 generate-offline-icons.js 生成 ,不要手动修改',
'// 该文件由脚本 generate-offline-icons.js 生成 ,不要手动修改',
"import { addIcon } from '@vben-core/icons';",
'',
];
const projectRoot = path.resolve(__dirname, '..');
const nodeModules = path.join(projectRoot, 'packages/icons', 'node_modules');
// Helper to find icon data
function getIconData(prefix, name) {
const jsonPath = path.join(
nodeModules,
'@iconify/json/json',
`${prefix}.json`,
);
if (!fs.existsSync(jsonPath)) {
console.warn(`Warning: Icon set ${prefix} not found at ${jsonPath}`);
return null;
}
const content = fs.readFileSync(jsonPath, 'utf8');
const data = JSON.parse(content);
if (data.icons[name]) {
return {
...data.icons[name],
width: data.icons[name].width || data.width || 24,
height: data.icons[name].height || data.height || 24,
};
}
if (data.aliases && data.aliases[name]) {
const alias = data.aliases[name];
const parentName = alias.parent;
const parentData = getIconData(prefix, parentName);
if (parentData) {
return {
...parentData,
...alias,
// Remove alias specific fields if not needed, but they overwrite parent
};
}
}
console.warn(`Warning: Icon ${name} not found in ${prefix}`);
return null;
}
uniqueIcons.forEach((iconStr) => {
const [prefix, ...nameParts] = iconStr.split(':');
const name = nameParts.join(':'); // In case name has colons, though unlikely in Iconify
if (!prefix || !name) {
console.warn(`Invalid icon format: ${iconStr}`);
return;
}
const iconData = getIconData(prefix, name);
if (iconData) {
// Clean up data to be minimal
const cleanData = {
body: iconData.body,
width: iconData.width,
height: iconData.height,
left: iconData.left,
top: iconData.top,
hFlip: iconData.hFlip,
vFlip: iconData.vFlip,
rotate: iconData.rotate,
};
// Remove undefined keys
Object.keys(cleanData).forEach(
(key) => cleanData[key] === undefined && delete cleanData[key],
);
outputLines.push(`addIcon('${iconStr}', ${JSON.stringify(cleanData)});`);
}
});
const outputPath = path.join(
projectRoot,
'packages/icons/src/iconify-offline',
'offline-icons.ts',
);
fs.writeFileSync(outputPath, `${outputLines.join('\n')}\n`);
console.log(`Successfully generated ${outputPath}`);