@genexus/mercury 0.0.2 → 0.1.0

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 (254) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/package.json +4 -1
  4. package/.editorconfig +0 -16
  5. package/.prettierrc.json +0 -13
  6. package/notes.md +0 -5
  7. package/src/_mixins.scss +0 -166
  8. package/src/assets/fonts/Inter_Black.woff2 +0 -0
  9. package/src/assets/fonts/Inter_Bold.woff2 +0 -0
  10. package/src/assets/fonts/Inter_ExtraBold.woff2 +0 -0
  11. package/src/assets/fonts/Inter_ExtraLight.woff2 +0 -0
  12. package/src/assets/fonts/Inter_Light.woff2 +0 -0
  13. package/src/assets/fonts/Inter_Medium.woff2 +0 -0
  14. package/src/assets/fonts/Inter_Regular.woff2 +0 -0
  15. package/src/assets/fonts/Inter_SemiBold.woff2 +0 -0
  16. package/src/assets/fonts/Inter_Thin.woff2 +0 -0
  17. package/src/assets/icons/objects/dark/api.svg +0 -1
  18. package/src/assets/icons/objects/dark/attribute.svg +0 -1
  19. package/src/assets/icons/objects/dark/bg-color.svg +0 -1
  20. package/src/assets/icons/objects/dark/business-process-diagram.svg +0 -1
  21. package/src/assets/icons/objects/dark/calendars.svg +0 -1
  22. package/src/assets/icons/objects/dark/category.svg +0 -1
  23. package/src/assets/icons/objects/dark/conversational-flows.svg +0 -1
  24. package/src/assets/icons/objects/dark/customization.svg +0 -1
  25. package/src/assets/icons/objects/dark/dashboard.svg +0 -1
  26. package/src/assets/icons/objects/dark/data-provider.svg +0 -1
  27. package/src/assets/icons/objects/dark/data-selector.svg +0 -1
  28. package/src/assets/icons/objects/dark/data-view.svg +0 -1
  29. package/src/assets/icons/objects/dark/datastore-category.svg +0 -1
  30. package/src/assets/icons/objects/dark/datastore.svg +0 -1
  31. package/src/assets/icons/objects/dark/dataview-index.svg +0 -1
  32. package/src/assets/icons/objects/dark/deployment-unit.svg +0 -1
  33. package/src/assets/icons/objects/dark/design.svg +0 -1
  34. package/src/assets/icons/objects/dark/diagram.svg +0 -1
  35. package/src/assets/icons/objects/dark/document-workflow.svg +0 -1
  36. package/src/assets/icons/objects/dark/document.svg +0 -1
  37. package/src/assets/icons/objects/dark/domain.svg +0 -1
  38. package/src/assets/icons/objects/dark/dso.svg +0 -1
  39. package/src/assets/icons/objects/dark/environment-no-select.svg +0 -1
  40. package/src/assets/icons/objects/dark/environment-select.svg +0 -1
  41. package/src/assets/icons/objects/dark/external-object.svg +0 -1
  42. package/src/assets/icons/objects/dark/file.svg +0 -1
  43. package/src/assets/icons/objects/dark/folder-open.svg +0 -1
  44. package/src/assets/icons/objects/dark/folder.svg +0 -1
  45. package/src/assets/icons/objects/dark/generator-category.svg +0 -1
  46. package/src/assets/icons/objects/dark/generator.svg +0 -1
  47. package/src/assets/icons/objects/dark/image.svg +0 -1
  48. package/src/assets/icons/objects/dark/knowledge-base.svg +0 -1
  49. package/src/assets/icons/objects/dark/lenguage.svg +0 -1
  50. package/src/assets/icons/objects/dark/main-object.svg +0 -1
  51. package/src/assets/icons/objects/dark/masterpage.svg +0 -1
  52. package/src/assets/icons/objects/dark/menu.svg +0 -1
  53. package/src/assets/icons/objects/dark/menubar.svg +0 -1
  54. package/src/assets/icons/objects/dark/mini-app.svg +0 -1
  55. package/src/assets/icons/objects/dark/module-open.svg +0 -1
  56. package/src/assets/icons/objects/dark/module.svg +0 -1
  57. package/src/assets/icons/objects/dark/notification-templates.svg +0 -1
  58. package/src/assets/icons/objects/dark/object.svg +0 -1
  59. package/src/assets/icons/objects/dark/offline-database.svg +0 -1
  60. package/src/assets/icons/objects/dark/orphant-document.svg +0 -1
  61. package/src/assets/icons/objects/dark/panel-for-sd.svg +0 -1
  62. package/src/assets/icons/objects/dark/patterns.svg +0 -1
  63. package/src/assets/icons/objects/dark/procedure.svg +0 -1
  64. package/src/assets/icons/objects/dark/query.svg +0 -1
  65. package/src/assets/icons/objects/dark/references.svg +0 -1
  66. package/src/assets/icons/objects/dark/report.svg +0 -1
  67. package/src/assets/icons/objects/dark/roles.svg +0 -1
  68. package/src/assets/icons/objects/dark/stencil.svg +0 -1
  69. package/src/assets/icons/objects/dark/structured-data-type.svg +0 -1
  70. package/src/assets/icons/objects/dark/subtype-group.svg +0 -1
  71. package/src/assets/icons/objects/dark/super-app.svg +0 -1
  72. package/src/assets/icons/objects/dark/table.svg +0 -1
  73. package/src/assets/icons/objects/dark/theme-for-sd.svg +0 -1
  74. package/src/assets/icons/objects/dark/theme-web.svg +0 -1
  75. package/src/assets/icons/objects/dark/theme.svg +0 -1
  76. package/src/assets/icons/objects/dark/to-be-defined.svg +0 -1
  77. package/src/assets/icons/objects/dark/transaction.svg +0 -1
  78. package/src/assets/icons/objects/dark/url-rewrite.svg +0 -1
  79. package/src/assets/icons/objects/dark/version.svg +0 -1
  80. package/src/assets/icons/objects/dark/web-component.svg +0 -1
  81. package/src/assets/icons/objects/dark/webpanel.svg +0 -1
  82. package/src/assets/icons/objects/dark/work-panel.svg +0 -1
  83. package/src/assets/icons/objects/dark/workflow.svg +0 -1
  84. package/src/assets/icons/objects/light/api.svg +0 -1
  85. package/src/assets/icons/objects/light/attribute.svg +0 -1
  86. package/src/assets/icons/objects/light/bg-color.svg +0 -1
  87. package/src/assets/icons/objects/light/business-process-diagram.svg +0 -1
  88. package/src/assets/icons/objects/light/calendars.svg +0 -1
  89. package/src/assets/icons/objects/light/category.svg +0 -1
  90. package/src/assets/icons/objects/light/conversational-flows.svg +0 -1
  91. package/src/assets/icons/objects/light/customization.svg +0 -1
  92. package/src/assets/icons/objects/light/dashboard.svg +0 -1
  93. package/src/assets/icons/objects/light/data-provider.svg +0 -1
  94. package/src/assets/icons/objects/light/data-selector.svg +0 -1
  95. package/src/assets/icons/objects/light/data-view.svg +0 -1
  96. package/src/assets/icons/objects/light/datastore-category.svg +0 -1
  97. package/src/assets/icons/objects/light/datastore.svg +0 -1
  98. package/src/assets/icons/objects/light/dataview-index.svg +0 -1
  99. package/src/assets/icons/objects/light/deployment-unit.svg +0 -1
  100. package/src/assets/icons/objects/light/design.svg +0 -1
  101. package/src/assets/icons/objects/light/diagram.svg +0 -1
  102. package/src/assets/icons/objects/light/document-workflow.svg +0 -1
  103. package/src/assets/icons/objects/light/document.svg +0 -1
  104. package/src/assets/icons/objects/light/domain.svg +0 -1
  105. package/src/assets/icons/objects/light/dso.svg +0 -1
  106. package/src/assets/icons/objects/light/environment-no-select.svg +0 -1
  107. package/src/assets/icons/objects/light/environment-select.svg +0 -1
  108. package/src/assets/icons/objects/light/external-object.svg +0 -1
  109. package/src/assets/icons/objects/light/file.svg +0 -1
  110. package/src/assets/icons/objects/light/folder-open.svg +0 -1
  111. package/src/assets/icons/objects/light/folder.svg +0 -1
  112. package/src/assets/icons/objects/light/generator-category.svg +0 -1
  113. package/src/assets/icons/objects/light/generator.svg +0 -1
  114. package/src/assets/icons/objects/light/image.svg +0 -1
  115. package/src/assets/icons/objects/light/knowledge-base.svg +0 -1
  116. package/src/assets/icons/objects/light/lenguage.svg +0 -1
  117. package/src/assets/icons/objects/light/main-object.svg +0 -1
  118. package/src/assets/icons/objects/light/masterpage.svg +0 -1
  119. package/src/assets/icons/objects/light/menu.svg +0 -1
  120. package/src/assets/icons/objects/light/menubar.svg +0 -1
  121. package/src/assets/icons/objects/light/mini-app.svg +0 -1
  122. package/src/assets/icons/objects/light/module-open.svg +0 -1
  123. package/src/assets/icons/objects/light/module.svg +0 -1
  124. package/src/assets/icons/objects/light/notification-templates.svg +0 -1
  125. package/src/assets/icons/objects/light/object.svg +0 -1
  126. package/src/assets/icons/objects/light/offline-database.svg +0 -1
  127. package/src/assets/icons/objects/light/orphant-document.svg +0 -1
  128. package/src/assets/icons/objects/light/panel-for-sd.svg +0 -1
  129. package/src/assets/icons/objects/light/patterns.svg +0 -1
  130. package/src/assets/icons/objects/light/procedure.svg +0 -1
  131. package/src/assets/icons/objects/light/query.svg +0 -1
  132. package/src/assets/icons/objects/light/references.svg +0 -1
  133. package/src/assets/icons/objects/light/report.svg +0 -1
  134. package/src/assets/icons/objects/light/roles.svg +0 -1
  135. package/src/assets/icons/objects/light/stencil.svg +0 -1
  136. package/src/assets/icons/objects/light/structured-data-type.svg +0 -1
  137. package/src/assets/icons/objects/light/subtype-group.svg +0 -1
  138. package/src/assets/icons/objects/light/super-app.svg +0 -1
  139. package/src/assets/icons/objects/light/table.svg +0 -1
  140. package/src/assets/icons/objects/light/theme-for-sd.svg +0 -1
  141. package/src/assets/icons/objects/light/theme-web.svg +0 -1
  142. package/src/assets/icons/objects/light/theme.svg +0 -1
  143. package/src/assets/icons/objects/light/to-be-defined.svg +0 -1
  144. package/src/assets/icons/objects/light/transaction.svg +0 -1
  145. package/src/assets/icons/objects/light/url-rewrite.svg +0 -1
  146. package/src/assets/icons/objects/light/version.svg +0 -1
  147. package/src/assets/icons/objects/light/web-component.svg +0 -1
  148. package/src/assets/icons/objects/light/webpanel.svg +0 -1
  149. package/src/assets/icons/objects/light/work-panel.svg +0 -1
  150. package/src/assets/icons/objects/light/workflow.svg +0 -1
  151. package/src/base/button/_icons.scss +0 -139
  152. package/src/base/button/_styles-2.scss +0 -275
  153. package/src/base/button/_styles.scss +0 -50
  154. package/src/base/button/_tokens.scss +0 -85
  155. package/src/base/icons/sass/icons-selectors.scss +0 -12
  156. package/src/base/icons/sass/multicolor/_objects.scss +0 -1948
  157. package/src/components/_template/_styles.scss +0 -4
  158. package/src/components/_template/_tokens.scss +0 -2
  159. package/src/components/checkbox/_styles.scss +0 -7
  160. package/src/components/checkbox/_tokens.scss +0 -14
  161. package/src/components/shortcuts/_styles.scss +0 -30
  162. package/src/components/shortcuts/_tokens.scss +0 -21
  163. package/src/components/tree-view/_styles.scss +0 -169
  164. package/src/components/tree-view/_tokens.scss +0 -60
  165. package/src/icons/_settings/monochrome.svg.template +0 -79
  166. package/src/icons/_settings/multicolor.svg.template +0 -126
  167. package/src/icons/_settings/states-monochrome.json +0 -18
  168. package/src/icons/objects/api.svg +0 -5
  169. package/src/icons/objects/attribute.svg +0 -6
  170. package/src/icons/objects/bg-color.svg +0 -6
  171. package/src/icons/objects/business-process-diagram.svg +0 -5
  172. package/src/icons/objects/calendars.svg +0 -5
  173. package/src/icons/objects/category.svg +0 -5
  174. package/src/icons/objects/conversational-flows.svg +0 -5
  175. package/src/icons/objects/customization.svg +0 -5
  176. package/src/icons/objects/dashboard.svg +0 -5
  177. package/src/icons/objects/data-provider.svg +0 -6
  178. package/src/icons/objects/data-selector.svg +0 -6
  179. package/src/icons/objects/data-view.svg +0 -6
  180. package/src/icons/objects/datastore-category.svg +0 -6
  181. package/src/icons/objects/datastore.svg +0 -6
  182. package/src/icons/objects/dataview-index.svg +0 -6
  183. package/src/icons/objects/deployment-unit.svg +0 -5
  184. package/src/icons/objects/design.svg +0 -6
  185. package/src/icons/objects/diagram.svg +0 -5
  186. package/src/icons/objects/document-workflow.svg +0 -5
  187. package/src/icons/objects/document.svg +0 -5
  188. package/src/icons/objects/domain.svg +0 -5
  189. package/src/icons/objects/dso.svg +0 -6
  190. package/src/icons/objects/environment-no-select.svg +0 -5
  191. package/src/icons/objects/environment-select.svg +0 -6
  192. package/src/icons/objects/external-object.svg +0 -5
  193. package/src/icons/objects/file.svg +0 -5
  194. package/src/icons/objects/folder-open.svg +0 -5
  195. package/src/icons/objects/folder.svg +0 -5
  196. package/src/icons/objects/generator-category.svg +0 -6
  197. package/src/icons/objects/generator.svg +0 -6
  198. package/src/icons/objects/image.svg +0 -5
  199. package/src/icons/objects/knowledge-base.svg +0 -7
  200. package/src/icons/objects/lenguage.svg +0 -5
  201. package/src/icons/objects/main-object.svg +0 -13
  202. package/src/icons/objects/masterpage.svg +0 -5
  203. package/src/icons/objects/menu.svg +0 -5
  204. package/src/icons/objects/menubar.svg +0 -6
  205. package/src/icons/objects/mini-app.svg +0 -8
  206. package/src/icons/objects/module-open.svg +0 -5
  207. package/src/icons/objects/module.svg +0 -5
  208. package/src/icons/objects/notification-templates.svg +0 -5
  209. package/src/icons/objects/object.svg +0 -5
  210. package/src/icons/objects/offline-database.svg +0 -6
  211. package/src/icons/objects/orphant-document.svg +0 -5
  212. package/src/icons/objects/panel-for-sd.svg +0 -6
  213. package/src/icons/objects/patterns.svg +0 -6
  214. package/src/icons/objects/procedure.svg +0 -5
  215. package/src/icons/objects/query.svg +0 -6
  216. package/src/icons/objects/references.svg +0 -5
  217. package/src/icons/objects/report.svg +0 -5
  218. package/src/icons/objects/roles.svg +0 -5
  219. package/src/icons/objects/stencil.svg +0 -10
  220. package/src/icons/objects/structured-data-type.svg +0 -7
  221. package/src/icons/objects/subtype-group.svg +0 -5
  222. package/src/icons/objects/super-app.svg +0 -8
  223. package/src/icons/objects/table.svg +0 -5
  224. package/src/icons/objects/theme-for-sd.svg +0 -6
  225. package/src/icons/objects/theme-web.svg +0 -9
  226. package/src/icons/objects/theme.svg +0 -6
  227. package/src/icons/objects/to-be-defined.svg +0 -5
  228. package/src/icons/objects/transaction.svg +0 -5
  229. package/src/icons/objects/url-rewrite.svg +0 -5
  230. package/src/icons/objects/version.svg +0 -8
  231. package/src/icons/objects/web-component.svg +0 -5
  232. package/src/icons/objects/webpanel.svg +0 -6
  233. package/src/icons/objects/work-panel.svg +0 -5
  234. package/src/icons/objects/workflow.svg +0 -5
  235. package/src/tokens/primitive/_border.scss +0 -13
  236. package/src/tokens/primitive/_color.scss +0 -109
  237. package/src/tokens/primitive/_elevation.scss +0 -38
  238. package/src/tokens/primitive/_font.scss +0 -37
  239. package/src/tokens/primitive/_spacing.scss +0 -12
  240. package/src/tokens/primitive/_timing.scss +0 -6
  241. package/src/tokens/semantic/_accent.scss +0 -7
  242. package/src/tokens/semantic/_border.scss +0 -16
  243. package/src/tokens/semantic/_heading.scss +0 -3
  244. package/src/tokens/semantic/_icon.scss +0 -18
  245. package/src/tokens/semantic/_item.scss +0 -21
  246. package/src/tokens/semantic/_other.scss +0 -46
  247. package/src/tokens/semantic/_text.scss +0 -16
  248. package/src/tokens/semantic/_tokens.scss +0 -7
  249. package/svg-generator/processor-sass.js +0 -301
  250. package/svg-generator/processor-svg.js +0 -397
  251. package/svg-generator/processor-ts.js +0 -0
  252. package/temporary-tests/test-button-icons/index.html +0 -48
  253. package/temporary-tests/test-icons/index.html +0 -247
  254. package/test/test.scss +0 -3
@@ -1,397 +0,0 @@
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
@@ -1,48 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Test Button Icons</title>
7
- <link rel="stylesheet" href="../../test/mercury.css" />
8
- <style>
9
- html.dark {
10
- background-color: rgb(32, 31, 31);
11
- color: #ebe9e9;
12
- }
13
- .button {
14
- display: flex;
15
- align-items: center;
16
- gap: 8px;
17
- padding: 4px 8px;
18
- font-size: 20px;
19
- color: inherit;
20
- }
21
- .button::before {
22
- content: "";
23
- width: 32px;
24
- height: 32px;
25
- background-image: var(--icon-path);
26
- display: block;
27
- }
28
- .button,
29
- .button:hover,
30
- .button:active {
31
- background-color: transparent;
32
- }
33
- </style>
34
- </head>
35
- <body>
36
- <button id="toggle-dark-btn">toggle dark</button>
37
- <br /><br /><br />
38
- <button class="button icon__multicolor-path">Big Button</button>
39
-
40
- <script>
41
- const toggleDarkBtn = document.getElementById("toggle-dark-btn");
42
- const htmlTag = document.querySelector("html");
43
- toggleDarkBtn.addEventListener("click", () => {
44
- htmlTag.classList.toggle("dark");
45
- });
46
- </script>
47
- </body>
48
- </html>
@@ -1,247 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Icons</title>
7
- <style>
8
- .icon {
9
- width: 60px;
10
- height: 60px;
11
- }
12
- .icon--monochrome-light-path {
13
- }
14
- .container {
15
- display: flex;
16
- gap: 32px;
17
- }
18
- </style>
19
- </head>
20
- <body>
21
- <!-- ============================
22
- Multicolor Light
23
- ============================ -->
24
- <h2>multicolor light</h2>
25
- <div class="container">
26
- <!-- path icon -->
27
- <div class="col">
28
- <p>path:enabled</p>
29
- <img
30
- class="icon"
31
- src="/packages/mercury/src/assets/icons/multicolor/light/path.svg#enabled"
32
- />
33
-
34
- <p>path:hover</p>
35
- <img
36
- class="icon"
37
- src="/packages/mercury/src/assets/icons/multicolor/light/path.svg#hover"
38
- />
39
-
40
- <p>path:active</p>
41
- <img
42
- class="icon"
43
- src="/packages/mercury/src/assets/icons/multicolor/light/path.svg#active"
44
- />
45
-
46
- <p>path:disabled</p>
47
- <img
48
- class="icon"
49
- src="/packages/mercury/src/assets/icons/multicolor/light/path.svg#disabled"
50
- />
51
- </div>
52
-
53
- <!-- stroke icon -->
54
- <div class="col">
55
- <p>stroke:enabled</p>
56
- <img
57
- class="icon"
58
- src="/packages/mercury/src/assets/icons/multicolor/light/stroke.svg#enabled"
59
- />
60
-
61
- <p>stroke:hover</p>
62
- <img
63
- class="icon"
64
- src="/packages/mercury/src/assets/icons/multicolor/light/stroke.svg#hover"
65
- />
66
-
67
- <p>stroke:active</p>
68
- <img
69
- class="icon"
70
- src="/packages/mercury/src/assets/icons/multicolor/light/stroke.svg#active"
71
- />
72
-
73
- <p>stroke:disabled</p>
74
- <img
75
- class="icon"
76
- src="/packages/mercury/src/assets/icons/multicolor/light/stroke.svg#disabled"
77
- />
78
- </div>
79
- </div>
80
-
81
- <hr />
82
-
83
- <!-- ============================
84
- Multicolor Dark
85
- ============================ -->
86
-
87
- <h2>multicolor dark</h2>
88
- <div class="container">
89
- <!-- path icon -->
90
- <div class="col">
91
- <p>path:enabled</p>
92
- <img
93
- class="icon"
94
- src="/packages/mercury/src/assets/icons/multicolor/dark/path.svg#enabled"
95
- />
96
-
97
- <p>path:hover</p>
98
- <img
99
- class="icon"
100
- src="/packages/mercury/src/assets/icons/multicolor/dark/path.svg#hover"
101
- />
102
-
103
- <p>path:active</p>
104
- <img
105
- class="icon"
106
- src="/packages/mercury/src/assets/icons/multicolor/dark/path.svg#active"
107
- />
108
-
109
- <p>path:disabled</p>
110
- <img
111
- class="icon"
112
- src="/packages/mercury/src/assets/icons/multicolor/dark/path.svg#disabled"
113
- />
114
- </div>
115
-
116
- <!-- stroke icon -->
117
- <div class="col">
118
- <p>stroke:enabled</p>
119
- <img
120
- class="icon"
121
- src="/packages/mercury/src/assets/icons/multicolor/dark/stroke.svg#enabled"
122
- />
123
-
124
- <p>stroke:hover</p>
125
- <img
126
- class="icon"
127
- src="/packages/mercury/src/assets/icons/multicolor/dark/stroke.svg#hover"
128
- />
129
-
130
- <p>stroke:active</p>
131
- <img
132
- class="icon"
133
- src="/packages/mercury/src/assets/icons/multicolor/dark/stroke.svg#active"
134
- />
135
-
136
- <p>stroke:disabled</p>
137
- <img
138
- class="icon"
139
- src="/packages/mercury/src/assets/icons/multicolor/dark/stroke.svg#disabled"
140
- />
141
- </div>
142
- </div>
143
-
144
- <hr />
145
-
146
- <!-- ============================
147
- Monochrome Light
148
- ============================ -->
149
-
150
- <h2>monochrome light</h2>
151
- <div class="container">
152
- <!-- path icon -->
153
- <div class="col">
154
- <p>on-surface</p>
155
- <img
156
- class="icon"
157
- src="/packages/mercury/src/assets/icons/monochrome/light/path.svg#on-surface"
158
- />
159
-
160
- <p>on-primary</p>
161
- <img
162
- class="icon"
163
- src="/packages/mercury/src/assets/icons/monochrome/light/path.svg#on-primary"
164
- />
165
-
166
- <p>on-primary--active</p>
167
- <img
168
- class="icon"
169
- src="/packages/mercury/src/assets/icons/monochrome/light/path.svg#on-primary--active"
170
- />
171
- </div>
172
-
173
- <!-- stroke icon -->
174
- <div class="col">
175
- <p>on-surface</p>
176
- <img
177
- class="icon"
178
- src="/packages/mercury/src/assets/icons/monochrome/light/stroke.svg#on-surface"
179
- />
180
-
181
- <p>on-primary</p>
182
- <img
183
- class="icon"
184
- src="/packages/mercury/src/assets/icons/monochrome/light/stroke.svg#on-primary"
185
- />
186
-
187
- <p>on-primary--active</p>
188
- <img
189
- class="icon"
190
- src="/packages/mercury/src/assets/icons/monochrome/light/stroke.svg#on-primary--active"
191
- />
192
- </div>
193
- </div>
194
-
195
- <hr />
196
-
197
- <!-- ============================
198
- Monochrome Dark
199
- ============================ -->
200
-
201
- <h2>monochrome dark</h2>
202
-
203
- <div class="container">
204
- <!-- path icon -->
205
- <div class="col">
206
- <p>on-surface</p>
207
- <img
208
- class="icon"
209
- src="/packages/mercury/src/assets/icons/monochrome/dark/path.svg#on-surface"
210
- />
211
-
212
- <p>on-primary</p>
213
- <img
214
- class="icon"
215
- src="/packages/mercury/src/assets/icons/monochrome/dark/path.svg#on-primary"
216
- />
217
-
218
- <p>on-primary--active</p>
219
- <img
220
- class="icon"
221
- src="/packages/mercury/src/assets/icons/monochrome/dark/path.svg#on-primary--active"
222
- />
223
- </div>
224
-
225
- <!-- stroke icon -->
226
- <div class="col">
227
- <p>on-surface</p>
228
- <img
229
- class="icon"
230
- src="/packages/mercury/src/assets/icons/monochrome/dark/stroke.svg#on-surface"
231
- />
232
-
233
- <p>on-primary</p>
234
- <img
235
- class="icon"
236
- src="/packages/mercury/src/assets/icons/monochrome/dark/stroke.svg#on-primary"
237
- />
238
-
239
- <p>on-primary--active</p>
240
- <img
241
- class="icon"
242
- src="/packages/mercury/src/assets/icons/monochrome/dark/stroke.svg#on-primary--active"
243
- />
244
- </div>
245
- </div>
246
- </body>
247
- </html>
package/test/test.scss DELETED
@@ -1,3 +0,0 @@
1
- @import "../dist/mercury.scss";
2
-
3
- @include mercury();