From 904979a00f979bf614eeb06bfe29440cf7ab8342 Mon Sep 17 00:00:00 2001 From: hexqi Date: Wed, 22 Jan 2025 17:26:19 +0800 Subject: [PATCH] Ccf 2024/icon (#899) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 新增物料-图标模块 * feat: 自定义图标方案 * feat: 自定义图标方案 --------- Co-authored-by: YPF --- .editorconfig | 12 + designer-demo/src/composable/http/index.js | 2 +- mockServer/src/database/icons.db | 4 + mockServer/src/database/pages.db | 2 +- mockServer/src/routes/main-routes.js | 22 + mockServer/src/services/icons.js | 105 + mockServer/src/services/mockService.js | 3 + package.json | 2 +- .../build/vite-config/src/default-config.js | 5 + packages/canvas/package.json | 1 + .../canvas/render/src/builtin/CanvasIcon.vue | 32 +- .../canvas/render/src/builtin/builtin.json | 23 +- .../SelectIconConfigurator.vue | 4 +- .../src/preview/src/preview/Preview.vue | 19 +- .../src/preview/src/preview/http.js | 1 + .../src/preview/src/preview/importMap.json | 1 + .../src/preview/src/preview/srcFiles.js | 9 + .../src/preview/src/preview/srcFiles/icon.vue | 40 + .../preview/src/preview/srcFiles/icons.json | 1 + packages/plugins/materials/index.js | 9 +- packages/plugins/materials/package.json | 1 + .../materials/src/composable/useMaterial.js | 14 +- .../src/meta/icon/CreateCollection.vue | 112 + .../materials/src/meta/icon/CreateIcon.vue | 109 + .../materials/src/meta/icon/Custom.vue | 368 ++ .../materials/src/meta/icon/Iconify.vue | 296 ++ .../plugins/materials/src/meta/icon/Main.vue | 68 + .../plugins/materials/src/meta/icon/index.js | 10 + .../materials/src/meta/icon/js/http.js | 45 + .../plugins/materials/src/meta/icon/meta.js | 4 + .../plugins/materials/src/meta/icon/mock.js | 4308 +++++++++++++++++ packages/toolbars/generate-code/src/Main.vue | 20 + .../src/generator/generateApp.js | 7 +- .../src/generator/vue/sfc/genSetupSFC.js | 9 +- .../generator/vue/sfc/generateAttribute.js | 38 +- .../src/generator/vue/sfc/generateScript.js | 7 + .../src/generator/vue/sfc/generateTemplate.js | 14 +- .../src/plugins/addIconAssetsPlugin.js | 60 + packages/vue-generator/src/plugins/index.js | 1 + .../src/templates/vue-template/index.js | 2 +- .../templateFiles/genViteConfig.js | 43 +- .../vue-template/templateFiles/packageJson.js | 5 +- 42 files changed, 5794 insertions(+), 44 deletions(-) create mode 100644 .editorconfig create mode 100644 mockServer/src/database/icons.db create mode 100644 mockServer/src/services/icons.js create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/icon.vue create mode 100644 packages/design-core/src/preview/src/preview/srcFiles/icons.json create mode 100644 packages/plugins/materials/src/meta/icon/CreateCollection.vue create mode 100644 packages/plugins/materials/src/meta/icon/CreateIcon.vue create mode 100644 packages/plugins/materials/src/meta/icon/Custom.vue create mode 100644 packages/plugins/materials/src/meta/icon/Iconify.vue create mode 100644 packages/plugins/materials/src/meta/icon/Main.vue create mode 100644 packages/plugins/materials/src/meta/icon/index.js create mode 100644 packages/plugins/materials/src/meta/icon/js/http.js create mode 100644 packages/plugins/materials/src/meta/icon/meta.js create mode 100644 packages/plugins/materials/src/meta/icon/mock.js create mode 100644 packages/vue-generator/src/plugins/addIconAssetsPlugin.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..4bd3bd8bef --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false diff --git a/designer-demo/src/composable/http/index.js b/designer-demo/src/composable/http/index.js index f11538395a..d766e58beb 100644 --- a/designer-demo/src/composable/http/index.js +++ b/designer-demo/src/composable/http/index.js @@ -46,7 +46,7 @@ const preResponse = (res) => { return Promise.reject(res.data.error) } - return res.data?.data + return res.data?.data ?? res.data } const openLogin = () => { diff --git a/mockServer/src/database/icons.db b/mockServer/src/database/icons.db new file mode 100644 index 0000000000..c49c8075e9 --- /dev/null +++ b/mockServer/src/database/icons.db @@ -0,0 +1,4 @@ +{"prefix":"test","name":"test","lastModified":1722795342,"aliases":{},"width":8,"height":8,"icons":{"bug":{"body":""},"bullhorn":{"body":""},"chat":{"body":""},"eject":{"body":""},"location":{"body":""},"media-play":{"body":""}},"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"_id":"RmX521SR31Xbek8P"} +{"prefix":"test2","name":"test2","lastModified":1729441119,"aliases":{},"width":24,"height":24,"icons":{"architecture":{"body":""},"architecture-rounded":{"body":""},"arrow-cool-down":{"body":""},"arrow-cool-down-rounded":{"body":""},"arrow-warm-up":{"body":""},"arrow-warm-up-rounded":{"body":""},"avg-pace":{"body":""},"avg-pace-rounded":{"body":""},"avg-time":{"body":""},"avg-time-outline":{"body":""},"avg-time-outline-rounded":{"body":""},"avg-time-outline-sharp":{"body":""},"avg-time-rounded":{"body":""},"avg-time-sharp":{"body":""},"azm":{"body":""},"azm-outline":{"body":""},"azm-outline-rounded":{"body":""},"azm-rounded":{"body":""},"backpack":{"body":""},"backpack-outline":{"body":""},"backpack-outline-rounded":{"body":""},"backpack-outline-sharp":{"body":""},"backpack-rounded":{"body":""},"backpack-sharp":{"body":""},"bath-outdoor":{"body":""},"bath-outdoor-outline":{"body":""}},"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"_id":"rYcNOtwD6tur9sxw"} +{"$$indexCreated":{"fieldName":"prefix","unique":true,"sparse":false}} +{"$$indexCreated":{"fieldName":"prefix","unique":true}} diff --git a/mockServer/src/database/pages.db b/mockServer/src/database/pages.db index 103c886105..875a7341a9 100644 --- a/mockServer/src/database/pages.db +++ b/mockServer/src/database/pages.db @@ -1,4 +1,4 @@ -{"name":"DemoPage","id":"5bhD7p5FUsUOTFRN","app":"918","route":"demopage","page_content":{"state":{},"methods":{},"componentName":"Page","css":"","props":{},"lifeCycles":{},"children":[{"componentName":"div","props":{},"id":"85375559","children":[{"componentName":"TinySwitch","props":{"modelValue":""},"id":"33433546"}]}],"dataSource":{"list":[]},"utils":[],"bridge":[],"inputs":[],"outputs":[],"fileName":"DemoPage"},"tenant":1,"isBody":false,"parentId":"0","group":"staticPages","depth":0,"isPage":true,"isDefault":false,"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"isHome":false,"message":"Page auto save","_id":"5bhD7p5FUsUOTFRN"} +{"name":"DemoPage","id":"5bhD7p5FUsUOTFRN","app":"918","route":"demopage","page_content":{"state":{},"methods":{},"componentName":"Page","fileName":"DemoPage","css":".icon-imqgu {\n color: #ff0000;\n}\n.icon-hhkuv {\n color: #ff4242;\n}\n","props":{},"lifeCycles":{},"children":[{"componentName":"Icon","props":{"name":"material-symbols:air","icon":"material-symbols:air"},"id":"51565523"},{"componentName":"Icon","props":{"name":"IconDel","icon":"IconDel"},"id":"38c53255"},{"componentName":"Icon","props":{"name":"material-symbols:air","icon":"material-symbols:air"},"id":"435f43c3"},{"componentName":"Icon","props":{"name":"test:bug","icon":"test:bug"},"id":"6e532451"},{"componentName":"Icon","props":{"name":"material-symbols:add","icon":"material-symbols:add"},"id":"612c1226"},{"componentName":"Icon","props":{"name":"test:media-play","icon":"test:media-play","className":"icon-imqgu"},"id":"22d54a35"},{"componentName":"Icon","props":{"name":"icon-park-solid:add","icon":"icon-park-solid:add"},"id":"28196f44"},{"componentName":"Icon","props":{"name":"icon-park-twotone:add","icon":"icon-park-twotone:add"},"id":"53621141"},{"componentName":"Icon","props":{"name":"test2:avg-time","icon":"test2:avg-time","className":"icon-hhkuv"},"id":"41465545"},{"componentName":"Icon","props":{"name":"test2:architecture","icon":"test2:architecture"},"id":"44236643"},{"componentName":"Icon","props":{"name":"test:media-play","icon":"test:media-play"},"id":"33c16465"},{"componentName":"Icon","props":{"name":"IconDel","icon":"IconDel"},"id":"6933a642"},{"componentName":"Icon","props":{"name":"test2:backpack-outline-sharp","icon":"test2:backpack-outline-sharp"},"id":"675de541"},{"componentName":"Icon","props":{"name":"material-symbols:avg-time-rounded","icon":"material-symbols:avg-time-rounded"},"id":"3b2c1633"}],"dataSource":{"list":[]},"bridge":{"imports":[]},"inputs":[],"outputs":[]},"tenant":1,"isBody":false,"parentId":"0","group":"staticPages","depth":0,"isPage":true,"isDefault":false,"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"isHome":false,"message":"Page auto save","_id":"5bhD7p5FUsUOTFRN"} {"name":"createVm","id":"NTJ4MjvqoVj8OVsc","app":"918","route":"createVm","page_content":{"state":{"dataDisk":[1,2,3]},"methods":{},"componentName":"Page","css":"body {\r\n background-color:#eef0f5 ;\r\n margin-bottom: 80px;\r\n}","props":{},"children":[{"componentName":"div","props":{"style":"padding-bottom: 10px; padding-top: 10px;"},"id":"2b2cabf0","children":[{"componentName":"TinyTimeLine","props":{"active":"2","data":[{"name":"基础配置"},{"name":"网络配置"},{"name":"高级配置"},{"name":"确认配置"}],"horizontal":true,"style":"border-radius: 0px;"},"id":"dd764b17"}]},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"id":"30c94cc8","children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"计费模式"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"包年/包月","value":"1"},{"text":"按需计费","value":"2"}],"modelValue":"1"},"id":"a8d84361"}],"id":"9f39f3e7"},{"componentName":"TinyFormItem","props":{"label":"区域"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"乌兰察布二零一","value":"1"}],"modelValue":"1","style":"border-radius: 0px; margin-right: 10px;"},"id":"c97ccd99"},{"componentName":"Text","props":{"text":"温馨提示:页面左上角切换区域","style":"background-color: [object Event]; color: #8a8e99; font-size: 12px;"},"id":"20923497"},{"componentName":"Text","props":{"text":"不同区域的云服务产品之间内网互不相通;请就近选择靠近您业务的区域,可减少网络时延,提高访问速度","style":"display: block; color: #8a8e99; border-radius: 0px; font-size: 12px;"},"id":"54780a26"}],"id":"4966384d"},{"componentName":"TinyFormItem","props":{"label":"可用区","style":"border-radius: 0px;"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"可用区1","value":"1"},{"text":"可用区2","value":"2"},{"text":"可用区3","value":"3"}],"modelValue":"1"},"id":"6184481b"}],"id":"690837bf"}],"id":"b6a425d4"}]},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"CPU架构"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"x86计算","value":"1"},{"text":"鲲鹏计算","value":"2"}],"modelValue":"1"},"id":"7d33ced7"}],"id":"05ed5a79"},{"componentName":"TinyFormItem","props":{"label":"区域"},"children":[{"componentName":"div","props":{"style":"display: flex; justify-content: flex-start; align-items: center;"},"id":"606edf78","children":[{"componentName":"div","props":{"style":"display: flex; align-items: center; margin-right: 10px;"},"id":"f3f98246","children":[{"componentName":"Text","props":{"text":"vCPUs","style":"width: 80px;"},"id":"c287437e"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}]},"id":"4c43286b"}]},{"componentName":"div","props":{"style":"display: flex; align-items: center; margin-right: 10px;"},"children":[{"componentName":"Text","props":{"text":"内存","style":"width: 80px; border-radius: 0px;"},"id":"38b8fa1f"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}]},"id":"cd33328e"}],"id":"2b2c678f"},{"componentName":"div","props":{"style":"display: flex; align-items: center;"},"children":[{"componentName":"Text","props":{"text":"规格名称","style":"width: 80px;"},"id":"d3eb6352"},{"componentName":"TinySearch","props":{"modelValue":"","placeholder":"输入关键词"},"id":"21cb9282"}],"id":"b8e0f35c"}]},{"componentName":"div","props":{"style":"border-radius: 0px;"},"id":"5000c83e","children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"通用计算型","value":"1"},{"text":"通用计算增强型","value":"2"},{"text":"内存优化型","value":"3"},{"text":"内存优化型","value":"4"},{"text":"磁盘增强型","value":"5"},{"text":"超高I/O型","value":"6"},{"text":"GPU加速型","value":"7"}],"modelValue":"1","style":"border-radius: 0px; margin-top: 12px;"},"id":"b8724703"},{"componentName":"TinyGrid","props":{"editConfig":{"trigger":"click","mode":"cell","showStatus":true},"columns":[{"type":"radio","width":60},{"field":"employees","title":"规格名称"},{"field":"created_date","title":"vCPUs | 内存(GiB)","sortable":true},{"field":"city","title":"CPU","sortable":true},{"title":"基准 / 最大带宽\t","sortable":true},{"title":"内网收发包","sortable":true}],"data":[{"id":"1","name":"GFD科技有限公司","city":"福州","employees":800,"created_date":"2014-04-30 00:56:00","boole":false},{"id":"2","name":"WWW科技有限公司","city":"深圳","employees":300,"created_date":"2016-07-08 12:36:22","boole":true}],"style":"margin-top: 12px; border-radius: 0px;","auto-resize":true},"id":"77701c25"},{"componentName":"div","props":{"style":"margin-top: 12px; border-radius: 0px;"},"id":"3339838b","children":[{"componentName":"Text","props":{"text":"当前规格","style":"width: 150px; display: inline-block;"},"id":"203b012b"},{"componentName":"Text","props":{"text":"通用计算型 | Si2.large.2 | 2vCPUs | 4 GiB","style":"font-weight: 700;"},"id":"87723f52"}]}]}],"id":"657fb2fc"}],"id":"d19b15cf"}],"id":"9991228b"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"镜像","style":"border-radius: 0px;"},"children":[{"componentName":"TinyButtonGroup","props":{"data":[{"text":"公共镜像","value":"1"},{"text":"私有镜像","value":"2"},{"text":"共享镜像","value":"3"}],"modelValue":"1"},"id":"922b14cb"},{"componentName":"div","props":{"style":"display: flex; margin-top: 12px; border-radius: 0px;"},"id":"6b679524","children":[{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 170px; margin-right: 10px;"},"id":"4851fff7"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 340px;"},"id":"a7183eb7"}]},{"componentName":"div","props":{"style":"margin-top: 12px;"},"id":"57aee314","children":[{"componentName":"Text","props":{"text":"请注意操作系统的语言类型。","style":"color: #e37d29;"},"id":"56d36c27"}]}],"id":"e3b02436"}],"id":"59aebf2b"}],"id":"87ff7b99"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-radius: 4px; border-color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; margin-bottom: 10px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"系统盘","style":"border-radius: 0px;"},"children":[{"componentName":"div","props":{"style":"display: flex;"},"id":"cddba5b8","children":[{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 200px; margin-right: 10px;"},"id":"a97fbe15"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"1cde4c0f"},{"componentName":"Text","props":{"text":"GiB \nIOPS上限240,IOPS突发上限5,000","style":"color: #575d6c; font-size: 12px;"},"id":"2815d82d"}]}],"id":"50239a3a"}],"id":"e8582986"},{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[{"componentName":"TinyFormItem","props":{"label":"数据盘","style":"border-radius: 0px;"},"children":[{"componentName":"div","props":{"style":"margin-top: 12px; display: flex;"},"id":"728c9825","children":[{"componentName":"Icon","props":{"style":"margin-right: 10px; width: 16px; height: 16px;","name":"IconPanelMini"},"id":"fded6930"},{"componentName":"TinySelect","props":{"modelValue":"","placeholder":"请选择","options":[{"value":"1","label":"黄金糕"},{"value":"2","label":"双皮奶"}],"style":"width: 200px; margin-right: 10px;"},"id":"62734e3f"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"667c7926"},{"componentName":"Text","props":{"text":"GiB \nIOPS上限600,IOPS突发上限5,000","style":"color: #575d6c; font-size: 12px; margin-right: 10px;"},"id":"e7bc36d6"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px;"},"id":"1bd56dc0"}],"loop":{"type":"JSExpression","value":"this.state.dataDisk"}},{"componentName":"div","props":{"style":"display: flex; margin-top: 12px; border-radius: 0px;"},"children":[{"componentName":"Icon","props":{"name":"IconPlus","style":"width: 16px; height: 16px; margin-right: 10px;"},"id":"65c89f2b"},{"componentName":"Text","props":{"text":"增加一块数据盘","style":"font-size: 12px; border-radius: 0px; margin-right: 10px;"},"id":"cb344071"},{"componentName":"Text","props":{"text":"您还可以挂载 21 块磁盘(云硬盘)","style":"color: #8a8e99; font-size: 12px;"},"id":"80eea996"}],"id":"e9e530ab"}],"id":"078e03ef"}],"id":"ccef886e"}],"id":"0fb7bd74"},{"componentName":"div","props":{"style":"border-width: 1px; border-style: solid; border-color: #ffffff; padding-top: 10px; padding-left: 10px; padding-right: 10px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px; background-color: #fff; position: fixed; inset: auto 0% 0% 0%; height: 80px; line-height: 80px; border-radius: 0px;"},"children":[{"componentName":"TinyForm","props":{"labelWidth":"80px","labelPosition":"top","inline":false,"label-position":"left ","label-width":"150px","style":"border-radius: 0px;"},"children":[],"id":"21ed4475"},{"componentName":"TinyRow","props":{"style":"border-radius: 0px; height: 100%;"},"children":[{"componentName":"TinyCol","props":{"span":"8"},"id":"b9d051a5","children":[{"componentName":"TinyRow","props":{"style":"border-radius: 0px;"},"children":[{"componentName":"TinyCol","props":{"span":"5","style":"display: flex;"},"id":"02352776","children":[{"componentName":"Text","props":{"text":"购买量","style":"margin-right: 10px;"},"id":"0cd9ed5c"},{"componentName":"TinyInput","props":{"placeholder":"请输入","modelValue":"","style":"width: 120px; margin-right: 10px;"},"id":"2f9cf442"},{"componentName":"Text","props":{"text":"台"},"id":"facd4481"}]},{"componentName":"TinyCol","props":{"span":"7"},"id":"82b6c659","children":[{"componentName":"div","props":{},"id":"9cd65874","children":[{"componentName":"Text","props":{"text":"配置费用","style":"font-size: 12px;"},"id":"b5a0a0da"},{"componentName":"Text","props":{"text":"¥1.5776","style":"padding-left: 10px; padding-right: 10px; color: #de504e;"},"id":"d9464214"},{"componentName":"Text","props":{"text":"/小时","style":"font-size: 12px;"},"id":"af7cc5e6"}]},{"componentName":"div","props":{},"id":"89063830","children":[{"componentName":"Text","props":{"text":"参考价格,具体扣费请以账单为准。","style":"font-size: 12px; border-radius: 0px;"},"id":"d8995fbc"},{"componentName":"Text","props":{"text":"了解计费详情","style":"font-size: 12px; color: #344899;"},"id":"b383c3e2"}]}]}],"id":"94fc0e43"}]},{"componentName":"TinyCol","props":{"span":"4","style":"display: flex; flex-direction: row-reverse; border-radius: 0px; height: 100%; justify-content: flex-start; align-items: center;"},"id":"10b73009","children":[{"componentName":"TinyButton","props":{"text":"下一步: 网络配置","type":"danger","style":"max-width: unset;"},"id":"0b584011"}]}],"id":"d414a473"}],"id":"e8ec029b"}],"fileName":"createVm"},"tenant":1,"isBody":false,"parentId":"0","group":"staticPages","depth":0,"isPage":true,"isDefault":false,"occupier":{"id":86,"username":"开发者","email":"developer@lowcode.com","resetPasswordToken":"developer","confirmationToken":"dfb2c162-351f-4f44-ad5f-8998","is_admin":true},"isHome":false,"_id":"NTJ4MjvqoVj8OVsc"} {"$$indexCreated":{"fieldName":"route","unique":true,"sparse":false}} {"$$indexCreated":{"fieldName":"route","unique":true}} diff --git a/mockServer/src/routes/main-routes.js b/mockServer/src/routes/main-routes.js index 06280c494c..d00dcb71bf 100644 --- a/mockServer/src/routes/main-routes.js +++ b/mockServer/src/routes/main-routes.js @@ -224,4 +224,26 @@ router.post('block-history/create', async (ctx) => { ctx.body = await mockService.blockHistoryService.create(ctx.request.body) }) +/* 图标库 */ + +router.post('/app-center/api/icons/list', async (ctx) => { + ctx.body = await mockService.iconService.collectionList(ctx.request.body) +}) +router.post('/app-center/api/icons/create', async (ctx) => { + ctx.body = await mockService.iconService.collectionCreate(ctx.request.body) +}) +router.post('/app-center/api/icons/import', async (ctx) => { + ctx.body = await mockService.iconService.collectionImport(ctx.request.body) +}) +router.post('/app-center/api/icons/remove', async (ctx) => { + ctx.body = await mockService.iconService.collectionRemove(ctx.request.body) +}) +router.post('/app-center/api/icon/import', async (ctx) => { + ctx.body = await mockService.iconService.iconImport(ctx.request.body) +}) +router.post('/app-center/api/icon/remove', async (ctx) => { + ctx.body = await mockService.iconService.iconRemove(ctx.request.body) +}) + + export default router diff --git a/mockServer/src/services/icons.js b/mockServer/src/services/icons.js new file mode 100644 index 0000000000..de80cc2a77 --- /dev/null +++ b/mockServer/src/services/icons.js @@ -0,0 +1,105 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import path from 'path' +import DateStore from '@seald-io/nedb' +import { getResponseData } from '../tool/Common' + +export default class IconService { + constructor() { + this.db = new DateStore({ + filename: path.resolve(__dirname, '../database/icons.db'), + autoload: true + }) + + this.db.ensureIndex({ + fieldName: 'prefix', + unique: true + }) + + this.userInfo = { + id: 86, + username: '开发者', + email: 'developer@lowcode.com', + resetPasswordToken: 'developer', + confirmationToken: 'dfb2c162-351f-4f44-ad5f-8998', + is_admin: true + } + + this.iconModel = { + name: 'home', + body: '', + width: 24, + height: 24 + } + + this.collectionModel = { + name: 'test图标库', + prefix: 'test', + icons: {}, + occupier: { + id: 86, + username: '开发者', + email: 'developer@lowcode.com', + resetPasswordToken: 'developer', + confirmationToken: 'dfb2c162-351f-4f44-ad5f-8998', + is_admin: true + } + } + } + + async collectionList() { + const result = await this.db.findAsync({}) + return getResponseData(result) + } + async collectionCreate() {} + async collectionRemove() {} + async collectionImport({ prefix, name, iconify }) { + const result = await this.db.insertAsync({ prefix, name, ...iconify, occupier: this.userInfo }) + return getResponseData(result) + } + + async iconImport() {} + async iconRemove() {} + + async create(params) { + const model = params.isPage ? this.iconModel : this.collectionModel + const pageData = { ...model, ...params } + const result = await this.db.insertAsync(pageData) + const { _id } = result + await this.db.updateAsync({ _id }, { $set: { id: _id } }) + result.id = result._id + return getResponseData(result) + } + + async update(id, params) { + await this.db.updateAsync({ _id: id }, { $set: params }) + const result = await this.db.findOneAsync({ _id: id }) + return getResponseData(result) + } + + async collections() { + const result = await this.db.findAsync() + return getResponseData(result) + } + + async detail(pageId) { + const result = await this.db.findOneAsync({ _id: pageId }) + return getResponseData(result) + } + + async delete(pageId) { + const result = await this.db.findOneAsync({ _id: pageId }) + await this.db.removeAsync({ _id: pageId }) + return getResponseData(result) + } +} diff --git a/mockServer/src/services/mockService.js b/mockServer/src/services/mockService.js index 5f05fd389b..9dae2c418e 100644 --- a/mockServer/src/services/mockService.js +++ b/mockServer/src/services/mockService.js @@ -10,6 +10,7 @@ * */ import PageService from './pages' +import IconService from './icons' import AppService from './app' import BlockService from './block' import SourceService from './source' @@ -19,6 +20,7 @@ import Schema2CodeServcice from './schema2code' export default class MockService { schema2codeService pageService + iconService appService blockService sourceService @@ -28,6 +30,7 @@ export default class MockService { constructor() { this.schema2codeService = new Schema2CodeServcice() this.pageService = new PageService() + this.iconService = new IconService() this.appService = new AppService() this.blockService = new BlockService() this.sourceService = new SourceService() diff --git a/package.json b/package.json index 8ddedd70e5..2d04483c48 100644 --- a/package.json +++ b/package.json @@ -55,4 +55,4 @@ "@vue/repl@2.9.0": "patches/@vue__repl@2.9.0.patch" } } -} +} \ No newline at end of file diff --git a/packages/build/vite-config/src/default-config.js b/packages/build/vite-config/src/default-config.js index e19a1e7785..78dc51980f 100644 --- a/packages/build/vite-config/src/default-config.js +++ b/packages/build/vite-config/src/default-config.js @@ -52,6 +52,11 @@ const getDefaultConfig = (engineConfig) => { '/platform-center/api': { target: origin, changeOrigin: true + }, + '/iconify/api': { + target: 'https://api.iconify.design/', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/iconify\/api/, '') } } }, diff --git a/packages/canvas/package.json b/packages/canvas/package.json index 717f10b4bc..db56e313eb 100644 --- a/packages/canvas/package.json +++ b/packages/canvas/package.json @@ -36,6 +36,7 @@ "type": "module", "dependencies": { "@babel/core": "7.18.13", + "@iconify/vue": "^4.1.2", "@opentiny/tiny-engine-builtin-component": "workspace:*", "@opentiny/tiny-engine-common": "workspace:*", "@opentiny/tiny-engine-dsl-vue": "workspace:*", diff --git a/packages/canvas/render/src/builtin/CanvasIcon.vue b/packages/canvas/render/src/builtin/CanvasIcon.vue index 42567318bf..8a34b46d59 100644 --- a/packages/canvas/render/src/builtin/CanvasIcon.vue +++ b/packages/canvas/render/src/builtin/CanvasIcon.vue @@ -1,5 +1,6 @@ @@ -24,7 +46,7 @@ export default { justify-content: center; align-items: center; fill: currentColor; - width: 1em; - height: 1em; + width: 1.5em; + height: 1.5em; } diff --git a/packages/canvas/render/src/builtin/builtin.json b/packages/canvas/render/src/builtin/builtin.json index 097e3ae816..5b0f582367 100644 --- a/packages/canvas/render/src/builtin/builtin.json +++ b/packages/canvas/render/src/builtin/builtin.json @@ -418,6 +418,26 @@ "component": "SelectIconConfigurator", "props": {} } + }, + { + "property": "icon", + "type": "String", + "defaultValue": "IconDel", + "bindState": true, + "label": { + "text": { + "zh_CN": "图标类型" + } + }, + "cols": 12, + "rules": [], + "widget": { + "component": "InputConfigurator", + "props": { + "type": "text", + "autosize": true + } + } } ] } @@ -572,7 +592,8 @@ "schema": { "componentName": "Icon", "props": { - "name": "IconDel" + "name": "IconDel", + "icon": "IconDel" } } }, diff --git a/packages/configurator/src/select-icon-configurator/SelectIconConfigurator.vue b/packages/configurator/src/select-icon-configurator/SelectIconConfigurator.vue index f8ad2fd8a7..f84b0cd3b8 100644 --- a/packages/configurator/src/select-icon-configurator/SelectIconConfigurator.vue +++ b/packages/configurator/src/select-icon-configurator/SelectIconConfigurator.vue @@ -53,11 +53,11 @@ export default { iconSearchValue: '', icon: { name: props.modelValue, - component: props.modelValue && SvgICons[props.modelValue]() + component: props.modelValue && SvgICons[props.modelValue]?.() }, defaultIcon: { name: props.modelValue, - component: props.modelValue && SvgICons[props.modelValue]() + component: props.modelValue && SvgICons[props.modelValue]?.() } }) diff --git a/packages/design-core/src/preview/src/preview/Preview.vue b/packages/design-core/src/preview/src/preview/Preview.vue index 6764b09aac..dcaf0a0557 100644 --- a/packages/design-core/src/preview/src/preview/Preview.vue +++ b/packages/design-core/src/preview/src/preview/Preview.vue @@ -22,7 +22,7 @@ import { getMetaApi } from '@opentiny/tiny-engine-meta-register' import { getImportMap as getInitImportMap } from './importMap' import srcFiles from './srcFiles' import generateMetaFiles, { processAppJsCode } from './generate' -import { getSearchParams, fetchMetaData, fetchImportMap, fetchAppSchema, fetchBlockSchema } from './http' +import { getSearchParams, fetchMetaData, fetchImportMap, fetchAppSchema, fetchBlockSchema, fetchIcons } from './http' import { PanelType, PreviewTips } from '../constant' import { injectDebugSwitch } from './debugSwitch' import '@vue/repl/style.css' @@ -91,7 +91,8 @@ export default { ancestors[i].page_content, appData?.componentsMap || [], { - blockRelativePath: './' + blockRelativePath: './', + addPreviewIconImport: true }, nextPage ) || '', @@ -120,9 +121,10 @@ export default { fetchAppSchema(queryParams?.app), fetchMetaData(queryParams), setFiles(srcFiles, 'src/Main.vue'), - getImportMap() + getImportMap(), + fetchIcons() ] - Promise.all(promiseList).then(async ([appData, metaData, _void, importMapData]) => { + Promise.all(promiseList).then(async ([appData, metaData, _void, importMapData, iconSets]) => { store.setImportMap(importMapData) const blocks = await getAllNestedBlocksSchema(queryParams.pageInfo?.schema, fetchBlockSchema) @@ -134,7 +136,11 @@ export default { ...(blocks || []).map((blockSchema) => { return { panelName: `${blockSchema.fileName}.vue`, - panelValue: generatePageCode(blockSchema, appData?.componentsMap || [], { blockRelativePath: './' }) || '', + panelValue: + generatePageCode(blockSchema, appData?.componentsMap || [], { + blockRelativePath: './', + addPreviewIconImport: true + }) || '', panelType: 'vue' } }) @@ -159,7 +165,7 @@ export default { panelName = 'Main.vue' } - const newPanelValue = panelValue.replace(/([\s\S]*)<\/script>/, (match, p1) => { + const newPanelValue = panelValue?.replace(/([\s\S]*)<\/script>/, (match, p1) => { if (!p1) { // eslint-disable-next-line no-useless-escape return ' + + diff --git a/packages/design-core/src/preview/src/preview/srcFiles/icons.json b/packages/design-core/src/preview/src/preview/srcFiles/icons.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/packages/design-core/src/preview/src/preview/srcFiles/icons.json @@ -0,0 +1 @@ +[] diff --git a/packages/plugins/materials/index.js b/packages/plugins/materials/index.js index 95ae843fa9..59213f23c9 100644 --- a/packages/plugins/materials/index.js +++ b/packages/plugins/materials/index.js @@ -16,6 +16,7 @@ import { ResourceService, MaterialService } from './src/composable' import MaterialLayout from './src/meta/layout' import MaterialBlock from './src/meta/block' import MaterialComponent from './src/meta/component' +import MaterialIcon from './src/meta/icon' import MaterialHeader from './src/components/header/Main.vue' import { basePropertyOptions } from './src/js/options' @@ -25,7 +26,11 @@ export default { layout: MaterialLayout, options: { defaultTabId: 'engine.plugins.materials.component', - displayComponentIds: ['engine.plugins.materials.component', 'engine.plugins.materials.block'], + displayComponentIds: [ + 'engine.plugins.materials.component', + 'engine.plugins.materials.block', + 'engine.plugins.materials.icon' + ], basePropertyOptions, useBaseStyle: true, blockBaseStyle: { @@ -41,7 +46,7 @@ export default { header: MaterialHeader }, apis: { ...MaterialBlock.apis }, - metas: [MaterialBlock, MaterialComponent, ResourceService, MaterialService] + metas: [MaterialBlock, MaterialComponent, MaterialIcon, ResourceService, MaterialService] } export { entry, ResourceService, MaterialService } diff --git a/packages/plugins/materials/package.json b/packages/plugins/materials/package.json index 066efc9352..fbeea36dd6 100644 --- a/packages/plugins/materials/package.json +++ b/packages/plugins/materials/package.json @@ -27,6 +27,7 @@ "dependencies": { "@opentiny/tiny-engine-block-compiler": "workspace:*", "@opentiny/tiny-engine-builtin-component": "workspace:*", + "@iconify/vue": "^4.1.2", "@opentiny/tiny-engine-common": "workspace:*", "@opentiny/tiny-engine-meta-register": "workspace:*", "@opentiny/tiny-engine-utils": "workspace:*" diff --git a/packages/plugins/materials/src/composable/useMaterial.js b/packages/plugins/materials/src/composable/useMaterial.js index e9aad8f522..20f93ead34 100644 --- a/packages/plugins/materials/src/composable/useMaterial.js +++ b/packages/plugins/materials/src/composable/useMaterial.js @@ -37,6 +37,7 @@ const resource = new Map() const blockResource = new Map() const materialState = reactive({ + icons: [], components: [], // 这里存放的是物料插件面板里所有显示的组件 blocks: [], componentsDepsMap: { scripts: [], styles: new Set() }, // @@ -60,7 +61,7 @@ const getSnippet = (component) => { return schema } -const generateNode = ({ type, component }) => { +const generateNode = ({ type, component, props }) => { const snippet = getSnippet(component) || {} const schema = { @@ -72,6 +73,10 @@ const generateNode = ({ type, component }) => { } } + if (props) { + schema.props = Object.assign({}, schema.props, props) + } + if (type === 'block') { schema.componentType = 'Block' schema.props.className = getOptions(meta.id).useBaseStyle ? getOptions(meta.id).blockBaseStyle.className : '' @@ -212,6 +217,7 @@ const registerBlock = async (data, notFetchResouce) => { } const clearMaterials = () => { + materialState.icons = [] materialState.components = [] materialState.blocks = [] resource.clear() @@ -427,6 +433,12 @@ export const getMaterialsRes = async () => { const fetchMaterial = async () => { const materials = await getMaterialsRes() + const iconCollections = await getMetaApi(META_SERVICE.Http).post(`/app-center/api/icons/list`) + + window.localStorage.setItem('icons', JSON.stringify(iconCollections || [])) + + materialState.icons = iconCollections || [] + materials.forEach((response) => { if (response.status === 'fulfilled' && response.value.materials) { addMaterials(response.value.materials) diff --git a/packages/plugins/materials/src/meta/icon/CreateCollection.vue b/packages/plugins/materials/src/meta/icon/CreateCollection.vue new file mode 100644 index 0000000000..3c6aff4704 --- /dev/null +++ b/packages/plugins/materials/src/meta/icon/CreateCollection.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/packages/plugins/materials/src/meta/icon/CreateIcon.vue b/packages/plugins/materials/src/meta/icon/CreateIcon.vue new file mode 100644 index 0000000000..5aabe38484 --- /dev/null +++ b/packages/plugins/materials/src/meta/icon/CreateIcon.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/packages/plugins/materials/src/meta/icon/Custom.vue b/packages/plugins/materials/src/meta/icon/Custom.vue new file mode 100644 index 0000000000..8586e76072 --- /dev/null +++ b/packages/plugins/materials/src/meta/icon/Custom.vue @@ -0,0 +1,368 @@ + + + + + diff --git a/packages/plugins/materials/src/meta/icon/Iconify.vue b/packages/plugins/materials/src/meta/icon/Iconify.vue new file mode 100644 index 0000000000..814a9b708a --- /dev/null +++ b/packages/plugins/materials/src/meta/icon/Iconify.vue @@ -0,0 +1,296 @@ + + + + + diff --git a/packages/plugins/materials/src/meta/icon/Main.vue b/packages/plugins/materials/src/meta/icon/Main.vue new file mode 100644 index 0000000000..34d6ca7e23 --- /dev/null +++ b/packages/plugins/materials/src/meta/icon/Main.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/packages/plugins/materials/src/meta/icon/index.js b/packages/plugins/materials/src/meta/icon/index.js new file mode 100644 index 0000000000..1ca6d6bcc6 --- /dev/null +++ b/packages/plugins/materials/src/meta/icon/index.js @@ -0,0 +1,10 @@ +import entry from './Main.vue' +import metaData from './meta' + +export default { + ...metaData, + entry, + options: { + title: '图标' + } +} diff --git a/packages/plugins/materials/src/meta/icon/js/http.js b/packages/plugins/materials/src/meta/icon/js/http.js new file mode 100644 index 0000000000..e1a6e0ac00 --- /dev/null +++ b/packages/plugins/materials/src/meta/icon/js/http.js @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2023 - present TinyEngine Authors. + * Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd. + * + * Use of this source code is governed by an MIT-style license. + * + * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, + * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR + * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. + * + */ + +import { getMetaApi, META_SERVICE } from '@opentiny/tiny-engine-meta-register' + +// 图标集合 -- 列表 +export const getIconCollections = () => getMetaApi(META_SERVICE.Http).post(`/app-center/api/icons/list`) + +// 图标集合 -- 创建集合 +export const createIconCollection = ({ name, prefix }) => + getMetaApi(META_SERVICE.Http).post('/app-center/api/icons/create', { name, prefix }) + +// 图标集合 -- 删除集合 +export const removeIconCollection = (prefix) => + getMetaApi(META_SERVICE.Http).post(`/app-center/api/icons/delete`, { prefix }) + +// 图标集合 -- 导入集合 +export const importIconCollection = ({ name, prefix, iconify }) => + getMetaApi(META_SERVICE.Http).post(`/app-center/api/icons/import`, { name, prefix, iconify }) + +// 图标 -- 新增 +export const importIcon = ({ prefix, name, svg }) => + getMetaApi(META_SERVICE.Http).post('/app-center/api/icon/import', { prefix, name, svg }) + +// 图标 -- 删除 +export const removeIcon = ({ prefix, name }) => + getMetaApi(META_SERVICE.Http).post(`/app-center/api/icon/delete`, { prefix, name }) + +// iconify资源——获得所有图标库 +export const fetchIconifyCollections = () => getMetaApi(META_SERVICE.Http).get(`/iconify/api/collections`) +// iconify资源——获得图标库内图标 +export const fetchIconifyCollectionIcons = ({ prefix }) => + getMetaApi(META_SERVICE.Http).get(`/iconify/api/collection?prefix=${prefix}&chars=true&aliases=true`) +// iconify资源——搜索图标 +export const queryIconify = ({ query }) => + getMetaApi(META_SERVICE.Http).get(`/iconify/api/search?query=${query}&limit=999`) diff --git a/packages/plugins/materials/src/meta/icon/meta.js b/packages/plugins/materials/src/meta/icon/meta.js new file mode 100644 index 0000000000..13896833a2 --- /dev/null +++ b/packages/plugins/materials/src/meta/icon/meta.js @@ -0,0 +1,4 @@ +export default { + id: 'engine.plugins.materials.icon', + type: 'plugins' +} diff --git a/packages/plugins/materials/src/meta/icon/mock.js b/packages/plugins/materials/src/meta/icon/mock.js new file mode 100644 index 0000000000..8a29b570d3 --- /dev/null +++ b/packages/plugins/materials/src/meta/icon/mock.js @@ -0,0 +1,4308 @@ +export const collections = { + 'material-symbols': { + name: 'Material Symbols', + total: 13161, + author: { name: 'Google', url: 'https://github.com/google/material-design-icons' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/google/material-design-icons/blob/master/LICENSE' + }, + samples: [ + 'downloading', + 'privacy-tip', + 'filter-drama-outline', + 'assignment-ind', + 'monitoring', + 'desktop-access-disabled-outline-sharp' + ], + height: 24, + category: 'General', + palette: false + }, + 'material-symbols-light': { + name: 'Material Symbols Light', + total: 13228, + author: { name: 'Google', url: 'https://github.com/google/material-design-icons' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/google/material-design-icons/blob/master/LICENSE' + }, + samples: [ + 'downloading', + 'privacy-tip', + 'filter-drama-outline', + 'assignment-ind', + 'monitoring', + 'desktop-access-disabled-outline-sharp' + ], + height: 24, + category: 'General', + palette: false + }, + ic: { + name: 'Google Material Icons', + total: 10955, + version: '1.0.32', + author: { name: 'Material Design Authors', url: 'https://github.com/material-icons/material-icons' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/material-icons/material-icons/blob/master/LICENSE' + }, + samples: [ + 'baseline-notifications-active', + 'outline-person-outline', + 'twotone-videocam-off', + 'sharp-flash-on', + 'baseline-volume-mute', + 'twotone-battery-20' + ], + height: 24, + category: 'General', + palette: false + }, + mdi: { + name: 'Material Design Icons', + total: 7447, + author: { name: 'Pictogrammers', url: 'https://github.com/Templarian/MaterialDesign' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/Templarian/MaterialDesign/blob/master/LICENSE' + }, + samples: [ + 'account-check', + 'bell-alert-outline', + 'calendar-edit', + 'skip-previous', + 'home-variant', + 'lock-open-outline' + ], + height: 24, + category: 'General', + palette: false + }, + ph: { + name: 'Phosphor', + total: 9072, + version: '2.1.1', + author: { name: 'Phosphor Icons', url: 'https://github.com/phosphor-icons/core' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/phosphor-icons/core/blob/main/LICENSE' }, + samples: [ + 'folder-open-duotone', + 'check-square-offset-thin', + 'pencil-line-fill', + 'check-thin', + 'browser-duotone', + 'thermometer-simple-fill' + ], + height: 24, + category: 'General', + palette: false + }, + solar: { + name: 'Solar', + total: 7401, + author: { name: '480 Design', url: 'https://www.figma.com/community/file/1166831539721848736' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: [ + 'magnifer-zoom-out-broken', + 'armchair-2-bold-duotone', + 'traffic-economy-line-duotone', + 'user-rounded-bold-duotone', + 'soundwave-linear', + 'hamburger-menu-broken' + ], + height: 24, + category: 'General', + palette: false + }, + tabler: { + name: 'Tabler Icons', + total: 5610, + version: '3.16.0', + author: { name: 'Paweł Kuna', url: 'https://github.com/tabler/tabler-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/tabler/tabler-icons/blob/master/LICENSE' }, + samples: ['alien', 'device-desktop', 'photo', 'chevron-right', 'check', 'square-root'], + height: 24, + category: 'General', + palette: false + }, + hugeicons: { + name: 'Huge Icons', + total: 3929, + author: { name: 'Hugeicons', url: 'https://icon-sets.iconify.design/icon-sets/hugeicons/' }, + license: { title: 'MIT', spdx: 'MIT' }, + samples: ['analytics-up', 'android', 'search-02', 'tick-02', 'not-equal-sign', 'text-align-left-01'], + height: 24, + category: 'General', + palette: false + }, + mingcute: { + name: 'MingCute Icon', + total: 3040, + author: { name: 'MingCute Design', url: 'https://github.com/Richard9394/MingCute' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/Richard9394/MingCute/blob/main/LICENSE' + }, + samples: [ + 'edit-3-line', + 'alert-fill', + 'riding-line', + 'layout-9-line', + 'currency-dollar-2-line', + 'trello-board-fill' + ], + height: 24, + category: 'General', + palette: false + }, + ri: { + name: 'Remix Icon', + total: 2892, + version: '4.3.0', + author: { name: 'Remix Design', url: 'https://github.com/Remix-Design/RemixIcon' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/Remix-Design/RemixIcon/blob/master/License' + }, + samples: ['lock-2-line', 'mark-pen-fill', 'moon-line', 'filter-2-fill', 'text', 'add-line'], + height: 24, + category: 'General', + palette: false + }, + bi: { + name: 'Bootstrap Icons', + total: 2050, + version: '1.11.3', + author: { name: 'The Bootstrap Authors', url: 'https://github.com/twbs/icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/twbs/icons/blob/main/LICENSE.md' }, + samples: ['graph-up', 'card-image', 'code-slash', 'egg-fill', 'brilliance', 'toggle-on'], + height: 16, + category: 'General', + palette: false + }, + carbon: { + name: 'Carbon', + total: 2215, + version: '11.48.0', + author: { name: 'IBM', url: 'https://github.com/carbon-design-system/carbon/tree/main/packages/icons' }, + license: { title: 'Apache 2.0', spdx: 'Apache-2.0' }, + samples: ['user-certification', 'humidity', 'edit-off', 'flag-filled', 'binding-01', 'mac-option'], + height: 32, + displayHeight: 16, + category: 'General', + palette: false + }, + iconamoon: { + name: 'IconaMoon', + total: 1781, + author: { name: 'Dariush Habibpour', url: 'https://github.com/dariushhpg1/IconaMoon' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: [ + 'shield-off-thin', + 'lightning-1-duotone', + 'player-previous-fill', + 'folder-remove-duotone', + 'frame-bold', + 'menu-kebab-vertical-circle-light' + ], + height: 24, + category: 'General', + palette: false + }, + iconoir: { + name: 'Iconoir', + total: 1613, + version: '7.9.0', + author: { name: 'Luca Burgio', url: 'https://github.com/iconoir-icons/iconoir' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/iconoir-icons/iconoir/blob/main/LICENSE' }, + samples: ['chat-bubble-check', 'edit', 'activity', 'check', 'droplet', 'hashtag'], + height: 24, + category: 'General', + palette: false + }, + ion: { + name: 'IonIcons', + total: 1356, + version: '7.4.0', + author: { name: 'Ben Sperry', url: 'https://github.com/ionic-team/ionicons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/ionic-team/ionicons/blob/main/LICENSE' }, + samples: [ + 'code-download-sharp', + 'contrast-outline', + 'checkmark-done', + 'navigate-sharp', + 'arrow-redo-outline', + 'bookmark-sharp' + ], + height: 32, + displayHeight: 16, + category: 'General', + palette: false + }, + lucide: { + name: 'Lucide', + total: 1526, + author: { name: 'Lucide Contributors', url: 'https://github.com/lucide-icons/lucide' }, + license: { title: 'ISC', spdx: 'ISC', url: 'https://github.com/lucide-icons/lucide/blob/main/LICENSE' }, + samples: ['check-circle', 'award', 'home', 'check', 'mountain', 'chevron-up'], + height: 24, + category: 'General', + palette: false + }, + 'lucide-lab': { + name: 'Lucide Lab', + total: 373, + author: { name: 'Lucide Contributors', url: 'https://github.com/lucide-icons/lucide-lab' }, + license: { title: 'ISC', spdx: 'ISC', url: 'https://github.com/lucide-icons/lucide-lab/blob/main/LICENSE' }, + samples: ['venn', 'card-credit', 'pac-man', 'cent', 'candlestick-big-lit', 'gearbox'], + height: 24, + category: 'General', + palette: false + }, + uil: { + name: 'Unicons', + total: 1206, + version: '4.0.8', + author: { name: 'Iconscout', url: 'https://github.com/Iconscout/unicons' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/Iconscout/unicons/blob/master/LICENSE' + }, + samples: ['arrow-circle-right', 'chat-bubble-user', 'edit-alt', 'grids', 'ellipsis-v', 'bars'], + height: 24, + category: 'General', + palette: false + }, + tdesign: { + name: 'TDesign Icons', + total: 1208, + author: { name: 'TDesign', url: 'https://github.com/Tencent/tdesign-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/Tencent/tdesign-icons/blob/main/LICENSE' }, + samples: ['activity', 'doge', 'dam', 'view-list', 'rotation', 'laptop'], + height: 24, + category: 'General', + palette: false + }, + teenyicons: { + name: 'Teenyicons', + total: 1200, + version: '0.4.1', + author: { name: 'smhmd', url: 'https://github.com/teenyicons/teenyicons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/teenyicons/teenyicons/blob/master/LICENSE' }, + samples: [ + 'face-id-solid', + 'user-outline', + 'page-break-outline', + 'hexagon-outline', + 'send-left-outline', + 'frame-solid' + ], + height: 15, + category: 'General', + palette: false + }, + clarity: { + name: 'Clarity', + total: 1103, + author: { name: 'VMware', url: 'https://github.com/vmware/clarity' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/vmware/clarity-assets/blob/master/LICENSE' }, + samples: [ + 'help-outline-badged', + 'heart-broken-solid', + 'shield-outline-alerted', + 'bookmark-solid', + 'check-line', + 'tablet-solid' + ], + height: 36, + displayHeight: 18, + category: 'General', + palette: false + }, + bx: { + name: 'BoxIcons', + total: 814, + version: '2.1.4', + author: { name: 'Atisa', url: 'https://github.com/atisawd/boxicons' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['heart-circle', 'last-page', 'bar-chart-square', 'stop', 'heading', 'filter-alt'], + height: 24, + category: 'General', + palette: false + }, + bxs: { + name: 'BoxIcons Solid', + total: 665, + version: '2.1.4', + author: { name: 'Atisa', url: 'https://github.com/atisawd/boxicons' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['edit-alt', 'tree-alt', 'circle-half', 'eject', 'flag', 'download'], + height: 24, + category: 'General', + palette: false + }, + majesticons: { + name: 'Majesticons', + total: 760, + version: '2.1.2', + author: { name: 'Gerrit Halfmann', url: 'https://github.com/halfmage/majesticons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/halfmage/majesticons/blob/main/LICENSE' }, + samples: ['chats-line', 'home', 'edit-pen-4-line', 'pulse', 'send-line', 'lightning-bolt'], + height: 24, + category: 'General', + palette: false + }, + 'ant-design': { + name: 'Ant Design Icons', + total: 830, + version: '4.4.2', + author: { name: 'HeskeyBaozi', url: 'https://github.com/ant-design/ant-design-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/ant-design/ant-design-icons/blob/master/LICENSE' }, + samples: [ + 'pushpin-filled', + 'pie-chart-outlined', + 'shopping-twotone', + 'layout-outlined', + 'dash-outlined', + 'cloud-twotone' + ], + height: 16, + category: 'General', + palette: false + }, + gg: { + name: 'css.gg', + total: 704, + version: '2.1.4', + author: { name: 'Astrit', url: 'https://github.com/astrit/css.gg' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/astrit/css.gg/blob/master/LICENSE' }, + samples: ['align-left', 'server', 'overflow', 'edit-flip-v', 'terrain', 'space-between'], + height: 24, + category: 'General', + palette: false + }, + 'gravity-ui': { + name: 'Gravity UI Icons', + total: 676, + version: '2.11.0', + author: { name: 'YANDEX LLC', url: 'https://github.com/gravity-ui/icons/' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/gravity-ui/icons/blob/main/LICENSE' }, + samples: ['magnifier', 'bookmark-fill', 'display', 'italic', 'caret-down', 'ban'], + height: 16, + category: 'General', + palette: false + }, + octicon: { + name: 'Octicons', + total: 643, + version: '19.11.0', + author: { name: 'GitHub', url: 'https://github.com/primer/octicons/' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/primer/octicons/blob/main/LICENSE' }, + samples: ['alert-24', 'bell-slash-24', 'hourglass-24', 'skip-fill-16', 'chevron-up-16', 'kebab-horizontal-16'], + category: 'General', + palette: false + }, + memory: { + name: 'Memory Icons', + total: 651, + author: { name: 'Pictogrammers', url: 'https://github.com/Pictogrammers/Memory' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/Pictogrammers/Memory/blob/main/LICENSE' + }, + samples: ['chart-bar', 'application', 'message', 'card-text', 'monitor', 'poll'], + height: 22, + category: 'General', + palette: false + }, + cil: { + name: 'CoreUI Free', + total: 554, + version: '2.0.1', + author: { name: 'creativeLabs Łukasz Holeczek', url: 'https://github.com/coreui/coreui-icons' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['airplane-mode-off', 'badge', 'color-border', 'bookmark', 'stream', 'file'], + height: 32, + displayHeight: 16, + category: 'General', + palette: false + }, + flowbite: { + name: 'Flowbite Icons', + total: 520, + author: { name: 'Themesberg', url: 'https://github.com/themesberg/flowbite-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/themesberg/flowbite-icons/blob/main/LICENSE' }, + samples: [ + 'user-outline', + 'vue-solid', + 'list-outline', + 'bars-from-left-outline', + 'letter-underline-outline', + 'table-column-solid' + ], + height: 24, + category: 'General', + palette: false + }, + mynaui: { + name: 'Myna UI Icons', + total: 1120, + author: { name: 'Praveen Juge', url: 'https://github.com/praveenjuge/mynaui-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/praveenjuge/mynaui-icons/blob/main/LICENSE' }, + samples: ['signal', 'power', 'tree', 'cart', 'filter', 'clock-three'], + height: 24, + category: 'General', + palette: false + }, + basil: { + name: 'Basil', + total: 493, + author: { name: 'Craftwork', url: 'https://www.figma.com/community/file/931906394678748246' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['comment-solid', 'search-outline', 'lightning-alt-solid', 'check-outline', 'asana-solid', 'moon-solid'], + height: 24, + category: 'General', + palette: false + }, + pixelarticons: { + name: 'Pixelarticons', + total: 486, + version: '1.8.1', + author: { name: 'Gerrit Halfmann', url: 'https://github.com/halfmage/pixelarticons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/halfmage/pixelarticons/blob/master/LICENSE' }, + samples: ['drag-and-drop', 'arrows-horizontal', 'heart', 'radio-handheld', 'alert', 'folder'], + height: 24, + category: 'General', + palette: false + }, + 'akar-icons': { + name: 'Akar Icons', + total: 454, + version: '1.9.31', + author: { name: 'Arturo Wibawa', url: 'https://github.com/artcoholic/akar-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/artcoholic/akar-icons/blob/master/LICENSE' }, + samples: ['paper', 'pencil', 'location', 'sort', 'vue-fill', 'check'], + height: 24, + category: 'General', + palette: false + }, + ci: { + name: 'coolicons', + total: 442, + author: { name: 'Kryston Schwarze', url: 'https://github.com/krystonschwarze/coolicons' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['bulb', 'house-01', 'compass', 'chevron-up', 'shield-warning', 'shrink'], + height: 24, + category: 'General', + palette: false + }, + 'system-uicons': { + name: 'System UIcons', + total: 430, + author: { name: 'Corey Ginnivan', url: 'https://github.com/CoreyGinnivan/system-uicons' }, + license: { + title: 'Unlicense', + spdx: 'Unlicense', + url: 'https://github.com/CoreyGinnivan/system-uicons/blob/master/LICENSE' + }, + samples: ['bell', 'message-writing', 'write', 'check', 'pull-left', 'frame'], + height: 21, + category: 'General', + palette: false + }, + typcn: { + name: 'Typicons', + total: 336, + version: '2.1.2', + author: { name: 'Stephen Hutchings', url: 'https://github.com/stephenhutchings/typicons.font' }, + license: { title: 'CC BY-SA 4.0', spdx: 'CC-BY-SA-4.0', url: 'https://creativecommons.org/licenses/by-sa/4.0/' }, + samples: ['pin-outline', 'cloud-storage', 'bell', 'media-eject', 'adjust-contrast', 'css3'], + height: 24, + category: 'General', + palette: false + }, + 'radix-icons': { + name: 'Radix Icons', + total: 318, + version: '1.3.0', + author: { name: 'WorkOS', url: 'https://github.com/radix-ui/icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/radix-ui/icons/blob/master/LICENSE' }, + samples: ['width', 'checkbox', 'code', 'border-width', 'all-sides', 'half-2'], + height: 15, + category: 'General', + palette: false + }, + zondicons: { + name: 'Zondicons', + total: 297, + version: '0.1.0', + author: { name: 'Steve Schoger', url: 'https://github.com/dukestreetstudio/zondicons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/dukestreetstudio/zondicons/blob/master/LICENSE' }, + samples: ['copy', 'hand-stop', 'mouse', 'arrow-thick-down', 'send', 'checkmark'], + height: 20, + category: 'General', + palette: false + }, + ep: { + name: 'Element Plus', + total: 293, + version: '2.3.1', + author: { name: 'Element Plus', url: 'https://github.com/element-plus/element-plus-icons' }, + license: { + title: 'MIT', + spdx: 'MIT', + url: 'https://github.com/element-plus/element-plus-icons/blob/main/packages/svg/package.json' + }, + samples: ['home-filled', 'partly-cloudy', 'avatar', 'briefcase', 'platform', 'flag'], + height: 32, + displayHeight: 16, + category: 'General', + palette: false + }, + circum: { + name: 'Circum Icons', + total: 288, + version: '1.0.0', + author: { name: 'Klarr Agency', url: 'https://github.com/Klarr-Agency/Circum-Icons' }, + license: { + title: 'Mozilla Public License 2.0', + spdx: 'MPL-2.0', + url: 'https://github.com/Klarr-Agency/Circum-Icons/blob/main/LICENSE' + }, + samples: ['text', 'pill', 'zoom-out', 'voicemail', 'no-waiting-sign', 'crop'], + height: 24, + category: 'General', + palette: false + }, + 'mdi-light': { + name: 'Material Design Light', + total: 284, + author: { name: 'Pictogrammers', url: 'https://github.com/Templarian/MaterialDesignLight' }, + license: { + title: 'Open Font License', + spdx: 'OFL-1.1', + url: 'https://github.com/Templarian/MaterialDesignLight/blob/master/LICENSE.md' + }, + samples: ['cart', 'bell', 'login', 'skip-previous', 'home', 'lock-open'], + height: 24, + category: 'General', + palette: false + }, + fe: { + name: 'Feather Icon', + total: 255, + version: '1.0.2', + author: { name: 'Megumi Hano', url: 'https://github.com/feathericon/feathericon' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/feathericon/feathericon/blob/master/LICENSE' }, + samples: ['add-cart', 'comments', 'link-external', 'check', 'bolt', 'map'], + height: 24, + category: 'General', + palette: false + }, + 'eos-icons': { + name: 'EOS Icons', + total: 253, + version: '5.4.0', + author: { name: 'SUSE UX/UI team', url: 'https://gitlab.com/SUSE-UIUX/eos-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://gitlab.com/SUSE-UIUX/eos-icons/-/blob/master/LICENSE' }, + samples: ['modified-date-outlined', 'arrow-rotate', 'package', 'enhancement', 'quota', 'commit'], + height: 24, + category: 'General', + palette: false + }, + 'bitcoin-icons': { + name: 'Bitcoin Icons', + total: 250, + version: '0.1.10', + author: { name: 'Bitcoin Design Community', url: 'https://github.com/BitcoinDesign/Bitcoin-Icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/BitcoinDesign/Bitcoin-Icons/blob/main/LICENSE-MIT' }, + samples: [ + 'exchange-outline', + 'brush-filled', + 'satoshi-v3-outline', + 'unlock-filled', + 'magic-wand-outline', + 'usb-outline' + ], + height: 24, + category: 'General', + palette: false + }, + charm: { + name: 'Charm Icons', + total: 261, + version: '0.12.1', + author: { name: 'Jay Newey', url: 'https://github.com/jaynewey/charm-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/jaynewey/charm-icons/blob/main/LICENSE' }, + samples: ['chart-line', 'image', 'thumb-up', 'diamond', 'diff', 'tick'], + height: 16, + category: 'General', + palette: false + }, + prime: { + name: 'Prime Icons', + total: 313, + author: { name: 'PrimeTek', url: 'https://github.com/primefaces/primeicons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/primefaces/primeicons/blob/master/LICENSE' }, + samples: ['book', 'telegram', 'volume-off', 'check', 'ban', 'chevron-up'], + height: 24, + category: 'General', + palette: false + }, + humbleicons: { + name: 'Humbleicons', + total: 247, + version: '1.12.0', + author: { name: 'Jiří Zralý', url: 'https://github.com/zraly/humbleicons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/zraly/humbleicons/blob/master/license' }, + samples: ['aid', 'droplet', 'rss', 'volume', 'times', 'check'], + height: 24, + category: 'General', + palette: false + }, + uiw: { + name: 'uiw icons', + total: 214, + version: '2.6.10', + author: { name: 'liwen0526', url: 'https://github.com/uiwjs/icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/uiwjs/icons/blob/master/LICENSE' }, + samples: ['cut', 'like-o', 'download', 'caret-down', 'windows', 'check'], + height: 20, + category: 'General', + palette: false + }, + uim: { + name: 'Unicons Monochrome', + total: 296, + version: '4.0.8', + author: { name: 'Iconscout', url: 'https://github.com/Iconscout/unicons' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/Iconscout/unicons/blob/master/LICENSE' + }, + samples: ['airplay', 'circle-layer', 'lock-access', 'comment-alt-message', 'web-section', 'align'], + height: 24, + category: 'General', + palette: false + }, + uit: { + name: 'Unicons Thin Line', + total: 214, + version: '4.0.8', + author: { name: 'Iconscout', url: 'https://github.com/Iconscout/unicons' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/Iconscout/unicons/blob/master/LICENSE' + }, + samples: ['circuit', 'favorite', 'toggle-on', 'web-section', 'angle-up', 'subject'], + height: 24, + category: 'General', + palette: false + }, + uis: { + name: 'Unicons Solid', + total: 189, + version: '4.0.8', + author: { name: 'Iconscout', url: 'https://github.com/Iconscout/unicons' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/Iconscout/unicons/blob/master/LICENSE' + }, + samples: ['analysis', 'user-md', 'bookmark', 'window-grid', 'check', 'clock-nine'], + height: 24, + category: 'General', + palette: false + }, + maki: { + name: 'Maki', + total: 213, + version: '8.0.1', + author: { name: 'Mapbox', url: 'https://github.com/mapbox/maki' }, + license: { title: 'CC0', spdx: 'CC0-1.0', url: 'https://creativecommons.org/publicdomain/zero/1.0/' }, + samples: ['entrance-alt1', 'clothing-store', 'grocery', 'roadblock', 'monument', 'shelter'], + height: 15, + category: 'General', + palette: false + }, + gridicons: { + name: 'Gridicons', + total: 207, + version: '3.4.2', + author: { name: 'Automattic', url: 'https://github.com/Automattic/gridicons' }, + license: { + title: 'GPL 2.0', + spdx: 'GPL-2.0-only', + url: 'https://github.com/Automattic/gridicons/blob/trunk/LICENSE.md' + }, + samples: ['code', 'multiple-users', 'types', 'dropdown', 'filter', 'offline'], + height: 24, + category: 'General', + palette: false + }, + mi: { + name: 'Mono Icons', + total: 180, + version: '1.3.1', + author: { name: 'Mono', url: 'https://github.com/mono-company/mono-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/mono-company/mono-icons/blob/master/LICENSE.md' }, + samples: ['bar-chart', 'cloud-upload', 'log-out', 'board', 'search', 'layout'], + height: 24, + category: 'General', + palette: false + }, + weui: { + name: 'WeUI Icon', + total: 162, + author: { name: 'WeUI', url: 'https://github.com/weui/weui-icon' }, + license: { title: 'MIT', spdx: 'MIT' }, + samples: ['search-outlined', 'clip-filled', 'done-filled', 'more-filled', 'arrow-filled', 'play-outlined'], + height: 24, + category: 'General', + palette: false + }, + quill: { + name: 'Quill Icons', + total: 140, + author: { name: 'Casper Lourens', url: 'https://www.figma.com/community/file/1034432054377533052/Quill-Iconset' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/yourtempo/tempo-quill-icons/blob/main/LICENSE' }, + samples: ['collapse', 'desktop', 'moon', 'download', 'checkmark', 'activity'], + height: 32, + displayHeight: 16, + category: 'General', + palette: false + }, + gala: { + name: 'Gala Icons', + total: 51, + author: { name: 'Jake Wells', url: 'https://github.com/sisyphusion/gala-icons' }, + license: { title: 'GPL', spdx: 'GPL-3.0', url: 'https://github.com/sisyphusion/gala-icons/blob/main/LICENSE' }, + samples: ['brochure', 'remove', 'chart', 'issue', 'multi', 'video'], + height: 32, + displayHeight: 16, + category: 'General', + palette: false + }, + 'lets-icons': { + name: 'Lets Icons', + total: 1528, + author: { name: 'Leonid Tsvetkov', url: 'https://www.figma.com/community/file/886554014393250663' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['search-duotone-line', 'view-alt', 'message-duotone', 'remote-light', 'blank-alt-duotone', 'code'], + height: 24, + category: 'General', + palette: false + }, + f7: { + name: 'Framework7 Icons', + total: 1253, + version: '5.0.5', + author: { name: 'Vladimir Kharlampidi', url: 'https://github.com/framework7io/framework7-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/framework7io/framework7-icons/blob/master/LICENSE' }, + samples: ['hourglass-bottomhalf-fill', 'pencil-outline', 'rosette', 'placemark-fill', 'barcode', 'logo-rss'], + height: 28, + category: 'General', + palette: false + }, + mage: { + name: 'Mage Icons', + total: 1042, + author: { name: 'MageIcons', url: 'https://github.com/Mage-Icons/mage-icons' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/Mage-Icons/mage-icons/blob/main/License.txt' + }, + samples: ['chart-25', 'music-fill', 'coin-a-fill', 'multiply', 'dash-menu', 'cancel-fill'], + height: 24, + category: 'General', + palette: false + }, + marketeq: { + name: 'Marketeq', + total: 590, + author: { name: 'Marketeq' }, + license: { title: 'MIT', spdx: 'MIT' }, + samples: ['mute', 'desk-6', 'fishing-hook', 'delta', 'infinite-2', 'backward-2'], + height: 25, + category: 'General', + palette: true + }, + fluent: { + name: 'Fluent UI System Icons', + total: 16621, + version: '1.1.258', + author: { name: 'Microsoft Corporation', url: 'https://github.com/microsoft/fluentui-system-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/microsoft/fluentui-system-icons/blob/main/LICENSE' }, + samples: [ + 'zoom-out-24-filled', + 'drink-coffee-24-regular', + 'photo-filter-24-regular', + 'checkmark-24-filled', + 'oval-24-filled', + 'cloud-24-filled' + ], + displayHeight: 24, + category: 'General', + palette: false + }, + 'icon-park-outline': { + name: 'IconPark Outline', + total: 2658, + version: '1.4.2', + author: { name: 'ByteDance', url: 'https://github.com/bytedance/IconPark' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/bytedance/IconPark/blob/master/LICENSE' + }, + samples: ['add-one', 'english-mustache', 'basketball-clothes', 'sort', 'lightning', 'pinwheel'], + height: 24, + category: 'General', + palette: false + }, + 'icon-park-solid': { + name: 'IconPark Solid', + total: 1947, + version: '1.4.2', + author: { name: 'ByteDance', url: 'https://github.com/bytedance/IconPark' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/bytedance/IconPark/blob/master/LICENSE' + }, + samples: ['add-one', 'english-mustache', 'basketball-clothes', 'sort', 'lightning', 'pinwheel'], + height: 24, + category: 'General', + palette: false + }, + 'icon-park-twotone': { + name: 'IconPark TwoTone', + total: 1944, + version: '1.4.2', + author: { name: 'ByteDance', url: 'https://github.com/bytedance/IconPark' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/bytedance/IconPark/blob/master/LICENSE' + }, + samples: ['add-one', 'english-mustache', 'basketball-clothes', 'sort', 'lightning', 'pinwheel'], + height: 24, + category: 'General', + palette: false + }, + 'icon-park': { + name: 'IconPark', + total: 2658, + version: '1.4.2', + author: { name: 'ByteDance', url: 'https://github.com/bytedance/IconPark' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/bytedance/IconPark/blob/master/LICENSE' + }, + samples: ['add-one', 'english-mustache', 'basketball-clothes', 'sort', 'lightning', 'pinwheel'], + height: 24, + category: 'General', + palette: true + }, + jam: { + name: 'Jam Icons', + total: 940, + author: { name: 'Michael Amprimo', url: 'https://github.com/michaelampr/jam' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/michaelampr/jam/blob/master/LICENSE' }, + samples: ['chevrons-square-up-right', 'luggage-f', 'rubber', 'capsule-f', 'header', 'tablet'], + height: 24, + category: 'General', + palette: false + }, + heroicons: { + name: 'HeroIcons', + total: 1288, + version: '2.1.5', + author: { name: 'Refactoring UI Inc', url: 'https://github.com/tailwindlabs/heroicons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/tailwindlabs/heroicons/blob/master/LICENSE' }, + samples: ['camera', 'building-library', 'receipt-refund', 'bookmark', 'cloud', 'folder'], + category: 'General', + palette: false + }, + pajamas: { + name: 'Gitlab SVGs', + total: 382, + version: '3.116.0', + author: { name: 'GitLab B.V.', url: 'https://gitlab.com/gitlab-org/gitlab-svgs/-/tree/main' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://gitlab.com/gitlab-org/gitlab-svgs/-/blob/main/LICENSE' }, + samples: ['preferences', 'expire', 'merge', 'trend-up', 'template', 'symlink'], + category: 'General', + palette: false + }, + 'pepicons-pop': { + name: 'Pepicons Pop!', + total: 1275, + version: '3.1.1', + author: { name: 'CyCraft', url: 'https://github.com/CyCraft/pepicons' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://github.com/CyCraft/pepicons/blob/dev/LICENSE' }, + samples: ['bookmark', 'moon', 'pen', 'hash', 'heart', 'times'], + category: 'General', + palette: false + }, + 'pepicons-print': { + name: 'Pepicons Print', + total: 1275, + version: '3.1.1', + author: { name: 'CyCraft', url: 'https://github.com/CyCraft/pepicons' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://github.com/CyCraft/pepicons/blob/dev/LICENSE' }, + samples: ['bookmark', 'moon', 'pen', 'hash', 'heart', 'times'], + category: 'General', + palette: false + }, + 'pepicons-pencil': { + name: 'Pepicons Pencil', + total: 1275, + version: '3.1.1', + author: { name: 'CyCraft', url: 'https://github.com/CyCraft/pepicons' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://github.com/CyCraft/pepicons/blob/dev/LICENSE' }, + samples: ['bookmark', 'moon', 'pen', 'hash', 'heart', 'times'], + category: 'General', + palette: false + }, + bytesize: { + name: 'Bytesize Icons', + total: 101, + version: '1.4.0', + author: { name: 'Dan Klammer', url: 'https://github.com/danklammer/bytesize-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/danklammer/bytesize-icons/blob/master/LICENSE.md' }, + samples: ['desktop', 'code', 'sign-out', 'checkmark', 'bookmark', 'activity'], + height: 32, + displayHeight: 16, + category: 'General', + palette: false + }, + ei: { + name: 'Evil Icons', + total: 70, + version: '1.10.1', + author: { name: 'Alexander Madyankin and Roman Shamin', url: 'https://github.com/evil-icons/evil-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/evil-icons/evil-icons/blob/master/LICENSE.txt' }, + samples: ['paperclip', 'like', 'arrow-right', 'navicon', 'chevron-right', 'chart'], + height: 25, + category: 'General', + palette: false + }, + streamline: { + name: 'Streamline', + total: 2000, + author: { name: 'Streamline', url: 'https://github.com/webalys-hq/streamline-vectors' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: [ + 'sign-hashtag', + 'open-umbrella-solid', + 'graph-bar-increase', + 'camping-tent', + 'add-circle-solid', + 'filter-2' + ], + height: 28, + category: 'General', + palette: false + }, + guidance: { + name: 'Guidance', + total: 360, + author: { name: 'Streamline', url: 'https://github.com/webalys-hq/streamline-vectors' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['smoking-area', 'playground', 'glass', 'paper', 'escalator', 'printer'], + height: 24, + category: 'General', + palette: false + }, + 'fa6-solid': { + name: 'Font Awesome Solid', + total: 1395, + version: '6.6.0', + author: { name: 'Dave Gandy', url: 'https://github.com/FortAwesome/Font-Awesome' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['location-pin', 'gem', 'folder', 'mound', 'toggle-on', 'table-columns'], + height: 32, + displayHeight: 16, + category: 'General', + palette: false + }, + 'fa6-regular': { + name: 'Font Awesome Regular', + total: 163, + version: '6.6.0', + author: { name: 'Dave Gandy', url: 'https://github.com/FortAwesome/Font-Awesome' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['message', 'clock', 'folder', 'face-surprise', 'bookmark', 'calendar'], + height: 32, + displayHeight: 16, + category: 'General', + palette: false + }, + ooui: { + name: 'OOUI', + total: 357, + version: '0.50.4', + author: { name: 'OOUI Team', url: 'https://github.com/wikimedia/oojs-ui' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/wikimedia/oojs-ui/blob/master/LICENSE-MIT' }, + samples: ['search', 'share', 'restore', 'menu', 'bookmark', 'check'], + height: 20, + category: 'General', + palette: false + }, + 'rivet-icons': { + name: 'Rivet Icons', + total: 210, + author: { name: 'Indiana University', url: 'https://github.com/indiana-university/rivet-icons' }, + license: { + title: 'BSD 3-Clause', + spdx: 'BSD-3-Clause', + url: 'https://github.com/indiana-university/rivet-icons/blob/develop/LICENSE' + }, + samples: ['lightning', 'credit-card-solid', 'pause', 'bookmark-solid', 'plus', 'flag-solid'], + height: 16, + category: 'General', + palette: false + }, + nimbus: { + name: 'Nimbus', + total: 140, + version: '0.3.2', + author: { name: 'Linkedstore S.A.', url: 'https://github.com/cyberalien/nimbus-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/cyberalien/nimbus-icons/blob/main/LICENSE' }, + samples: ['barcode', 'mail', 'calendar', 'mobile', 'download', 'volume'], + height: 16, + category: 'General', + palette: false + }, + oui: { + name: 'OpenSearch UI', + total: 393, + version: '2.0.0', + author: { name: 'OpenSearch Contributors', url: 'https://github.com/opensearch-project/oui' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/opensearch-project/oui/blob/main/LICENSE.txt' + }, + samples: ['word-wrap-disabled', 'annotation', 'token-rank-feature', 'shard', 'apps', 'token-histogram'], + category: 'General', + palette: false + }, + formkit: { + name: 'FormKit Icons', + total: 144, + author: { name: 'FormKit, Inc', url: 'https://github.com/formkit/formkit/tree/master/packages/icons' }, + license: { + title: 'MIT', + spdx: 'MIT', + url: 'https://github.com/formkit/formkit/blob/master/packages/icons/LICENSE' + }, + samples: ['checkbox', 'reorder', 'submit', 'check', 'radio', 'close'], + category: 'General', + palette: false + }, + 'line-md': { + name: 'Material Line Icons', + total: 1085, + version: '2.0.2', + author: { name: 'Vjacheslav Trushkin', url: 'https://github.com/cyberalien/line-md' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/cyberalien/line-md/blob/master/license.txt' }, + samples: [ + 'loading-twotone-loop', + 'beer-alt-twotone-loop', + 'image-twotone', + 'account', + 'cloud-off-outline-loop', + 'cog-filled-loop' + ], + height: 24, + category: 'Animated Icons', + palette: false + }, + meteocons: { + name: 'Meteocons', + total: 447, + version: '3.0.0', + author: { name: 'Bas Milius', url: 'https://github.com/basmilius/weather-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/basmilius/weather-icons/blob/dev/LICENSE' }, + samples: ['hurricane-fill', 'sunrise-fill', 'windsock', 'moon-first-quarter', 'code-red', 'raindrop-fill'], + height: 32, + displayHeight: 16, + category: 'Animated Icons', + palette: true + }, + 'svg-spinners': { + name: 'SVG Spinners', + total: 46, + author: { name: 'Utkarsh Verma', url: 'https://github.com/n3r4zzurr0/svg-spinners' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/n3r4zzurr0/svg-spinners/blob/main/LICENSE' }, + samples: ['tadpole', 'pulse', '3-dots-rotate', '90-ring', 'clock', 'bars-fade'], + height: 24, + category: 'Animated Icons', + palette: false + }, + openmoji: { + name: 'OpenMoji', + total: 4146, + author: { name: 'OpenMoji', url: 'https://github.com/hfg-gmuend/openmoji' }, + license: { title: 'CC BY-SA 4.0', spdx: 'CC-BY-SA-4.0', url: 'https://creativecommons.org/licenses/by-sa/4.0/' }, + samples: ['bicycle', 'bow-and-arrow', 'full-moon-face', 'plus', 'solar-cell', 'battery'], + height: 36, + displayHeight: 18, + category: 'Emoji', + palette: true + }, + twemoji: { + name: 'Twitter Emoji', + total: 3668, + author: { name: 'Twitter', url: 'https://github.com/twitter/twemoji' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['anguished-face', 'duck', 'bell', 'spoon', 'clipboard', 'wrapped-gift'], + height: 36, + displayHeight: 18, + category: 'Emoji', + palette: true + }, + noto: { + name: 'Noto Emoji', + total: 3555, + author: { name: 'Google Inc', url: 'https://github.com/googlefonts/noto-emoji' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/googlefonts/noto-emoji/blob/main/LICENSE' + }, + samples: [ + 'beaming-face-with-smiling-eyes', + 'computer-mouse', + 'chart-increasing', + 'dove', + 'page-facing-up', + 'red-heart' + ], + height: 16, + category: 'Emoji', + palette: true + }, + 'fluent-emoji': { + name: 'Fluent Emoji', + total: 2961, + author: { name: 'Microsoft Corporation', url: 'https://github.com/microsoft/fluentui-emoji' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/microsoft/fluentui-emoji/blob/main/LICENSE' }, + samples: ['avocado', 'ticket', 'straight-ruler', 'diamond-suit', 'egg', 'yin-yang'], + height: 32, + displayHeight: 16, + category: 'Emoji', + palette: true + }, + 'fluent-emoji-flat': { + name: 'Fluent Emoji Flat', + total: 2980, + author: { name: 'Microsoft Corporation', url: 'https://github.com/microsoft/fluentui-emoji' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/microsoft/fluentui-emoji/blob/main/LICENSE' }, + samples: ['avocado', 'ticket', 'straight-ruler', 'diamond-suit', 'egg', 'yin-yang'], + height: 32, + displayHeight: 16, + category: 'Emoji', + palette: true + }, + 'fluent-emoji-high-contrast': { + name: 'Fluent Emoji High Contrast', + total: 1545, + author: { name: 'Microsoft Corporation', url: 'https://github.com/microsoft/fluentui-emoji' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/microsoft/fluentui-emoji/blob/main/LICENSE' }, + samples: ['avocado', 'ticket', 'straight-ruler', 'diamond-suit', 'egg', 'yin-yang'], + height: 32, + displayHeight: 16, + category: 'Emoji', + palette: false + }, + 'noto-v1': { + name: 'Noto Emoji (v1)', + total: 2162, + author: { name: 'Google Inc', url: 'https://github.com/googlefonts/noto-emoji' }, + license: { + title: 'Apache 2.0', + spdx: 'Apache-2.0', + url: 'https://github.com/googlefonts/noto-emoji/blob/main/LICENSE' + }, + samples: [ + 'face-with-open-mouth', + 'no-entry', + 'scissors', + 'card-index-dividers', + 'key', + 'magnifying-glass-tilted-left' + ], + height: 16, + category: 'Emoji', + palette: true + }, + emojione: { + name: 'Emoji One (Colored)', + total: 1834, + version: '2.3.0', + author: { name: 'Emoji One', url: 'https://github.com/EmojiTwo/emojitwo' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: [ + 'anxious-face-with-sweat', + 'cloud-with-snow', + 'studio-microphone', + 'antenna-bars', + 'eight-spoked-asterisk', + 'no-entry' + ], + height: 32, + displayHeight: 16, + category: 'Emoji', + palette: true + }, + 'emojione-monotone': { + name: 'Emoji One (Monotone)', + total: 1403, + version: '2.2.7', + author: { name: 'Emoji One', url: 'https://github.com/EmojiTwo/emojitwo' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['face-with-tongue', 'envelope', 'frog-face', 'star', 'droplet', 'gem-stone'], + height: 32, + displayHeight: 16, + category: 'Emoji', + palette: false + }, + 'emojione-v1': { + name: 'Emoji One (v1)', + total: 1262, + version: '1.5.2', + author: { name: 'Emoji One', url: 'https://github.com/joypixels/emojione-legacy' }, + license: { title: 'CC BY-SA 4.0', spdx: 'CC-BY-SA-4.0', url: 'https://creativecommons.org/licenses/by-sa/4.0/' }, + samples: ['face-savoring-food', 'panda-face', 'artist-palette', 'lightning-mood', 'droplet', 'folder'], + height: 32, + displayHeight: 16, + category: 'Emoji', + palette: true + }, + fxemoji: { + name: 'Firefox OS Emoji', + total: 1034, + version: '0.0.2', + author: { name: 'Mozilla', url: 'https://github.com/mozilla/fxemoji' }, + license: { title: 'Apache 2.0', spdx: 'Apache-2.0', url: 'https://mozilla.github.io/fxemoji/LICENSE.md' }, + samples: ['foxweary', 'loveletter', 'openlock', 'blackdiamondsuit', 'speaker', 'screen'], + height: 32, + displayHeight: 16, + category: 'Emoji', + palette: true + }, + 'streamline-emojis': { + name: 'Streamline Emojis', + total: 787, + author: { name: 'Streamline', url: 'https://github.com/webalys-hq/streamline-vectors' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['crescent-moon', 'fire', 'kissing-face-with-smiling-eyes', 'paperclip', 'cloud-1', 'balloon'], + height: 24, + category: 'Emoji', + palette: true + }, + bxl: { + name: 'BoxIcons Logo', + total: 155, + version: '2.1.4', + author: { name: 'Atisa', url: 'https://github.com/atisawd/boxicons' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['patreon', 'adobe', 'vuejs', 'unsplash', 'twitch', 'microsoft'], + height: 24, + category: 'Brands / Social', + palette: false + }, + logos: { + name: 'SVG Logos', + total: 1822, + author: { name: 'Gil Barbara', url: 'https://github.com/gilbarbara/logos' }, + license: { + title: 'CC0', + spdx: 'CC0-1.0', + url: 'https://raw.githubusercontent.com/gilbarbara/logos/master/LICENSE.txt' + }, + samples: ['npm-icon', 'uikit', 'patreon', 'serverless', 'vue', 'modernizr'], + category: 'Brands / Social', + palette: true + }, + 'simple-icons': { + name: 'Simple Icons', + total: 3171, + version: '13.9.0', + author: { name: 'Simple Icons Collaborators', url: 'https://github.com/simple-icons/simple-icons' }, + license: { + title: 'CC0 1.0', + spdx: 'CC0-1.0', + url: 'https://github.com/simple-icons/simple-icons/blob/develop/LICENSE.md' + }, + samples: ['wise', 'framer', 'vuetify', 'unsplash', 'stackblitz', 'mitsubishi'], + height: 24, + category: 'Brands / Social', + palette: false + }, + cib: { + name: 'CoreUI Brands', + total: 830, + version: '2.0.1', + author: { name: 'creativeLabs Łukasz Holeczek', url: 'https://github.com/coreui/coreui-icons' }, + license: { title: 'CC0 1.0', spdx: 'CC0-1.0', url: 'https://creativecommons.org/publicdomain/zero/1.0/' }, + samples: ['cc-amazon-pay', 'hotjar', 'open-id', 'unsplash', 'framer', 'kotlin'], + height: 32, + displayHeight: 16, + category: 'Brands / Social', + palette: false + }, + 'fa6-brands': { + name: 'Font Awesome Brands', + total: 492, + version: '6.6.0', + author: { name: 'Dave Gandy', url: 'https://github.com/FortAwesome/Font-Awesome' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['strava', 'css3', 'y-combinator', 'unsplash', 'vuejs', 'google-drive'], + height: 32, + displayHeight: 16, + category: 'Brands / Social', + palette: false + }, + nonicons: { + name: 'Nonicons', + total: 67, + version: '0.0.18', + author: { name: 'yamatsum', url: 'https://github.com/yamatsum/nonicons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/yamatsum/nonicons/blob/master/LICENSE' }, + samples: ['kotlin-16', 'vue-16', 'npm-16', 'next-16', 'go-16', 'ionic-16'], + height: 16, + category: 'Brands / Social', + palette: false + }, + arcticons: { + name: 'Arcticons', + total: 10399, + author: { name: 'Donnnno', url: 'https://github.com/Arcticons-Team/Arcticons' }, + license: { title: 'CC BY-SA 4.0', spdx: 'CC-BY-SA-4.0', url: 'https://creativecommons.org/licenses/by-sa/4.0/' }, + samples: ['paperlaunch', 'gravadordevoz', 'appstract', 'clipious', 'productivity', 'daserste'], + height: 48, + displayHeight: 24, + category: 'Brands / Social', + palette: false + }, + cbi: { + name: 'Custom Brand Icons', + total: 1235, + author: { name: 'Emanuele & rchiileea', url: 'https://github.com/elax46/custom-brand-icons' }, + license: { + title: 'CC BY-NC-SA 4.0', + spdx: 'CC-BY-NC-SA-4.0', + url: 'https://github.com/elax46/custom-brand-icons/blob/main/LICENSE' + }, + samples: ['mitsubishi', 'espn', 'roomscomputer', 'netapp', 'prosieben', 'roomsstaircase'], + category: 'Brands / Social', + palette: false + }, + brandico: { + name: 'Brandico', + total: 45, + author: { name: 'Fontello', url: 'https://github.com/fontello/brandico.font' }, + license: { title: 'CC BY SA', spdx: 'CC-BY-SA-3.0', url: 'https://creativecommons.org/licenses/by-sa/3.0/' }, + samples: ['vimeo', 'twitter-bird', 'yandex', 'bandcamp', 'facebook', 'win8'], + category: 'Brands / Social', + palette: false + }, + 'entypo-social': { + name: 'Entypo+ Social', + total: 76, + author: { name: 'Daniel Bruce', url: 'https://github.com/chancancode/entypo-plus' }, + license: { title: 'CC BY-SA 4.0', spdx: 'CC-BY-SA-4.0', url: 'https://creativecommons.org/licenses/by-sa/4.0/' }, + samples: ['linkedin-with-circle', 'twitter', 'youtube', 'google-drive', 'medium', 'basecamp'], + height: 20, + category: 'Brands / Social', + palette: false + }, + token: { + name: 'Web3 Icons', + total: 1717, + version: '3.6.1', + author: { name: '0xa3k5', url: 'https://github.com/0xa3k5/web3icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/0xa3k5/web3icons/blob/main/LICENCE' }, + samples: ['bit', 'dog', 'eth', 'mtd', 'rune', 'vite'], + height: 24, + category: 'Brands / Social', + palette: false + }, + 'token-branded': { + name: 'Web3 Icons Branded', + total: 1905, + version: '3.6.1', + author: { name: '0xa3k5', url: 'https://github.com/0xa3k5/web3icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/0xa3k5/web3icons/blob/main/LICENCE' }, + samples: ['bit', 'dog', 'eth', 'mtd', 'rune', 'vite'], + height: 24, + category: 'Brands / Social', + palette: true + }, + cryptocurrency: { + name: 'Cryptocurrency Icons', + total: 483, + version: '0.18.1', + author: { name: 'Christopher Downer', url: 'https://github.com/atomiclabs/cryptocurrency-icons' }, + license: { title: 'CC0 1.0', spdx: 'CC0-1.0', url: 'https://creativecommons.org/publicdomain/zero/1.0/' }, + samples: ['btc', 'ltc', 'eth', 'storm', 'waves', 'vib'], + height: 32, + displayHeight: 16, + category: 'Brands / Social', + palette: false + }, + 'cryptocurrency-color': { + name: 'Cryptocurrency Color Icons', + total: 483, + version: '0.18.1', + author: { name: 'Christopher Downer', url: 'https://github.com/atomiclabs/cryptocurrency-icons' }, + license: { title: 'CC0 1.0', spdx: 'CC0-1.0', url: 'https://creativecommons.org/publicdomain/zero/1.0/' }, + samples: ['btc', 'ltc', 'eth', 'storm', 'waves', 'vib'], + height: 32, + displayHeight: 16, + category: 'Brands / Social', + palette: true + }, + flag: { + name: 'Flag Icons', + total: 538, + version: '7.2.3', + author: { name: 'Panayiotis Lipiridis', url: 'https://github.com/lipis/flag-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/lipis/flag-icons/blob/main/LICENSE' }, + samples: ['fr-1x1', 'de-1x1', 'bh-1x1', 'kr-1x1', 'ee-1x1', 'bg-1x1'], + category: 'Maps / Flags', + palette: true + }, + 'circle-flags': { + name: 'Circle Flags', + total: 434, + version: '1.0.0', + author: { name: 'HatScripts', url: 'https://github.com/HatScripts/circle-flags' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/HatScripts/circle-flags/blob/gh-pages/LICENSE' }, + samples: ['ee', 'klingon', 'jp', 'pl', 'fr', 'de'], + height: 32, + displayHeight: 16, + category: 'Maps / Flags', + palette: true + }, + flagpack: { + name: 'Flagpack', + total: 255, + version: '2.0.0', + author: { name: 'Yummygum', url: 'https://github.com/Yummygum/flagpack-core' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/Yummygum/flagpack-core/blob/main/LICENSE' }, + samples: ['ci', 'gb-ukm', 'wf', 'de', 'ie', 'th'], + height: 24, + category: 'Maps / Flags', + palette: true + }, + cif: { + name: 'CoreUI Flags', + total: 199, + version: '2.0.1', + author: { name: 'creativeLabs Łukasz Holeczek', url: 'https://github.com/coreui/coreui-icons' }, + license: { title: 'CC0 1.0', spdx: 'CC0-1.0', url: 'https://creativecommons.org/publicdomain/zero/1.0/' }, + samples: ['ee', 'ca', 'sk', 'pl', 'fr', 'de'], + category: 'Maps / Flags', + palette: true + }, + gis: { + name: 'Font-GIS', + total: 365, + version: '1.0.6', + author: { name: 'Jean-Marc Viglino', url: 'https://github.com/viglino/font-gis' }, + license: { + title: 'CC BY 4.0', + spdx: 'CC-BY-4.0', + url: 'https://github.com/Viglino/font-gis/blob/main/LICENSE-CC-BY.md' + }, + samples: ['layer-o', 'poi-o', 'bbox', 'flag-start', 'location-arrow-o', 'polygon'], + category: 'Maps / Flags', + palette: false + }, + map: { + name: 'Map Icons', + total: 167, + version: '3.0.2', + author: { name: 'Scott de Jonge', url: 'https://github.com/scottdejonge/map-icons' }, + license: { + title: 'Open Font License', + spdx: 'OFL-1.1', + url: 'https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL' + }, + samples: ['restaurant', 'real-estate-agency', 'wheelchair', 'storage', 'park', 'store'], + height: 25, + category: 'Maps / Flags', + palette: false + }, + geo: { + name: 'GeoGlyphs', + total: 30, + version: '0.0.10', + author: { name: 'Sam Matthews', url: 'https://github.com/cugos/geoglyphs' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/cugos/geoglyphs/blob/main/LICENSE.md' }, + samples: ['turf-center', 'turf-erased', 'turf-point-on-line', 'turf-destination', 'turf-envelope', 'turf-along'], + category: 'Maps / Flags', + palette: false + }, + 'vscode-icons': { + name: 'VSCode Icons', + total: 1297, + version: '12.8.0', + author: { name: 'Roberto Huertas', url: 'https://github.com/vscode-icons/vscode-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/vscode-icons/vscode-icons/blob/master/LICENSE' }, + samples: [ + 'file-type-actionscript2', + 'file-type-json', + 'file-type-manifest', + 'default-file', + 'file-type-diff', + 'default-folder' + ], + height: 32, + displayHeight: 16, + category: 'Programming', + palette: true + }, + codicon: { + name: 'Codicons', + total: 460, + version: '0.0.36', + author: { name: 'Microsoft Corporation', url: 'https://github.com/microsoft/vscode-codicons' }, + license: { + title: 'CC BY 4.0', + spdx: 'CC-BY-4.0', + url: 'https://github.com/microsoft/vscode-codicons/blob/main/LICENSE' + }, + samples: ['account', 'bell-dot', 'new-file', 'split-vertical', 'debug-pause', 'color-mode'], + category: 'Programming', + palette: false + }, + 'file-icons': { + name: 'File Icons', + total: 930, + author: { name: 'John Gardner', url: 'https://github.com/file-icons/icons' }, + license: { title: 'ISC', spdx: 'ISC', url: 'https://github.com/file-icons/icons/blob/master/LICENSE.md' }, + samples: ['adobe', 'chartjs', 'dom', 'yaml', 'font', 'npm'], + height: 16, + category: 'Programming', + palette: false + }, + devicon: { + name: 'Devicon', + total: 788, + author: { name: 'konpa', url: 'https://github.com/devicons/devicon/tree/master' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/devicons/devicon/blob/master/LICENSE' }, + samples: ['windows8', 'tensorflow', 'logstash', 'stackblitz', 'fsharp', 'vite'], + height: 32, + displayHeight: 16, + category: 'Programming', + palette: true + }, + 'devicon-plain': { + name: 'Devicon Plain', + total: 590, + author: { name: 'konpa', url: 'https://github.com/devicons/devicon/tree/master' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/devicons/devicon/blob/master/LICENSE' }, + samples: ['kotlin', 'bulma', 'logstash', 'flutter', 'vuejs', 'fsharp'], + height: 32, + displayHeight: 16, + category: 'Programming', + palette: false + }, + catppuccin: { + name: 'Catppuccin Icons', + total: 524, + author: { name: 'Catppuccin', url: 'https://github.com/catppuccin/vscode-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/catppuccin/vscode-icons/blob/main/LICENSE' }, + samples: ['folder', 'nuxt', 'vscode', 'amber', 'stackblitz', 'vercel'], + height: 24, + category: 'Programming', + palette: true + }, + 'skill-icons': { + name: 'Skill Icons', + total: 397, + author: { name: 'tandpfun', url: 'https://github.com/tandpfun/skill-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/tandpfun/skill-icons/blob/main/LICENSE' }, + samples: ['markdown-light', 'vuejs-dark', 'html', 'fastapi', 'vuejs-light', 'gamemakerstudio'], + height: 24, + category: 'Programming', + palette: true + }, + unjs: { + name: 'UnJS Logos', + total: 63, + author: { name: 'UnJS', url: 'https://github.com/unjs' }, + license: { title: 'Apache 2.0', spdx: 'Apache-2.0' }, + samples: ['nitro', 'jiti', 'unstorage', 'h3', 'defu', 'unbuild'], + height: 32, + displayHeight: 16, + category: 'Programming', + palette: true + }, + 'game-icons': { + name: 'Game Icons', + total: 4102, + author: { name: 'GameIcons', url: 'https://github.com/game-icons/icons' }, + license: { + title: 'CC BY 3.0', + spdx: 'CC-BY-3.0', + url: 'https://github.com/game-icons/icons/blob/master/license.txt' + }, + samples: ['diamond-trophy', 'thrown-spear', 'rank-3', 'stairs', 'table', 'soda-can'], + category: 'Thematic', + palette: false + }, + fad: { + name: 'FontAudio', + total: 155, + author: { name: '@fefanto', url: 'https://github.com/fefanto/fontaudio' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['shuffle', 'headphones', 'rew', 'cutter', 'mono', 'punch-in'], + height: 16, + category: 'Thematic', + palette: false + }, + academicons: { + name: 'Academicons', + total: 157, + version: '1.9.4', + author: { name: 'James Walsh', url: 'https://github.com/jpswalsh/academicons' }, + license: { + title: 'Open Font License', + spdx: 'OFL-1.1', + url: 'https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL' + }, + samples: ['conversation', 'crossref-square', 'stackoverflow', 'acclaim', 'hypothesis', 'inspire'], + height: 32, + displayHeight: 16, + category: 'Thematic', + palette: false + }, + wi: { + name: 'Weather Icons', + total: 219, + version: '2.0.12', + author: { name: 'Erik Flowers', url: 'https://github.com/erikflowers/weather-icons' }, + license: { + title: 'Open Font License', + spdx: 'OFL-1.1', + url: 'https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL' + }, + samples: ['day-hail', 'barometer', 'day-windy', 'moon-waning-crescent-2', 'direction-down-right', 'lightning'], + height: 30, + category: 'Thematic', + palette: false + }, + healthicons: { + name: 'Health Icons', + total: 1362, + version: '1.0.2', + author: { name: 'Resolve to Save Lives', url: 'https://github.com/resolvetosavelives/healthicons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/resolvetosavelives/healthicons/blob/main/LICENSE' }, + samples: ['cold-chain', 'emergency-post', 'asthma-outline', 'exercise', 'health-alt', 'heart'], + height: 48, + displayHeight: 24, + category: 'Thematic', + palette: false + }, + 'medical-icon': { + name: 'Medical Icons', + total: 144, + version: '1.0.0', + author: { name: 'Samuel Frémondière', url: 'https://github.com/samcome/webfont-medical-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/samcome/webfont-medical-icons/blob/master/LICENSE' }, + samples: ['i-care-staff-area', 'i-nursery', 'immunizations', 'i-chapel', 'stairs', 'health-services'], + category: 'Thematic', + palette: false + }, + covid: { + name: 'Covid Icons', + total: 142, + author: { name: 'Streamline', url: 'https://github.com/webalys-hq/streamline-vectors' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: [ + 'social-distancing-correct-2', + 'personal-hygiene-clean-toothpaste', + 'vaccine-protection-medicine-pill', + 'social-distancing-not-allowed-space-man', + 'graph-cured-increasing', + 'social-distancing-attention' + ], + height: 24, + category: 'Thematic', + palette: false + }, + la: { + name: 'Line Awesome', + total: 1544, + version: '1.2.1', + author: { name: 'Icons8', url: 'https://github.com/icons8/line-awesome' }, + license: { title: 'Apache 2.0', spdx: 'Apache-2.0', url: 'https://www.apache.org/licenses/LICENSE-2.0' }, + samples: ['archive-solid', 'female-solid', 'check-circle', 'bars', 'signal', 'columns'], + category: 'Archive / Unmaintained', + palette: false + }, + eva: { + name: 'Eva Icons', + total: 490, + version: '1.1.3', + author: { name: 'Akveo', url: 'https://github.com/akveo/eva-icons/' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/akveo/eva-icons/blob/master/LICENSE.txt' }, + samples: [ + 'droplet-off-outline', + 'flash-fill', + 'printer-outline', + 'layout-fill', + 'radio-button-off-outline', + 'person-fill' + ], + height: 24, + category: 'Archive / Unmaintained', + palette: false + }, + dashicons: { + name: 'Dashicons', + total: 342, + version: '0.9.0', + author: { name: 'WordPress', url: 'https://github.com/WordPress/dashicons' }, + license: { + title: 'GPL', + spdx: 'GPL-2.0-or-later', + url: 'https://github.com/WordPress/dashicons/blob/master/gpl.txt' + }, + samples: ['shortcode', 'businessperson', 'editor-expand', 'sort', 'category', 'columns'], + height: 20, + category: 'Archive / Unmaintained', + palette: false + }, + 'flat-color-icons': { + name: 'Flat Color Icons', + total: 329, + version: '1.0.2', + author: { name: 'Icons8', url: 'https://github.com/icons8/flat-Color-icons' }, + license: { title: 'MIT', spdx: 'MIT' }, + samples: ['edit-image', 'donate', 'planner', 'expand', 'music', 'checkmark'], + height: 48, + displayHeight: 24, + category: 'Archive / Unmaintained', + palette: true + }, + entypo: { + name: 'Entypo+', + total: 321, + author: { name: 'Daniel Bruce', url: 'https://github.com/chancancode/entypo-plus' }, + license: { title: 'CC BY-SA 4.0', spdx: 'CC-BY-SA-4.0', url: 'https://creativecommons.org/licenses/by-sa/4.0/' }, + samples: ['bell', 'image', 'erase', 'select-arrows', 'bookmark', 'swap'], + height: 20, + category: 'Archive / Unmaintained', + palette: false + }, + foundation: { + name: 'Foundation', + total: 283, + version: '3.0.0', + author: { name: 'Zurb', url: 'https://github.com/zurb/foundation-icon-fonts' }, + license: { title: 'MIT', spdx: 'MIT' }, + samples: ['graph-trend', 'indent-more', 'lock', 'contrast', 'page', 'mobile'], + category: 'Archive / Unmaintained', + palette: false + }, + raphael: { + name: 'Raphael', + total: 266, + author: { name: 'Dmitry Baranovskiy', url: 'https://github.com/dmitrybaranovskiy/raphael' }, + license: { title: 'MIT', spdx: 'MIT' }, + samples: ['home', 'cloud', 'parent', 'inbox', 'volume0', 'check'], + height: 32, + displayHeight: 16, + category: 'Archive / Unmaintained', + palette: false + }, + icons8: { + name: 'Icons8 Windows 10 Icons', + total: 234, + version: '1.0.0', + author: { name: 'Icons8', url: 'https://github.com/icons8/windows-10-icons' }, + license: { title: 'MIT', spdx: 'MIT' }, + samples: ['checked', 'create-new', 'group', 'columns', 'angle-left', 'monitor'], + category: 'Archive / Unmaintained', + palette: false + }, + iwwa: { + name: 'Innowatio Font', + total: 105, + version: '1.1.3', + author: { name: 'Innowatio', url: 'https://github.com/innowatio/iwwa-icons' }, + license: { title: 'Apache 2.0', spdx: 'Apache-2.0', url: 'https://www.apache.org/licenses/LICENSE-2.0' }, + samples: ['tag', 'settings', 'connection-o', 'flag', 'option', 'menu'], + category: 'Archive / Unmaintained', + palette: false + }, + 'heroicons-outline': { + name: 'HeroIcons v1 Outline', + total: 230, + version: '1.0.6', + author: { name: 'Refactoring UI Inc', url: 'https://github.com/tailwindlabs/heroicons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/tailwindlabs/heroicons/blob/master/LICENSE' }, + samples: ['color-swatch', 'library', 'receipt-refund', 'bookmark', 'cloud', 'folder'], + height: 24, + category: 'Archive / Unmaintained', + palette: false + }, + 'heroicons-solid': { + name: 'HeroIcons v1 Solid', + total: 230, + version: '1.0.6', + author: { name: 'Refactoring UI Inc', url: 'https://github.com/tailwindlabs/heroicons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/tailwindlabs/heroicons/blob/master/LICENSE' }, + samples: ['color-swatch', 'library', 'receipt-refund', 'bookmark', 'cloud', 'folder'], + height: 20, + category: 'Archive / Unmaintained', + palette: false + }, + 'fa-solid': { + name: 'Font Awesome 5 Solid', + total: 1001, + version: '5.15.4', + author: { name: 'Dave Gandy', url: 'https://github.com/FortAwesome/Font-Awesome' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['search-plus', 'paste', 'comment-dots', 'bookmark', 'egg', 'volume-off'], + height: 32, + displayHeight: 16, + category: 'Archive / Unmaintained', + palette: false + }, + 'fa-regular': { + name: 'Font Awesome 5 Regular', + total: 151, + version: '5.15.4', + author: { name: 'Dave Gandy', url: 'https://github.com/FortAwesome/Font-Awesome' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['bell', 'comment', 'hand-point-left', 'bookmark', 'arrow-alt-circle-down', 'file'], + height: 32, + displayHeight: 16, + category: 'Archive / Unmaintained', + palette: false + }, + 'fa-brands': { + name: 'Font Awesome 5 Brands', + total: 457, + version: '5.15.4', + author: { name: 'Dave Gandy', url: 'https://github.com/FortAwesome/Font-Awesome' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['amazon', 'cc-visa', 'vuejs', 'chrome', 'strava', 'microsoft'], + height: 32, + displayHeight: 16, + category: 'Archive / Unmaintained', + palette: false + }, + fa: { + name: 'Font Awesome 4', + total: 678, + version: '4.7.0', + author: { name: 'Dave Gandy', url: 'https://github.com/FortAwesome/Font-Awesome/tree/fa-4' }, + license: { + title: 'Open Font License', + spdx: 'OFL-1.1', + url: 'https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL' + }, + samples: ['wrench', 'bell-o', 'user-o', 'area-chart', 'play', 'css3'], + category: 'Archive / Unmaintained', + palette: false + }, + 'fluent-mdl2': { + name: 'Fluent UI MDL2', + total: 1735, + author: { + name: 'Microsoft Corporation', + url: 'https://github.com/microsoft/fluentui/tree/master/packages/react-icons-mdl2' + }, + license: { + title: 'MIT', + spdx: 'MIT', + url: 'https://github.com/microsoft/fluentui/blob/master/packages/react-icons-mdl2/LICENSE' + }, + samples: ['flow', 'home', 'switch', 'caret-solid-16', 'accept', 'wind-direction'], + height: 32, + displayHeight: 16, + category: 'Archive / Unmaintained', + palette: false + }, + fontisto: { + name: 'Fontisto', + total: 615, + version: '3.0.4', + author: { name: 'Kenan Gündoğan', url: 'https://github.com/kenangundogan/fontisto' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/kenangundogan/fontisto/blob/master/LICENSE' }, + samples: ['prescription', 'heartbeat-alt', 'rain', 'navigate', 'filter', 'home'], + height: 24, + category: 'Archive / Unmaintained', + palette: false + }, + 'icomoon-free': { + name: 'IcoMoon Free', + total: 491, + author: { name: 'Keyamoon', url: 'https://github.com/Keyamoon/IcoMoon-Free' }, + license: { title: 'GPL', spdx: 'GPL-3.0-or-later', url: 'https://www.gnu.org/licenses/gpl.html' }, + samples: ['bubbles3', 'forward', 'volume-medium', 'play3', 'folder', 'bookmark'], + height: 16, + category: 'Archive / Unmaintained', + palette: false + }, + subway: { + name: 'Subway Icon Set', + total: 306, + author: { name: 'Mariusz Ostrowski', url: 'https://github.com/mariuszostrowski/subway' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://creativecommons.org/licenses/by/4.0/' }, + samples: ['call-2', 'power-batton', 'admin', 'backward', 'subtraction-1', 'file'], + height: 16, + category: 'Archive / Unmaintained', + palette: false + }, + oi: { + name: 'Open Iconic', + total: 223, + version: '1.1.1', + author: { name: 'Iconic', url: 'https://github.com/iconic/open-iconic' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/iconic/open-iconic/blob/master/ICON-LICENSE' }, + samples: ['bug', 'bullhorn', 'chat', 'media-play', 'eject', 'location'], + height: 8, + displayHeight: 16, + category: 'Archive / Unmaintained', + palette: false + }, + wpf: { + name: 'Icons8 Windows 8 Icons', + total: 200, + author: { name: 'Icons8', url: 'https://github.com/icons8/WPF-UI-Framework' }, + license: { title: 'MIT', spdx: 'MIT' }, + samples: ['check-file', 'add-image', 'geo-fence', 'clapperboard', 'message', 'building'], + height: 26, + category: 'Archive / Unmaintained', + palette: false + }, + 'simple-line-icons': { + name: 'Simple line icons', + total: 189, + version: '2.5.5', + author: { name: 'Sabbir Ahmed', url: 'https://github.com/thesabbir/simple-line-icons' }, + license: { + title: 'MIT', + spdx: 'MIT', + url: 'https://github.com/thesabbir/simple-line-icons/blob/master/LICENSE.md' + }, + samples: ['bubbles', 'camrecorder', 'cloud-upload', 'folder', 'arrow-left', 'docs'], + height: 32, + displayHeight: 16, + category: 'Archive / Unmaintained', + palette: false + }, + et: { + name: 'Elegant', + total: 100, + version: '1.0.1', + author: { name: 'Kenny Sing', url: 'https://github.com/pprince/etlinefont-bower' }, + license: { title: 'GPL 3.0', spdx: 'GPL-3.0-or-later', url: 'https://www.gnu.org/licenses/gpl.html' }, + samples: ['profile-female', 'ribbon', 'layers', 'tablet', 'scope', 'cloud'], + height: 32, + displayHeight: 16, + category: 'Archive / Unmaintained', + palette: false + }, + el: { + name: 'Elusive Icons', + total: 304, + version: '2.0.0', + author: { name: 'Team Redux', url: 'https://github.com/dovy/elusive-icons' }, + license: { + title: 'Open Font License', + spdx: 'OFL-1.1', + url: 'https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL' + }, + samples: ['headphones', 'cog', 'user', 'play', 'bookmark', 'delicious'], + category: 'Archive / Unmaintained', + palette: false + }, + vaadin: { + name: 'Vaadin Icons', + total: 636, + version: '4.3.2', + author: { name: 'Vaadin', url: 'https://github.com/vaadin/web-components' }, + license: { title: 'Apache 2.0', spdx: 'Apache-2.0' }, + samples: ['area-select', 'file-picture', 'plus-circle-o', 'angle-up', 'eject', 'enter-arrow'], + height: 32, + displayHeight: 16, + category: 'Archive / Unmaintained', + palette: false + }, + 'grommet-icons': { + name: 'Grommet Icons', + total: 634, + version: '4.12.1', + author: { name: 'Grommet', url: 'https://github.com/grommet/grommet-icons' }, + license: { title: 'Apache 2.0', spdx: 'Apache-2.0', url: 'https://www.apache.org/licenses/LICENSE-2.0' }, + samples: ['user-expert', 'action', 'home', 'more-vertical', 'waypoint', 'terminal'], + height: 24, + category: 'Archive / Unmaintained', + palette: false + }, + whh: { + name: 'WebHostingHub Glyphs', + total: 2125, + author: { name: 'WebHostingHub' }, + license: { + title: 'Open Font License', + spdx: 'OFL-1.1', + url: 'https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL' + }, + samples: ['addtags', 'brightness', 'circlecallincoming'], + palette: false, + hidden: true + }, + 'si-glyph': { + name: 'SmartIcons Glyph', + total: 799, + version: '0.0.2', + author: { name: 'SmartIcons' }, + license: { title: 'CC BY SA 4.0', spdx: 'CC-BY-SA-4.0', url: 'https://creativecommons.org/licenses/by-sa/4.0/' }, + samples: ['circle-load-left', 'basket-arrow-right', 'slide-show'], + palette: false, + hidden: true + }, + zmdi: { + name: 'Material Design Iconic Font', + total: 777, + author: { name: 'MDI Community', url: 'https://github.com/zavoloklom/material-design-iconic-font' }, + license: { title: 'Open Font License', spdx: 'OFL-1.1' }, + samples: ['alarm-snooze', 'cloud-off', 'library'], + palette: false, + hidden: true + }, + ls: { + name: 'Ligature Symbols', + total: 348, + author: { name: 'Kazuyuki Motoyama', url: 'https://github.com/kudakurage/LigatureSymbols' }, + license: { + title: 'Open Font License', + spdx: 'OFL-1.1', + url: 'https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL' + }, + samples: ['bad', 'search', 'bag'], + palette: false, + hidden: true + }, + bpmn: { + name: 'BPMN', + total: 112, + version: '0.10.0', + author: { name: 'Camunda Services GmbH', url: 'https://github.com/bpmn-io/bpmn-font' }, + license: { + title: 'Open Font License', + spdx: 'OFL-1.1', + url: 'https://github.com/bpmn-io/bpmn-font/blob/master/LICENSE' + }, + samples: ['intermediate-event-catch-non-interrupting-escalation', 'user', 'lane-insert-above'], + displayHeight: 24, + palette: false, + hidden: true + }, + 'flat-ui': { + name: 'Flat UI Icons', + total: 100, + author: { name: 'Designmodo, Inc.', url: 'https://github.com/designmodo/Flat-UI' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/designmodo/Flat-UI/blob/master/LICENSE' }, + samples: ['map', 'graph', 'imac'], + palette: true, + hidden: true + }, + vs: { + name: 'Vesper Icons', + total: 159, + version: '5.11.2', + author: { name: 'TableCheck', url: 'https://github.com/kkvesper/vesper-icons' }, + license: { + title: 'Open Font License', + spdx: 'OFL-1.1', + url: 'https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL' + }, + samples: ['edit-page', 'kakao-square', 'person'], + palette: false, + hidden: true + }, + topcoat: { + name: 'TopCoat Icons', + total: 89, + version: '0.2.0', + author: { name: 'TopCoat', url: 'https://github.com/topcoat/icons' }, + license: { title: 'Apache 2.0', spdx: 'Apache-2.0', url: 'https://github.com/topcoat/icons/blob/master/LICENSE' }, + samples: ['wifi', 'feedback', 'pencil'], + palette: false, + hidden: true + }, + il: { + name: 'Icalicons', + total: 84, + version: '0.0.1', + author: { name: 'Icalia Labs' }, + license: { title: 'MIT', spdx: 'MIT' }, + samples: ['calendar', 'users', 'conversation'], + palette: false, + hidden: true + }, + websymbol: { + name: 'Web Symbols Liga', + total: 85, + author: { name: 'Just Be Nice studio' }, + license: { + title: 'Open Font License', + spdx: 'OFL-1.1', + url: 'https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL' + }, + samples: ['clock', 'resize-full-circle', 'tag'], + palette: false, + hidden: true + }, + fontelico: { + name: 'Fontelico', + total: 34, + author: { name: 'Fontello', url: 'https://github.com/fontello/fontelico.font' }, + license: { title: 'CC BY SA', spdx: 'CC-BY-SA-3.0', url: 'https://creativecommons.org/licenses/by-sa/3.0/' }, + samples: ['spin5', 'emo-sunglasses', 'crown-plus'], + displayHeight: 20, + palette: false, + hidden: true + }, + ps: { + name: 'PrestaShop Icons', + total: 479, + author: { name: 'PrestaShop', url: 'https://github.com/PrestaShop/prestashop-icon-font' }, + license: { title: 'CC BY-NC 4.0', spdx: 'CC-BY-NC-4.0', url: 'https://creativecommons.org/licenses/by-nc/4.0/' }, + samples: ['bell', 'girl', 'home'], + palette: false, + hidden: true + }, + feather: { + name: 'Feather Icons', + total: 286, + author: { name: 'Cole Bemis', url: 'https://github.com/feathericons/feather' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/feathericons/feather/blob/master/LICENSE' }, + samples: ['check-circle', 'award', 'home'], + height: 24, + palette: false, + hidden: true + }, + 'mono-icons': { + name: 'Mono Icons', + total: 180, + version: '1.3.1', + author: { name: 'Mono', url: 'https://github.com/mono-company/mono-icons' }, + license: { title: 'MIT', spdx: 'MIT', url: 'https://github.com/mono-company/mono-icons/blob/master/LICENSE.md' }, + samples: ['user', 'log-in', 'play'], + height: 24, + palette: false, + hidden: true + }, + pepicons: { + name: 'Pepicons', + total: 428, + version: '1.2.7', + author: { name: 'CyCraft', url: 'https://github.com/CyCraft/pepicons' }, + license: { title: 'CC BY 4.0', spdx: 'CC-BY-4.0', url: 'https://github.com/CyCraft/pepicons/blob/dev/LICENSE' }, + samples: ['bookmark-print', 'moon', 'pen-print'], + displayHeight: 20, + palette: false, + hidden: true + } +} + +export const icons = { + prefix: 'bi', + total: 2050, + title: 'Bootstrap Icons', + uncategorized: [ + '0-circle', + '0-circle-fill', + '0-square', + '0-square-fill', + '1-circle', + '1-circle-fill', + '1-square', + '1-square-fill', + '123', + '2-circle', + '2-circle-fill', + '2-square', + '2-square-fill', + '3-circle', + '3-circle-fill', + '3-square', + '3-square-fill', + '4-circle', + '4-circle-fill', + '4-square', + '4-square-fill', + '5-circle', + '5-circle-fill', + '5-square', + '5-square-fill', + '6-circle', + '6-circle-fill', + '6-square', + '6-square-fill', + '7-circle', + '7-circle-fill', + '7-square', + '7-square-fill', + '8-circle', + '8-circle-fill', + '8-square', + '8-square-fill', + '9-circle', + '9-circle-fill', + '9-square', + '9-square-fill', + 'activity', + 'airplane', + 'airplane-engines', + 'airplane-engines-fill', + 'airplane-fill', + 'alarm', + 'alarm-fill', + 'alexa', + 'align-bottom', + 'align-center', + 'align-end', + 'align-middle', + 'align-start', + 'align-top', + 'alipay', + 'alphabet', + 'alphabet-uppercase', + 'alt', + 'amazon', + 'amd', + 'android', + 'android2', + 'app', + 'app-indicator', + 'apple', + 'archive', + 'archive-fill', + 'arrow-90deg-down', + 'arrow-90deg-left', + 'arrow-90deg-right', + 'arrow-90deg-up', + 'arrow-bar-down', + 'arrow-bar-left', + 'arrow-bar-right', + 'arrow-bar-up', + 'arrow-clockwise', + 'arrow-counterclockwise', + 'arrow-down', + 'arrow-down-circle', + 'arrow-down-circle-fill', + 'arrow-down-left', + 'arrow-down-left-circle', + 'arrow-down-left-circle-fill', + 'arrow-down-left-square', + 'arrow-down-left-square-fill', + 'arrow-down-right', + 'arrow-down-right-circle', + 'arrow-down-right-circle-fill', + 'arrow-down-right-square', + 'arrow-down-right-square-fill', + 'arrow-down-short', + 'arrow-down-square', + 'arrow-down-square-fill', + 'arrow-down-up', + 'arrow-left', + 'arrow-left-circle', + 'arrow-left-circle-fill', + 'arrow-left-right', + 'arrow-left-short', + 'arrow-left-square', + 'arrow-left-square-fill', + 'arrow-repeat', + 'arrow-return-left', + 'arrow-return-right', + 'arrow-right', + 'arrow-right-circle', + 'arrow-right-circle-fill', + 'arrow-right-short', + 'arrow-right-square', + 'arrow-right-square-fill', + 'arrow-through-heart', + 'arrow-through-heart-fill', + 'arrow-up', + 'arrow-up-circle', + 'arrow-up-circle-fill', + 'arrow-up-left', + 'arrow-up-left-circle', + 'arrow-up-left-circle-fill', + 'arrow-up-left-square', + 'arrow-up-left-square-fill', + 'arrow-up-right', + 'arrow-up-right-circle', + 'arrow-up-right-circle-fill', + 'arrow-up-right-square', + 'arrow-up-right-square-fill', + 'arrow-up-short', + 'arrow-up-square', + 'arrow-up-square-fill', + 'arrows', + 'arrows-angle-contract', + 'arrows-angle-expand', + 'arrows-collapse', + 'arrows-collapse-vertical', + 'arrows-expand', + 'arrows-expand-vertical', + 'arrows-fullscreen', + 'arrows-move', + 'arrows-vertical', + 'aspect-ratio', + 'aspect-ratio-fill', + 'asterisk', + 'at', + 'award', + 'award-fill', + 'back', + 'backpack', + 'backpack-fill', + 'backpack2', + 'backpack2-fill', + 'backpack3', + 'backpack3-fill', + 'backpack4', + 'backpack4-fill', + 'backspace', + 'backspace-fill', + 'backspace-reverse', + 'backspace-reverse-fill', + 'badge-3d', + 'badge-3d-fill', + 'badge-4k', + 'badge-4k-fill', + 'badge-8k', + 'badge-8k-fill', + 'badge-ad', + 'badge-ad-fill', + 'badge-ar', + 'badge-ar-fill', + 'badge-cc', + 'badge-cc-fill', + 'badge-hd', + 'badge-hd-fill', + 'badge-sd', + 'badge-sd-fill', + 'badge-tm', + 'badge-tm-fill', + 'badge-vo', + 'badge-vo-fill', + 'badge-vr', + 'badge-vr-fill', + 'badge-wc', + 'badge-wc-fill', + 'bag', + 'bag-check', + 'bag-check-fill', + 'bag-dash', + 'bag-dash-fill', + 'bag-fill', + 'bag-heart', + 'bag-heart-fill', + 'bag-plus', + 'bag-plus-fill', + 'bag-x', + 'bag-x-fill', + 'balloon', + 'balloon-fill', + 'balloon-heart', + 'balloon-heart-fill', + 'ban', + 'ban-fill', + 'bandaid', + 'bandaid-fill', + 'bank', + 'bank2', + 'bar-chart', + 'bar-chart-fill', + 'bar-chart-line', + 'bar-chart-line-fill', + 'bar-chart-steps', + 'basket', + 'basket-fill', + 'basket2', + 'basket2-fill', + 'basket3', + 'basket3-fill', + 'battery', + 'battery-charging', + 'battery-full', + 'battery-half', + 'behance', + 'bell', + 'bell-fill', + 'bell-slash', + 'bell-slash-fill', + 'bezier', + 'bezier2', + 'bicycle', + 'bing', + 'binoculars', + 'binoculars-fill', + 'blockquote-left', + 'blockquote-right', + 'bluetooth', + 'body-text', + 'book', + 'book-fill', + 'book-half', + 'bookmark', + 'bookmark-check', + 'bookmark-check-fill', + 'bookmark-dash', + 'bookmark-dash-fill', + 'bookmark-fill', + 'bookmark-heart', + 'bookmark-heart-fill', + 'bookmark-plus', + 'bookmark-plus-fill', + 'bookmark-star', + 'bookmark-star-fill', + 'bookmark-x', + 'bookmark-x-fill', + 'bookmarks', + 'bookmarks-fill', + 'bookshelf', + 'boombox', + 'boombox-fill', + 'bootstrap', + 'bootstrap-fill', + 'bootstrap-reboot', + 'border', + 'border-all', + 'border-bottom', + 'border-center', + 'border-inner', + 'border-left', + 'border-middle', + 'border-outer', + 'border-right', + 'border-style', + 'border-top', + 'border-width', + 'bounding-box', + 'bounding-box-circles', + 'box', + 'box-arrow-down', + 'box-arrow-down-left', + 'box-arrow-down-right', + 'box-arrow-in-down', + 'box-arrow-in-down-left', + 'box-arrow-in-down-right', + 'box-arrow-in-left', + 'box-arrow-in-right', + 'box-arrow-in-up', + 'box-arrow-in-up-left', + 'box-arrow-in-up-right', + 'box-arrow-left', + 'box-arrow-right', + 'box-arrow-up', + 'box-arrow-up-left', + 'box-arrow-up-right', + 'box-fill', + 'box-seam', + 'box-seam-fill', + 'box2', + 'box2-fill', + 'box2-heart', + 'box2-heart-fill', + 'boxes', + 'braces', + 'braces-asterisk', + 'bricks', + 'briefcase', + 'briefcase-fill', + 'brightness-alt-high', + 'brightness-alt-high-fill', + 'brightness-alt-low', + 'brightness-alt-low-fill', + 'brightness-high', + 'brightness-high-fill', + 'brightness-low', + 'brightness-low-fill', + 'brilliance', + 'broadcast', + 'broadcast-pin', + 'browser-chrome', + 'browser-edge', + 'browser-firefox', + 'browser-safari', + 'brush', + 'brush-fill', + 'bucket', + 'bucket-fill', + 'bug', + 'bug-fill', + 'building', + 'building-add', + 'building-check', + 'building-dash', + 'building-down', + 'building-exclamation', + 'building-fill', + 'building-fill-add', + 'building-fill-check', + 'building-fill-dash', + 'building-fill-down', + 'building-fill-exclamation', + 'building-fill-gear', + 'building-fill-lock', + 'building-fill-slash', + 'building-fill-up', + 'building-fill-x', + 'building-gear', + 'building-lock', + 'building-slash', + 'building-up', + 'building-x', + 'buildings', + 'buildings-fill', + 'bullseye', + 'bus-front', + 'bus-front-fill', + 'c-circle', + 'c-circle-fill', + 'c-square', + 'c-square-fill', + 'cake', + 'cake-fill', + 'cake2', + 'cake2-fill', + 'calculator', + 'calculator-fill', + 'calendar', + 'calendar-check', + 'calendar-check-fill', + 'calendar-date', + 'calendar-date-fill', + 'calendar-day', + 'calendar-day-fill', + 'calendar-event', + 'calendar-event-fill', + 'calendar-fill', + 'calendar-heart', + 'calendar-heart-fill', + 'calendar-minus', + 'calendar-minus-fill', + 'calendar-month', + 'calendar-month-fill', + 'calendar-plus', + 'calendar-plus-fill', + 'calendar-range', + 'calendar-range-fill', + 'calendar-week', + 'calendar-week-fill', + 'calendar-x', + 'calendar-x-fill', + 'calendar2', + 'calendar2-check', + 'calendar2-check-fill', + 'calendar2-date', + 'calendar2-date-fill', + 'calendar2-day', + 'calendar2-day-fill', + 'calendar2-event', + 'calendar2-event-fill', + 'calendar2-fill', + 'calendar2-heart', + 'calendar2-heart-fill', + 'calendar2-minus', + 'calendar2-minus-fill', + 'calendar2-month', + 'calendar2-month-fill', + 'calendar2-plus', + 'calendar2-plus-fill', + 'calendar2-range', + 'calendar2-range-fill', + 'calendar2-week', + 'calendar2-week-fill', + 'calendar2-x', + 'calendar2-x-fill', + 'calendar3', + 'calendar3-event', + 'calendar3-event-fill', + 'calendar3-fill', + 'calendar3-range', + 'calendar3-range-fill', + 'calendar3-week', + 'calendar3-week-fill', + 'calendar4', + 'calendar4-event', + 'calendar4-range', + 'calendar4-week', + 'camera', + 'camera-fill', + 'camera-reels', + 'camera-reels-fill', + 'camera-video', + 'camera-video-fill', + 'camera-video-off', + 'camera-video-off-fill', + 'camera2', + 'capslock', + 'capslock-fill', + 'capsule', + 'capsule-pill', + 'car-front', + 'car-front-fill', + 'card-checklist', + 'card-heading', + 'card-image', + 'card-list', + 'card-text', + 'caret-down', + 'caret-down-fill', + 'caret-down-square', + 'caret-down-square-fill', + 'caret-left', + 'caret-left-fill', + 'caret-left-square', + 'caret-left-square-fill', + 'caret-right', + 'caret-right-fill', + 'caret-right-square', + 'caret-right-square-fill', + 'caret-up', + 'caret-up-fill', + 'caret-up-square', + 'caret-up-square-fill', + 'cart', + 'cart-check', + 'cart-check-fill', + 'cart-dash', + 'cart-dash-fill', + 'cart-fill', + 'cart-plus', + 'cart-plus-fill', + 'cart-x', + 'cart-x-fill', + 'cart2', + 'cart3', + 'cart4', + 'cash', + 'cash-coin', + 'cash-stack', + 'cassette', + 'cassette-fill', + 'cast', + 'cc-circle', + 'cc-circle-fill', + 'cc-square', + 'cc-square-fill', + 'chat', + 'chat-dots', + 'chat-dots-fill', + 'chat-fill', + 'chat-heart', + 'chat-heart-fill', + 'chat-left', + 'chat-left-dots', + 'chat-left-dots-fill', + 'chat-left-fill', + 'chat-left-heart', + 'chat-left-heart-fill', + 'chat-left-quote', + 'chat-left-quote-fill', + 'chat-left-text', + 'chat-left-text-fill', + 'chat-quote', + 'chat-quote-fill', + 'chat-right', + 'chat-right-dots', + 'chat-right-dots-fill', + 'chat-right-fill', + 'chat-right-heart', + 'chat-right-heart-fill', + 'chat-right-quote', + 'chat-right-quote-fill', + 'chat-right-text', + 'chat-right-text-fill', + 'chat-square', + 'chat-square-dots', + 'chat-square-dots-fill', + 'chat-square-fill', + 'chat-square-heart', + 'chat-square-heart-fill', + 'chat-square-quote', + 'chat-square-quote-fill', + 'chat-square-text', + 'chat-square-text-fill', + 'chat-text', + 'chat-text-fill', + 'check', + 'check-all', + 'check-circle', + 'check-circle-fill', + 'check-lg', + 'check-square', + 'check-square-fill', + 'check2', + 'check2-all', + 'check2-circle', + 'check2-square', + 'chevron-bar-contract', + 'chevron-bar-down', + 'chevron-bar-expand', + 'chevron-bar-left', + 'chevron-bar-right', + 'chevron-bar-up', + 'chevron-compact-down', + 'chevron-compact-left', + 'chevron-compact-right', + 'chevron-compact-up', + 'chevron-contract', + 'chevron-double-down', + 'chevron-double-left', + 'chevron-double-right', + 'chevron-double-up', + 'chevron-down', + 'chevron-expand', + 'chevron-left', + 'chevron-right', + 'chevron-up', + 'circle', + 'circle-fill', + 'circle-half', + 'circle-square', + 'clipboard', + 'clipboard-check', + 'clipboard-check-fill', + 'clipboard-data', + 'clipboard-data-fill', + 'clipboard-fill', + 'clipboard-heart', + 'clipboard-heart-fill', + 'clipboard-minus', + 'clipboard-minus-fill', + 'clipboard-plus', + 'clipboard-plus-fill', + 'clipboard-pulse', + 'clipboard-x', + 'clipboard-x-fill', + 'clipboard2', + 'clipboard2-check', + 'clipboard2-check-fill', + 'clipboard2-data', + 'clipboard2-data-fill', + 'clipboard2-fill', + 'clipboard2-heart', + 'clipboard2-heart-fill', + 'clipboard2-minus', + 'clipboard2-minus-fill', + 'clipboard2-plus', + 'clipboard2-plus-fill', + 'clipboard2-pulse', + 'clipboard2-pulse-fill', + 'clipboard2-x', + 'clipboard2-x-fill', + 'clock', + 'clock-fill', + 'clock-history', + 'cloud', + 'cloud-arrow-down', + 'cloud-arrow-down-fill', + 'cloud-arrow-up', + 'cloud-arrow-up-fill', + 'cloud-check', + 'cloud-check-fill', + 'cloud-download', + 'cloud-download-fill', + 'cloud-drizzle', + 'cloud-drizzle-fill', + 'cloud-fill', + 'cloud-fog', + 'cloud-fog-fill', + 'cloud-fog2', + 'cloud-fog2-fill', + 'cloud-hail', + 'cloud-hail-fill', + 'cloud-haze', + 'cloud-haze-fill', + 'cloud-haze2', + 'cloud-haze2-fill', + 'cloud-lightning', + 'cloud-lightning-fill', + 'cloud-lightning-rain', + 'cloud-lightning-rain-fill', + 'cloud-minus', + 'cloud-minus-fill', + 'cloud-moon', + 'cloud-moon-fill', + 'cloud-plus', + 'cloud-plus-fill', + 'cloud-rain', + 'cloud-rain-fill', + 'cloud-rain-heavy', + 'cloud-rain-heavy-fill', + 'cloud-slash', + 'cloud-slash-fill', + 'cloud-sleet', + 'cloud-sleet-fill', + 'cloud-snow', + 'cloud-snow-fill', + 'cloud-sun', + 'cloud-sun-fill', + 'cloud-upload', + 'cloud-upload-fill', + 'clouds', + 'clouds-fill', + 'cloudy', + 'cloudy-fill', + 'code', + 'code-slash', + 'code-square', + 'coin', + 'collection', + 'collection-fill', + 'collection-play', + 'collection-play-fill', + 'columns', + 'columns-gap', + 'command', + 'compass', + 'compass-fill', + 'cone', + 'cone-striped', + 'controller', + 'cookie', + 'copy', + 'cpu', + 'cpu-fill', + 'credit-card', + 'credit-card-2-back', + 'credit-card-2-back-fill', + 'credit-card-2-front', + 'credit-card-2-front-fill', + 'credit-card-fill', + 'crop', + 'crosshair', + 'crosshair2', + 'cup', + 'cup-fill', + 'cup-hot', + 'cup-hot-fill', + 'cup-straw', + 'currency-bitcoin', + 'currency-dollar', + 'currency-euro', + 'currency-exchange', + 'currency-pound', + 'currency-rupee', + 'currency-yen', + 'cursor', + 'cursor-fill', + 'cursor-text', + 'dash', + 'dash-circle', + 'dash-circle-dotted', + 'dash-circle-fill', + 'dash-lg', + 'dash-square', + 'dash-square-dotted', + 'dash-square-fill', + 'database', + 'database-add', + 'database-check', + 'database-dash', + 'database-down', + 'database-exclamation', + 'database-fill', + 'database-fill-add', + 'database-fill-check', + 'database-fill-dash', + 'database-fill-down', + 'database-fill-exclamation', + 'database-fill-gear', + 'database-fill-lock', + 'database-fill-slash', + 'database-fill-up', + 'database-fill-x', + 'database-gear', + 'database-lock', + 'database-slash', + 'database-up', + 'database-x', + 'device-hdd', + 'device-hdd-fill', + 'device-ssd', + 'device-ssd-fill', + 'diagram-2', + 'diagram-2-fill', + 'diagram-3', + 'diagram-3-fill', + 'diamond', + 'diamond-fill', + 'diamond-half', + 'dice-1', + 'dice-1-fill', + 'dice-2', + 'dice-2-fill', + 'dice-3', + 'dice-3-fill', + 'dice-4', + 'dice-4-fill', + 'dice-5', + 'dice-5-fill', + 'dice-6', + 'dice-6-fill', + 'disc', + 'disc-fill', + 'discord', + 'display', + 'display-fill', + 'displayport', + 'displayport-fill', + 'distribute-horizontal', + 'distribute-vertical', + 'door-closed', + 'door-closed-fill', + 'door-open', + 'door-open-fill', + 'dot', + 'download', + 'dpad', + 'dpad-fill', + 'dribbble', + 'dropbox', + 'droplet', + 'droplet-fill', + 'droplet-half', + 'duffle', + 'duffle-fill', + 'ear', + 'ear-fill', + 'earbuds', + 'easel', + 'easel-fill', + 'easel2', + 'easel2-fill', + 'easel3', + 'easel3-fill', + 'egg', + 'egg-fill', + 'egg-fried', + 'eject', + 'eject-fill', + 'emoji-angry', + 'emoji-angry-fill', + 'emoji-astonished', + 'emoji-astonished-fill', + 'emoji-dizzy', + 'emoji-dizzy-fill', + 'emoji-expressionless', + 'emoji-expressionless-fill', + 'emoji-frown', + 'emoji-frown-fill', + 'emoji-grimace', + 'emoji-grimace-fill', + 'emoji-grin', + 'emoji-grin-fill', + 'emoji-heart-eyes', + 'emoji-heart-eyes-fill', + 'emoji-kiss', + 'emoji-kiss-fill', + 'emoji-laughing', + 'emoji-laughing-fill', + 'emoji-neutral', + 'emoji-neutral-fill', + 'emoji-smile', + 'emoji-smile-fill', + 'emoji-smile-upside-down', + 'emoji-smile-upside-down-fill', + 'emoji-sunglasses', + 'emoji-sunglasses-fill', + 'emoji-surprise', + 'emoji-surprise-fill', + 'emoji-tear', + 'emoji-tear-fill', + 'emoji-wink', + 'emoji-wink-fill', + 'envelope', + 'envelope-arrow-down', + 'envelope-arrow-down-fill', + 'envelope-arrow-up', + 'envelope-arrow-up-fill', + 'envelope-at', + 'envelope-at-fill', + 'envelope-check', + 'envelope-check-fill', + 'envelope-dash', + 'envelope-dash-fill', + 'envelope-exclamation', + 'envelope-exclamation-fill', + 'envelope-fill', + 'envelope-heart', + 'envelope-heart-fill', + 'envelope-open', + 'envelope-open-fill', + 'envelope-open-heart', + 'envelope-open-heart-fill', + 'envelope-paper', + 'envelope-paper-fill', + 'envelope-paper-heart', + 'envelope-paper-heart-fill', + 'envelope-plus', + 'envelope-plus-fill', + 'envelope-slash', + 'envelope-slash-fill', + 'envelope-x', + 'envelope-x-fill', + 'eraser', + 'eraser-fill', + 'escape', + 'ethernet', + 'ev-front', + 'ev-front-fill', + 'ev-station', + 'ev-station-fill', + 'exclamation', + 'exclamation-circle', + 'exclamation-circle-fill', + 'exclamation-diamond', + 'exclamation-diamond-fill', + 'exclamation-lg', + 'exclamation-octagon', + 'exclamation-octagon-fill', + 'exclamation-square', + 'exclamation-square-fill', + 'exclamation-triangle', + 'exclamation-triangle-fill', + 'exclude', + 'explicit', + 'explicit-fill', + 'exposure', + 'eye', + 'eye-fill', + 'eye-slash', + 'eye-slash-fill', + 'eyedropper', + 'eyeglasses', + 'facebook', + 'fan', + 'fast-forward', + 'fast-forward-btn', + 'fast-forward-btn-fill', + 'fast-forward-circle', + 'fast-forward-circle-fill', + 'fast-forward-fill', + 'feather', + 'feather2', + 'file', + 'file-arrow-down', + 'file-arrow-down-fill', + 'file-arrow-up', + 'file-arrow-up-fill', + 'file-bar-graph', + 'file-bar-graph-fill', + 'file-binary', + 'file-binary-fill', + 'file-break', + 'file-break-fill', + 'file-check', + 'file-check-fill', + 'file-code', + 'file-code-fill', + 'file-diff', + 'file-diff-fill', + 'file-earmark', + 'file-earmark-arrow-down', + 'file-earmark-arrow-down-fill', + 'file-earmark-arrow-up', + 'file-earmark-arrow-up-fill', + 'file-earmark-bar-graph', + 'file-earmark-bar-graph-fill', + 'file-earmark-binary', + 'file-earmark-binary-fill', + 'file-earmark-break', + 'file-earmark-break-fill', + 'file-earmark-check', + 'file-earmark-check-fill', + 'file-earmark-code', + 'file-earmark-code-fill', + 'file-earmark-diff', + 'file-earmark-diff-fill', + 'file-earmark-easel', + 'file-earmark-easel-fill', + 'file-earmark-excel', + 'file-earmark-excel-fill', + 'file-earmark-fill', + 'file-earmark-font', + 'file-earmark-font-fill', + 'file-earmark-image', + 'file-earmark-image-fill', + 'file-earmark-lock', + 'file-earmark-lock-fill', + 'file-earmark-lock2', + 'file-earmark-lock2-fill', + 'file-earmark-medical', + 'file-earmark-medical-fill', + 'file-earmark-minus', + 'file-earmark-minus-fill', + 'file-earmark-music', + 'file-earmark-music-fill', + 'file-earmark-pdf', + 'file-earmark-pdf-fill', + 'file-earmark-person', + 'file-earmark-person-fill', + 'file-earmark-play', + 'file-earmark-play-fill', + 'file-earmark-plus', + 'file-earmark-plus-fill', + 'file-earmark-post', + 'file-earmark-post-fill', + 'file-earmark-ppt', + 'file-earmark-ppt-fill', + 'file-earmark-richtext', + 'file-earmark-richtext-fill', + 'file-earmark-ruled', + 'file-earmark-ruled-fill', + 'file-earmark-slides', + 'file-earmark-slides-fill', + 'file-earmark-spreadsheet', + 'file-earmark-spreadsheet-fill', + 'file-earmark-text', + 'file-earmark-text-fill', + 'file-earmark-word', + 'file-earmark-word-fill', + 'file-earmark-x', + 'file-earmark-x-fill', + 'file-earmark-zip', + 'file-earmark-zip-fill', + 'file-easel', + 'file-easel-fill', + 'file-excel', + 'file-excel-fill', + 'file-fill', + 'file-font', + 'file-font-fill', + 'file-image', + 'file-image-fill', + 'file-lock', + 'file-lock-fill', + 'file-lock2', + 'file-lock2-fill', + 'file-medical', + 'file-medical-fill', + 'file-minus', + 'file-minus-fill', + 'file-music', + 'file-music-fill', + 'file-pdf', + 'file-pdf-fill', + 'file-person', + 'file-person-fill', + 'file-play', + 'file-play-fill', + 'file-plus', + 'file-plus-fill', + 'file-post', + 'file-post-fill', + 'file-ppt', + 'file-ppt-fill', + 'file-richtext', + 'file-richtext-fill', + 'file-ruled', + 'file-ruled-fill', + 'file-slides', + 'file-slides-fill', + 'file-spreadsheet', + 'file-spreadsheet-fill', + 'file-text', + 'file-text-fill', + 'file-word', + 'file-word-fill', + 'file-x', + 'file-x-fill', + 'file-zip', + 'file-zip-fill', + 'files', + 'files-alt', + 'filetype-aac', + 'filetype-ai', + 'filetype-bmp', + 'filetype-cs', + 'filetype-css', + 'filetype-csv', + 'filetype-doc', + 'filetype-docx', + 'filetype-exe', + 'filetype-gif', + 'filetype-heic', + 'filetype-html', + 'filetype-java', + 'filetype-jpg', + 'filetype-js', + 'filetype-json', + 'filetype-jsx', + 'filetype-key', + 'filetype-m4p', + 'filetype-md', + 'filetype-mdx', + 'filetype-mov', + 'filetype-mp3', + 'filetype-mp4', + 'filetype-otf', + 'filetype-pdf', + 'filetype-php', + 'filetype-png', + 'filetype-ppt', + 'filetype-pptx', + 'filetype-psd', + 'filetype-py', + 'filetype-raw', + 'filetype-rb', + 'filetype-sass', + 'filetype-scss', + 'filetype-sh', + 'filetype-sql', + 'filetype-svg', + 'filetype-tiff', + 'filetype-tsx', + 'filetype-ttf', + 'filetype-txt', + 'filetype-wav', + 'filetype-woff', + 'filetype-xls', + 'filetype-xlsx', + 'filetype-xml', + 'filetype-yml', + 'film', + 'filter', + 'filter-circle', + 'filter-circle-fill', + 'filter-left', + 'filter-right', + 'filter-square', + 'filter-square-fill', + 'fingerprint', + 'fire', + 'flag', + 'flag-fill', + 'floppy', + 'floppy-fill', + 'floppy2', + 'floppy2-fill', + 'flower1', + 'flower2', + 'flower3', + 'folder', + 'folder-check', + 'folder-fill', + 'folder-minus', + 'folder-plus', + 'folder-symlink', + 'folder-symlink-fill', + 'folder-x', + 'folder2', + 'folder2-open', + 'fonts', + 'forward', + 'forward-fill', + 'front', + 'fuel-pump', + 'fuel-pump-diesel', + 'fuel-pump-diesel-fill', + 'fuel-pump-fill', + 'fullscreen', + 'fullscreen-exit', + 'funnel', + 'funnel-fill', + 'gear', + 'gear-fill', + 'gear-wide', + 'gear-wide-connected', + 'gem', + 'gender-ambiguous', + 'gender-female', + 'gender-male', + 'gender-neuter', + 'gender-trans', + 'geo', + 'geo-alt', + 'geo-alt-fill', + 'geo-fill', + 'gift', + 'gift-fill', + 'git', + 'github', + 'gitlab', + 'globe', + 'globe-americas', + 'globe-asia-australia', + 'globe-central-south-asia', + 'globe-europe-africa', + 'globe2', + 'google', + 'google-play', + 'gpu-card', + 'graph-down', + 'graph-down-arrow', + 'graph-up', + 'graph-up-arrow', + 'grid', + 'grid-1x2', + 'grid-1x2-fill', + 'grid-3x2', + 'grid-3x2-gap', + 'grid-3x2-gap-fill', + 'grid-3x3', + 'grid-3x3-gap', + 'grid-3x3-gap-fill', + 'grid-fill', + 'grip-horizontal', + 'grip-vertical', + 'h-circle', + 'h-circle-fill', + 'h-square', + 'h-square-fill', + 'hammer', + 'hand-index', + 'hand-index-fill', + 'hand-index-thumb', + 'hand-index-thumb-fill', + 'hand-thumbs-down', + 'hand-thumbs-down-fill', + 'hand-thumbs-up', + 'hand-thumbs-up-fill', + 'handbag', + 'handbag-fill', + 'hash', + 'hdd', + 'hdd-fill', + 'hdd-network', + 'hdd-network-fill', + 'hdd-rack', + 'hdd-rack-fill', + 'hdd-stack', + 'hdd-stack-fill', + 'hdmi', + 'hdmi-fill', + 'headphones', + 'headset', + 'headset-vr', + 'heart', + 'heart-arrow', + 'heart-fill', + 'heart-half', + 'heart-pulse', + 'heart-pulse-fill', + 'heartbreak', + 'heartbreak-fill', + 'hearts', + 'heptagon', + 'heptagon-fill', + 'heptagon-half', + 'hexagon', + 'hexagon-fill', + 'hexagon-half', + 'highlighter', + 'highlights', + 'hospital', + 'hospital-fill', + 'hourglass', + 'hourglass-bottom', + 'hourglass-split', + 'hourglass-top', + 'house', + 'house-add', + 'house-add-fill', + 'house-check', + 'house-check-fill', + 'house-dash', + 'house-dash-fill', + 'house-door', + 'house-door-fill', + 'house-down', + 'house-down-fill', + 'house-exclamation', + 'house-exclamation-fill', + 'house-fill', + 'house-gear', + 'house-gear-fill', + 'house-heart', + 'house-heart-fill', + 'house-lock', + 'house-lock-fill', + 'house-slash', + 'house-slash-fill', + 'house-up', + 'house-up-fill', + 'house-x', + 'house-x-fill', + 'houses', + 'houses-fill', + 'hr', + 'hurricane', + 'hypnotize', + 'image', + 'image-alt', + 'image-fill', + 'images', + 'inbox', + 'inbox-fill', + 'inboxes', + 'inboxes-fill', + 'incognito', + 'indent', + 'infinity', + 'info', + 'info-circle', + 'info-circle-fill', + 'info-lg', + 'info-square', + 'info-square-fill', + 'input-cursor', + 'input-cursor-text', + 'instagram', + 'intersect', + 'journal', + 'journal-album', + 'journal-arrow-down', + 'journal-arrow-up', + 'journal-bookmark', + 'journal-bookmark-fill', + 'journal-check', + 'journal-code', + 'journal-medical', + 'journal-minus', + 'journal-plus', + 'journal-richtext', + 'journal-text', + 'journal-x', + 'journals', + 'joystick', + 'justify', + 'justify-left', + 'justify-right', + 'kanban', + 'kanban-fill', + 'key', + 'key-fill', + 'keyboard', + 'keyboard-fill', + 'ladder', + 'lamp', + 'lamp-fill', + 'laptop', + 'laptop-fill', + 'layer-backward', + 'layer-forward', + 'layers', + 'layers-fill', + 'layers-half', + 'layout-sidebar', + 'layout-sidebar-inset', + 'layout-sidebar-inset-reverse', + 'layout-sidebar-reverse', + 'layout-split', + 'layout-text-sidebar', + 'layout-text-sidebar-reverse', + 'layout-text-window', + 'layout-text-window-reverse', + 'layout-three-columns', + 'layout-wtf', + 'life-preserver', + 'lightbulb', + 'lightbulb-fill', + 'lightbulb-off', + 'lightbulb-off-fill', + 'lightning', + 'lightning-charge', + 'lightning-charge-fill', + 'lightning-fill', + 'line', + 'link', + 'link-45deg', + 'linkedin', + 'list', + 'list-check', + 'list-columns', + 'list-columns-reverse', + 'list-nested', + 'list-ol', + 'list-stars', + 'list-task', + 'list-ul', + 'lock', + 'lock-fill', + 'luggage', + 'luggage-fill', + 'lungs', + 'lungs-fill', + 'magic', + 'magnet', + 'magnet-fill', + 'mailbox', + 'mailbox-flag', + 'mailbox2', + 'mailbox2-flag', + 'map', + 'map-fill', + 'markdown', + 'markdown-fill', + 'marker-tip', + 'mask', + 'mastodon', + 'medium', + 'megaphone', + 'megaphone-fill', + 'memory', + 'menu-app', + 'menu-app-fill', + 'menu-button', + 'menu-button-fill', + 'menu-button-wide', + 'menu-button-wide-fill', + 'menu-down', + 'menu-up', + 'messenger', + 'meta', + 'mic', + 'mic-fill', + 'mic-mute', + 'mic-mute-fill', + 'microsoft', + 'microsoft-teams', + 'minecart', + 'minecart-loaded', + 'modem', + 'modem-fill', + 'moisture', + 'moon', + 'moon-fill', + 'moon-stars', + 'moon-stars-fill', + 'mortarboard', + 'mortarboard-fill', + 'motherboard', + 'motherboard-fill', + 'mouse', + 'mouse-fill', + 'mouse2', + 'mouse2-fill', + 'mouse3', + 'mouse3-fill', + 'music-note', + 'music-note-beamed', + 'music-note-list', + 'music-player', + 'music-player-fill', + 'newspaper', + 'nintendo-switch', + 'node-minus', + 'node-minus-fill', + 'node-plus', + 'node-plus-fill', + 'noise-reduction', + 'nut', + 'nut-fill', + 'nvidia', + 'nvme', + 'nvme-fill', + 'octagon', + 'octagon-fill', + 'octagon-half', + 'opencollective', + 'optical-audio', + 'optical-audio-fill', + 'option', + 'outlet', + 'p-circle', + 'p-circle-fill', + 'p-square', + 'p-square-fill', + 'paint-bucket', + 'palette', + 'palette-fill', + 'palette2', + 'paperclip', + 'paragraph', + 'pass', + 'pass-fill', + 'passport', + 'passport-fill', + 'patch-check', + 'patch-check-fill', + 'patch-exclamation', + 'patch-exclamation-fill', + 'patch-minus', + 'patch-minus-fill', + 'patch-plus', + 'patch-plus-fill', + 'patch-question', + 'patch-question-fill', + 'pause', + 'pause-btn', + 'pause-btn-fill', + 'pause-circle', + 'pause-circle-fill', + 'pause-fill', + 'paypal', + 'pc', + 'pc-display', + 'pc-display-horizontal', + 'pc-horizontal', + 'pci-card', + 'pci-card-network', + 'pci-card-sound', + 'peace', + 'peace-fill', + 'pen', + 'pen-fill', + 'pencil', + 'pencil-fill', + 'pencil-square', + 'pentagon', + 'pentagon-fill', + 'pentagon-half', + 'people', + 'people-fill', + 'percent', + 'person', + 'person-add', + 'person-arms-up', + 'person-badge', + 'person-badge-fill', + 'person-bounding-box', + 'person-check', + 'person-check-fill', + 'person-circle', + 'person-dash', + 'person-dash-fill', + 'person-down', + 'person-exclamation', + 'person-fill', + 'person-fill-add', + 'person-fill-check', + 'person-fill-dash', + 'person-fill-down', + 'person-fill-exclamation', + 'person-fill-gear', + 'person-fill-lock', + 'person-fill-slash', + 'person-fill-up', + 'person-fill-x', + 'person-gear', + 'person-heart', + 'person-hearts', + 'person-lines-fill', + 'person-lock', + 'person-plus', + 'person-plus-fill', + 'person-raised-hand', + 'person-rolodex', + 'person-slash', + 'person-square', + 'person-standing', + 'person-standing-dress', + 'person-up', + 'person-vcard', + 'person-vcard-fill', + 'person-video', + 'person-video2', + 'person-video3', + 'person-walking', + 'person-wheelchair', + 'person-workspace', + 'person-x', + 'person-x-fill', + 'phone', + 'phone-fill', + 'phone-flip', + 'phone-landscape', + 'phone-landscape-fill', + 'phone-vibrate', + 'phone-vibrate-fill', + 'pie-chart', + 'pie-chart-fill', + 'piggy-bank', + 'piggy-bank-fill', + 'pin', + 'pin-angle', + 'pin-angle-fill', + 'pin-fill', + 'pin-map', + 'pin-map-fill', + 'pinterest', + 'pip', + 'pip-fill', + 'play', + 'play-btn', + 'play-btn-fill', + 'play-circle', + 'play-circle-fill', + 'play-fill', + 'playstation', + 'plug', + 'plug-fill', + 'plugin', + 'plus', + 'plus-circle', + 'plus-circle-dotted', + 'plus-circle-fill', + 'plus-lg', + 'plus-slash-minus', + 'plus-square', + 'plus-square-dotted', + 'plus-square-fill', + 'postage', + 'postage-fill', + 'postage-heart', + 'postage-heart-fill', + 'postcard', + 'postcard-fill', + 'postcard-heart', + 'postcard-heart-fill', + 'power', + 'prescription', + 'prescription2', + 'printer', + 'printer-fill', + 'projector', + 'projector-fill', + 'puzzle', + 'puzzle-fill', + 'qr-code', + 'qr-code-scan', + 'question', + 'question-circle', + 'question-circle-fill', + 'question-diamond', + 'question-diamond-fill', + 'question-lg', + 'question-octagon', + 'question-octagon-fill', + 'question-square', + 'question-square-fill', + 'quora', + 'quote', + 'r-circle', + 'r-circle-fill', + 'r-square', + 'r-square-fill', + 'radar', + 'radioactive', + 'rainbow', + 'receipt', + 'receipt-cutoff', + 'reception-0', + 'reception-1', + 'reception-2', + 'reception-3', + 'reception-4', + 'record', + 'record-btn', + 'record-btn-fill', + 'record-circle', + 'record-circle-fill', + 'record-fill', + 'record2', + 'record2-fill', + 'recycle', + 'reddit', + 'regex', + 'repeat', + 'repeat-1', + 'reply', + 'reply-all', + 'reply-all-fill', + 'reply-fill', + 'rewind', + 'rewind-btn', + 'rewind-btn-fill', + 'rewind-circle', + 'rewind-circle-fill', + 'rewind-fill', + 'robot', + 'rocket', + 'rocket-fill', + 'rocket-takeoff', + 'rocket-takeoff-fill', + 'router', + 'router-fill', + 'rss', + 'rss-fill', + 'rulers', + 'safe', + 'safe-fill', + 'safe2', + 'safe2-fill', + 'save', + 'save-fill', + 'save2', + 'save2-fill', + 'scissors', + 'scooter', + 'screwdriver', + 'sd-card', + 'sd-card-fill', + 'search', + 'search-heart', + 'search-heart-fill', + 'segmented-nav', + 'send', + 'send-arrow-down', + 'send-arrow-down-fill', + 'send-arrow-up', + 'send-arrow-up-fill', + 'send-check', + 'send-check-fill', + 'send-dash', + 'send-dash-fill', + 'send-exclamation', + 'send-exclamation-fill', + 'send-fill', + 'send-plus', + 'send-plus-fill', + 'send-slash', + 'send-slash-fill', + 'send-x', + 'send-x-fill', + 'server', + 'shadows', + 'share', + 'share-fill', + 'shield', + 'shield-check', + 'shield-exclamation', + 'shield-fill', + 'shield-fill-check', + 'shield-fill-exclamation', + 'shield-fill-minus', + 'shield-fill-plus', + 'shield-fill-x', + 'shield-lock', + 'shield-lock-fill', + 'shield-minus', + 'shield-plus', + 'shield-shaded', + 'shield-slash', + 'shield-slash-fill', + 'shield-x', + 'shift', + 'shift-fill', + 'shop', + 'shop-window', + 'shuffle', + 'sign-dead-end', + 'sign-dead-end-fill', + 'sign-do-not-enter', + 'sign-do-not-enter-fill', + 'sign-intersection', + 'sign-intersection-fill', + 'sign-intersection-side', + 'sign-intersection-side-fill', + 'sign-intersection-t', + 'sign-intersection-t-fill', + 'sign-intersection-y', + 'sign-intersection-y-fill', + 'sign-merge-left', + 'sign-merge-left-fill', + 'sign-merge-right', + 'sign-merge-right-fill', + 'sign-no-left-turn', + 'sign-no-left-turn-fill', + 'sign-no-parking', + 'sign-no-parking-fill', + 'sign-no-right-turn', + 'sign-no-right-turn-fill', + 'sign-railroad', + 'sign-railroad-fill', + 'sign-stop', + 'sign-stop-fill', + 'sign-stop-lights', + 'sign-stop-lights-fill', + 'sign-turn-left', + 'sign-turn-left-fill', + 'sign-turn-right', + 'sign-turn-right-fill', + 'sign-turn-slight-left', + 'sign-turn-slight-left-fill', + 'sign-turn-slight-right', + 'sign-turn-slight-right-fill', + 'sign-yield', + 'sign-yield-fill', + 'signal', + 'signpost', + 'signpost-2', + 'signpost-2-fill', + 'signpost-fill', + 'signpost-split', + 'signpost-split-fill', + 'sim', + 'sim-fill', + 'sim-slash', + 'sim-slash-fill', + 'sina-weibo', + 'skip-backward', + 'skip-backward-btn', + 'skip-backward-btn-fill', + 'skip-backward-circle', + 'skip-backward-circle-fill', + 'skip-backward-fill', + 'skip-end', + 'skip-end-btn', + 'skip-end-btn-fill', + 'skip-end-circle', + 'skip-end-circle-fill', + 'skip-end-fill', + 'skip-forward', + 'skip-forward-btn', + 'skip-forward-btn-fill', + 'skip-forward-circle', + 'skip-forward-circle-fill', + 'skip-forward-fill', + 'skip-start', + 'skip-start-btn', + 'skip-start-btn-fill', + 'skip-start-circle', + 'skip-start-circle-fill', + 'skip-start-fill', + 'skype', + 'slack', + 'slash', + 'slash-circle', + 'slash-circle-fill', + 'slash-lg', + 'slash-square', + 'slash-square-fill', + 'sliders', + 'sliders2', + 'sliders2-vertical', + 'smartwatch', + 'snapchat', + 'snow', + 'snow2', + 'snow3', + 'sort-alpha-down', + 'sort-alpha-down-alt', + 'sort-alpha-up', + 'sort-alpha-up-alt', + 'sort-down', + 'sort-down-alt', + 'sort-numeric-down', + 'sort-numeric-down-alt', + 'sort-numeric-up', + 'sort-numeric-up-alt', + 'sort-up', + 'sort-up-alt', + 'soundwave', + 'sourceforge', + 'speaker', + 'speaker-fill', + 'speedometer', + 'speedometer2', + 'spellcheck', + 'spotify', + 'square', + 'square-fill', + 'square-half', + 'stack', + 'stack-overflow', + 'star', + 'star-fill', + 'star-half', + 'stars', + 'steam', + 'stickies', + 'stickies-fill', + 'sticky', + 'sticky-fill', + 'stop', + 'stop-btn', + 'stop-btn-fill', + 'stop-circle', + 'stop-circle-fill', + 'stop-fill', + 'stoplights', + 'stoplights-fill', + 'stopwatch', + 'stopwatch-fill', + 'strava', + 'stripe', + 'subscript', + 'substack', + 'subtract', + 'suit-club', + 'suit-club-fill', + 'suit-diamond', + 'suit-diamond-fill', + 'suit-heart', + 'suit-heart-fill', + 'suit-spade', + 'suit-spade-fill', + 'suitcase', + 'suitcase-fill', + 'suitcase-lg', + 'suitcase-lg-fill', + 'suitcase2', + 'suitcase2-fill', + 'sun', + 'sun-fill', + 'sunglasses', + 'sunrise', + 'sunrise-fill', + 'sunset', + 'sunset-fill', + 'superscript', + 'symmetry-horizontal', + 'symmetry-vertical', + 'table', + 'tablet', + 'tablet-fill', + 'tablet-landscape', + 'tablet-landscape-fill', + 'tag', + 'tag-fill', + 'tags', + 'tags-fill', + 'taxi-front', + 'taxi-front-fill', + 'telegram', + 'telephone', + 'telephone-fill', + 'telephone-forward', + 'telephone-forward-fill', + 'telephone-inbound', + 'telephone-inbound-fill', + 'telephone-minus', + 'telephone-minus-fill', + 'telephone-outbound', + 'telephone-outbound-fill', + 'telephone-plus', + 'telephone-plus-fill', + 'telephone-x', + 'telephone-x-fill', + 'tencent-qq', + 'terminal', + 'terminal-dash', + 'terminal-fill', + 'terminal-plus', + 'terminal-split', + 'terminal-x', + 'text-center', + 'text-indent-left', + 'text-indent-right', + 'text-left', + 'text-paragraph', + 'text-right', + 'text-wrap', + 'textarea', + 'textarea-resize', + 'textarea-t', + 'thermometer', + 'thermometer-half', + 'thermometer-high', + 'thermometer-low', + 'thermometer-snow', + 'thermometer-sun', + 'threads', + 'threads-fill', + 'three-dots', + 'three-dots-vertical', + 'thunderbolt', + 'thunderbolt-fill', + 'ticket', + 'ticket-detailed', + 'ticket-detailed-fill', + 'ticket-fill', + 'ticket-perforated', + 'ticket-perforated-fill', + 'tiktok', + 'toggle-off', + 'toggle-on', + 'toggle2-off', + 'toggle2-on', + 'toggles', + 'toggles2', + 'tools', + 'tornado', + 'train-freight-front', + 'train-freight-front-fill', + 'train-front', + 'train-front-fill', + 'train-lightrail-front', + 'train-lightrail-front-fill', + 'translate', + 'transparency', + 'trash', + 'trash-fill', + 'trash2', + 'trash2-fill', + 'trash3', + 'trash3-fill', + 'tree', + 'tree-fill', + 'trello', + 'triangle', + 'triangle-fill', + 'triangle-half', + 'trophy', + 'trophy-fill', + 'tropical-storm', + 'truck', + 'truck-flatbed', + 'truck-front', + 'truck-front-fill', + 'tsunami', + 'tv', + 'tv-fill', + 'twitch', + 'twitter', + 'twitter-x', + 'type', + 'type-bold', + 'type-h1', + 'type-h2', + 'type-h3', + 'type-h4', + 'type-h5', + 'type-h6', + 'type-italic', + 'type-strikethrough', + 'type-underline', + 'ubuntu', + 'ui-checks', + 'ui-checks-grid', + 'ui-radios', + 'ui-radios-grid', + 'umbrella', + 'umbrella-fill', + 'unindent', + 'union', + 'unity', + 'universal-access', + 'universal-access-circle', + 'unlock', + 'unlock-fill', + 'upc', + 'upc-scan', + 'upload', + 'usb', + 'usb-c', + 'usb-c-fill', + 'usb-drive', + 'usb-drive-fill', + 'usb-fill', + 'usb-micro', + 'usb-micro-fill', + 'usb-mini', + 'usb-mini-fill', + 'usb-plug', + 'usb-plug-fill', + 'usb-symbol', + 'valentine', + 'valentine2', + 'vector-pen', + 'view-list', + 'view-stacked', + 'vignette', + 'vimeo', + 'vinyl', + 'vinyl-fill', + 'virus', + 'virus2', + 'voicemail', + 'volume-down', + 'volume-down-fill', + 'volume-mute', + 'volume-mute-fill', + 'volume-off', + 'volume-off-fill', + 'volume-up', + 'volume-up-fill', + 'vr', + 'wallet', + 'wallet-fill', + 'wallet2', + 'watch', + 'water', + 'webcam', + 'webcam-fill', + 'wechat', + 'whatsapp', + 'wifi', + 'wifi-1', + 'wifi-2', + 'wifi-off', + 'wikipedia', + 'wind', + 'window', + 'window-dash', + 'window-desktop', + 'window-dock', + 'window-fullscreen', + 'window-plus', + 'window-sidebar', + 'window-split', + 'window-stack', + 'window-x', + 'windows', + 'wordpress', + 'wrench', + 'wrench-adjustable', + 'wrench-adjustable-circle', + 'wrench-adjustable-circle-fill', + 'x', + 'x-circle', + 'x-circle-fill', + 'x-diamond', + 'x-diamond-fill', + 'x-lg', + 'x-octagon', + 'x-octagon-fill', + 'x-square', + 'x-square-fill', + 'xbox', + 'yelp', + 'yin-yang', + 'youtube', + 'zoom-in', + 'zoom-out' + ], + hidden: [ + 'patch-check-fll', + 'patch-exclamation-fll', + 'patch-minus-fll', + 'patch-plus-fll', + 'patch-question-fll', + 'wrench-adjustable-cricle' + ], + aliases: { + 'arrow-up-down': 'arrow-down-up', + 'check-box': 'check2-square', + 'cloud-haze-1': 'cloud-haze', + 'people-circle': 'person-circle', + 'ticket-perferated': 'ticket-perforated', + 'ticket-perferated-fill': 'ticket-perforated-fill' + } +} diff --git a/packages/toolbars/generate-code/src/Main.vue b/packages/toolbars/generate-code/src/Main.vue index 49892bd03f..0d5703c3f0 100644 --- a/packages/toolbars/generate-code/src/Main.vue +++ b/packages/toolbars/generate-code/src/Main.vue @@ -86,6 +86,23 @@ export default { const { getAllNestedBlocksSchema, generateAppCode } = getMetaApi('engine.service.generateCode') + /* 获得图表库资源列表 */ + const getIconCollections = async () => { + const iconsMap = {} + const icons = await getMetaApi(META_SERVICE.Http).post(`/app-center/api/icons/list`) + Array.isArray(icons) && + icons.forEach((collection) => { + for (let name in collection.icons) { + iconsMap[`${collection.name}:${name}`] = { + body: collection.icons[name].body, + width: collection.width, + height: collection.height + } + } + }) + return iconsMap + } + const getAllPageDetails = async (pageList) => { const detailPromise = pageList.map(({ id }) => getMetaApi(META_APP.AppManage).getPageById(id)) const detailList = await Promise.allSettled(detailPromise) @@ -120,6 +137,8 @@ export default { const list = pageDetailList.map((page) => getAllNestedBlocksSchema(page.page_content, fetchBlockSchema, blockSet)) const blocks = await Promise.allSettled(list) + const iconsMap = await getIconCollections() + const blockSchema = [] blocks.forEach((item) => { if (item.status === 'fulfilled' && Array.isArray(item.value)) { @@ -145,6 +164,7 @@ export default { blockSchema, // 物料数据 componentsMap: [...(appData.componentsMap || [])], + iconsMap, // 物料依赖 packages: [...(appData.packages || [])], meta: { diff --git a/packages/vue-generator/src/generator/generateApp.js b/packages/vue-generator/src/generator/generateApp.js index e4b360190c..8fe73f076e 100644 --- a/packages/vue-generator/src/generator/generateApp.js +++ b/packages/vue-generator/src/generator/generateApp.js @@ -10,7 +10,8 @@ import { formatCodePlugin, parseSchemaPlugin, genGlobalState, - appendElePlusStylePlugin + appendElePlusStylePlugin, + addIconAssetsPlugin } from '../plugins' import CodeGenerator from './codeGenerator' @@ -69,6 +70,10 @@ export function generateApp(config = {}) { transformEnd.push(appendElePlusStylePlugin(config?.customContext?.injectElementPlusStyle || {})) } + if (config?.customContext?.useIconifyIcon !== false) { + transform.push(addIconAssetsPlugin()) + } + const codeGenInstance = new CodeGenerator({ plugins: { transformStart: [parseSchema || defaultPlugins.parseSchema, ...transformStart], diff --git a/packages/vue-generator/src/generator/vue/sfc/genSetupSFC.js b/packages/vue-generator/src/generator/vue/sfc/genSetupSFC.js index 23d2dcee36..ede03a32c6 100644 --- a/packages/vue-generator/src/generator/vue/sfc/genSetupSFC.js +++ b/packages/vue-generator/src/generator/vue/sfc/genSetupSFC.js @@ -5,6 +5,7 @@ import { handleComponentNameHook, handleTinyGrid, handleTinyIcon, + handleIconifyIcon, handleExpressionChildren, validEmptyTemplateHook, handleSlotParams @@ -29,6 +30,7 @@ import { parsePropsHook, parseReactiveStateHook, addDefaultVueImport, + addPreviewIconImport, addDefaultVueI18nImport, handleProvideStatesContextHook, handleContextInjectHook, @@ -216,7 +218,7 @@ const generateSFCFile = (schema, componentsMap, config = {}, nextPage) => { export const genSFCWithDefaultPlugin = (schema, componentsMap, config = {}, nextPage) => { const { templateItemValidate = [], genTemplate = [], parseScript = [], genScript = {} } = config.hooks || {} - const defaultComponentHooks = [handleComponentNameHook, handleTinyIcon] + const defaultComponentHooks = [handleComponentNameHook, handleTinyIcon, handleIconifyIcon] const defaultAttributeHook = [ handleSlotParams, @@ -246,6 +248,11 @@ export const genSFCWithDefaultPlugin = (schema, componentsMap, config = {}, next handleContextInjectHook ] + // 区分是构建还是预览 + if (config.addPreviewIconImport) { + defaultParseScriptHook.push(addPreviewIconImport) + } + const { GEN_IMPORT, GEN_PROPS, GEN_EMIT, GEN_STATE, GEN_METHOD, GEN_LIFECYCLE } = GEN_SCRIPT_HOOKS const defaultGenScriptHooks = { [GEN_IMPORT]: defaultGenImportHook, diff --git a/packages/vue-generator/src/generator/vue/sfc/generateAttribute.js b/packages/vue-generator/src/generator/vue/sfc/generateAttribute.js index 2004628cfd..a5083a46e2 100644 --- a/packages/vue-generator/src/generator/vue/sfc/generateAttribute.js +++ b/packages/vue-generator/src/generator/vue/sfc/generateAttribute.js @@ -351,26 +351,32 @@ export const handleTinyIconPropsHook = (schemaData, globalHooks, config) => { Object.entries(props).forEach(([key, value]) => { if (value?.componentName === 'Icon' && value?.props?.name) { + // TinyIcon const name = value.props.name - const iconName = name.startsWith(TINY_ICON) ? name : `Tiny${name}` - const exportName = name.replace(TINY_ICON, 'icon') - const success = globalHooks.addImport('@opentiny/vue-icon', { - componentName: exportName, - exportName: exportName, - package: '@opentiny/vue-icon', - version: '^3.10.0', - destructuring: true - }) - if (success) { - globalHooks.addStatement({ - position: INSERT_POSITION.BEFORE_PROPS, - value: `const ${iconName} = ${exportName}()`, - key: iconName + if (name.includes(':')) { + // 略过iconify图标 + } else { + const iconName = name.startsWith(TINY_ICON) ? name : `Tiny${name}` + const exportName = name.replace(TINY_ICON, 'icon') + const success = globalHooks.addImport('@opentiny/vue-icon', { + componentName: exportName, + exportName: exportName, + package: '@opentiny/vue-icon', + version: '^3.10.0', + destructuring: true }) - } - attributes.push(isJSX ? `icon={${iconName}}` : `:icon="${iconName}"`) + if (success) { + globalHooks.addStatement({ + position: INSERT_POSITION.BEFORE_PROPS, + value: `const ${iconName} = ${exportName}()`, + key: iconName + }) + } + + attributes.push(isJSX ? `icon={${iconName}}` : `:icon="${iconName}"`) + } delete props[key] } diff --git a/packages/vue-generator/src/generator/vue/sfc/generateScript.js b/packages/vue-generator/src/generator/vue/sfc/generateScript.js index 16076a9eb0..dbcc9e8f5d 100644 --- a/packages/vue-generator/src/generator/vue/sfc/generateScript.js +++ b/packages/vue-generator/src/generator/vue/sfc/generateScript.js @@ -155,6 +155,13 @@ export const addDefaultVueI18nImport = (schema, globalHooks) => { componentName: 'I18nInjectionKey' }) } +export const addPreviewIconImport = (schema, globalHooks) => { + globalHooks.addImport('./Icon.vue', { + destructuring: false, + exportName: '', + componentName: 'Icon' + }) +} export const GEN_SCRIPT_HOOKS = { GEN_IMPORT: 'GEN_IMPORT', diff --git a/packages/vue-generator/src/generator/vue/sfc/generateTemplate.js b/packages/vue-generator/src/generator/vue/sfc/generateTemplate.js index f4ceddd6c3..3c985c0c0f 100644 --- a/packages/vue-generator/src/generator/vue/sfc/generateTemplate.js +++ b/packages/vue-generator/src/generator/vue/sfc/generateTemplate.js @@ -38,7 +38,8 @@ export const handleTinyIcon = (nameObj, globalHooks) => { const name = nameObj.schema.props.name - if (!name) { + if (!name || name.includes(':')) { + // 预览时不做处理,使用 return } @@ -66,6 +67,17 @@ export const handleTinyIcon = (nameObj, globalHooks) => { delete nameObj.schema.props.name } +export const handleIconifyIcon = (nameObj) => { + const name = nameObj.schema.props.name + if (!name) { + return + } + if (name.includes(':')) { + // Icon 出码时 转换格式 {prefix}-{collection}-{icon} + nameObj.componentName = `i-${name.replace(':', '-')}` + } +} + const handleTinyGridSlots = (value, globalHooks, config) => { if (!Array.isArray(value)) { return diff --git a/packages/vue-generator/src/plugins/addIconAssetsPlugin.js b/packages/vue-generator/src/plugins/addIconAssetsPlugin.js new file mode 100644 index 0000000000..de64809a73 --- /dev/null +++ b/packages/vue-generator/src/plugins/addIconAssetsPlugin.js @@ -0,0 +1,60 @@ +/* 遍历schema查询所有使用到的自定义图标 */ +function findUniqueIcons(Pages) { + const uniqueIcons = {} + + function traverse(node) { + if (node.componentName === 'Icon') { + const name = node.props.name + if (!uniqueIcons[name]) { + uniqueIcons[name] = node + } + } + + if (node.children) { + node.children.forEach(traverse) + } + } + + Pages.forEach((page) => traverse(page)) + + return Object.values(uniqueIcons) +} + +/* 生成svg文件 */ +function createSVG({ width, height, body }) { + return `` +} + +/* 生成自定义图标文件 */ +const addIconAssets = () => { + return { + name: 'importIconsFile', + description: '写入图标文件', + run(schema) { + const { iconsMap } = schema + const icons = findUniqueIcons(schema.pageSchema) + + const resPage = [] + + icons.forEach((icon) => { + if (icon.props.name.includes(':')) { + const collectionName = icon.props.name.split(':')[0] + const iconName = icon.props.name.split(':')[1] + + // 如果存在图标资源则写入文件 + if (iconsMap[`${collectionName}:${iconName}`]) { + resPage.push({ + fileType: 'svg', + fileName: `${iconName}.svg`, + path: `./src/assets/icons/${collectionName}`, + fileContent: createSVG(iconsMap[`${collectionName}:${iconName}`]) + }) + } + } + }) + return resPage + } + } +} + +export default addIconAssets diff --git a/packages/vue-generator/src/plugins/index.js b/packages/vue-generator/src/plugins/index.js index cfdfeab5a4..f933f56c45 100644 --- a/packages/vue-generator/src/plugins/index.js +++ b/packages/vue-generator/src/plugins/index.js @@ -10,3 +10,4 @@ export { default as formatCodePlugin } from './formatCodePlugin' export { default as genGlobalState } from './genGlobalState' export { default as parseSchemaPlugin } from './parseSchemaPlugin' export { default as appendElePlusStylePlugin } from './appendElePlusStylePlugin' +export { default as addIconAssetsPlugin } from './addIconAssetsPlugin' diff --git a/packages/vue-generator/src/templates/vue-template/index.js b/packages/vue-generator/src/templates/vue-template/index.js index 90577077dd..9b0954291d 100644 --- a/packages/vue-generator/src/templates/vue-template/index.js +++ b/packages/vue-generator/src/templates/vue-template/index.js @@ -91,7 +91,7 @@ export function generateTemplate(schema) { fileType: 'js', fileName: 'vite.config.js', path: '.', - fileContent: genViteConfig(schema) + fileContent: genViteConfig(schema, ['test', 'test2']) }, { fileType: 'json', diff --git a/packages/vue-generator/src/templates/vue-template/templateFiles/genViteConfig.js b/packages/vue-generator/src/templates/vue-template/templateFiles/genViteConfig.js index da9563182d..9a87739e30 100644 --- a/packages/vue-generator/src/templates/vue-template/templateFiles/genViteConfig.js +++ b/packages/vue-generator/src/templates/vue-template/templateFiles/genViteConfig.js @@ -1,20 +1,57 @@ -export default () => { +export default (schema, icons = []) => { // 避免在构建的时候,被 process. env 替换 const processStr = ['process', 'env'] + const createCollectionLoaders = (list) => { + return list.map((name) => `${name}:FileSystemIconLoader("src/assets/icons/${name}")`).join(',') + } + + const createCollectionNames = (list) => { + return list.map((name) => `'${name}'`).join(',') + } + const res = ` import { defineConfig } from 'vite' import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' - + + import Icons from "unplugin-icons/vite"; + import { FileSystemIconLoader } from "unplugin-icons/loaders"; + import IconsResolver from "unplugin-icons/resolver"; + import Components from "unplugin-vue-components/vite"; + export default defineConfig({ resolve: { alias: { '@': path.resolve(__dirname, 'src') } }, - plugins: [vue(), vueJsx()], + plugins: [ + vue(), + vueJsx(), + Icons({ + autoInstall: true, + compiler: "vue3", + customCollections: { + ${createCollectionLoaders(icons)} + }, + iconCustomizer(collection, icon, props) { + + }, + }), + Components({ + dts: true, + resolvers: [ + IconsResolver({ + prefix: 'i', + alias: { + }, + customCollections: [${createCollectionNames(icons)}], + }), + ], + }), + ], define: { '${processStr.join('.')}': { ...${processStr.join('.')} } }, diff --git a/packages/vue-generator/src/templates/vue-template/templateFiles/packageJson.js b/packages/vue-generator/src/templates/vue-template/templateFiles/packageJson.js index 09bb44b68e..0356415fc0 100644 --- a/packages/vue-generator/src/templates/vue-template/templateFiles/packageJson.js +++ b/packages/vue-generator/src/templates/vue-template/templateFiles/packageJson.js @@ -22,7 +22,10 @@ export default (schema) => { vue: '^3.3.9', 'vue-i18n': '^9.2.0-beta.3', 'vue-router': '^4.2.5', - pinia: '^2.1.7' + pinia: '^2.1.7', + '@iconify/json': '^2.2.266', + 'unplugin-icons': 'latest', + 'unplugin-vue-components': '^0.27.3' }, devDependencies: { '@vitejs/plugin-vue': '^5.1.2',