@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.
Files changed (399) hide show
  1. package/.editorconfig +16 -0
  2. package/.prettierrc.json +13 -0
  3. package/dist/assets/fonts/Inter_Black.woff2 +0 -0
  4. package/dist/assets/fonts/Inter_Bold.woff2 +0 -0
  5. package/dist/assets/fonts/Inter_ExtraBold.woff2 +0 -0
  6. package/dist/assets/fonts/Inter_ExtraLight.woff2 +0 -0
  7. package/dist/assets/fonts/Inter_Light.woff2 +0 -0
  8. package/dist/assets/fonts/Inter_Medium.woff2 +0 -0
  9. package/dist/assets/fonts/Inter_Regular.woff2 +0 -0
  10. package/dist/assets/fonts/Inter_SemiBold.woff2 +0 -0
  11. package/dist/assets/fonts/Inter_Thin.woff2 +0 -0
  12. package/dist/assets/icons/objects/dark/api.svg +1 -0
  13. package/dist/assets/icons/objects/dark/attribute.svg +1 -0
  14. package/dist/assets/icons/objects/dark/bg-color.svg +1 -0
  15. package/dist/assets/icons/objects/dark/business-process-diagram.svg +1 -0
  16. package/dist/assets/icons/objects/dark/calendars.svg +1 -0
  17. package/dist/assets/icons/objects/dark/category.svg +1 -0
  18. package/dist/assets/icons/objects/dark/conversational-flows.svg +1 -0
  19. package/dist/assets/icons/objects/dark/customization.svg +1 -0
  20. package/dist/assets/icons/objects/dark/dashboard.svg +1 -0
  21. package/dist/assets/icons/objects/dark/data-provider.svg +1 -0
  22. package/dist/assets/icons/objects/dark/data-selector.svg +1 -0
  23. package/dist/assets/icons/objects/dark/data-view.svg +1 -0
  24. package/dist/assets/icons/objects/dark/datastore-category.svg +1 -0
  25. package/dist/assets/icons/objects/dark/datastore.svg +1 -0
  26. package/dist/assets/icons/objects/dark/dataview-index.svg +1 -0
  27. package/dist/assets/icons/objects/dark/deployment-unit.svg +1 -0
  28. package/dist/assets/icons/objects/dark/design.svg +1 -0
  29. package/dist/assets/icons/objects/dark/diagram.svg +1 -0
  30. package/dist/assets/icons/objects/dark/document-workflow.svg +1 -0
  31. package/dist/assets/icons/objects/dark/document.svg +1 -0
  32. package/dist/assets/icons/objects/dark/domain.svg +1 -0
  33. package/dist/assets/icons/objects/dark/dso.svg +1 -0
  34. package/dist/assets/icons/objects/dark/environment-no-select.svg +1 -0
  35. package/dist/assets/icons/objects/dark/environment-select.svg +1 -0
  36. package/dist/assets/icons/objects/dark/external-object.svg +1 -0
  37. package/dist/assets/icons/objects/dark/file.svg +1 -0
  38. package/dist/assets/icons/objects/dark/folder-open.svg +1 -0
  39. package/dist/assets/icons/objects/dark/folder.svg +1 -0
  40. package/dist/assets/icons/objects/dark/generator-category.svg +1 -0
  41. package/dist/assets/icons/objects/dark/generator.svg +1 -0
  42. package/dist/assets/icons/objects/dark/image.svg +1 -0
  43. package/dist/assets/icons/objects/dark/knowledge-base.svg +1 -0
  44. package/dist/assets/icons/objects/dark/lenguage.svg +1 -0
  45. package/dist/assets/icons/objects/dark/main-object.svg +1 -0
  46. package/dist/assets/icons/objects/dark/masterpage.svg +1 -0
  47. package/dist/assets/icons/objects/dark/menu.svg +1 -0
  48. package/dist/assets/icons/objects/dark/menubar.svg +1 -0
  49. package/dist/assets/icons/objects/dark/mini-app.svg +1 -0
  50. package/dist/assets/icons/objects/dark/module-open.svg +1 -0
  51. package/dist/assets/icons/objects/dark/module.svg +1 -0
  52. package/dist/assets/icons/objects/dark/notification-templates.svg +1 -0
  53. package/dist/assets/icons/objects/dark/object.svg +1 -0
  54. package/dist/assets/icons/objects/dark/offline-database.svg +1 -0
  55. package/dist/assets/icons/objects/dark/orphant-document.svg +1 -0
  56. package/dist/assets/icons/objects/dark/panel-for-sd.svg +1 -0
  57. package/dist/assets/icons/objects/dark/patterns.svg +1 -0
  58. package/dist/assets/icons/objects/dark/procedure.svg +1 -0
  59. package/dist/assets/icons/objects/dark/query.svg +1 -0
  60. package/dist/assets/icons/objects/dark/references.svg +1 -0
  61. package/dist/assets/icons/objects/dark/report.svg +1 -0
  62. package/dist/assets/icons/objects/dark/roles.svg +1 -0
  63. package/dist/assets/icons/objects/dark/stencil.svg +1 -0
  64. package/dist/assets/icons/objects/dark/structured-data-type.svg +1 -0
  65. package/dist/assets/icons/objects/dark/subtype-group.svg +1 -0
  66. package/dist/assets/icons/objects/dark/super-app.svg +1 -0
  67. package/dist/assets/icons/objects/dark/table.svg +1 -0
  68. package/dist/assets/icons/objects/dark/theme-for-sd.svg +1 -0
  69. package/dist/assets/icons/objects/dark/theme-web.svg +1 -0
  70. package/dist/assets/icons/objects/dark/theme.svg +1 -0
  71. package/dist/assets/icons/objects/dark/to-be-defined.svg +1 -0
  72. package/dist/assets/icons/objects/dark/transaction.svg +1 -0
  73. package/dist/assets/icons/objects/dark/url-rewrite.svg +1 -0
  74. package/dist/assets/icons/objects/dark/version.svg +1 -0
  75. package/dist/assets/icons/objects/dark/web-component.svg +1 -0
  76. package/dist/assets/icons/objects/dark/webpanel.svg +1 -0
  77. package/dist/assets/icons/objects/dark/work-panel.svg +1 -0
  78. package/dist/assets/icons/objects/dark/workflow.svg +1 -0
  79. package/dist/assets/icons/objects/light/api.svg +1 -0
  80. package/dist/assets/icons/objects/light/attribute.svg +1 -0
  81. package/dist/assets/icons/objects/light/bg-color.svg +1 -0
  82. package/dist/assets/icons/objects/light/business-process-diagram.svg +1 -0
  83. package/dist/assets/icons/objects/light/calendars.svg +1 -0
  84. package/dist/assets/icons/objects/light/category.svg +1 -0
  85. package/dist/assets/icons/objects/light/conversational-flows.svg +1 -0
  86. package/dist/assets/icons/objects/light/customization.svg +1 -0
  87. package/dist/assets/icons/objects/light/dashboard.svg +1 -0
  88. package/dist/assets/icons/objects/light/data-provider.svg +1 -0
  89. package/dist/assets/icons/objects/light/data-selector.svg +1 -0
  90. package/dist/assets/icons/objects/light/data-view.svg +1 -0
  91. package/dist/assets/icons/objects/light/datastore-category.svg +1 -0
  92. package/dist/assets/icons/objects/light/datastore.svg +1 -0
  93. package/dist/assets/icons/objects/light/dataview-index.svg +1 -0
  94. package/dist/assets/icons/objects/light/deployment-unit.svg +1 -0
  95. package/dist/assets/icons/objects/light/design.svg +1 -0
  96. package/dist/assets/icons/objects/light/diagram.svg +1 -0
  97. package/dist/assets/icons/objects/light/document-workflow.svg +1 -0
  98. package/dist/assets/icons/objects/light/document.svg +1 -0
  99. package/dist/assets/icons/objects/light/domain.svg +1 -0
  100. package/dist/assets/icons/objects/light/dso.svg +1 -0
  101. package/dist/assets/icons/objects/light/environment-no-select.svg +1 -0
  102. package/dist/assets/icons/objects/light/environment-select.svg +1 -0
  103. package/dist/assets/icons/objects/light/external-object.svg +1 -0
  104. package/dist/assets/icons/objects/light/file.svg +1 -0
  105. package/dist/assets/icons/objects/light/folder-open.svg +1 -0
  106. package/dist/assets/icons/objects/light/folder.svg +1 -0
  107. package/dist/assets/icons/objects/light/generator-category.svg +1 -0
  108. package/dist/assets/icons/objects/light/generator.svg +1 -0
  109. package/dist/assets/icons/objects/light/image.svg +1 -0
  110. package/dist/assets/icons/objects/light/knowledge-base.svg +1 -0
  111. package/dist/assets/icons/objects/light/lenguage.svg +1 -0
  112. package/dist/assets/icons/objects/light/main-object.svg +1 -0
  113. package/dist/assets/icons/objects/light/masterpage.svg +1 -0
  114. package/dist/assets/icons/objects/light/menu.svg +1 -0
  115. package/dist/assets/icons/objects/light/menubar.svg +1 -0
  116. package/dist/assets/icons/objects/light/mini-app.svg +1 -0
  117. package/dist/assets/icons/objects/light/module-open.svg +1 -0
  118. package/dist/assets/icons/objects/light/module.svg +1 -0
  119. package/dist/assets/icons/objects/light/notification-templates.svg +1 -0
  120. package/dist/assets/icons/objects/light/object.svg +1 -0
  121. package/dist/assets/icons/objects/light/offline-database.svg +1 -0
  122. package/dist/assets/icons/objects/light/orphant-document.svg +1 -0
  123. package/dist/assets/icons/objects/light/panel-for-sd.svg +1 -0
  124. package/dist/assets/icons/objects/light/patterns.svg +1 -0
  125. package/dist/assets/icons/objects/light/procedure.svg +1 -0
  126. package/dist/assets/icons/objects/light/query.svg +1 -0
  127. package/dist/assets/icons/objects/light/references.svg +1 -0
  128. package/dist/assets/icons/objects/light/report.svg +1 -0
  129. package/dist/assets/icons/objects/light/roles.svg +1 -0
  130. package/dist/assets/icons/objects/light/stencil.svg +1 -0
  131. package/dist/assets/icons/objects/light/structured-data-type.svg +1 -0
  132. package/dist/assets/icons/objects/light/subtype-group.svg +1 -0
  133. package/dist/assets/icons/objects/light/super-app.svg +1 -0
  134. package/dist/assets/icons/objects/light/table.svg +1 -0
  135. package/dist/assets/icons/objects/light/theme-for-sd.svg +1 -0
  136. package/dist/assets/icons/objects/light/theme-web.svg +1 -0
  137. package/dist/assets/icons/objects/light/theme.svg +1 -0
  138. package/dist/assets/icons/objects/light/to-be-defined.svg +1 -0
  139. package/dist/assets/icons/objects/light/transaction.svg +1 -0
  140. package/dist/assets/icons/objects/light/url-rewrite.svg +1 -0
  141. package/dist/assets/icons/objects/light/version.svg +1 -0
  142. package/dist/assets/icons/objects/light/web-component.svg +1 -0
  143. package/dist/assets/icons/objects/light/webpanel.svg +1 -0
  144. package/dist/assets/icons/objects/light/work-panel.svg +1 -0
  145. package/dist/assets/icons/objects/light/workflow.svg +1 -0
  146. package/dist/css/mercury.css +736 -0
  147. package/dist/css/mercury.css.map +1 -0
  148. package/dist/mercury.scss +3421 -0
  149. package/notes.md +5 -0
  150. package/package.json +33 -0
  151. package/src/_mixins.scss +166 -0
  152. package/src/assets/fonts/Inter_Black.woff2 +0 -0
  153. package/src/assets/fonts/Inter_Bold.woff2 +0 -0
  154. package/src/assets/fonts/Inter_ExtraBold.woff2 +0 -0
  155. package/src/assets/fonts/Inter_ExtraLight.woff2 +0 -0
  156. package/src/assets/fonts/Inter_Light.woff2 +0 -0
  157. package/src/assets/fonts/Inter_Medium.woff2 +0 -0
  158. package/src/assets/fonts/Inter_Regular.woff2 +0 -0
  159. package/src/assets/fonts/Inter_SemiBold.woff2 +0 -0
  160. package/src/assets/fonts/Inter_Thin.woff2 +0 -0
  161. package/src/assets/icons/objects/dark/api.svg +1 -0
  162. package/src/assets/icons/objects/dark/attribute.svg +1 -0
  163. package/src/assets/icons/objects/dark/bg-color.svg +1 -0
  164. package/src/assets/icons/objects/dark/business-process-diagram.svg +1 -0
  165. package/src/assets/icons/objects/dark/calendars.svg +1 -0
  166. package/src/assets/icons/objects/dark/category.svg +1 -0
  167. package/src/assets/icons/objects/dark/conversational-flows.svg +1 -0
  168. package/src/assets/icons/objects/dark/customization.svg +1 -0
  169. package/src/assets/icons/objects/dark/dashboard.svg +1 -0
  170. package/src/assets/icons/objects/dark/data-provider.svg +1 -0
  171. package/src/assets/icons/objects/dark/data-selector.svg +1 -0
  172. package/src/assets/icons/objects/dark/data-view.svg +1 -0
  173. package/src/assets/icons/objects/dark/datastore-category.svg +1 -0
  174. package/src/assets/icons/objects/dark/datastore.svg +1 -0
  175. package/src/assets/icons/objects/dark/dataview-index.svg +1 -0
  176. package/src/assets/icons/objects/dark/deployment-unit.svg +1 -0
  177. package/src/assets/icons/objects/dark/design.svg +1 -0
  178. package/src/assets/icons/objects/dark/diagram.svg +1 -0
  179. package/src/assets/icons/objects/dark/document-workflow.svg +1 -0
  180. package/src/assets/icons/objects/dark/document.svg +1 -0
  181. package/src/assets/icons/objects/dark/domain.svg +1 -0
  182. package/src/assets/icons/objects/dark/dso.svg +1 -0
  183. package/src/assets/icons/objects/dark/environment-no-select.svg +1 -0
  184. package/src/assets/icons/objects/dark/environment-select.svg +1 -0
  185. package/src/assets/icons/objects/dark/external-object.svg +1 -0
  186. package/src/assets/icons/objects/dark/file.svg +1 -0
  187. package/src/assets/icons/objects/dark/folder-open.svg +1 -0
  188. package/src/assets/icons/objects/dark/folder.svg +1 -0
  189. package/src/assets/icons/objects/dark/generator-category.svg +1 -0
  190. package/src/assets/icons/objects/dark/generator.svg +1 -0
  191. package/src/assets/icons/objects/dark/image.svg +1 -0
  192. package/src/assets/icons/objects/dark/knowledge-base.svg +1 -0
  193. package/src/assets/icons/objects/dark/lenguage.svg +1 -0
  194. package/src/assets/icons/objects/dark/main-object.svg +1 -0
  195. package/src/assets/icons/objects/dark/masterpage.svg +1 -0
  196. package/src/assets/icons/objects/dark/menu.svg +1 -0
  197. package/src/assets/icons/objects/dark/menubar.svg +1 -0
  198. package/src/assets/icons/objects/dark/mini-app.svg +1 -0
  199. package/src/assets/icons/objects/dark/module-open.svg +1 -0
  200. package/src/assets/icons/objects/dark/module.svg +1 -0
  201. package/src/assets/icons/objects/dark/notification-templates.svg +1 -0
  202. package/src/assets/icons/objects/dark/object.svg +1 -0
  203. package/src/assets/icons/objects/dark/offline-database.svg +1 -0
  204. package/src/assets/icons/objects/dark/orphant-document.svg +1 -0
  205. package/src/assets/icons/objects/dark/panel-for-sd.svg +1 -0
  206. package/src/assets/icons/objects/dark/patterns.svg +1 -0
  207. package/src/assets/icons/objects/dark/procedure.svg +1 -0
  208. package/src/assets/icons/objects/dark/query.svg +1 -0
  209. package/src/assets/icons/objects/dark/references.svg +1 -0
  210. package/src/assets/icons/objects/dark/report.svg +1 -0
  211. package/src/assets/icons/objects/dark/roles.svg +1 -0
  212. package/src/assets/icons/objects/dark/stencil.svg +1 -0
  213. package/src/assets/icons/objects/dark/structured-data-type.svg +1 -0
  214. package/src/assets/icons/objects/dark/subtype-group.svg +1 -0
  215. package/src/assets/icons/objects/dark/super-app.svg +1 -0
  216. package/src/assets/icons/objects/dark/table.svg +1 -0
  217. package/src/assets/icons/objects/dark/theme-for-sd.svg +1 -0
  218. package/src/assets/icons/objects/dark/theme-web.svg +1 -0
  219. package/src/assets/icons/objects/dark/theme.svg +1 -0
  220. package/src/assets/icons/objects/dark/to-be-defined.svg +1 -0
  221. package/src/assets/icons/objects/dark/transaction.svg +1 -0
  222. package/src/assets/icons/objects/dark/url-rewrite.svg +1 -0
  223. package/src/assets/icons/objects/dark/version.svg +1 -0
  224. package/src/assets/icons/objects/dark/web-component.svg +1 -0
  225. package/src/assets/icons/objects/dark/webpanel.svg +1 -0
  226. package/src/assets/icons/objects/dark/work-panel.svg +1 -0
  227. package/src/assets/icons/objects/dark/workflow.svg +1 -0
  228. package/src/assets/icons/objects/light/api.svg +1 -0
  229. package/src/assets/icons/objects/light/attribute.svg +1 -0
  230. package/src/assets/icons/objects/light/bg-color.svg +1 -0
  231. package/src/assets/icons/objects/light/business-process-diagram.svg +1 -0
  232. package/src/assets/icons/objects/light/calendars.svg +1 -0
  233. package/src/assets/icons/objects/light/category.svg +1 -0
  234. package/src/assets/icons/objects/light/conversational-flows.svg +1 -0
  235. package/src/assets/icons/objects/light/customization.svg +1 -0
  236. package/src/assets/icons/objects/light/dashboard.svg +1 -0
  237. package/src/assets/icons/objects/light/data-provider.svg +1 -0
  238. package/src/assets/icons/objects/light/data-selector.svg +1 -0
  239. package/src/assets/icons/objects/light/data-view.svg +1 -0
  240. package/src/assets/icons/objects/light/datastore-category.svg +1 -0
  241. package/src/assets/icons/objects/light/datastore.svg +1 -0
  242. package/src/assets/icons/objects/light/dataview-index.svg +1 -0
  243. package/src/assets/icons/objects/light/deployment-unit.svg +1 -0
  244. package/src/assets/icons/objects/light/design.svg +1 -0
  245. package/src/assets/icons/objects/light/diagram.svg +1 -0
  246. package/src/assets/icons/objects/light/document-workflow.svg +1 -0
  247. package/src/assets/icons/objects/light/document.svg +1 -0
  248. package/src/assets/icons/objects/light/domain.svg +1 -0
  249. package/src/assets/icons/objects/light/dso.svg +1 -0
  250. package/src/assets/icons/objects/light/environment-no-select.svg +1 -0
  251. package/src/assets/icons/objects/light/environment-select.svg +1 -0
  252. package/src/assets/icons/objects/light/external-object.svg +1 -0
  253. package/src/assets/icons/objects/light/file.svg +1 -0
  254. package/src/assets/icons/objects/light/folder-open.svg +1 -0
  255. package/src/assets/icons/objects/light/folder.svg +1 -0
  256. package/src/assets/icons/objects/light/generator-category.svg +1 -0
  257. package/src/assets/icons/objects/light/generator.svg +1 -0
  258. package/src/assets/icons/objects/light/image.svg +1 -0
  259. package/src/assets/icons/objects/light/knowledge-base.svg +1 -0
  260. package/src/assets/icons/objects/light/lenguage.svg +1 -0
  261. package/src/assets/icons/objects/light/main-object.svg +1 -0
  262. package/src/assets/icons/objects/light/masterpage.svg +1 -0
  263. package/src/assets/icons/objects/light/menu.svg +1 -0
  264. package/src/assets/icons/objects/light/menubar.svg +1 -0
  265. package/src/assets/icons/objects/light/mini-app.svg +1 -0
  266. package/src/assets/icons/objects/light/module-open.svg +1 -0
  267. package/src/assets/icons/objects/light/module.svg +1 -0
  268. package/src/assets/icons/objects/light/notification-templates.svg +1 -0
  269. package/src/assets/icons/objects/light/object.svg +1 -0
  270. package/src/assets/icons/objects/light/offline-database.svg +1 -0
  271. package/src/assets/icons/objects/light/orphant-document.svg +1 -0
  272. package/src/assets/icons/objects/light/panel-for-sd.svg +1 -0
  273. package/src/assets/icons/objects/light/patterns.svg +1 -0
  274. package/src/assets/icons/objects/light/procedure.svg +1 -0
  275. package/src/assets/icons/objects/light/query.svg +1 -0
  276. package/src/assets/icons/objects/light/references.svg +1 -0
  277. package/src/assets/icons/objects/light/report.svg +1 -0
  278. package/src/assets/icons/objects/light/roles.svg +1 -0
  279. package/src/assets/icons/objects/light/stencil.svg +1 -0
  280. package/src/assets/icons/objects/light/structured-data-type.svg +1 -0
  281. package/src/assets/icons/objects/light/subtype-group.svg +1 -0
  282. package/src/assets/icons/objects/light/super-app.svg +1 -0
  283. package/src/assets/icons/objects/light/table.svg +1 -0
  284. package/src/assets/icons/objects/light/theme-for-sd.svg +1 -0
  285. package/src/assets/icons/objects/light/theme-web.svg +1 -0
  286. package/src/assets/icons/objects/light/theme.svg +1 -0
  287. package/src/assets/icons/objects/light/to-be-defined.svg +1 -0
  288. package/src/assets/icons/objects/light/transaction.svg +1 -0
  289. package/src/assets/icons/objects/light/url-rewrite.svg +1 -0
  290. package/src/assets/icons/objects/light/version.svg +1 -0
  291. package/src/assets/icons/objects/light/web-component.svg +1 -0
  292. package/src/assets/icons/objects/light/webpanel.svg +1 -0
  293. package/src/assets/icons/objects/light/work-panel.svg +1 -0
  294. package/src/assets/icons/objects/light/workflow.svg +1 -0
  295. package/src/base/button/_icons.scss +139 -0
  296. package/src/base/button/_styles-2.scss +275 -0
  297. package/src/base/button/_styles.scss +50 -0
  298. package/src/base/button/_tokens.scss +85 -0
  299. package/src/base/icons/sass/icons-selectors.scss +12 -0
  300. package/src/base/icons/sass/multicolor/_objects.scss +1948 -0
  301. package/src/components/_template/_styles.scss +4 -0
  302. package/src/components/_template/_tokens.scss +2 -0
  303. package/src/components/checkbox/_styles.scss +7 -0
  304. package/src/components/checkbox/_tokens.scss +14 -0
  305. package/src/components/shortcuts/_styles.scss +30 -0
  306. package/src/components/shortcuts/_tokens.scss +21 -0
  307. package/src/components/tree-view/_styles.scss +169 -0
  308. package/src/components/tree-view/_tokens.scss +60 -0
  309. package/src/icons/_settings/monochrome.svg.template +79 -0
  310. package/src/icons/_settings/multicolor.svg.template +126 -0
  311. package/src/icons/_settings/states-monochrome.json +18 -0
  312. package/src/icons/objects/api.svg +5 -0
  313. package/src/icons/objects/attribute.svg +6 -0
  314. package/src/icons/objects/bg-color.svg +6 -0
  315. package/src/icons/objects/business-process-diagram.svg +5 -0
  316. package/src/icons/objects/calendars.svg +5 -0
  317. package/src/icons/objects/category.svg +5 -0
  318. package/src/icons/objects/conversational-flows.svg +5 -0
  319. package/src/icons/objects/customization.svg +5 -0
  320. package/src/icons/objects/dashboard.svg +5 -0
  321. package/src/icons/objects/data-provider.svg +6 -0
  322. package/src/icons/objects/data-selector.svg +6 -0
  323. package/src/icons/objects/data-view.svg +6 -0
  324. package/src/icons/objects/datastore-category.svg +6 -0
  325. package/src/icons/objects/datastore.svg +6 -0
  326. package/src/icons/objects/dataview-index.svg +6 -0
  327. package/src/icons/objects/deployment-unit.svg +5 -0
  328. package/src/icons/objects/design.svg +6 -0
  329. package/src/icons/objects/diagram.svg +5 -0
  330. package/src/icons/objects/document-workflow.svg +5 -0
  331. package/src/icons/objects/document.svg +5 -0
  332. package/src/icons/objects/domain.svg +5 -0
  333. package/src/icons/objects/dso.svg +6 -0
  334. package/src/icons/objects/environment-no-select.svg +5 -0
  335. package/src/icons/objects/environment-select.svg +6 -0
  336. package/src/icons/objects/external-object.svg +5 -0
  337. package/src/icons/objects/file.svg +5 -0
  338. package/src/icons/objects/folder-open.svg +5 -0
  339. package/src/icons/objects/folder.svg +5 -0
  340. package/src/icons/objects/generator-category.svg +6 -0
  341. package/src/icons/objects/generator.svg +6 -0
  342. package/src/icons/objects/image.svg +5 -0
  343. package/src/icons/objects/knowledge-base.svg +7 -0
  344. package/src/icons/objects/lenguage.svg +5 -0
  345. package/src/icons/objects/main-object.svg +13 -0
  346. package/src/icons/objects/masterpage.svg +5 -0
  347. package/src/icons/objects/menu.svg +5 -0
  348. package/src/icons/objects/menubar.svg +6 -0
  349. package/src/icons/objects/mini-app.svg +8 -0
  350. package/src/icons/objects/module-open.svg +5 -0
  351. package/src/icons/objects/module.svg +5 -0
  352. package/src/icons/objects/notification-templates.svg +5 -0
  353. package/src/icons/objects/object.svg +5 -0
  354. package/src/icons/objects/offline-database.svg +6 -0
  355. package/src/icons/objects/orphant-document.svg +5 -0
  356. package/src/icons/objects/panel-for-sd.svg +6 -0
  357. package/src/icons/objects/patterns.svg +6 -0
  358. package/src/icons/objects/procedure.svg +5 -0
  359. package/src/icons/objects/query.svg +6 -0
  360. package/src/icons/objects/references.svg +5 -0
  361. package/src/icons/objects/report.svg +5 -0
  362. package/src/icons/objects/roles.svg +5 -0
  363. package/src/icons/objects/stencil.svg +10 -0
  364. package/src/icons/objects/structured-data-type.svg +7 -0
  365. package/src/icons/objects/subtype-group.svg +5 -0
  366. package/src/icons/objects/super-app.svg +8 -0
  367. package/src/icons/objects/table.svg +5 -0
  368. package/src/icons/objects/theme-for-sd.svg +6 -0
  369. package/src/icons/objects/theme-web.svg +9 -0
  370. package/src/icons/objects/theme.svg +6 -0
  371. package/src/icons/objects/to-be-defined.svg +5 -0
  372. package/src/icons/objects/transaction.svg +5 -0
  373. package/src/icons/objects/url-rewrite.svg +5 -0
  374. package/src/icons/objects/version.svg +8 -0
  375. package/src/icons/objects/web-component.svg +5 -0
  376. package/src/icons/objects/webpanel.svg +6 -0
  377. package/src/icons/objects/work-panel.svg +5 -0
  378. package/src/icons/objects/workflow.svg +5 -0
  379. package/src/mercury.scss +294 -0
  380. package/src/tokens/primitive/_border.scss +13 -0
  381. package/src/tokens/primitive/_color.scss +109 -0
  382. package/src/tokens/primitive/_elevation.scss +38 -0
  383. package/src/tokens/primitive/_font.scss +37 -0
  384. package/src/tokens/primitive/_spacing.scss +12 -0
  385. package/src/tokens/primitive/_timing.scss +6 -0
  386. package/src/tokens/semantic/_accent.scss +7 -0
  387. package/src/tokens/semantic/_border.scss +16 -0
  388. package/src/tokens/semantic/_heading.scss +3 -0
  389. package/src/tokens/semantic/_icon.scss +18 -0
  390. package/src/tokens/semantic/_item.scss +21 -0
  391. package/src/tokens/semantic/_other.scss +46 -0
  392. package/src/tokens/semantic/_text.scss +16 -0
  393. package/src/tokens/semantic/_tokens.scss +7 -0
  394. package/svg-generator/processor-sass.js +301 -0
  395. package/svg-generator/processor-svg.js +397 -0
  396. package/svg-generator/processor-ts.js +0 -0
  397. package/temporary-tests/test-button-icons/index.html +48 -0
  398. package/temporary-tests/test-icons/index.html +247 -0
  399. 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