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/README.md b/README.md
index 57af470d1d..37515208cd 100644
--- a/README.md
+++ b/README.md
@@ -88,9 +88,9 @@ gantt
dateFormat YYYY-MM-DD
axisFormat %Y-%m-%d
- 1.0.0-beta.x version :active,2023-09-25, 2024-03-31
- 1.0.0-rc version : 2024-04-01, 2024-06-30
- 1.0.0 version : 2024-07-01, 2024-07-31
+1.0.0-beta.x version : 2023-09-25, 2024-05-20
+1.0.0-rc version(refactor version) : 2024-10-01
+1.0.0 version : 2024-11-01
```
diff --git a/README.zh-CN.md b/README.zh-CN.md
index 747f286c89..636ad668c4 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -84,13 +84,13 @@ pnpm run build:alpha 或 build:prod
## 里程碑
```mermaid
-gantt
+gantt
dateFormat YYYY-MM-DD
axisFormat %Y-%m-%d
- 1.0.0-beta.x version :active,2023-09-25, 2024-03-31
- 1.0.0-rc version : 2024-04-01, 2024-06-30
- 1.0.0 version : 2024-07-01, 2024-07-31
+1.0.0-beta.x version : 2023-09-25, 2024-05-20
+1.0.0-rc version(refactor version) : 2024-10-01
+1.0.0 version : 2024-11-01
```
diff --git a/mockServer/package.json b/mockServer/package.json
index 7b51d4daf1..01ebc83c09 100644
--- a/mockServer/package.json
+++ b/mockServer/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-mock",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
@@ -25,7 +25,7 @@
"lint": "eslint --fix ."
},
"dependencies": {
- "@opentiny/tiny-engine-dsl-vue": "^1.0.3",
+ "@opentiny/tiny-engine-dsl-vue": "^1.0.6",
"@seald-io/nedb": "^4.0.2",
"fs-extra": "^11.1.1",
"glob": "^10.3.4",
diff --git a/mockServer/src/database/blockGroups.db b/mockServer/src/database/blockGroups.db
index fe904aae8a..f321ac9c7b 100644
--- a/mockServer/src/database/blockGroups.db
+++ b/mockServer/src/database/blockGroups.db
@@ -1,3 +1,4 @@
+{"id":"6tl2nTKzF95aJ6im","app":{"id":918,"name":"portal-app","app_website":null,"platform":{"id":897,"name":"portal-platform"},"obs_url":"","created_by":null,"updated_by":null,"created_at":"2022-06-08T07:19:01.000Z","updated_at":"2023-09-04T08:55:40.000Z","state":null,"published":false,"createdBy":86,"updatedBy":564,"tenant":1,"home_page":"NTJ4MjvqoVj8OVsc","css":null,"config":{},"git_group":"","project_name":"","constants":null,"data_handler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"},"description":"demo应用","latest":22,"platform_history":null,"editor_url":"","branch":"develop","visit_url":null,"is_demo":null,"image_url":"","is_default":true,"template_type":null,"set_template_time":null,"set_template_by":null,"set_default_by":169,"framework":"Vue","global_state":[],"default_lang":null,"extend_config":{"business":{"serviceName":"","endpointName":"cce","endpointId":"ee","serviceId":"ee","router":"ee"},"env":{"alpha":{"regions":[{"name":"","baseUrl":"","isDefault":false}],"isDefault":true}},"type":"console"},"assets_url":"","data_hash":"ae128e37f6bc378f1b9c21d75bd05551","can_associate":true,"data_source_global":{"dataHandler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"}}},"name":"123","desc":"","blocks":[],"_id":"6tl2nTKzF95aJ6im"}
{"id":"b57MCCORYPGjgL23","app":{"id":918,"name":"portal-app","app_website":null,"platform":{"id":897,"name":"portal-platform"},"obs_url":"","created_by":null,"updated_by":null,"created_at":"2022-06-08T07:19:01.000Z","updated_at":"2023-09-04T08:55:40.000Z","state":null,"published":false,"createdBy":86,"updatedBy":564,"tenant":1,"home_page":"NTJ4MjvqoVj8OVsc","css":null,"config":{},"git_group":"","project_name":"","constants":null,"data_handler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"},"description":"demo应用","latest":22,"platform_history":null,"editor_url":"","branch":"develop","visit_url":null,"is_demo":null,"image_url":"","is_default":true,"template_type":null,"set_template_time":null,"set_template_by":null,"set_default_by":169,"framework":"Vue","global_state":[],"default_lang":null,"extend_config":{"business":{"serviceName":"","endpointName":"cce","endpointId":"ee","serviceId":"ee","router":"ee"},"env":{"alpha":{"regions":[{"name":"","baseUrl":"","isDefault":false}],"isDefault":true}},"type":"console"},"assets_url":"","data_hash":"ae128e37f6bc378f1b9c21d75bd05551","can_associate":true,"data_source_global":{"dataHandler":{"type":"JSFunction","value":"function dataHanlder(res){\n return res;\n}"}}},"name":"我的区块","desc":"","blocks":["ALvDb0JD8atzd3nA"],"_id":"b57MCCORYPGjgL23"}
{"$$indexCreated":{"fieldName":"name","unique":true,"sparse":false}}
{"$$indexCreated":{"fieldName":"name","unique":true}}
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/mock/get/app-center/v1/apps/schema/918.json b/mockServer/src/mock/get/app-center/v1/apps/schema/918.json
index 534fbfcd1d..17656258e4 100644
--- a/mockServer/src/mock/get/app-center/v1/apps/schema/918.json
+++ b/mockServer/src/mock/get/app-center/v1/apps/schema/918.json
@@ -1918,6 +1918,13 @@
"destructuring": true,
"version": "0.1.17"
},
+ {
+ "componentName": "TinyCheckbox",
+ "package": "@opentiny/vue",
+ "exportName": "Checkbox",
+ "destructuring": true,
+ "version": "3.14.0"
+ },
{
"componentName": "TinySelect",
"package": "@opentiny/vue",
@@ -1974,6 +1981,76 @@
"destructuring": true,
"version": "0.1.16"
},
+ {
+ "componentName": "TinyCollapse",
+ "package": "@opentiny/vue",
+ "exportName": "Collapse",
+ "destructuring": true,
+ "version": "3.14.0"
+ },
+ {
+ "componentName": "TinyCollapseItem",
+ "package": "@opentiny/vue",
+ "exportName": "CollapseItem",
+ "destructuring": true,
+ "version": "3.14.0"
+ },
+ {
+ "componentName": "TinyBreadcrumb",
+ "package": "@opentiny/vue",
+ "exportName": "Breadcrumb",
+ "destructuring": true,
+ "version": "3.14.0"
+ },
+ {
+ "componentName": "TinyBreadcrumbItem",
+ "package": "@opentiny/vue",
+ "exportName": "BreadcrumbItem",
+ "destructuring": true,
+ "version": "3.14.0"
+ },
+ {
+ "componentName": "ElInput",
+ "package": "element-plus",
+ "exportName": "ElInput",
+ "destructuring": true,
+ "version": "2.4.2"
+ },
+ {
+ "componentName": "ElButton",
+ "package": "element-plus",
+ "exportName": "ElButton",
+ "destructuring": true,
+ "version": "2.4.2"
+ },
+ {
+ "componentName": "ElForm",
+ "package": "element-plus",
+ "exportName": "ElForm",
+ "destructuring": true,
+ "version": "2.4.2"
+ },
+ {
+ "componentName": "ElFormItem",
+ "package": "element-plus",
+ "exportName": "ElFormItem",
+ "destructuring": true,
+ "version": "2.4.2"
+ },
+ {
+ "componentName": "ElTable",
+ "package": "element-plus",
+ "exportName": "ElTable",
+ "destructuring": true,
+ "version": "2.4.2"
+ },
+ {
+ "componentName": "ElTableColumn",
+ "package": "element-plus",
+ "exportName": "ElTableColumn",
+ "destructuring": true,
+ "version": "2.4.2"
+ },
{
"componentName": "PortalHome",
"main": "common/components/home",
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/block.js b/mockServer/src/services/block.js
index c8071fe106..f29c00ad6e 100644
--- a/mockServer/src/services/block.js
+++ b/mockServer/src/services/block.js
@@ -72,7 +72,8 @@ export default class BlockService {
async detail(blockId) {
const result = await this.db.findOneAsync({ _id: blockId })
- return result
+
+ return getResponseData(result)
}
async delete(blockId) {
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 8586040b01..90b7902b0a 100644
--- a/package.json
+++ b/package.json
@@ -25,8 +25,6 @@
},
"devDependencies": {
"@babel/eslint-parser": "^7.21.3",
- "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
- "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
"@types/node": "^18.0.0",
"@vitejs/plugin-vue": "^4.2.3",
"@vitejs/plugin-vue-jsx": "^3.1.0",
@@ -71,4 +69,4 @@
"@vue/repl@2.9.0": "patches/@vue__repl@2.9.0.patch"
}
}
-}
+}
\ No newline at end of file
diff --git a/packages/blockToWebComponentTemplate/package.json b/packages/blockToWebComponentTemplate/package.json
index 4124d30740..cd7f0dc8f7 100644
--- a/packages/blockToWebComponentTemplate/package.json
+++ b/packages/blockToWebComponentTemplate/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-block-build",
- "version": "1.0.2",
+ "version": "1.0.5",
"description": "translate block to webcomponent template",
"main": "./dist/web-components.es.js",
"scripts": {
diff --git a/packages/blockToWebComponentTemplate/vite.config.js b/packages/blockToWebComponentTemplate/vite.config.js
index ddbf655c32..9ad6a18618 100644
--- a/packages/blockToWebComponentTemplate/vite.config.js
+++ b/packages/blockToWebComponentTemplate/vite.config.js
@@ -43,7 +43,7 @@ export default defineConfig(({ command, mode }) => {
}
const vuePluginConfig = {}
- const styleLinks = ['https://npm.onmicrosoft.cn/@opentiny/vue-theme@3.14/index.css']
+ const styleLinks = ['https://unpkg.com/@opentiny/vue-theme@3.14/index.css']
config.publicDir = false
diff --git a/packages/builtinComponent/package.json b/packages/builtinComponent/package.json
index f25d3a77d3..805d0a7f1b 100644
--- a/packages/builtinComponent/package.json
+++ b/packages/builtinComponent/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-builtin-component",
- "version": "1.0.1",
+ "version": "1.0.4",
"description": "",
"main": "dist/index.js",
"module": "dist/index.js",
diff --git a/packages/canvas/package.json b/packages/canvas/package.json
index 962ac659c6..965bcace02 100644
--- a/packages/canvas/package.json
+++ b/packages/canvas/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-canvas",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
@@ -27,6 +27,7 @@
"homepage": "https://opentiny.design/tiny-engine",
"dependencies": {
"@babel/core": "7.18.13",
+ "@iconify/vue": "^4.1.2",
"@opentiny/tiny-engine-builtin-component": "workspace:*",
"@opentiny/tiny-engine-controller": "workspace:*",
"@opentiny/tiny-engine-i18n-host": "workspace:*",
diff --git a/packages/canvas/src/components/builtin/CanvasIcon.vue b/packages/canvas/src/components/builtin/CanvasIcon.vue
index 42567318bf..da90595dbb 100644
--- a/packages/canvas/src/components/builtin/CanvasIcon.vue
+++ b/packages/canvas/src/components/builtin/CanvasIcon.vue
@@ -1,5 +1,6 @@
@@ -24,7 +53,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/src/components/builtin/builtin.json b/packages/canvas/src/components/builtin/builtin.json
index 79c6782940..89c6babc5c 100644
--- a/packages/canvas/src/components/builtin/builtin.json
+++ b/packages/canvas/src/components/builtin/builtin.json
@@ -332,6 +332,26 @@
"component": "MetaSelectIcon",
"props": {}
}
+ },
+ {
+ "property": "icon",
+ "type": "String",
+ "defaultValue": "IconDel",
+ "bindState": true,
+ "label": {
+ "text": {
+ "zh_CN": "图标类型"
+ }
+ },
+ "cols": 12,
+ "rules": [],
+ "widget": {
+ "component": "MetaInput",
+ "props": {
+ "type": "text",
+ "autosize": true
+ }
+ }
}
]
}
@@ -500,7 +520,8 @@
"schema": {
"componentName": "Icon",
"props": {
- "name": "IconDel"
+ "name": "IconDel",
+ "icon": "IconDel"
}
}
},
diff --git a/packages/canvas/src/components/container/CanvasAction.vue b/packages/canvas/src/components/container/CanvasAction.vue
index c5d6a66aa1..ec2164da06 100644
--- a/packages/canvas/src/components/container/CanvasAction.vue
+++ b/packages/canvas/src/components/container/CanvasAction.vue
@@ -229,7 +229,10 @@ export default {
}
const showAction = computed(() => {
- const { parent } = getCurrent()
+ const { schema, parent } = getCurrent()
+ if (schema?.props?.['data-id'] === 'root-container') {
+ return false
+ }
return !props.resize && parent && parent?.type !== 'JSSlot'
})
diff --git a/packages/canvas/src/components/container/container.js b/packages/canvas/src/components/container/container.js
index 333db29a8a..ac9ccf8b01 100644
--- a/packages/canvas/src/components/container/container.js
+++ b/packages/canvas/src/components/container/container.js
@@ -185,6 +185,8 @@ export const dragEnd = () => {
if (element && canvasState.type === 'absolute') {
data.props = data.props || {}
data.props.style = element.style.cssText
+
+ getController().addHistory()
}
// 重置拖拽状态
@@ -541,6 +543,8 @@ const setHoverRect = (element, data) => {
return undefined
}
+let moveUpdateTimer = null
+
// 绝对布局
const absoluteMove = (event, element) => {
const { clientX, clientY } = event
@@ -572,6 +576,19 @@ const absoluteMove = (event, element) => {
element.style.height = `${clientY - y}px`
}
}
+
+ clearTimeout(moveUpdateTimer)
+
+ const { data } = dragState
+ data.props = data.props || {}
+
+ // 防抖更新位置信息到 schema
+ moveUpdateTimer = setTimeout(() => {
+ data.props.style = element.style.cssText
+
+ getController().addHistory()
+ }, 100)
+
updateRect()
}
@@ -716,11 +733,7 @@ export const onMouseUp = () => {
if (absolute) {
targetNode.node = getSchema()
data.props = data.props || {}
- data.props.style = {
- position: 'absolute',
- top: dragState.mouse.y + 'px',
- left: dragState.mouse.x + 'px'
- }
+ data.props.style = `position: absolute; top: ${dragState.mouse.y}px; left: ${dragState.mouse.x}px`
}
insertNode(targetNode, position)
diff --git a/packages/canvas/src/components/render/RenderMain.js b/packages/canvas/src/components/render/RenderMain.js
index 6081d487ed..93a39622b9 100644
--- a/packages/canvas/src/components/render/RenderMain.js
+++ b/packages/canvas/src/components/render/RenderMain.js
@@ -379,7 +379,8 @@ export default {
// 渲染画布增加根节点,与出码和预览保持一致
const rootChildrenSchema = {
componentName: 'div',
- props: schema.props,
+ // 手动添加一个唯一的属性,后续在画布选中此节点时方便处理额外的逻辑。由于没有修改schema,不会影响出码
+ props: { ...schema.props, 'data-id': 'root-container' },
children: schema.children
}
diff --git a/packages/canvas/src/components/render/render.js b/packages/canvas/src/components/render/render.js
index 0dbcf8b124..4277f059ba 100644
--- a/packages/canvas/src/components/render/render.js
+++ b/packages/canvas/src/components/render/render.js
@@ -558,7 +558,7 @@ const getBindProps = (schema, scope) => {
...parseData(schema.props, scope),
[DESIGN_UIDKEY]: id,
[DESIGN_TAGKEY]: componentName,
- onMoseover: stopEvent,
+ onMouseover: stopEvent,
onFocus: stopEvent
}
if (scope) {
diff --git a/packages/canvas/src/components/render/runner.js b/packages/canvas/src/components/render/runner.js
index 93d9902db7..008081d354 100644
--- a/packages/canvas/src/components/render/runner.js
+++ b/packages/canvas/src/components/render/runner.js
@@ -95,6 +95,9 @@ const initRenderContext = () => {
})
document.addEventListener('updateDependencies', updateDependencies)
+ // document.addEventListener('updateIconsDependencies', ()=>{
+ // debugger
+ // })
}
let App = null
diff --git a/packages/common/component/BlockDeployDialog.vue b/packages/common/component/BlockDeployDialog.vue
index 33aaf918e4..ecb2a5a464 100644
--- a/packages/common/component/BlockDeployDialog.vue
+++ b/packages/common/component/BlockDeployDialog.vue
@@ -82,7 +82,7 @@ import {
FormItem as TinyFormItem
} from '@opentiny/vue'
import { theme } from '@opentiny/tiny-engine-controller/adapter'
-import { useLayout, useNotify, useCanvas } from '@opentiny/tiny-engine-controller'
+import { useLayout, useNotify, useCanvas, useBlock } from '@opentiny/tiny-engine-controller'
import { constants } from '@opentiny/tiny-engine-utils'
import VueMonaco from './VueMonaco.vue'
@@ -163,7 +163,7 @@ export default {
const { getEditBlock, publishBlock } = getPluginApi(PLUGIN_NAME.BlockManage)
if (valid) {
const params = {
- block: getEditBlock(),
+ block: getEditBlock() || useBlock().getCurrentBlock(),
is_compile: true,
deploy_info: formState.deployInfo,
version: formState.version,
diff --git a/packages/common/component/ConfigItem.vue b/packages/common/component/ConfigItem.vue
index c0fd195e7b..1b4a7b9a24 100644
--- a/packages/common/component/ConfigItem.vue
+++ b/packages/common/component/ConfigItem.vue
@@ -273,6 +273,7 @@ export default {
}
if (property !== 'name' && props.property.widget.component === 'MetaSelectIcon') {
+ debugger
// icon以组件形式传入,实现类似:icon="IconPlus"的图标配置(排除Icon组件本身)
value = {
componentName: 'Icon',
@@ -295,16 +296,13 @@ export default {
result.message = typeof message === 'string' ? message : message?.[locale.value]
}
+ const isEmptyInputValue = (value) => {
+ // 通过 value == null 做隐式类型转换
+ // 空值约定为 undefined | null | ''
+ return value == null || (typeOf(value) === TYPES.StringType && value.trim() === '')
+ }
const verifyRequired = (value) => {
- if (typeOf(value) === TYPES.BooleanType) {
- return true
- }
-
- if (typeOf(value) === TYPES.StringType) {
- return value.trim()
- }
-
- return value
+ return !isEmptyInputValue(value)
}
const verifyValue = (value = '', rules = []) => {
diff --git a/packages/common/component/LifeCycles.vue b/packages/common/component/LifeCycles.vue
index c7abdcd283..fd8404fd49 100644
--- a/packages/common/component/LifeCycles.vue
+++ b/packages/common/component/LifeCycles.vue
@@ -129,7 +129,7 @@ export default {
})
watchEffect(() => {
- state.bindLifeCycles = props.bindLifeCycles || useCanvas().canvasApi.value?.getSchema()?.lifeCycles || {}
+ state.bindLifeCycles = props.bindLifeCycles || {}
})
const searchLifeCyclesList = (value) => {
diff --git a/packages/common/component/MetaHtmlText.vue b/packages/common/component/MetaHtmlText.vue
index bb8a28d391..941fad89e9 100644
--- a/packages/common/component/MetaHtmlText.vue
+++ b/packages/common/component/MetaHtmlText.vue
@@ -10,7 +10,7 @@
-
+
+
+
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/design-core/vite.config.js b/packages/design-core/vite.config.js
index 3d292c870a..77550cd97a 100644
--- a/packages/design-core/vite.config.js
+++ b/packages/design-core/vite.config.js
@@ -43,6 +43,11 @@ const config = {
'/platform-center/api': {
target: origin,
changeOrigin: true
+ },
+ '/iconify/api': {
+ target: 'https://api.iconify.design/',
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/iconify\/api/, ""),
}
}
},
@@ -151,6 +156,7 @@ const devAlias = {
'@opentiny/tiny-engine-plugin-help': path.resolve(__dirname, '../plugins/help/index.js'),
'@opentiny/tiny-engine-plugin-schema': path.resolve(__dirname, '../plugins/schema/index.js'),
'@opentiny/tiny-engine-plugin-page': path.resolve(__dirname, '../plugins/page/index.js'),
+
'@opentiny/tiny-engine-plugin-i18n': path.resolve(__dirname, '../plugins/i18n/index.js'),
'@opentiny/tiny-engine-plugin-bridge': path.resolve(__dirname, '../plugins/bridge/index.js'),
'@opentiny/tiny-engine-plugin-tutorial': path.resolve(__dirname, '../plugins/tutorial/index.js'),
diff --git a/packages/http/package.json b/packages/http/package.json
index d29ed81cad..e242547fa4 100644
--- a/packages/http/package.json
+++ b/packages/http/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-http",
- "version": "1.0.2",
+ "version": "1.0.5",
"publishConfig": {
"access": "public"
},
diff --git a/packages/http/src/index.js b/packages/http/src/index.js
index 64b182c301..d2f6bdd166 100644
--- a/packages/http/src/index.js
+++ b/packages/http/src/index.js
@@ -153,3 +153,5 @@ export const initHttp = ({ env }) => {
}
export const useHttp = () => createHttp({ enableMock: isMock() })
+
+export const request = axios;
diff --git a/packages/i18n/package.json b/packages/i18n/package.json
index 445cf8fe29..6f217c7c8f 100644
--- a/packages/i18n/package.json
+++ b/packages/i18n/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-i18n-host",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/plugins/block/package.json b/packages/plugins/block/package.json
index f72f2f6e9e..eecc07ca4d 100644
--- a/packages/plugins/block/package.json
+++ b/packages/plugins/block/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-plugin-block",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/plugins/block/src/BlockSetting.vue b/packages/plugins/block/src/BlockSetting.vue
index 3dc43e94b6..8180127b99 100644
--- a/packages/plugins/block/src/BlockSetting.vue
+++ b/packages/plugins/block/src/BlockSetting.vue
@@ -78,7 +78,7 @@
+
+
diff --git a/packages/plugins/materials/src/icon/CreateIcon.vue b/packages/plugins/materials/src/icon/CreateIcon.vue
new file mode 100644
index 0000000000..135b4f13ec
--- /dev/null
+++ b/packages/plugins/materials/src/icon/CreateIcon.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+ 选择文件导入
+
+
+ 注意: 当前动作拷贝的methods方法只是一个空方法,具体的业务逻辑需要在空方法中自行添加!!
+
+
+
+ 确定
+ 取消
+
+
+
+
+
+
+
+
diff --git a/packages/plugins/materials/src/icon/Custom.vue b/packages/plugins/materials/src/icon/Custom.vue
new file mode 100644
index 0000000000..9ff86def6c
--- /dev/null
+++ b/packages/plugins/materials/src/icon/Custom.vue
@@ -0,0 +1,353 @@
+
+
+
+
+
+
+
+
+ 创建
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/plugins/materials/src/icon/Iconify.vue b/packages/plugins/materials/src/icon/Iconify.vue
new file mode 100644
index 0000000000..f19d9f66cd
--- /dev/null
+++ b/packages/plugins/materials/src/icon/Iconify.vue
@@ -0,0 +1,301 @@
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ {{child.name?.zh_CN || child.name}}({{ child.total }}个)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/plugins/materials/src/icon/Main.vue b/packages/plugins/materials/src/icon/Main.vue
new file mode 100644
index 0000000000..1dfdadef2f
--- /dev/null
+++ b/packages/plugins/materials/src/icon/Main.vue
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/plugins/materials/src/icon/js/http.js b/packages/plugins/materials/src/icon/js/http.js
new file mode 100644
index 0000000000..353b21d17a
--- /dev/null
+++ b/packages/plugins/materials/src/icon/js/http.js
@@ -0,0 +1,53 @@
+/**
+ * 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 { useHttp, request } from '@opentiny/tiny-engine-http'
+
+const http = useHttp()
+
+// 图标集合 -- 列表
+export const getIconCollections = () => http.post(`/app-center/api/icons/list`)
+
+// 图标集合 -- 创建集合
+export const createIconCollection = ({ name, prefix }) => http.post('/app-center/api/icons/create', { name, prefix })
+
+// 图标集合 -- 删除集合
+export const removeIconCollection = (prefix) => http.post(`/app-center/api/icons/delete`, { prefix })
+
+// 图标集合 -- 导入集合
+export const importIconCollection = ({ name, prefix,iconify }) => http.post(`/app-center/api/icons/import`, { name, prefix,iconify })
+
+
+// 图标 -- 新增
+export const importIcon = ({ prefix, name, svg }) => http.post('/app-center/api/icon/import', { prefix, name, svg })
+
+// 图标 -- 删除
+export const removeIcon = ({ prefix, name }) => http.post(`/app-center/api/icon/delete`, { prefix, name })
+
+/* iconify 请求解析 */
+const iconifyRequest = request()
+iconifyRequest.interceptors.response.use(
+ (res) => {
+ return res.data
+ },
+ (err) => {
+ return Promise.reject(err)
+ }
+)
+
+/* iconify资源——获得所有图标库 */
+export const fetchIconifyCollections = () => iconifyRequest.get(`/iconify/api/collections`)
+/* iconify资源——获得图标库内图标 */
+export const fetchIconifyCollectionIcons = ({ prefix }) =>
+ iconifyRequest.get(`/iconify/api/collection?prefix=${prefix}&chars=true&aliases=true`)
+/* iconify资源——搜索图标 */
+export const queryIconify = ({ query }) => iconifyRequest.get(`/iconify/api/search?query=${query}&limit=999`)
diff --git a/packages/plugins/materials/src/icon/mock.js b/packages/plugins/materials/src/icon/mock.js
new file mode 100644
index 0000000000..52a4a89b8f
--- /dev/null
+++ b/packages/plugins/materials/src/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/plugins/page/package.json b/packages/plugins/page/package.json
index 920cd5f4da..f2db39b619 100644
--- a/packages/plugins/page/package.json
+++ b/packages/plugins/page/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-plugin-page",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/plugins/page/src/PageSetting.vue b/packages/plugins/page/src/PageSetting.vue
index 4302459e79..168a09c7e3 100644
--- a/packages/plugins/page/src/PageSetting.vue
+++ b/packages/plugins/page/src/PageSetting.vue
@@ -195,8 +195,9 @@ export default {
const updatePage = (id, params) => {
const routerChange = pageSettingState.currentPageDataCopy.route !== pageSettingState.currentPageData.route
+ const isCurEditPage = pageState?.currentPage?.id === id
- return handlePageUpdate(id, params, routerChange)
+ return handlePageUpdate(id, params, routerChange, isCurEditPage)
}
const restorePage = (pageData) => {
diff --git a/packages/plugins/robot/package.json b/packages/plugins/robot/package.json
index acf0fe2823..ff4f74fd3f 100644
--- a/packages/plugins/robot/package.json
+++ b/packages/plugins/robot/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-plugin-robot",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/plugins/schema/package.json b/packages/plugins/schema/package.json
index fdc8e0e5a0..45843d9a19 100644
--- a/packages/plugins/schema/package.json
+++ b/packages/plugins/schema/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-plugin-schema",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/plugins/script/package.json b/packages/plugins/script/package.json
index f5e2286675..b034a2d17d 100644
--- a/packages/plugins/script/package.json
+++ b/packages/plugins/script/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-plugin-script",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/plugins/tree/package.json b/packages/plugins/tree/package.json
index 83b3fb8253..9c1fca2cbe 100644
--- a/packages/plugins/tree/package.json
+++ b/packages/plugins/tree/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-plugin-tree",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/plugins/tutorial/package.json b/packages/plugins/tutorial/package.json
index 7b06fa7e73..b0b1759d25 100644
--- a/packages/plugins/tutorial/package.json
+++ b/packages/plugins/tutorial/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-plugin-tutorial",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/settings/design/package.json b/packages/settings/design/package.json
index 63049b52eb..d6f51260bd 100644
--- a/packages/settings/design/package.json
+++ b/packages/settings/design/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-setting-design",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/settings/events/package.json b/packages/settings/events/package.json
index 7272f190b8..d0fa097936 100644
--- a/packages/settings/events/package.json
+++ b/packages/settings/events/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-setting-events",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/settings/events/src/components/BindEvents.vue b/packages/settings/events/src/components/BindEvents.vue
index aa8550f251..49ac919048 100644
--- a/packages/settings/events/src/components/BindEvents.vue
+++ b/packages/settings/events/src/components/BindEvents.vue
@@ -28,12 +28,12 @@
@@ -43,7 +43,7 @@
- {{ action.eventName }}{{ state.componentEvents[action.eventName].label.zh_CN }}
+ {{ action.eventName }}{{ renderEventList[action.eventName]?.label?.[locale] }}
{{ action.linkedEventName }}
{{ action.ref }}
@@ -78,7 +78,7 @@
@@ -88,6 +88,7 @@
import { computed, reactive, watchEffect } from 'vue'
import { Popover, Button } from '@opentiny/vue'
import { useCanvas, useModal, useLayout, useBlock, useResource } from '@opentiny/tiny-engine-controller'
+import i18n from '@opentiny/tiny-engine-controller/js/i18n'
import { BlockLinkEvent, SvgButton } from '@opentiny/tiny-engine-common'
import { iconHelpQuery, iconChevronDown } from '@opentiny/vue-icon'
import BindEventsDialog, { open as openDialog } from './BindEventsDialog.vue'
@@ -112,6 +113,7 @@ export default {
const { getBlockEvents, getCurrentBlock, removeEventLink } = useBlock()
const { getMaterial } = useResource()
const { confirm } = useModal()
+ const locale = i18n.global.locale.value
const { highlightMethod } = getPluginApi(PLUGIN_NAME.PageController)
@@ -119,25 +121,25 @@ export default {
eventName: '', // 事件名称
eventBinding: null, // 事件绑定的处理方法对象
componentEvent: {},
- componentEvents: commonEvents,
+ customEvents: commonEvents,
bindActions: {},
showBindEventDialog: false
})
const isBlock = computed(() => Boolean(pageState.isBlock))
const isEmpty = computed(() => Object.keys(state.bindActions).length === 0)
+ const renderEventList = computed(() => ({ ...state.componentEvent, ...state.customEvents }))
watchEffect(() => {
const componentName = pageState?.currentSchema?.componentName
const componentSchema = getMaterial(componentName)
state.componentEvent = componentSchema?.content?.schema?.events || componentSchema?.schema?.events || {}
- Object.assign(state.componentEvents, state.componentEvent)
const props = pageState?.currentSchema?.props || {}
const keys = Object.keys(props)
state.bindActions = {}
// 遍历组件事件元数据
- Object.entries(state.componentEvents).forEach(([eventName, componentEvent]) => {
+ Object.entries(renderEventList.value).forEach(([eventName, componentEvent]) => {
// 查找组件已添加的事件
if (keys.indexOf(eventName) > -1) {
const event = props[eventName]
@@ -225,7 +227,7 @@ export default {
const handleAddEvent = (params) => {
const { eventName, eventDescription } = params
- Object.assign(state.componentEvents, {
+ Object.assign(state.customEvents, {
[eventName]: {
label: {
zh_CN: eventDescription
@@ -253,7 +255,9 @@ export default {
openCodePanel,
openActionDialog,
handleAddEvent,
- handleToggleAddEventDialog
+ handleToggleAddEventDialog,
+ renderEventList,
+ locale
}
}
}
diff --git a/packages/settings/events/src/components/BindEventsDialog.vue b/packages/settings/events/src/components/BindEventsDialog.vue
index e7fbc838e5..079f2e8d2a 100644
--- a/packages/settings/events/src/components/BindEventsDialog.vue
+++ b/packages/settings/events/src/components/BindEventsDialog.vue
@@ -1,6 +1,6 @@
props.style,
() => {
- state.isUpdateFromProps = true
- borderRadius.BorderRadius = parseInt(props.style.borderRadius || 0)
- borderRadius.BorderTopLeftRadius = parseInt(props.style.borderTopLeftRadius || 0)
- borderRadius.BorderTopRightRadius = parseInt(props.style.borderTopRightRadius || 0)
- borderRadius.BorderBottomLeftRadius = parseInt(props.style.borderBottomLeftRadius || 0)
- borderRadius.BorderBottomRightRadius = parseInt(props.style.borderBottomRightRadius || 0)
+ borderRadius.BorderRadius = parseInt(props.style[BORDER_RADIUS_PROPERTY.BorderRadius] || 0)
+ borderRadius.BorderTopLeftRadius = parseInt(props.style[BORDER_RADIUS_PROPERTY.BorderTopLeftRadius] || 0)
+ borderRadius.BorderTopRightRadius = parseInt(props.style[BORDER_RADIUS_PROPERTY.BorderTopRightRadius] || 0)
+ borderRadius.BorderBottomLeftRadius = parseInt(props.style[BORDER_RADIUS_PROPERTY.BorderBottomLeftRadius] || 0)
+ borderRadius.BorderBottomRightRadius = parseInt(
+ props.style[BORDER_RADIUS_PROPERTY.BorderBottomRightRadius] || 0
+ )
},
{ immediate: true }
)
@@ -386,12 +385,13 @@ export default {
* 1. 用户在 monacoEditor 更新了样式 border-radius: 9px 然后保存,该组件接收并同步改值
* 2. 用户在 monacoEditor 删除了 border-radius: 9px 的样式,然后 watch 函数(props.style),重新计算得到值 0
* 3. 0 更新后,会再触发改函数更新,导致自动加上了 border-radius: 0px 的样式
- * 所以从 props 来的更新不需要再调用一遍 updateStyle(更新 props 数据)
+ * 所以从如果当前值为 0 且 props.style[BORDER_RADIUS_PROPERTY.BorderRadius] 不存在值,不需要触发更新
*/
- if (state.isUpdateFromProps) {
- state.isUpdateFromProps = false
+
+ if (!value && !props.style[BORDER_RADIUS_PROPERTY.BorderRadius]) {
return
}
+
borderRadius.BorderRadius = value
updateStyle({
diff --git a/packages/settings/styles/src/components/spacing/SpacingGroup.vue b/packages/settings/styles/src/components/spacing/SpacingGroup.vue
index 9379bcee4a..aee7a17927 100644
--- a/packages/settings/styles/src/components/spacing/SpacingGroup.vue
+++ b/packages/settings/styles/src/components/spacing/SpacingGroup.vue
@@ -429,7 +429,7 @@ export default {
properties[name] = {
value,
- text: value === 'auto' ? 'auto' : String(Number.parseInt(value || 0)), // 界面 box 中显示的数值
+ text: value === 'auto' ? 'auto' : String(Number.parseInt(value) || 0), // 界面 box 中显示的数值
setting: Boolean(value) // 属性是否已设置值
}
})
diff --git a/packages/settings/styles/src/components/spacing/SpacingSetting.vue b/packages/settings/styles/src/components/spacing/SpacingSetting.vue
index af11937bd0..1e950ae87f 100644
--- a/packages/settings/styles/src/components/spacing/SpacingSetting.vue
+++ b/packages/settings/styles/src/components/spacing/SpacingSetting.vue
@@ -61,6 +61,10 @@ export default {
props.property.value?.indexOf('px') > -1 ? Number.parseInt(props.property.value) : props.property.value
)
+ const updateStyle = (value) => {
+ emit('update', { [props.property.name]: value })
+ }
+
const sliderChange = () => {
if (sliderFlag) {
updateStyle(`${sliderValue.value}px`)
@@ -83,11 +87,7 @@ export default {
const reset = () => {
sliderFlag = false
- updateStyle('')
- }
-
- const updateStyle = (value) => {
- emit('update', { [props.property.name]: value })
+ updateStyle(null)
}
const inputChange = (property) => {
diff --git a/packages/settings/styles/src/js/parser.js b/packages/settings/styles/src/js/parser.js
index b56a9f6684..ee54e7d824 100644
--- a/packages/settings/styles/src/js/parser.js
+++ b/packages/settings/styles/src/js/parser.js
@@ -231,7 +231,7 @@ export const stringify = (originParseList, styleObject, config = {}) => {
if (key.includes('comment')) {
str += `${value.value}\n`
} else {
- str += `${key}: ${value.value};\n`
+ str += `${key}: ${value.value === '' ? "''" : value.value};\n`
}
}
} else {
@@ -249,7 +249,7 @@ export const stringify = (originParseList, styleObject, config = {}) => {
// 在 styleObject 的,可能有改动,所以需要用 styleObject 拼接
for (const [key, value] of Object.entries(styleObject[item.selectors].rules)) {
if (![null, undefined].includes(value)) {
- str += `${key}: ${value};\n`
+ str += `${key}: ${value === '' ? "''" : value};\n`
}
}
}
@@ -266,7 +266,7 @@ export const stringify = (originParseList, styleObject, config = {}) => {
str += `${selector} {\n`
for (const [declKey, declValue] of Object.entries(value.rules)) {
- str += `${declKey}: ${declValue};\n`
+ str += `${declKey}: ${declValue === '' ? "''" : declValue};\n`
}
str += '}\n'
diff --git a/packages/svgs/package.json b/packages/svgs/package.json
index ba718cc286..6776c07218 100644
--- a/packages/svgs/package.json
+++ b/packages/svgs/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-svgs",
- "version": "1.0.4",
+ "version": "1.0.7",
"publishConfig": {
"access": "public"
},
@@ -23,7 +23,6 @@
"author": "OpenTiny Team",
"license": "MIT",
"homepage": "https://opentiny.design/tiny-engine",
- "dependencies": {},
"devDependencies": {
"@vitejs/plugin-vue": "^4.2.3",
"@vitejs/plugin-vue-jsx": "^3.1.0",
diff --git a/packages/theme/dark/package.json b/packages/theme/dark/package.json
index 6ed0f215ab..ffb62ea1d4 100644
--- a/packages/theme/dark/package.json
+++ b/packages/theme/dark/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-theme-dark",
- "version": "1.0.4",
+ "version": "1.0.7",
"publishConfig": {
"access": "public"
},
diff --git a/packages/theme/light/package.json b/packages/theme/light/package.json
index 375eaf92e8..f1b2770c36 100644
--- a/packages/theme/light/package.json
+++ b/packages/theme/light/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-theme-light",
- "version": "1.0.5",
+ "version": "1.0.8",
"publishConfig": {
"access": "public"
},
diff --git a/packages/toolbars/breadcrumb/package.json b/packages/toolbars/breadcrumb/package.json
index 8060d7254a..f1feee0390 100644
--- a/packages/toolbars/breadcrumb/package.json
+++ b/packages/toolbars/breadcrumb/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-toolbar-breadcrumb",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/toolbars/clean/package.json b/packages/toolbars/clean/package.json
index 103fd3e47d..b94534eafa 100644
--- a/packages/toolbars/clean/package.json
+++ b/packages/toolbars/clean/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-toolbar-clean",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/toolbars/collaboration/package.json b/packages/toolbars/collaboration/package.json
index f8c668d3f8..4ef4a7e201 100644
--- a/packages/toolbars/collaboration/package.json
+++ b/packages/toolbars/collaboration/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-toolbar-collaboration",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/toolbars/fullscreen/package.json b/packages/toolbars/fullscreen/package.json
index 3aeda8aa21..6050de0c78 100644
--- a/packages/toolbars/fullscreen/package.json
+++ b/packages/toolbars/fullscreen/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-toolbar-fullscreen",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/toolbars/generate-vue/package.json b/packages/toolbars/generate-vue/package.json
index 23c53ddcbf..6005336b78 100644
--- a/packages/toolbars/generate-vue/package.json
+++ b/packages/toolbars/generate-vue/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-toolbar-generate-vue",
- "version": "1.0.3",
+ "version": "1.0.6",
"publishConfig": {
"access": "public"
},
diff --git a/packages/toolbars/generate-vue/src/Main.vue b/packages/toolbars/generate-vue/src/Main.vue
index 54d25cf2f1..344e44f007 100644
--- a/packages/toolbars/generate-vue/src/Main.vue
+++ b/packages/toolbars/generate-vue/src/Main.vue
@@ -1,23 +1,14 @@
-
+
-
+
+
diff --git a/packages/vue-generator/test/testcases/sfc/case06/page.schema.json b/packages/vue-generator/test/testcases/sfc/case06/page.schema.json
new file mode 100644
index 0000000000..7b5ec4ff03
--- /dev/null
+++ b/packages/vue-generator/test/testcases/sfc/case06/page.schema.json
@@ -0,0 +1,143 @@
+{
+ "state": {},
+ "methods": {},
+ "componentName": "Page",
+ "fileName": "createVm",
+ "css": "",
+ "props": {},
+ "lifeCycles": {},
+ "children": [
+ {
+ "componentName": "TinyTree",
+ "props": {
+ "data": [
+ {
+ "label": "一级 1",
+ "children": [
+ {
+ "label": "二级 1-1",
+ "children": [
+ {
+ "label": "三级 1-1-1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "label": "一级 2",
+ "children": [
+ {
+ "label": "二级 2-1",
+ "children": [
+ {
+ "label": "三级 2-1-1"
+ }
+ ]
+ },
+ {
+ "label": "二级 2-2",
+ "children": [
+ {
+ "label": "三级 2-2-1"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "id": "33f52342",
+ "children": [
+ {
+ "componentName": "Template",
+ "props": {
+ "slot": {
+ "name": "default",
+ "params": ["data"]
+ }
+ },
+ "children": [
+ {
+ "componentName": "Text",
+ "props": {
+ "text": {
+ "type": "JSExpression",
+ "value": "data.label"
+ }
+ },
+ "id": "c225d165"
+ }
+ ],
+ "id": "415d5f65"
+ }
+ ]
+ },
+ {
+ "componentName": "TinyTree",
+ "props": {
+ "data": [
+ {
+ "label": "一级 1",
+ "children": [
+ {
+ "label": "二级 1-1",
+ "children": [
+ {
+ "label": "三级 1-1-1"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "label": "一级 2",
+ "children": [
+ {
+ "label": "二级 2-1",
+ "children": [
+ {
+ "label": "三级 2-1-1"
+ }
+ ]
+ },
+ {
+ "label": "二级 2-2",
+ "children": [
+ {
+ "label": "三级 2-2-1"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "id": "33f52342",
+ "children": [
+ {
+ "componentName": "Template",
+ "props": {
+ "slot": {
+ "name": "default",
+ "params": "data"
+ }
+ },
+ "children": [
+ {
+ "componentName": "Text",
+ "props": {
+ "text": {
+ "type": "JSExpression",
+ "value": "data.label"
+ }
+ },
+ "id": "c225d165"
+ }
+ ],
+ "id": "415d5f65"
+ }
+ ]
+ }
+ ]
+}
diff --git a/packages/vue-generator/test/testcases/sfc/slotModelValue/components-map.json b/packages/vue-generator/test/testcases/sfc/slotModelValue/components-map.json
new file mode 100644
index 0000000000..88f7765261
--- /dev/null
+++ b/packages/vue-generator/test/testcases/sfc/slotModelValue/components-map.json
@@ -0,0 +1,23 @@
+[
+ {
+ "componentName": "TinyGrid",
+ "exportName": "Grid",
+ "package": "@opentiny/vue",
+ "version": "^3.10.0",
+ "destructuring": true
+ },
+ {
+ "componentName": "TinyNumeric",
+ "exportName": "Numeric",
+ "package": "@opentiny/vue",
+ "version": "^3.10.0",
+ "destructuring": true
+ },
+ {
+ "componentName": "TinyInput",
+ "exportName": "Input",
+ "package": "@opentiny/vue",
+ "version": "^3.10.0",
+ "destructuring": true
+ }
+]
diff --git a/packages/vue-generator/test/testcases/sfc/slotModelValue/expected/slotModelValueTest.vue b/packages/vue-generator/test/testcases/sfc/slotModelValue/expected/slotModelValueTest.vue
new file mode 100644
index 0000000000..7d5e5f083a
--- /dev/null
+++ b/packages/vue-generator/test/testcases/sfc/slotModelValue/expected/slotModelValueTest.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
diff --git a/packages/vue-generator/test/testcases/sfc/slotModelValue/page.schema.json b/packages/vue-generator/test/testcases/sfc/slotModelValue/page.schema.json
new file mode 100644
index 0000000000..e5da94f0cc
--- /dev/null
+++ b/packages/vue-generator/test/testcases/sfc/slotModelValue/page.schema.json
@@ -0,0 +1,150 @@
+{
+ "state": {},
+ "methods": {
+ "onChangeInput": {
+ "type": "JSFunction",
+ "value": "function onChangeInput(eventArgs,args0,args1,args2) {\n console.log('onChangeInput', eventArgs);\n}"
+ },
+ "onChangeNumber": {
+ "type": "JSFunction",
+ "value": "function onChangeNumber(eventArgs, args0, args1, args2) {\n console.log('onChangeNumber', eventArgs)\n}"
+ }
+ },
+ "componentName": "Page",
+ "css": "",
+ "props": {},
+ "lifeCycles": {},
+ "children": [
+ {
+ "componentName": "div",
+ "props": {},
+ "id": "85375559",
+ "children": [
+ {
+ "componentName": "TinyGrid",
+ "props": {
+ "editConfig": {
+ "trigger": "click",
+ "mode": "cell",
+ "showStatus": true
+ },
+ "columns": [
+ {
+ "type": "index",
+ "width": 60
+ },
+ {
+ "type": "selection",
+ "width": 60
+ },
+ {
+ "field": "employees",
+ "title": "员工数",
+ "slots": {
+ "default": {
+ "type": "JSSlot",
+ "value": [
+ {
+ "componentName": "div",
+ "id": "44523622",
+ "children": [
+ {
+ "componentName": "TinyNumeric",
+ "props": {
+ "allow-empty": true,
+ "placeholder": "请输入",
+ "controlsPosition": "right",
+ "step": 1,
+ "modelValue": {
+ "type": "JSExpression",
+ "value": "row.employees",
+ "model": true
+ },
+ "onChange": {
+ "type": "JSExpression",
+ "value": "this.onChangeNumber",
+ "params": ["row", "column", "rowIndex"]
+ }
+ },
+ "id": "62166343"
+ }
+ ]
+ }
+ ],
+ "params": ["row", "column", "rowIndex"]
+ }
+ }
+ },
+ {
+ "field": "created_date",
+ "title": "创建日期"
+ },
+ {
+ "field": "city",
+ "title": "城市",
+ "slots": {
+ "default": {
+ "type": "JSSlot",
+ "value": [
+ {
+ "componentName": "div",
+ "id": "66326314",
+ "children": [
+ {
+ "componentName": "TinyInput",
+ "props": {
+ "placeholder": "请输入",
+ "modelValue": {
+ "type": "JSExpression",
+ "value": "row.city",
+ "model": true
+ },
+ "onChange": {
+ "type": "JSExpression",
+ "value": "this.onChangeInput",
+ "params": ["row", "column", "rowIndex"]
+ }
+ },
+ "id": "22396a2a"
+ }
+ ]
+ }
+ ],
+ "params": ["row", "column", "rowIndex"]
+ }
+ }
+ }
+ ],
+ "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
+ }
+ ]
+ },
+ "id": "63623253"
+ }
+ ]
+ }
+ ],
+ "dataSource": {
+ "list": []
+ },
+ "utils": [],
+ "bridge": [],
+ "inputs": [],
+ "outputs": [],
+ "fileName": "slotModelValueTest"
+}
diff --git a/packages/vue-generator/test/testcases/sfc/slotModelValue/slotModel.test.js b/packages/vue-generator/test/testcases/sfc/slotModelValue/slotModel.test.js
new file mode 100644
index 0000000000..c1e48b6f01
--- /dev/null
+++ b/packages/vue-generator/test/testcases/sfc/slotModelValue/slotModel.test.js
@@ -0,0 +1,12 @@
+import { expect, test } from 'vitest'
+import { genSFCWithDefaultPlugin } from '@/generator/vue/sfc'
+import schema from './page.schema.json'
+import componentsMap from './components-map.json'
+import { formatCode } from '@/utils/formatCode'
+
+test('should generate onUpdate:modelValue event', async () => {
+ const res = genSFCWithDefaultPlugin(schema, componentsMap)
+ const formattedCode = formatCode(res, 'vue')
+
+ await expect(formattedCode).toMatchFileSnapshot('./expected/slotModelValueTest.vue')
+})
diff --git a/packages/vue-generator/vite.config.mjs b/packages/vue-generator/vite.config.mjs
index 60005cb536..3c12566794 100644
--- a/packages/vue-generator/vite.config.mjs
+++ b/packages/vue-generator/vite.config.mjs
@@ -17,7 +17,7 @@ import { viteStaticCopy } from 'vite-plugin-static-copy'
// https://vitejs.dev/config/
export default defineConfig({
test: {
- exclude: ['**/result/**'],
+ exclude: ['**/result/**', 'node_modules'],
watchExclude: ['**/result/**']
},
resolve: {
diff --git a/packages/webcomponent/package.json b/packages/webcomponent/package.json
index 6c6476fa57..c311abad71 100644
--- a/packages/webcomponent/package.json
+++ b/packages/webcomponent/package.json
@@ -1,6 +1,6 @@
{
"name": "@opentiny/tiny-engine-webcomponent-core",
- "version": "1.0.4",
+ "version": "1.0.7",
"publishConfig": {
"access": "public"
},
diff --git a/scripts/buildMaterials.mjs b/scripts/buildMaterials.mjs
index 01e768b195..dd6e4e9f72 100644
--- a/scripts/buildMaterials.mjs
+++ b/scripts/buildMaterials.mjs
@@ -12,7 +12,10 @@ const materialsDir = 'materials'
const bundlePath = path.join(process.cwd(), '/packages/design-core/public/mock/bundle.json')
// mockServer应用数据
const appInfoPath = path.join(process.cwd(), '/mockServer/src/services/appinfo.json')
+const appSchemaPath = path.join(process.cwd(), 'mockServer/src/mock/get/app-center/v1/apps/schema/918.json')
+
const appInfo = fsExtra.readJSONSync(appInfoPath)
+const appSchema = fsExtra.readJSONSync(appSchemaPath)
const connection = new MysqlConnection()
@@ -22,6 +25,7 @@ const connection = new MysqlConnection()
const write = (bundle) => {
fsExtra.outputJSONSync(bundlePath, bundle, { spaces: 2 })
fsExtra.outputJSONSync(appInfoPath, appInfo, { spaces: 2 })
+ fsExtra.outputJSONSync(appSchemaPath, appSchema, { spaces: 2 })
}
/**
@@ -36,13 +40,13 @@ const validateComponent = (file, component) => {
const requiredList = requiredFields.filter((field) => !fields.includes(field))
if (requiredList.length) {
- logger.error(`组件文件 ${file} 缺少必要字段:${requiredList.join('、')}。`)
+ logger.error(`missing required fields: ${requiredList.join(',')} at ${file}.`)
return false
}
if (!component.npm) {
- logger.warn(`组件文件 ${file} 缺少 npm 字段,出码时将不能通过import语句导入组件。`)
+ logger.warn(`missing the \`npm\` field, and it cannot be imported when coding at ${file}.`)
return false
}
@@ -62,7 +66,7 @@ const validateBlock = (file, block) => {
const requiredList = requiredFields.filter((field) => !fields.includes(field))
if (requiredList.length) {
- logger.error(`区块文件 ${file} 缺少必要字段:${requiredList.join('、')}。`)
+ logger.error(`missing required fields: ${requiredList.join(',')} at ${file}.`)
return false
}
@@ -80,7 +84,7 @@ const generateComponents = () => {
try {
fg([`${materialsDir}/**/*.json`]).then((files) => {
if (!files.length) {
- logger.warn('物料文件夹为空,请先执行`pnpm splitMaterials`命令拆分物料资产包')
+ logger.warn('please execute `pnpm splitMaterials` first to split the materials.')
}
const bundle = {
@@ -95,6 +99,7 @@ const generateComponents = () => {
}
const { components = [], snippets = [], blocks = [] } = bundle.data.materials
const componentsMap = []
+ const packagesMap = []
const appInfoBlocksLabels = appInfo.blockHistories.map((item) => item.label)
files.forEach((file) => {
@@ -103,7 +108,7 @@ const generateComponents = () => {
if (!material) {
const fileFullPath = path.join(process.cwd(), file)
- logger.error(`文件格式有误 (${fileFullPath})`)
+ logger.error(`incorrect file format at ${fileFullPath}.`)
return
}
@@ -151,13 +156,31 @@ const generateComponents = () => {
appInfo.materialHistory.components = componentsMap
- write(bundle)
+ const { package: packageName = '', version = '', exportName = '' } = npm || {}
+
+ const mapItem = {
+ componentName: component,
+ package: packageName,
+ version,
+ exportName
+ }
+
+ if (typeof npm.destructuring === 'boolean') {
+ mapItem.destructuring = npm.destructuring
+ }
+
+ if (npm.package) {
+ packagesMap.push(mapItem)
+ }
})
+
+ appSchema.data.componentsMap = packagesMap
+ write(bundle)
})
- logger.success('物料资产包构建成功')
+ logger.success('materials built.')
} catch (error) {
- logger.error(`物料资产包构建失败:${error}`)
+ logger.error(`failed to build materials: ${error}.`)
}
}
@@ -166,13 +189,13 @@ const watcher = chokidar.watch(`${materialsDir}/**/*.json`, { ignoreInitial: tru
watcher.on('all', (event, file) => {
const eventMap = {
- add: '新增',
- change: '更新',
- unlink: '删除'
+ add: 'added',
+ change: 'changed',
+ unlink: 'deleted'
}
const fileFullPath = path.join(process.cwd(), file)
- logger.info(`${eventMap[event]}组件文件 (${fileFullPath})`)
+ logger.info(`${fileFullPath} ${eventMap[event]}, rebuilding materials...`)
// 监听物料文件变化,更新物料资产包
generateComponents()
diff --git a/scripts/connection.mjs b/scripts/connection.mjs
index 016f856895..a06c5623ee 100644
--- a/scripts/connection.mjs
+++ b/scripts/connection.mjs
@@ -38,10 +38,10 @@ class MysqlConnection {
return new Promise((resolve, reject) => {
this.connection.connect((error) => {
if (error) {
- logger.warn('未能连接到数据库,请查看数据库配置是否正确')
+ logger.warn('unable to connect to the database, please check the database configuration is correct.')
reject()
} else {
- logger.success('数据库连接成功')
+ logger.success('database connected.')
this.connected = true
resolve()
}
@@ -100,11 +100,11 @@ class MysqlConnection {
* @returns boolean 校验组件字段是否失败,false-有字段出错
*/
isValid(component, file) {
- const longtextFields = ['name', 'npm', 'snippets', 'schema_fragment', 'configure', 'component_metadata']
+ const longTextFields = ['name', 'npm', 'snippets', 'schema_fragment', 'configure', 'component_metadata']
return Object.entries(component).every(([key, value]) => {
- if (longtextFields.includes(key) && value !== null && typeof value !== 'object') {
- logger.error(`"${key}" 的值不是有效的JSON (${file})`)
+ if (longTextFields.includes(key) && value !== null && typeof value !== 'object') {
+ logger.error(`the value of "${key}" is not valid JSON at ${file}.`)
return false
}
@@ -193,10 +193,10 @@ class MysqlConnection {
this.query(sqlContent, component.component)
.then(() => {
- logger.success(`组件 ${component.component} 数据更新成功`)
+ logger.success(`${component.component} updated.`)
})
.catch((error) => {
- logger.error(`组件 ${component.component} 数据更新失败 ${error}`)
+ logger.error(`failed to update ${component.component}: ${error}.`)
})
}
@@ -322,11 +322,11 @@ class MysqlConnection {
.then((result) => {
const id = result.insertId
- logger.success(`组件 ${component.component} 数据新增成功`)
+ logger.success(`${component.component} added.`)
this.relationMaterialHistory(id)
})
.catch((error) => {
- logger.success(`组件 ${component.component} 数据新增失败:${error}`)
+ logger.error(`add ${component.component} failed:${error}.`)
})
}
@@ -344,7 +344,7 @@ class MysqlConnection {
}
})
.catch((error) => {
- logger.success(`查询组件 ${component.component} 失败:${error}`)
+ logger.error(`query ${component.component} failed:${error}.`)
})
}
@@ -395,11 +395,11 @@ class MysqlConnection {
return new Promise((resolve, reject) => {
this.query(sqlContent)
.then((result) => {
- logger.success(`表 ${componentsTableName} 创建成功`)
+ logger.success(`table ${componentsTableName} created.`)
resolve(result)
})
.catch((error) => {
- logger.success(`表 ${componentsTableName} 创建失败:${error}`)
+ logger.error(`create table ${componentsTableName} failed:${error}.`)
reject(error)
})
})
diff --git a/scripts/splitMaterials.mjs b/scripts/splitMaterials.mjs
index e81143c0b1..867fb73d73 100644
--- a/scripts/splitMaterials.mjs
+++ b/scripts/splitMaterials.mjs
@@ -51,9 +51,9 @@ const splitMaterials = () => {
fs.outputJsonSync(blockPath, block, { spaces: 2 })
})
- logger.success('拆分物料资产包完成')
+ logger.success('materials splitted.')
} catch (error) {
- logger.error(`拆分物料资产包失败: ${error}`)
+ logger.error(`failed to split materials: ${error}.`)
}
}