@genexus/mercury 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +16 -0
- package/.prettierrc.json +13 -0
- package/dist/assets/fonts/Inter_Black.woff2 +0 -0
- package/dist/assets/fonts/Inter_Bold.woff2 +0 -0
- package/dist/assets/fonts/Inter_ExtraBold.woff2 +0 -0
- package/dist/assets/fonts/Inter_ExtraLight.woff2 +0 -0
- package/dist/assets/fonts/Inter_Light.woff2 +0 -0
- package/dist/assets/fonts/Inter_Medium.woff2 +0 -0
- package/dist/assets/fonts/Inter_Regular.woff2 +0 -0
- package/dist/assets/fonts/Inter_SemiBold.woff2 +0 -0
- package/dist/assets/fonts/Inter_Thin.woff2 +0 -0
- package/dist/assets/icons/objects/dark/api.svg +1 -0
- package/dist/assets/icons/objects/dark/attribute.svg +1 -0
- package/dist/assets/icons/objects/dark/bg-color.svg +1 -0
- package/dist/assets/icons/objects/dark/business-process-diagram.svg +1 -0
- package/dist/assets/icons/objects/dark/calendars.svg +1 -0
- package/dist/assets/icons/objects/dark/category.svg +1 -0
- package/dist/assets/icons/objects/dark/conversational-flows.svg +1 -0
- package/dist/assets/icons/objects/dark/customization.svg +1 -0
- package/dist/assets/icons/objects/dark/dashboard.svg +1 -0
- package/dist/assets/icons/objects/dark/data-provider.svg +1 -0
- package/dist/assets/icons/objects/dark/data-selector.svg +1 -0
- package/dist/assets/icons/objects/dark/data-view.svg +1 -0
- package/dist/assets/icons/objects/dark/datastore-category.svg +1 -0
- package/dist/assets/icons/objects/dark/datastore.svg +1 -0
- package/dist/assets/icons/objects/dark/dataview-index.svg +1 -0
- package/dist/assets/icons/objects/dark/deployment-unit.svg +1 -0
- package/dist/assets/icons/objects/dark/design.svg +1 -0
- package/dist/assets/icons/objects/dark/diagram.svg +1 -0
- package/dist/assets/icons/objects/dark/document-workflow.svg +1 -0
- package/dist/assets/icons/objects/dark/document.svg +1 -0
- package/dist/assets/icons/objects/dark/domain.svg +1 -0
- package/dist/assets/icons/objects/dark/dso.svg +1 -0
- package/dist/assets/icons/objects/dark/environment-no-select.svg +1 -0
- package/dist/assets/icons/objects/dark/environment-select.svg +1 -0
- package/dist/assets/icons/objects/dark/external-object.svg +1 -0
- package/dist/assets/icons/objects/dark/file.svg +1 -0
- package/dist/assets/icons/objects/dark/folder-open.svg +1 -0
- package/dist/assets/icons/objects/dark/folder.svg +1 -0
- package/dist/assets/icons/objects/dark/generator-category.svg +1 -0
- package/dist/assets/icons/objects/dark/generator.svg +1 -0
- package/dist/assets/icons/objects/dark/image.svg +1 -0
- package/dist/assets/icons/objects/dark/knowledge-base.svg +1 -0
- package/dist/assets/icons/objects/dark/lenguage.svg +1 -0
- package/dist/assets/icons/objects/dark/main-object.svg +1 -0
- package/dist/assets/icons/objects/dark/masterpage.svg +1 -0
- package/dist/assets/icons/objects/dark/menu.svg +1 -0
- package/dist/assets/icons/objects/dark/menubar.svg +1 -0
- package/dist/assets/icons/objects/dark/mini-app.svg +1 -0
- package/dist/assets/icons/objects/dark/module-open.svg +1 -0
- package/dist/assets/icons/objects/dark/module.svg +1 -0
- package/dist/assets/icons/objects/dark/notification-templates.svg +1 -0
- package/dist/assets/icons/objects/dark/object.svg +1 -0
- package/dist/assets/icons/objects/dark/offline-database.svg +1 -0
- package/dist/assets/icons/objects/dark/orphant-document.svg +1 -0
- package/dist/assets/icons/objects/dark/panel-for-sd.svg +1 -0
- package/dist/assets/icons/objects/dark/patterns.svg +1 -0
- package/dist/assets/icons/objects/dark/procedure.svg +1 -0
- package/dist/assets/icons/objects/dark/query.svg +1 -0
- package/dist/assets/icons/objects/dark/references.svg +1 -0
- package/dist/assets/icons/objects/dark/report.svg +1 -0
- package/dist/assets/icons/objects/dark/roles.svg +1 -0
- package/dist/assets/icons/objects/dark/stencil.svg +1 -0
- package/dist/assets/icons/objects/dark/structured-data-type.svg +1 -0
- package/dist/assets/icons/objects/dark/subtype-group.svg +1 -0
- package/dist/assets/icons/objects/dark/super-app.svg +1 -0
- package/dist/assets/icons/objects/dark/table.svg +1 -0
- package/dist/assets/icons/objects/dark/theme-for-sd.svg +1 -0
- package/dist/assets/icons/objects/dark/theme-web.svg +1 -0
- package/dist/assets/icons/objects/dark/theme.svg +1 -0
- package/dist/assets/icons/objects/dark/to-be-defined.svg +1 -0
- package/dist/assets/icons/objects/dark/transaction.svg +1 -0
- package/dist/assets/icons/objects/dark/url-rewrite.svg +1 -0
- package/dist/assets/icons/objects/dark/version.svg +1 -0
- package/dist/assets/icons/objects/dark/web-component.svg +1 -0
- package/dist/assets/icons/objects/dark/webpanel.svg +1 -0
- package/dist/assets/icons/objects/dark/work-panel.svg +1 -0
- package/dist/assets/icons/objects/dark/workflow.svg +1 -0
- package/dist/assets/icons/objects/light/api.svg +1 -0
- package/dist/assets/icons/objects/light/attribute.svg +1 -0
- package/dist/assets/icons/objects/light/bg-color.svg +1 -0
- package/dist/assets/icons/objects/light/business-process-diagram.svg +1 -0
- package/dist/assets/icons/objects/light/calendars.svg +1 -0
- package/dist/assets/icons/objects/light/category.svg +1 -0
- package/dist/assets/icons/objects/light/conversational-flows.svg +1 -0
- package/dist/assets/icons/objects/light/customization.svg +1 -0
- package/dist/assets/icons/objects/light/dashboard.svg +1 -0
- package/dist/assets/icons/objects/light/data-provider.svg +1 -0
- package/dist/assets/icons/objects/light/data-selector.svg +1 -0
- package/dist/assets/icons/objects/light/data-view.svg +1 -0
- package/dist/assets/icons/objects/light/datastore-category.svg +1 -0
- package/dist/assets/icons/objects/light/datastore.svg +1 -0
- package/dist/assets/icons/objects/light/dataview-index.svg +1 -0
- package/dist/assets/icons/objects/light/deployment-unit.svg +1 -0
- package/dist/assets/icons/objects/light/design.svg +1 -0
- package/dist/assets/icons/objects/light/diagram.svg +1 -0
- package/dist/assets/icons/objects/light/document-workflow.svg +1 -0
- package/dist/assets/icons/objects/light/document.svg +1 -0
- package/dist/assets/icons/objects/light/domain.svg +1 -0
- package/dist/assets/icons/objects/light/dso.svg +1 -0
- package/dist/assets/icons/objects/light/environment-no-select.svg +1 -0
- package/dist/assets/icons/objects/light/environment-select.svg +1 -0
- package/dist/assets/icons/objects/light/external-object.svg +1 -0
- package/dist/assets/icons/objects/light/file.svg +1 -0
- package/dist/assets/icons/objects/light/folder-open.svg +1 -0
- package/dist/assets/icons/objects/light/folder.svg +1 -0
- package/dist/assets/icons/objects/light/generator-category.svg +1 -0
- package/dist/assets/icons/objects/light/generator.svg +1 -0
- package/dist/assets/icons/objects/light/image.svg +1 -0
- package/dist/assets/icons/objects/light/knowledge-base.svg +1 -0
- package/dist/assets/icons/objects/light/lenguage.svg +1 -0
- package/dist/assets/icons/objects/light/main-object.svg +1 -0
- package/dist/assets/icons/objects/light/masterpage.svg +1 -0
- package/dist/assets/icons/objects/light/menu.svg +1 -0
- package/dist/assets/icons/objects/light/menubar.svg +1 -0
- package/dist/assets/icons/objects/light/mini-app.svg +1 -0
- package/dist/assets/icons/objects/light/module-open.svg +1 -0
- package/dist/assets/icons/objects/light/module.svg +1 -0
- package/dist/assets/icons/objects/light/notification-templates.svg +1 -0
- package/dist/assets/icons/objects/light/object.svg +1 -0
- package/dist/assets/icons/objects/light/offline-database.svg +1 -0
- package/dist/assets/icons/objects/light/orphant-document.svg +1 -0
- package/dist/assets/icons/objects/light/panel-for-sd.svg +1 -0
- package/dist/assets/icons/objects/light/patterns.svg +1 -0
- package/dist/assets/icons/objects/light/procedure.svg +1 -0
- package/dist/assets/icons/objects/light/query.svg +1 -0
- package/dist/assets/icons/objects/light/references.svg +1 -0
- package/dist/assets/icons/objects/light/report.svg +1 -0
- package/dist/assets/icons/objects/light/roles.svg +1 -0
- package/dist/assets/icons/objects/light/stencil.svg +1 -0
- package/dist/assets/icons/objects/light/structured-data-type.svg +1 -0
- package/dist/assets/icons/objects/light/subtype-group.svg +1 -0
- package/dist/assets/icons/objects/light/super-app.svg +1 -0
- package/dist/assets/icons/objects/light/table.svg +1 -0
- package/dist/assets/icons/objects/light/theme-for-sd.svg +1 -0
- package/dist/assets/icons/objects/light/theme-web.svg +1 -0
- package/dist/assets/icons/objects/light/theme.svg +1 -0
- package/dist/assets/icons/objects/light/to-be-defined.svg +1 -0
- package/dist/assets/icons/objects/light/transaction.svg +1 -0
- package/dist/assets/icons/objects/light/url-rewrite.svg +1 -0
- package/dist/assets/icons/objects/light/version.svg +1 -0
- package/dist/assets/icons/objects/light/web-component.svg +1 -0
- package/dist/assets/icons/objects/light/webpanel.svg +1 -0
- package/dist/assets/icons/objects/light/work-panel.svg +1 -0
- package/dist/assets/icons/objects/light/workflow.svg +1 -0
- package/dist/css/mercury.css +736 -0
- package/dist/css/mercury.css.map +1 -0
- package/dist/mercury.scss +3421 -0
- package/notes.md +5 -0
- package/package.json +33 -0
- package/src/_mixins.scss +166 -0
- package/src/assets/fonts/Inter_Black.woff2 +0 -0
- package/src/assets/fonts/Inter_Bold.woff2 +0 -0
- package/src/assets/fonts/Inter_ExtraBold.woff2 +0 -0
- package/src/assets/fonts/Inter_ExtraLight.woff2 +0 -0
- package/src/assets/fonts/Inter_Light.woff2 +0 -0
- package/src/assets/fonts/Inter_Medium.woff2 +0 -0
- package/src/assets/fonts/Inter_Regular.woff2 +0 -0
- package/src/assets/fonts/Inter_SemiBold.woff2 +0 -0
- package/src/assets/fonts/Inter_Thin.woff2 +0 -0
- package/src/assets/icons/objects/dark/api.svg +1 -0
- package/src/assets/icons/objects/dark/attribute.svg +1 -0
- package/src/assets/icons/objects/dark/bg-color.svg +1 -0
- package/src/assets/icons/objects/dark/business-process-diagram.svg +1 -0
- package/src/assets/icons/objects/dark/calendars.svg +1 -0
- package/src/assets/icons/objects/dark/category.svg +1 -0
- package/src/assets/icons/objects/dark/conversational-flows.svg +1 -0
- package/src/assets/icons/objects/dark/customization.svg +1 -0
- package/src/assets/icons/objects/dark/dashboard.svg +1 -0
- package/src/assets/icons/objects/dark/data-provider.svg +1 -0
- package/src/assets/icons/objects/dark/data-selector.svg +1 -0
- package/src/assets/icons/objects/dark/data-view.svg +1 -0
- package/src/assets/icons/objects/dark/datastore-category.svg +1 -0
- package/src/assets/icons/objects/dark/datastore.svg +1 -0
- package/src/assets/icons/objects/dark/dataview-index.svg +1 -0
- package/src/assets/icons/objects/dark/deployment-unit.svg +1 -0
- package/src/assets/icons/objects/dark/design.svg +1 -0
- package/src/assets/icons/objects/dark/diagram.svg +1 -0
- package/src/assets/icons/objects/dark/document-workflow.svg +1 -0
- package/src/assets/icons/objects/dark/document.svg +1 -0
- package/src/assets/icons/objects/dark/domain.svg +1 -0
- package/src/assets/icons/objects/dark/dso.svg +1 -0
- package/src/assets/icons/objects/dark/environment-no-select.svg +1 -0
- package/src/assets/icons/objects/dark/environment-select.svg +1 -0
- package/src/assets/icons/objects/dark/external-object.svg +1 -0
- package/src/assets/icons/objects/dark/file.svg +1 -0
- package/src/assets/icons/objects/dark/folder-open.svg +1 -0
- package/src/assets/icons/objects/dark/folder.svg +1 -0
- package/src/assets/icons/objects/dark/generator-category.svg +1 -0
- package/src/assets/icons/objects/dark/generator.svg +1 -0
- package/src/assets/icons/objects/dark/image.svg +1 -0
- package/src/assets/icons/objects/dark/knowledge-base.svg +1 -0
- package/src/assets/icons/objects/dark/lenguage.svg +1 -0
- package/src/assets/icons/objects/dark/main-object.svg +1 -0
- package/src/assets/icons/objects/dark/masterpage.svg +1 -0
- package/src/assets/icons/objects/dark/menu.svg +1 -0
- package/src/assets/icons/objects/dark/menubar.svg +1 -0
- package/src/assets/icons/objects/dark/mini-app.svg +1 -0
- package/src/assets/icons/objects/dark/module-open.svg +1 -0
- package/src/assets/icons/objects/dark/module.svg +1 -0
- package/src/assets/icons/objects/dark/notification-templates.svg +1 -0
- package/src/assets/icons/objects/dark/object.svg +1 -0
- package/src/assets/icons/objects/dark/offline-database.svg +1 -0
- package/src/assets/icons/objects/dark/orphant-document.svg +1 -0
- package/src/assets/icons/objects/dark/panel-for-sd.svg +1 -0
- package/src/assets/icons/objects/dark/patterns.svg +1 -0
- package/src/assets/icons/objects/dark/procedure.svg +1 -0
- package/src/assets/icons/objects/dark/query.svg +1 -0
- package/src/assets/icons/objects/dark/references.svg +1 -0
- package/src/assets/icons/objects/dark/report.svg +1 -0
- package/src/assets/icons/objects/dark/roles.svg +1 -0
- package/src/assets/icons/objects/dark/stencil.svg +1 -0
- package/src/assets/icons/objects/dark/structured-data-type.svg +1 -0
- package/src/assets/icons/objects/dark/subtype-group.svg +1 -0
- package/src/assets/icons/objects/dark/super-app.svg +1 -0
- package/src/assets/icons/objects/dark/table.svg +1 -0
- package/src/assets/icons/objects/dark/theme-for-sd.svg +1 -0
- package/src/assets/icons/objects/dark/theme-web.svg +1 -0
- package/src/assets/icons/objects/dark/theme.svg +1 -0
- package/src/assets/icons/objects/dark/to-be-defined.svg +1 -0
- package/src/assets/icons/objects/dark/transaction.svg +1 -0
- package/src/assets/icons/objects/dark/url-rewrite.svg +1 -0
- package/src/assets/icons/objects/dark/version.svg +1 -0
- package/src/assets/icons/objects/dark/web-component.svg +1 -0
- package/src/assets/icons/objects/dark/webpanel.svg +1 -0
- package/src/assets/icons/objects/dark/work-panel.svg +1 -0
- package/src/assets/icons/objects/dark/workflow.svg +1 -0
- package/src/assets/icons/objects/light/api.svg +1 -0
- package/src/assets/icons/objects/light/attribute.svg +1 -0
- package/src/assets/icons/objects/light/bg-color.svg +1 -0
- package/src/assets/icons/objects/light/business-process-diagram.svg +1 -0
- package/src/assets/icons/objects/light/calendars.svg +1 -0
- package/src/assets/icons/objects/light/category.svg +1 -0
- package/src/assets/icons/objects/light/conversational-flows.svg +1 -0
- package/src/assets/icons/objects/light/customization.svg +1 -0
- package/src/assets/icons/objects/light/dashboard.svg +1 -0
- package/src/assets/icons/objects/light/data-provider.svg +1 -0
- package/src/assets/icons/objects/light/data-selector.svg +1 -0
- package/src/assets/icons/objects/light/data-view.svg +1 -0
- package/src/assets/icons/objects/light/datastore-category.svg +1 -0
- package/src/assets/icons/objects/light/datastore.svg +1 -0
- package/src/assets/icons/objects/light/dataview-index.svg +1 -0
- package/src/assets/icons/objects/light/deployment-unit.svg +1 -0
- package/src/assets/icons/objects/light/design.svg +1 -0
- package/src/assets/icons/objects/light/diagram.svg +1 -0
- package/src/assets/icons/objects/light/document-workflow.svg +1 -0
- package/src/assets/icons/objects/light/document.svg +1 -0
- package/src/assets/icons/objects/light/domain.svg +1 -0
- package/src/assets/icons/objects/light/dso.svg +1 -0
- package/src/assets/icons/objects/light/environment-no-select.svg +1 -0
- package/src/assets/icons/objects/light/environment-select.svg +1 -0
- package/src/assets/icons/objects/light/external-object.svg +1 -0
- package/src/assets/icons/objects/light/file.svg +1 -0
- package/src/assets/icons/objects/light/folder-open.svg +1 -0
- package/src/assets/icons/objects/light/folder.svg +1 -0
- package/src/assets/icons/objects/light/generator-category.svg +1 -0
- package/src/assets/icons/objects/light/generator.svg +1 -0
- package/src/assets/icons/objects/light/image.svg +1 -0
- package/src/assets/icons/objects/light/knowledge-base.svg +1 -0
- package/src/assets/icons/objects/light/lenguage.svg +1 -0
- package/src/assets/icons/objects/light/main-object.svg +1 -0
- package/src/assets/icons/objects/light/masterpage.svg +1 -0
- package/src/assets/icons/objects/light/menu.svg +1 -0
- package/src/assets/icons/objects/light/menubar.svg +1 -0
- package/src/assets/icons/objects/light/mini-app.svg +1 -0
- package/src/assets/icons/objects/light/module-open.svg +1 -0
- package/src/assets/icons/objects/light/module.svg +1 -0
- package/src/assets/icons/objects/light/notification-templates.svg +1 -0
- package/src/assets/icons/objects/light/object.svg +1 -0
- package/src/assets/icons/objects/light/offline-database.svg +1 -0
- package/src/assets/icons/objects/light/orphant-document.svg +1 -0
- package/src/assets/icons/objects/light/panel-for-sd.svg +1 -0
- package/src/assets/icons/objects/light/patterns.svg +1 -0
- package/src/assets/icons/objects/light/procedure.svg +1 -0
- package/src/assets/icons/objects/light/query.svg +1 -0
- package/src/assets/icons/objects/light/references.svg +1 -0
- package/src/assets/icons/objects/light/report.svg +1 -0
- package/src/assets/icons/objects/light/roles.svg +1 -0
- package/src/assets/icons/objects/light/stencil.svg +1 -0
- package/src/assets/icons/objects/light/structured-data-type.svg +1 -0
- package/src/assets/icons/objects/light/subtype-group.svg +1 -0
- package/src/assets/icons/objects/light/super-app.svg +1 -0
- package/src/assets/icons/objects/light/table.svg +1 -0
- package/src/assets/icons/objects/light/theme-for-sd.svg +1 -0
- package/src/assets/icons/objects/light/theme-web.svg +1 -0
- package/src/assets/icons/objects/light/theme.svg +1 -0
- package/src/assets/icons/objects/light/to-be-defined.svg +1 -0
- package/src/assets/icons/objects/light/transaction.svg +1 -0
- package/src/assets/icons/objects/light/url-rewrite.svg +1 -0
- package/src/assets/icons/objects/light/version.svg +1 -0
- package/src/assets/icons/objects/light/web-component.svg +1 -0
- package/src/assets/icons/objects/light/webpanel.svg +1 -0
- package/src/assets/icons/objects/light/work-panel.svg +1 -0
- package/src/assets/icons/objects/light/workflow.svg +1 -0
- package/src/base/button/_icons.scss +139 -0
- package/src/base/button/_styles-2.scss +275 -0
- package/src/base/button/_styles.scss +50 -0
- package/src/base/button/_tokens.scss +85 -0
- package/src/base/icons/sass/icons-selectors.scss +12 -0
- package/src/base/icons/sass/multicolor/_objects.scss +1948 -0
- package/src/components/_template/_styles.scss +4 -0
- package/src/components/_template/_tokens.scss +2 -0
- package/src/components/checkbox/_styles.scss +7 -0
- package/src/components/checkbox/_tokens.scss +14 -0
- package/src/components/shortcuts/_styles.scss +30 -0
- package/src/components/shortcuts/_tokens.scss +21 -0
- package/src/components/tree-view/_styles.scss +169 -0
- package/src/components/tree-view/_tokens.scss +60 -0
- package/src/icons/_settings/monochrome.svg.template +79 -0
- package/src/icons/_settings/multicolor.svg.template +126 -0
- package/src/icons/_settings/states-monochrome.json +18 -0
- package/src/icons/objects/api.svg +5 -0
- package/src/icons/objects/attribute.svg +6 -0
- package/src/icons/objects/bg-color.svg +6 -0
- package/src/icons/objects/business-process-diagram.svg +5 -0
- package/src/icons/objects/calendars.svg +5 -0
- package/src/icons/objects/category.svg +5 -0
- package/src/icons/objects/conversational-flows.svg +5 -0
- package/src/icons/objects/customization.svg +5 -0
- package/src/icons/objects/dashboard.svg +5 -0
- package/src/icons/objects/data-provider.svg +6 -0
- package/src/icons/objects/data-selector.svg +6 -0
- package/src/icons/objects/data-view.svg +6 -0
- package/src/icons/objects/datastore-category.svg +6 -0
- package/src/icons/objects/datastore.svg +6 -0
- package/src/icons/objects/dataview-index.svg +6 -0
- package/src/icons/objects/deployment-unit.svg +5 -0
- package/src/icons/objects/design.svg +6 -0
- package/src/icons/objects/diagram.svg +5 -0
- package/src/icons/objects/document-workflow.svg +5 -0
- package/src/icons/objects/document.svg +5 -0
- package/src/icons/objects/domain.svg +5 -0
- package/src/icons/objects/dso.svg +6 -0
- package/src/icons/objects/environment-no-select.svg +5 -0
- package/src/icons/objects/environment-select.svg +6 -0
- package/src/icons/objects/external-object.svg +5 -0
- package/src/icons/objects/file.svg +5 -0
- package/src/icons/objects/folder-open.svg +5 -0
- package/src/icons/objects/folder.svg +5 -0
- package/src/icons/objects/generator-category.svg +6 -0
- package/src/icons/objects/generator.svg +6 -0
- package/src/icons/objects/image.svg +5 -0
- package/src/icons/objects/knowledge-base.svg +7 -0
- package/src/icons/objects/lenguage.svg +5 -0
- package/src/icons/objects/main-object.svg +13 -0
- package/src/icons/objects/masterpage.svg +5 -0
- package/src/icons/objects/menu.svg +5 -0
- package/src/icons/objects/menubar.svg +6 -0
- package/src/icons/objects/mini-app.svg +8 -0
- package/src/icons/objects/module-open.svg +5 -0
- package/src/icons/objects/module.svg +5 -0
- package/src/icons/objects/notification-templates.svg +5 -0
- package/src/icons/objects/object.svg +5 -0
- package/src/icons/objects/offline-database.svg +6 -0
- package/src/icons/objects/orphant-document.svg +5 -0
- package/src/icons/objects/panel-for-sd.svg +6 -0
- package/src/icons/objects/patterns.svg +6 -0
- package/src/icons/objects/procedure.svg +5 -0
- package/src/icons/objects/query.svg +6 -0
- package/src/icons/objects/references.svg +5 -0
- package/src/icons/objects/report.svg +5 -0
- package/src/icons/objects/roles.svg +5 -0
- package/src/icons/objects/stencil.svg +10 -0
- package/src/icons/objects/structured-data-type.svg +7 -0
- package/src/icons/objects/subtype-group.svg +5 -0
- package/src/icons/objects/super-app.svg +8 -0
- package/src/icons/objects/table.svg +5 -0
- package/src/icons/objects/theme-for-sd.svg +6 -0
- package/src/icons/objects/theme-web.svg +9 -0
- package/src/icons/objects/theme.svg +6 -0
- package/src/icons/objects/to-be-defined.svg +5 -0
- package/src/icons/objects/transaction.svg +5 -0
- package/src/icons/objects/url-rewrite.svg +5 -0
- package/src/icons/objects/version.svg +8 -0
- package/src/icons/objects/web-component.svg +5 -0
- package/src/icons/objects/webpanel.svg +6 -0
- package/src/icons/objects/work-panel.svg +5 -0
- package/src/icons/objects/workflow.svg +5 -0
- package/src/mercury.scss +294 -0
- package/src/tokens/primitive/_border.scss +13 -0
- package/src/tokens/primitive/_color.scss +109 -0
- package/src/tokens/primitive/_elevation.scss +38 -0
- package/src/tokens/primitive/_font.scss +37 -0
- package/src/tokens/primitive/_spacing.scss +12 -0
- package/src/tokens/primitive/_timing.scss +6 -0
- package/src/tokens/semantic/_accent.scss +7 -0
- package/src/tokens/semantic/_border.scss +16 -0
- package/src/tokens/semantic/_heading.scss +3 -0
- package/src/tokens/semantic/_icon.scss +18 -0
- package/src/tokens/semantic/_item.scss +21 -0
- package/src/tokens/semantic/_other.scss +46 -0
- package/src/tokens/semantic/_text.scss +16 -0
- package/src/tokens/semantic/_tokens.scss +7 -0
- package/svg-generator/processor-sass.js +301 -0
- package/svg-generator/processor-svg.js +397 -0
- package/svg-generator/processor-ts.js +0 -0
- package/temporary-tests/test-button-icons/index.html +48 -0
- package/temporary-tests/test-icons/index.html +247 -0
- package/test/test.scss +3 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import path from "path";
|
|
5
|
+
|
|
6
|
+
// Define the path to the parent directory containing the folders
|
|
7
|
+
const SRC_DIRECTORY = await process.argv[2];
|
|
8
|
+
const OUTPUT_DIRECTORY = await process.argv[3];
|
|
9
|
+
const MONOCHROME_STATES_FILE = await process.argv[4];
|
|
10
|
+
const MONOCHROME_ID = "monochrome";
|
|
11
|
+
const MULTICOLOR_ID = "multicolor";
|
|
12
|
+
let monochromeLists = [];
|
|
13
|
+
let multicolorLists = [];
|
|
14
|
+
|
|
15
|
+
function getStatesJson() {
|
|
16
|
+
try {
|
|
17
|
+
const statesJson = fs.readFileSync(`./${MONOCHROME_STATES_FILE}`, "utf8");
|
|
18
|
+
return JSON.parse(statesJson);
|
|
19
|
+
} catch (error) {
|
|
20
|
+
if (error.code === "ENOENT") {
|
|
21
|
+
console.error(
|
|
22
|
+
`states.json not found in /${SRC_DIRECTORY}. All states will be generated for every icon.`
|
|
23
|
+
);
|
|
24
|
+
} else {
|
|
25
|
+
console.error(
|
|
26
|
+
`Error reading ${SRC_DIRECTORY}/states.json:`,
|
|
27
|
+
error.message
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Function to read the directories and files
|
|
34
|
+
function readDirectoriesAndFiles(directoryPath) {
|
|
35
|
+
// Read the contents of the directory
|
|
36
|
+
const files = fs.readdirSync(directoryPath);
|
|
37
|
+
|
|
38
|
+
// Filter out only directories
|
|
39
|
+
const directories = files.filter((file) =>
|
|
40
|
+
fs.statSync(path.join(directoryPath, file)).isDirectory()
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
// Initialize an array to store the objects
|
|
44
|
+
const result = [];
|
|
45
|
+
|
|
46
|
+
// Iterate over each directory
|
|
47
|
+
directories.forEach((directory) => {
|
|
48
|
+
const categoryName = directory;
|
|
49
|
+
const icons = [];
|
|
50
|
+
|
|
51
|
+
// Read the contents of the current directory
|
|
52
|
+
const filesInDirectory = fs.readdirSync(
|
|
53
|
+
path.join(directoryPath, directory)
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
// Filter out only SVG files
|
|
57
|
+
const svgFiles = filesInDirectory.filter(
|
|
58
|
+
(file) => path.extname(file).toLowerCase() === ".svg"
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
// Add each SVG file to the icons array
|
|
62
|
+
svgFiles.forEach((svgFile) => {
|
|
63
|
+
icons.push(path.parse(svgFile).name);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// Create an object with category and icons array and push it to the result array
|
|
67
|
+
result.push({ categoryName, icons });
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function writeSassFiles(iconsLists) {
|
|
74
|
+
// Create the 'sass-output' directory if it doesn't exist
|
|
75
|
+
if (!fs.existsSync(OUTPUT_DIRECTORY)) {
|
|
76
|
+
fs.mkdirSync(OUTPUT_DIRECTORY);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
iconsLists.forEach((iconsList) => {
|
|
80
|
+
if (!iconsList.icons.length) {
|
|
81
|
+
//only proceed if the list is not empty
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const iconsType = getIconsType(iconsList);
|
|
85
|
+
|
|
86
|
+
// Create .sass file
|
|
87
|
+
const sassFileName = `_${iconsList.categoryName}.scss`;
|
|
88
|
+
const sassFilePath = path.join(
|
|
89
|
+
`${OUTPUT_DIRECTORY}/${iconsType}`,
|
|
90
|
+
sassFileName
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
// Write sass list to .sass file
|
|
94
|
+
let sassContent = `$icons-${iconsList.categoryName}: ${iconsList.icons.join(
|
|
95
|
+
", "
|
|
96
|
+
)};`;
|
|
97
|
+
|
|
98
|
+
if (iconsType === MONOCHROME_ID) {
|
|
99
|
+
sassContent += monochromeStyles(iconsList);
|
|
100
|
+
monochromeLists.push(iconsList.categoryName);
|
|
101
|
+
} else if (iconsType === MULTICOLOR_ID) {
|
|
102
|
+
sassContent += multicolorStyles(iconsList);
|
|
103
|
+
multicolorLists.push(iconsList.categoryName);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
createFolder(iconsType);
|
|
107
|
+
fs.writeFileSync(sassFilePath, sassContent);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function createFolder(type) {
|
|
112
|
+
const path = `${OUTPUT_DIRECTORY}/${type}`;
|
|
113
|
+
if (!fs.existsSync(path)) {
|
|
114
|
+
fs.mkdirSync(path);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* @description It returns the icon type (multicolor or monochrome). This is needed to determine how to write the sass file css selectors.
|
|
120
|
+
*/
|
|
121
|
+
function getIconsType(iconsList) {
|
|
122
|
+
if (statesJson === undefined) {
|
|
123
|
+
/*If no monochrome states file is found, the category is considered as "multicolor" */
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const categoryName = iconsList.categoryName;
|
|
127
|
+
const categoryFound = statesJson[categoryName];
|
|
128
|
+
if (categoryFound) {
|
|
129
|
+
return MONOCHROME_ID;
|
|
130
|
+
} else {
|
|
131
|
+
return MULTICOLOR_ID;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function monochromeStyles(iconsList) {
|
|
136
|
+
let output = "";
|
|
137
|
+
let list = "";
|
|
138
|
+
const category = iconsList.categoryName;
|
|
139
|
+
iconsList.icons.forEach((icon) => {
|
|
140
|
+
list += `
|
|
141
|
+
// ${icon}.svg`;
|
|
142
|
+
const states = Object.keys(statesJson[category][icon]["states"]);
|
|
143
|
+
states.forEach((state) => {
|
|
144
|
+
list += `
|
|
145
|
+
&-${icon}--${state}-light {
|
|
146
|
+
--icon-path :url("#{$icons-path}icons/${category}/light/${icon}.svg#${state}");
|
|
147
|
+
}
|
|
148
|
+
&-${icon}--${state}-dark {
|
|
149
|
+
--icon-path :url("#{$icons-path}icons/${category}/dark/${icon}.svg#${state}");
|
|
150
|
+
}
|
|
151
|
+
`;
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
output += `
|
|
155
|
+
%icon__${iconsList.categoryName} {
|
|
156
|
+
${list}
|
|
157
|
+
}
|
|
158
|
+
`;
|
|
159
|
+
return output;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function multicolorStyles(iconsList) {
|
|
163
|
+
let output = "";
|
|
164
|
+
let list = "";
|
|
165
|
+
const category = iconsList.categoryName;
|
|
166
|
+
iconsList.icons.forEach((icon) => {
|
|
167
|
+
list += `
|
|
168
|
+
// ${icon}.svg
|
|
169
|
+
&-${icon}--enabled-light {
|
|
170
|
+
--icon-path: url("#{$icons-path}icons/${iconsList.categoryName}/light/${icon}.svg#enabled");
|
|
171
|
+
}
|
|
172
|
+
&-${icon}--enabled-dark {
|
|
173
|
+
--icon-path: url("#{$icons-path}icons/${iconsList.categoryName}/dark/${icon}.svg#enabled");
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
&-${icon}--hover-light {
|
|
177
|
+
--icon-path: url("#{$icons-path}icons/${iconsList.categoryName}/light/${icon}.svg#hover");
|
|
178
|
+
}
|
|
179
|
+
&-${icon}--hover-dark {
|
|
180
|
+
--icon-path: url("#{$icons-path}icons/${iconsList.categoryName}/dark/${icon}.svg#hover");
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
&-${icon}--active-light {
|
|
184
|
+
--icon-path: url("#{$icons-path}icons/${iconsList.categoryName}/light/${icon}.svg#active");
|
|
185
|
+
}
|
|
186
|
+
&-${icon}--active-dark {
|
|
187
|
+
--icon-path: url("#{$icons-path}icons/${iconsList.categoryName}/dark/${icon}.svg#active");
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
&-${icon}--disabled-light {
|
|
191
|
+
--icon-path: url("#{$icons-path}icons/${iconsList.categoryName}/light/${icon}.svg#disabled");
|
|
192
|
+
}
|
|
193
|
+
&-${icon}--disabled-dark {
|
|
194
|
+
--icon-path: url("#{$icons-path}icons/${iconsList.categoryName}/dark/${icon}.svg#disabled");
|
|
195
|
+
}
|
|
196
|
+
`;
|
|
197
|
+
});
|
|
198
|
+
output += `
|
|
199
|
+
%icon__${iconsList.categoryName} {
|
|
200
|
+
${list}
|
|
201
|
+
}
|
|
202
|
+
`;
|
|
203
|
+
return output;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* @description this function writes on disk a single .scss file that imports each .scss file for each icons category. This is the only .scss file that the final user should import later. (One .scss file per icons category is more easy to understand and inspect, rather than all the icons categories on a single file)
|
|
208
|
+
*/
|
|
209
|
+
function writeImportScss(iconsLists) {
|
|
210
|
+
// Create .sass file
|
|
211
|
+
const sassFileName = `icons-selectors.scss`;
|
|
212
|
+
const sassFilePath = path.join(OUTPUT_DIRECTORY, sassFileName);
|
|
213
|
+
|
|
214
|
+
let sassContentMonochrome = "";
|
|
215
|
+
|
|
216
|
+
/* --------------------------
|
|
217
|
+
Import monochrome icons lists
|
|
218
|
+
--------------------------- */
|
|
219
|
+
|
|
220
|
+
if (monochromeLists.length) {
|
|
221
|
+
sassContentMonochrome += `//Monochrome lists
|
|
222
|
+
`;
|
|
223
|
+
|
|
224
|
+
monochromeLists.forEach((list) => {
|
|
225
|
+
sassContentMonochrome += `
|
|
226
|
+
@import "${MONOCHROME_ID}/${list}";`;
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
let allMonochromeLists = `
|
|
230
|
+
$all-monochrome-lists: (`;
|
|
231
|
+
monochromeLists.forEach((list, i) => {
|
|
232
|
+
allMonochromeLists += `
|
|
233
|
+
${list}: $icons-${list}`;
|
|
234
|
+
|
|
235
|
+
if (i === monochromeLists.length - 1) {
|
|
236
|
+
allMonochromeLists += `
|
|
237
|
+
);`;
|
|
238
|
+
} else {
|
|
239
|
+
allMonochromeLists += `,`;
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
sassContentMonochrome += `
|
|
244
|
+
${allMonochromeLists}`;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/* --------------------------
|
|
248
|
+
Import multicolor icons lists
|
|
249
|
+
--------------------------- */
|
|
250
|
+
|
|
251
|
+
let sassContentMulticolor = "";
|
|
252
|
+
if (multicolorLists.length) {
|
|
253
|
+
let iconsImports = "";
|
|
254
|
+
sassContentMulticolor += `
|
|
255
|
+
|
|
256
|
+
//Multicolor lists
|
|
257
|
+
`;
|
|
258
|
+
multicolorLists.forEach((list) => {
|
|
259
|
+
iconsImports += `@import "${MULTICOLOR_ID}/${list}";\n`;
|
|
260
|
+
});
|
|
261
|
+
let allMulticolorLists = `
|
|
262
|
+
@mixin icons-lists($icons-path: "./assets/icons") {
|
|
263
|
+
${iconsImports}
|
|
264
|
+
$all-multicolor-lists: (`;
|
|
265
|
+
multicolorLists.forEach((list, i) => {
|
|
266
|
+
allMulticolorLists += `
|
|
267
|
+
${list}: $icons-${list}`;
|
|
268
|
+
|
|
269
|
+
if (i === multicolorLists.length - 1) {
|
|
270
|
+
allMulticolorLists += `
|
|
271
|
+
);`;
|
|
272
|
+
} else {
|
|
273
|
+
allMulticolorLists += `,`;
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
sassContentMulticolor += `
|
|
278
|
+
${allMulticolorLists}
|
|
279
|
+
}`;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
fs.writeFileSync(sassFilePath, sassContentMulticolor);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* @description It clears the OUTPUT_DIRECTORY
|
|
287
|
+
*/
|
|
288
|
+
function clearOutputDir() {
|
|
289
|
+
fs.rmSync(OUTPUT_DIRECTORY, { recursive: true, force: true }, (err) => {
|
|
290
|
+
if (err) {
|
|
291
|
+
throw err;
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
//run
|
|
297
|
+
const statesJson = getStatesJson();
|
|
298
|
+
clearOutputDir();
|
|
299
|
+
const iconsLists = readDirectoriesAndFiles(SRC_DIRECTORY);
|
|
300
|
+
writeSassFiles(iconsLists);
|
|
301
|
+
writeImportScss(iconsLists);
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { glob } from "glob";
|
|
2
|
+
import { readFileSync, writeFile, existsSync, mkdirSync, rmSync } from "fs";
|
|
3
|
+
//import * as path from "path";
|
|
4
|
+
import { dirname, basename, join } from "path";
|
|
5
|
+
import { optimize } from "svgo";
|
|
6
|
+
import * as cheerio from "cheerio";
|
|
7
|
+
|
|
8
|
+
const REGEX_USED_VARS = new RegExp("--i\\d\\d", "g");
|
|
9
|
+
const REGEX_REMOVE_VARS = new RegExp("--i\\d\\d:[^;]+;", "g");
|
|
10
|
+
const SRC_DIRECTORY = await process.argv[2];
|
|
11
|
+
const OUTPUT_DIRECTORY = await process.argv[3];
|
|
12
|
+
const MULTICOLOR_TEMPLATE_SVG = await process.argv[4];
|
|
13
|
+
const MONOCHROME_TEMPLATE_SVG = await process.argv[5];
|
|
14
|
+
const MONOCHROME_STATES_FILE = process.argv[6];
|
|
15
|
+
const SVG_FIGURES = [
|
|
16
|
+
"rect",
|
|
17
|
+
"circle",
|
|
18
|
+
"ellipse",
|
|
19
|
+
"line",
|
|
20
|
+
"path",
|
|
21
|
+
"polygon",
|
|
22
|
+
"polyline",
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const MULTICOLOR_TEMPLATE = readAllTextFile(MULTICOLOR_TEMPLATE_SVG);
|
|
26
|
+
const MONOCHROME_TEMPLATE = readAllTextFile(MONOCHROME_TEMPLATE_SVG);
|
|
27
|
+
|
|
28
|
+
const files = await glob(`${SRC_DIRECTORY}/**/*.svg`);
|
|
29
|
+
const statesJson = getStatesJson();
|
|
30
|
+
|
|
31
|
+
//ch is for Cheerio
|
|
32
|
+
let ch;
|
|
33
|
+
|
|
34
|
+
clearOutputDir();
|
|
35
|
+
|
|
36
|
+
files.forEach((file) => {
|
|
37
|
+
processSvg(file, readAllTextFile(file), getOutputPaths(file));
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @description It removes the OUTPUT_DIR, and it then creates the folder.
|
|
42
|
+
*/
|
|
43
|
+
function clearOutputDir() {
|
|
44
|
+
rmSync(OUTPUT_DIRECTORY, { recursive: true, force: true }, (err) => {
|
|
45
|
+
if (err) {
|
|
46
|
+
throw err;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function getStatesJson() {
|
|
52
|
+
try {
|
|
53
|
+
const statesJson = readFileSync(`./${MONOCHROME_STATES_FILE}`, "utf8");
|
|
54
|
+
return JSON.parse(statesJson);
|
|
55
|
+
} catch (error) {
|
|
56
|
+
if (error.code === "ENOENT") {
|
|
57
|
+
console.error(
|
|
58
|
+
`states.json not found in /${SRC_DIRECTORY}. All states will be generated for every icon.`
|
|
59
|
+
);
|
|
60
|
+
} else {
|
|
61
|
+
console.error(
|
|
62
|
+
`Error reading ${SRC_DIRECTORY}/states.json:`,
|
|
63
|
+
error.message
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function readAllTextFile(file) {
|
|
70
|
+
try {
|
|
71
|
+
return readFileSync(file, "utf8");
|
|
72
|
+
} catch (err) {
|
|
73
|
+
throw err;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function getOutputPaths(file) {
|
|
78
|
+
const categoryFolder = basename(dirname(file));
|
|
79
|
+
const folder = join(OUTPUT_DIRECTORY, categoryFolder);
|
|
80
|
+
const directoryLight = join(folder, "light");
|
|
81
|
+
const directoryDark = join(folder, "dark");
|
|
82
|
+
const fileName = basename(file);
|
|
83
|
+
|
|
84
|
+
if (!existsSync(directoryLight)) {
|
|
85
|
+
mkdirSync(directoryLight, { recursive: true });
|
|
86
|
+
}
|
|
87
|
+
if (!existsSync(directoryDark)) {
|
|
88
|
+
mkdirSync(directoryDark, { recursive: true });
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
light: join(directoryLight, fileName),
|
|
93
|
+
dark: join(directoryDark, fileName),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function processSvg(path, data, output) {
|
|
98
|
+
ch = cheerio.load(data, { xmlMode: true });
|
|
99
|
+
const chSvg = ch("svg");
|
|
100
|
+
const contents = chSvg.contents();
|
|
101
|
+
const size = chSvg.attr("viewBox");
|
|
102
|
+
const width = size.split(" ")[2];
|
|
103
|
+
const height = size.split(" ")[3];
|
|
104
|
+
const content = parseContent(contents);
|
|
105
|
+
const templateInfo = getTemplate(path);
|
|
106
|
+
const template = templateInfo["template"];
|
|
107
|
+
const states = templateInfo["states"];
|
|
108
|
+
let svg = template;
|
|
109
|
+
|
|
110
|
+
if (states !== undefined) {
|
|
111
|
+
//only for monochrome icons. states is defined only for monochrome icons.
|
|
112
|
+
svg = removeUnusedStates(svg, states);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
svg = setSize(svg, width, height);
|
|
116
|
+
svg = setContent(svg, content);
|
|
117
|
+
svg = setX(svg, width, states);
|
|
118
|
+
|
|
119
|
+
if (states === undefined) {
|
|
120
|
+
//only for multicolor icons.
|
|
121
|
+
svg = removeUnusedVars(svg, content, path);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
writeAllTextFile(output.light, compressSvg(setColorScheme(svg, "light")));
|
|
125
|
+
writeAllTextFile(output.dark, compressSvg(setColorScheme(svg, "dark")));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @description it removes the unused styles, views and uses from the svg. This is only for the monochrome icons. The list of states for every icon is defined on states-monochrome.json
|
|
130
|
+
*/
|
|
131
|
+
function removeUnusedStates(template, states) {
|
|
132
|
+
const templateHtml = ch.load(template, null, false);
|
|
133
|
+
|
|
134
|
+
for (const state in states) {
|
|
135
|
+
const selected = states[state];
|
|
136
|
+
|
|
137
|
+
if (!selected) {
|
|
138
|
+
templateHtml(`style[data-state="${state}"]`).remove();
|
|
139
|
+
templateHtml(`view[id="${state}"]`).remove();
|
|
140
|
+
templateHtml(`use[data-state="${state}"]`).remove();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return templateHtml.html();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function getTemplate(path) {
|
|
148
|
+
if (statesJson) {
|
|
149
|
+
//states json is used for coloring monochrome icons
|
|
150
|
+
let iconPath = path.split("\\");
|
|
151
|
+
|
|
152
|
+
if (iconPath.length === 2) {
|
|
153
|
+
// no category. icon is direct children of the source folder
|
|
154
|
+
iconPath.splice(0, 1);
|
|
155
|
+
}
|
|
156
|
+
if (iconPath.length > 2) {
|
|
157
|
+
iconPath = iconPath.slice(-2);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
//remove icon file extension
|
|
161
|
+
const fileNameExtension = iconPath[iconPath.length - 1];
|
|
162
|
+
const fileName = getIconName(fileNameExtension);
|
|
163
|
+
iconPath[iconPath.length - 1] = fileName;
|
|
164
|
+
|
|
165
|
+
//find the icon "states" in states.json. If "states" is returned it means this is a monochrome colored icon, otherwise it is considered a multicolor icon.
|
|
166
|
+
const iconStates = getIconStates(statesJson, iconPath);
|
|
167
|
+
|
|
168
|
+
if (iconStates !== undefined) {
|
|
169
|
+
return {
|
|
170
|
+
template: MONOCHROME_TEMPLATE,
|
|
171
|
+
states: iconStates,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
//if iconStates is undefined, this is likely to be a multicolor icon
|
|
175
|
+
return {
|
|
176
|
+
template: MULTICOLOR_TEMPLATE,
|
|
177
|
+
states: undefined,
|
|
178
|
+
};
|
|
179
|
+
} else {
|
|
180
|
+
//SOURCE_FOLDER/states-monochrome.json is needed to process monochrome icons.
|
|
181
|
+
return {
|
|
182
|
+
template: MULTICOLOR_TEMPLATE,
|
|
183
|
+
states: undefined,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function getIconName(fileNameExtension) {
|
|
189
|
+
// Find the position of the last dot (.)
|
|
190
|
+
const dotIndex = fileNameExtension.lastIndexOf(".");
|
|
191
|
+
// If dotIndex is greater than 0, return the substring before the last dot
|
|
192
|
+
if (dotIndex > 0) {
|
|
193
|
+
const fileName = fileNameExtension.slice(0, dotIndex);
|
|
194
|
+
return fileName;
|
|
195
|
+
}
|
|
196
|
+
// If no dot is found or it's the first character, return the original string
|
|
197
|
+
return fileNameExtension;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function getIconStates(stateObj, iconPath, i = 0) {
|
|
201
|
+
// i has to be the index of the category folder in the path, or the icon name.
|
|
202
|
+
|
|
203
|
+
// Base case: if obj is not an object or is null, return undefined
|
|
204
|
+
if (typeof stateObj !== "object" || stateObj === null) {
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const key = [iconPath[i]];
|
|
209
|
+
|
|
210
|
+
// Check if the current object has the desired key
|
|
211
|
+
if (stateObj.hasOwnProperty(key)) {
|
|
212
|
+
// If the key has a "states" property, return its value
|
|
213
|
+
if (stateObj[key].hasOwnProperty("states")) {
|
|
214
|
+
return stateObj[key]["states"];
|
|
215
|
+
} else {
|
|
216
|
+
return getIconStates(stateObj[key], iconPath, i + 1);
|
|
217
|
+
}
|
|
218
|
+
} else {
|
|
219
|
+
//icon not found
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
function setSize(svg, width, height) {
|
|
225
|
+
return svg.replaceAll("$width$", width).replaceAll("$height$", height);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
function setContent(svg, content) {
|
|
229
|
+
return svg.replace("$content$", content);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function setX(svg, width, states) {
|
|
233
|
+
const size = parseInt(width);
|
|
234
|
+
|
|
235
|
+
if (states === undefined) {
|
|
236
|
+
//if icons has no states, if because is multicolor
|
|
237
|
+
return svg
|
|
238
|
+
.replaceAll("$x-enabled$", size * 0)
|
|
239
|
+
.replaceAll("$x-hover$", size * 1)
|
|
240
|
+
.replaceAll("$x-active$", size * 2)
|
|
241
|
+
.replaceAll("$x-disabled$", size * 3);
|
|
242
|
+
} else {
|
|
243
|
+
//if icons has states, if because is monochrome
|
|
244
|
+
let counter = 0;
|
|
245
|
+
for (let state in states) {
|
|
246
|
+
if (states[state]) {
|
|
247
|
+
svg = svg.replaceAll(`$x-${state}$`, size * counter);
|
|
248
|
+
counter++;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return svg;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* @description For every figure (path, circle, etc) it will update the fill value with a css var()
|
|
257
|
+
* that matches the class name. For example, if the class name is "--icon-04" the fill value will be
|
|
258
|
+
* updated to "var(--icon-04)".
|
|
259
|
+
* @argument content: it expects to be a cheerio virtual DOM.
|
|
260
|
+
*/
|
|
261
|
+
function parseContent(content) {
|
|
262
|
+
const svgFigures = content.find(SVG_FIGURES.join(","));
|
|
263
|
+
let updatedContent = "";
|
|
264
|
+
|
|
265
|
+
svgFigures.each((i, svgFigure) => {
|
|
266
|
+
let cssClasses = svgFigure.attribs.class;
|
|
267
|
+
let colorClass;
|
|
268
|
+
let isMultiColor = false;
|
|
269
|
+
let hasFill = svgFigure.attribs.fill;
|
|
270
|
+
const hasStroke = svgFigure.attribs.stroke;
|
|
271
|
+
|
|
272
|
+
//temporary fix
|
|
273
|
+
if (!hasFill) {
|
|
274
|
+
svgFigure.attribs.fill = "black";
|
|
275
|
+
hasFill = true;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
if (cssClasses) {
|
|
279
|
+
cssClasses = cssClasses.split(" ");
|
|
280
|
+
colorClass = cssClasses.find((cssClass) => cssClass.includes("--i"));
|
|
281
|
+
//figures that have a class '--i**' are multicolor icons. A single --i** is expected for every figure.
|
|
282
|
+
if (colorClass !== undefined) {
|
|
283
|
+
isMultiColor = true;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
//fill (is not a linear icon)
|
|
288
|
+
if (hasFill) {
|
|
289
|
+
if (isMultiColor) {
|
|
290
|
+
svgFigure.attribs.fill = `var(${colorClass})`;
|
|
291
|
+
} else {
|
|
292
|
+
svgFigure.attribs.fill = `var(--icon-color)`;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
//stroke (is a linear icon)
|
|
297
|
+
if (hasStroke) {
|
|
298
|
+
if (isMultiColor) {
|
|
299
|
+
svgFigure.attribs.stroke = `var(${colorClass})`;
|
|
300
|
+
} else {
|
|
301
|
+
svgFigure.attribs.stroke = `var(--icon-color)`;
|
|
302
|
+
}
|
|
303
|
+
const strokeWidth = svgFigure.attribs.strokeWidth;
|
|
304
|
+
svgFigure.attribs.strokeWidth = strokeWidth;
|
|
305
|
+
//prevent "automatic" fill if "Remove svg element fill" option was not activated on SVG Export figma plugin.
|
|
306
|
+
svgFigure.attribs.fill = "none";
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
//Remove class, not needed anymore
|
|
310
|
+
delete svgFigure.attribs.class;
|
|
311
|
+
//Remove style, if any;
|
|
312
|
+
delete svgFigure.attribs.style;
|
|
313
|
+
//convert object to string
|
|
314
|
+
updatedContent += ch.html(svgFigure);
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
return updatedContent;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
function removeUnusedVars(svg, content, path) {
|
|
321
|
+
let usedVars = content.match(REGEX_USED_VARS);
|
|
322
|
+
if (usedVars) {
|
|
323
|
+
//remove repeated vars
|
|
324
|
+
usedVars = usedVars.filter((item, index) => {
|
|
325
|
+
return usedVars.indexOf(item) === index;
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
return svg.replace(REGEX_REMOVE_VARS, (match) => {
|
|
329
|
+
if (usedVars.includes(match.slice(0, 5))) {
|
|
330
|
+
return match;
|
|
331
|
+
}
|
|
332
|
+
return "";
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function setColorScheme(svg, colorScheme) {
|
|
337
|
+
return svg.replaceAll("$color-scheme$", colorScheme);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
function compressSvg(svg) {
|
|
341
|
+
svg = optimizeSvg(svg);
|
|
342
|
+
svg = minifyCssVars(svg);
|
|
343
|
+
return svg;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
function optimizeSvg(svg) {
|
|
347
|
+
return optimize(svg, {
|
|
348
|
+
multipass: true,
|
|
349
|
+
plugins: [
|
|
350
|
+
{
|
|
351
|
+
name: "preset-default",
|
|
352
|
+
params: {
|
|
353
|
+
overrides: {
|
|
354
|
+
cleanupIds: {
|
|
355
|
+
preserve: [
|
|
356
|
+
"enabled",
|
|
357
|
+
"hover",
|
|
358
|
+
"active",
|
|
359
|
+
"disabled",
|
|
360
|
+
"on-surface",
|
|
361
|
+
"on-primary",
|
|
362
|
+
"on-primary--active",
|
|
363
|
+
],
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
},
|
|
367
|
+
},
|
|
368
|
+
],
|
|
369
|
+
}).data;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
function minifyCssVars(svg) {
|
|
373
|
+
const map = {
|
|
374
|
+
"--i01": "--a",
|
|
375
|
+
"--i02": "--b",
|
|
376
|
+
"--i03": "--c",
|
|
377
|
+
"--i04": "--d",
|
|
378
|
+
"--i05": "--e",
|
|
379
|
+
"--i06": "--f",
|
|
380
|
+
"--i07": "--g",
|
|
381
|
+
"--i08": "--h",
|
|
382
|
+
"--i09": "--i",
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
return svg.replace(REGEX_USED_VARS, (match) => {
|
|
386
|
+
return map[match];
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
function writeAllTextFile(filePath, data) {
|
|
391
|
+
writeFile(filePath, data, "utf8", (err) => {
|
|
392
|
+
if (err) {
|
|
393
|
+
console.error("Error writing to output file:", err);
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
}
|
|
File without changes
|