@siemens/ix-icons 3.1.1 → 3.3.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 (288) hide show
  1. package/READMEOSS.html +10 -10
  2. package/components/index.js +143 -36
  3. package/components/index.js.map +1 -1
  4. package/dist/cjs/{index-Rt6MP40k.js → index-HU55KNQP.js} +127 -26
  5. package/dist/cjs/index-HU55KNQP.js.map +1 -0
  6. package/dist/cjs/index.cjs.js +38 -14
  7. package/dist/cjs/index.cjs.js.map +1 -1
  8. package/dist/cjs/ix-icon.cjs.entry.js +1 -3
  9. package/dist/cjs/ix-icons.cjs.js +3 -5
  10. package/dist/cjs/ix-icons.cjs.js.map +1 -1
  11. package/dist/cjs/loader.cjs.js +2 -4
  12. package/dist/collection/collection-manifest.json +2 -2
  13. package/dist/collection/components/icon/icon.js +35 -17
  14. package/dist/collection/components/icon/icon.js.map +1 -1
  15. package/dist/collection/components/icon/parser.js +8 -1
  16. package/dist/collection/components/icon/parser.js.map +1 -1
  17. package/dist/esm/{index-B9Q9x8eq.js → index-CyicTMfq.js} +127 -26
  18. package/dist/esm/index-CyicTMfq.js.map +1 -0
  19. package/dist/esm/index.js +39 -15
  20. package/dist/esm/index.js.map +1 -1
  21. package/dist/esm/ix-icon.entry.js +1 -3
  22. package/dist/esm/ix-icons.js +4 -6
  23. package/dist/esm/ix-icons.js.map +1 -1
  24. package/dist/esm/loader.js +3 -5
  25. package/dist/ix-icons/index.esm.js +1 -1
  26. package/dist/ix-icons/index.esm.js.map +1 -1
  27. package/dist/ix-icons/ix-icons.esm.js +1 -1
  28. package/dist/ix-icons/ix-icons.esm.js.map +1 -1
  29. package/dist/ix-icons/p-9fcb498f.entry.js +2 -0
  30. package/dist/ix-icons/p-9fcb498f.entry.js.map +1 -0
  31. package/dist/ix-icons/p-CyicTMfq.js +3 -0
  32. package/dist/ix-icons/p-CyicTMfq.js.map +1 -0
  33. package/dist/ix-icons/svg/app-update.svg +1 -0
  34. package/dist/ix-icons/svg/cam-disk-600-seg.svg +1 -0
  35. package/dist/ix-icons/svg/cam-disk-6k-seg.svg +1 -0
  36. package/dist/ix-icons/svg/chart-error-bar.svg +1 -0
  37. package/dist/ix-icons/svg/collapse-all.svg +1 -0
  38. package/dist/ix-icons/svg/command-line-filled.svg +1 -0
  39. package/dist/ix-icons/svg/command-line.svg +1 -0
  40. package/dist/ix-icons/svg/configuration-safety.svg +1 -0
  41. package/dist/ix-icons/svg/connected-circle-filled.svg +1 -0
  42. package/dist/ix-icons/svg/connected-circle.svg +1 -0
  43. package/dist/ix-icons/svg/controller-device-safety.svg +1 -0
  44. package/dist/ix-icons/svg/database-safety.svg +1 -0
  45. package/dist/ix-icons/svg/disconnected-circle-filled.svg +1 -0
  46. package/dist/ix-icons/svg/disconnected-circle.svg +1 -0
  47. package/dist/ix-icons/svg/download-add.svg +1 -1
  48. package/dist/ix-icons/svg/download-list.svg +1 -1
  49. package/dist/ix-icons/svg/download.svg +1 -1
  50. package/dist/ix-icons/svg/drive-safety.svg +1 -0
  51. package/dist/ix-icons/svg/drive.svg +1 -0
  52. package/dist/ix-icons/svg/edit-document-filled.svg +1 -1
  53. package/dist/ix-icons/svg/edit-document.svg +1 -1
  54. package/dist/ix-icons/svg/emergency-stop-filled.svg +1 -0
  55. package/dist/ix-icons/svg/expand-all.svg +1 -0
  56. package/dist/ix-icons/svg/flare.svg +1 -0
  57. package/dist/ix-icons/svg/function-block-safety.svg +1 -0
  58. package/dist/ix-icons/svg/generic-device-alarm.svg +1 -0
  59. package/dist/ix-icons/svg/generic-device-brackets.svg +1 -0
  60. package/dist/ix-icons/svg/generic-device-cancelled.svg +1 -0
  61. package/dist/ix-icons/svg/generic-device-connected.svg +1 -0
  62. package/dist/ix-icons/svg/generic-device-dashed.svg +1 -0
  63. package/dist/ix-icons/svg/generic-device-disconnected.svg +1 -0
  64. package/dist/ix-icons/svg/generic-device-error.svg +1 -0
  65. package/dist/ix-icons/svg/generic-device-flare.svg +1 -0
  66. package/dist/ix-icons/svg/generic-device-forced-mode.svg +1 -0
  67. package/dist/ix-icons/svg/generic-device-incompatible.svg +1 -0
  68. package/dist/ix-icons/svg/generic-device-io-unavailable.svg +1 -0
  69. package/dist/ix-icons/svg/generic-device-lock.svg +1 -0
  70. package/dist/ix-icons/svg/generic-device-maintenance.svg +1 -0
  71. package/dist/ix-icons/svg/generic-device-pause.svg +1 -0
  72. package/dist/ix-icons/svg/generic-device-play.svg +1 -0
  73. package/dist/ix-icons/svg/generic-device-power-saving.svg +1 -0
  74. package/dist/ix-icons/svg/generic-device-published.svg +1 -0
  75. package/dist/ix-icons/svg/generic-device-question.svg +1 -0
  76. package/dist/ix-icons/svg/generic-device-refresh.svg +1 -0
  77. package/dist/ix-icons/svg/generic-device-reset.svg +1 -0
  78. package/dist/ix-icons/svg/generic-device-restart.svg +1 -0
  79. package/dist/ix-icons/svg/generic-device-rocket.svg +1 -0
  80. package/dist/ix-icons/svg/generic-device-safety.svg +1 -0
  81. package/dist/ix-icons/svg/generic-device-shield.svg +1 -0
  82. package/dist/ix-icons/svg/generic-device-shutdown.svg +1 -0
  83. package/dist/ix-icons/svg/generic-device-slash.svg +1 -0
  84. package/dist/ix-icons/svg/generic-device-software-alarm.svg +1 -0
  85. package/dist/ix-icons/svg/generic-device-standby.svg +1 -0
  86. package/dist/ix-icons/svg/generic-device-stop-userprogram.svg +1 -0
  87. package/dist/ix-icons/svg/generic-device-stop.svg +1 -0
  88. package/dist/ix-icons/svg/generic-device-success.svg +1 -0
  89. package/dist/ix-icons/svg/generic-device-synchronized.svg +1 -0
  90. package/dist/ix-icons/svg/generic-device-traffic.svg +1 -0
  91. package/dist/ix-icons/svg/generic-device.svg +1 -0
  92. package/dist/ix-icons/svg/helmet-safety-filled.svg +1 -0
  93. package/dist/ix-icons/svg/helmet-safety.svg +1 -0
  94. package/dist/ix-icons/svg/import-check.svg +1 -0
  95. package/dist/ix-icons/svg/import-failed.svg +1 -0
  96. package/dist/ix-icons/svg/import-progress.svg +1 -0
  97. package/dist/ix-icons/svg/incompatible.svg +1 -0
  98. package/dist/ix-icons/svg/live-feed.svg +1 -0
  99. package/dist/ix-icons/svg/lower-limit.svg +1 -1
  100. package/dist/ix-icons/svg/maintenance-filled.svg +1 -0
  101. package/dist/ix-icons/svg/maintenance-info-filled.svg +1 -0
  102. package/dist/ix-icons/svg/maintenance-info.svg +1 -1
  103. package/dist/ix-icons/svg/maintenance-octagon-filled.svg +1 -0
  104. package/dist/ix-icons/svg/maintenance-octagon.svg +1 -0
  105. package/dist/ix-icons/svg/maintenance-rhomb-filled.svg +1 -0
  106. package/dist/ix-icons/svg/maintenance-rhomb.svg +1 -0
  107. package/dist/ix-icons/svg/maintenance-square-filled.svg +1 -0
  108. package/dist/ix-icons/svg/maintenance-square.svg +1 -0
  109. package/dist/ix-icons/svg/maintenance-triangle-filled.svg +1 -0
  110. package/dist/ix-icons/svg/maintenance-triangle.svg +1 -0
  111. package/dist/ix-icons/svg/maintenance.svg +1 -1
  112. package/dist/ix-icons/svg/monitor-filled.svg +1 -1
  113. package/dist/ix-icons/svg/monitor.svg +1 -1
  114. package/dist/ix-icons/svg/operating-system-add.svg +1 -0
  115. package/dist/ix-icons/svg/operating-system-settings.svg +1 -0
  116. package/dist/ix-icons/svg/output-cam.svg +1 -0
  117. package/dist/ix-icons/svg/palette-filled.svg +1 -0
  118. package/dist/ix-icons/svg/palette.svg +1 -0
  119. package/dist/ix-icons/svg/profisafe-logo.svg +1 -0
  120. package/dist/ix-icons/svg/restart.svg +1 -0
  121. package/dist/ix-icons/svg/rocket-circle-filled.svg +1 -0
  122. package/dist/ix-icons/svg/rocket-circle.svg +1 -0
  123. package/dist/ix-icons/svg/ruler-diagonal.svg +1 -0
  124. package/dist/ix-icons/svg/safety-settings.svg +1 -0
  125. package/dist/ix-icons/svg/screen-duplicate-filled.svg +1 -1
  126. package/dist/ix-icons/svg/screen-duplicate.svg +1 -1
  127. package/dist/ix-icons/svg/screen-filled.svg +1 -1
  128. package/dist/ix-icons/svg/screen-settings-filled.svg +1 -1
  129. package/dist/ix-icons/svg/screen-settings.svg +1 -1
  130. package/dist/ix-icons/svg/screen.svg +1 -1
  131. package/dist/ix-icons/svg/screens-filled.svg +1 -1
  132. package/dist/ix-icons/svg/send-right-filled.svg +1 -0
  133. package/dist/ix-icons/svg/send-right.svg +1 -0
  134. package/dist/ix-icons/svg/send-top-right-filled.svg +1 -0
  135. package/dist/ix-icons/svg/send-top-right.svg +1 -0
  136. package/dist/ix-icons/svg/sensor.svg +1 -0
  137. package/dist/ix-icons/svg/shutdown.svg +1 -0
  138. package/dist/ix-icons/svg/tag-safety-filled.svg +1 -0
  139. package/dist/ix-icons/svg/tag-safety.svg +1 -0
  140. package/dist/ix-icons/svg/theme-filled.svg +1 -0
  141. package/dist/ix-icons/svg/theme.svg +1 -0
  142. package/dist/ix-icons/svg/traffic-left-right.svg +1 -0
  143. package/dist/ix-icons/svg/update-application.svg +1 -0
  144. package/dist/ix-icons/svg/upload-fail.svg +1 -1
  145. package/dist/ix-icons/svg/upload-success.svg +1 -1
  146. package/dist/ix-icons/svg/upload.svg +1 -1
  147. package/dist/ix-icons/svg/upper-limit.svg +1 -1
  148. package/dist/ix-icons/svg/warning-hexagon-filled.svg +1 -0
  149. package/dist/ix-icons/svg/warning-hexagon.svg +1 -0
  150. package/dist/ix-icons/svg/warning-octagon-filled.svg +1 -0
  151. package/dist/ix-icons/svg/warning-octagon.svg +1 -0
  152. package/dist/ix-icons/svg/warning-square-filled.svg +1 -0
  153. package/dist/ix-icons/svg/warning-square.svg +1 -0
  154. package/dist/sample.json +100 -0
  155. package/dist/types/stencil-public-runtime.d.ts +49 -2
  156. package/icons/index.d.ts +100 -0
  157. package/icons/index.js +121 -21
  158. package/icons/index.mjs +121 -21
  159. package/icons/package.json +1 -1
  160. package/package.json +10 -7
  161. package/svg/app-update.svg +1 -0
  162. package/svg/cam-disk-600-seg.svg +1 -0
  163. package/svg/cam-disk-6k-seg.svg +1 -0
  164. package/svg/chart-error-bar.svg +1 -0
  165. package/svg/collapse-all.svg +1 -0
  166. package/svg/command-line-filled.svg +1 -0
  167. package/svg/command-line.svg +1 -0
  168. package/svg/configuration-safety.svg +1 -0
  169. package/svg/connected-circle-filled.svg +1 -0
  170. package/svg/connected-circle.svg +1 -0
  171. package/svg/controller-device-safety.svg +1 -0
  172. package/svg/database-safety.svg +1 -0
  173. package/svg/disconnected-circle-filled.svg +1 -0
  174. package/svg/disconnected-circle.svg +1 -0
  175. package/svg/download-add.svg +1 -1
  176. package/svg/download-list.svg +1 -1
  177. package/svg/download.svg +1 -1
  178. package/svg/drive-safety.svg +1 -0
  179. package/svg/drive.svg +1 -0
  180. package/svg/edit-document-filled.svg +1 -1
  181. package/svg/edit-document.svg +1 -1
  182. package/svg/emergency-stop-filled.svg +1 -0
  183. package/svg/expand-all.svg +1 -0
  184. package/svg/flare.svg +1 -0
  185. package/svg/function-block-safety.svg +1 -0
  186. package/svg/generic-device-alarm.svg +1 -0
  187. package/svg/generic-device-brackets.svg +1 -0
  188. package/svg/generic-device-cancelled.svg +1 -0
  189. package/svg/generic-device-connected.svg +1 -0
  190. package/svg/generic-device-dashed.svg +1 -0
  191. package/svg/generic-device-disconnected.svg +1 -0
  192. package/svg/generic-device-error.svg +1 -0
  193. package/svg/generic-device-flare.svg +1 -0
  194. package/svg/generic-device-forced-mode.svg +1 -0
  195. package/svg/generic-device-incompatible.svg +1 -0
  196. package/svg/generic-device-io-unavailable.svg +1 -0
  197. package/svg/generic-device-lock.svg +1 -0
  198. package/svg/generic-device-maintenance.svg +1 -0
  199. package/svg/generic-device-pause.svg +1 -0
  200. package/svg/generic-device-play.svg +1 -0
  201. package/svg/generic-device-power-saving.svg +1 -0
  202. package/svg/generic-device-published.svg +1 -0
  203. package/svg/generic-device-question.svg +1 -0
  204. package/svg/generic-device-refresh.svg +1 -0
  205. package/svg/generic-device-reset.svg +1 -0
  206. package/svg/generic-device-restart.svg +1 -0
  207. package/svg/generic-device-rocket.svg +1 -0
  208. package/svg/generic-device-safety.svg +1 -0
  209. package/svg/generic-device-shield.svg +1 -0
  210. package/svg/generic-device-shutdown.svg +1 -0
  211. package/svg/generic-device-slash.svg +1 -0
  212. package/svg/generic-device-software-alarm.svg +1 -0
  213. package/svg/generic-device-standby.svg +1 -0
  214. package/svg/generic-device-stop-userprogram.svg +1 -0
  215. package/svg/generic-device-stop.svg +1 -0
  216. package/svg/generic-device-success.svg +1 -0
  217. package/svg/generic-device-synchronized.svg +1 -0
  218. package/svg/generic-device-traffic.svg +1 -0
  219. package/svg/generic-device.svg +1 -0
  220. package/svg/helmet-safety-filled.svg +1 -0
  221. package/svg/helmet-safety.svg +1 -0
  222. package/svg/import-check.svg +1 -0
  223. package/svg/import-failed.svg +1 -0
  224. package/svg/import-progress.svg +1 -0
  225. package/svg/incompatible.svg +1 -0
  226. package/svg/live-feed.svg +1 -0
  227. package/svg/lower-limit.svg +1 -1
  228. package/svg/maintenance-filled.svg +1 -0
  229. package/svg/maintenance-info-filled.svg +1 -0
  230. package/svg/maintenance-info.svg +1 -1
  231. package/svg/maintenance-octagon-filled.svg +1 -0
  232. package/svg/maintenance-octagon.svg +1 -0
  233. package/svg/maintenance-rhomb-filled.svg +1 -0
  234. package/svg/maintenance-rhomb.svg +1 -0
  235. package/svg/maintenance-square-filled.svg +1 -0
  236. package/svg/maintenance-square.svg +1 -0
  237. package/svg/maintenance-triangle-filled.svg +1 -0
  238. package/svg/maintenance-triangle.svg +1 -0
  239. package/svg/maintenance.svg +1 -1
  240. package/svg/monitor-filled.svg +1 -1
  241. package/svg/monitor.svg +1 -1
  242. package/svg/operating-system-add.svg +1 -0
  243. package/svg/operating-system-settings.svg +1 -0
  244. package/svg/output-cam.svg +1 -0
  245. package/svg/palette-filled.svg +1 -0
  246. package/svg/palette.svg +1 -0
  247. package/svg/profisafe-logo.svg +1 -0
  248. package/svg/restart.svg +1 -0
  249. package/svg/rocket-circle-filled.svg +1 -0
  250. package/svg/rocket-circle.svg +1 -0
  251. package/svg/ruler-diagonal.svg +1 -0
  252. package/svg/safety-settings.svg +1 -0
  253. package/svg/screen-duplicate-filled.svg +1 -1
  254. package/svg/screen-duplicate.svg +1 -1
  255. package/svg/screen-filled.svg +1 -1
  256. package/svg/screen-settings-filled.svg +1 -1
  257. package/svg/screen-settings.svg +1 -1
  258. package/svg/screen.svg +1 -1
  259. package/svg/screens-filled.svg +1 -1
  260. package/svg/send-right-filled.svg +1 -0
  261. package/svg/send-right.svg +1 -0
  262. package/svg/send-top-right-filled.svg +1 -0
  263. package/svg/send-top-right.svg +1 -0
  264. package/svg/sensor.svg +1 -0
  265. package/svg/shutdown.svg +1 -0
  266. package/svg/tag-safety-filled.svg +1 -0
  267. package/svg/tag-safety.svg +1 -0
  268. package/svg/theme-filled.svg +1 -0
  269. package/svg/theme.svg +1 -0
  270. package/svg/traffic-left-right.svg +1 -0
  271. package/svg/update-application.svg +1 -0
  272. package/svg/upload-fail.svg +1 -1
  273. package/svg/upload-success.svg +1 -1
  274. package/svg/upload.svg +1 -1
  275. package/svg/upper-limit.svg +1 -1
  276. package/svg/warning-hexagon-filled.svg +1 -0
  277. package/svg/warning-hexagon.svg +1 -0
  278. package/svg/warning-octagon-filled.svg +1 -0
  279. package/svg/warning-octagon.svg +1 -0
  280. package/svg/warning-square-filled.svg +1 -0
  281. package/svg/warning-square.svg +1 -0
  282. package/dist/cjs/index-Rt6MP40k.js.map +0 -1
  283. package/dist/cjs/ix-icon.cjs.entry.js.map +0 -1
  284. package/dist/esm/index-B9Q9x8eq.js.map +0 -1
  285. package/dist/ix-icons/p-B9Q9x8eq.js +0 -3
  286. package/dist/ix-icons/p-B9Q9x8eq.js.map +0 -1
  287. package/dist/ix-icons/p-dd52e4ef.entry.js +0 -2
  288. package/dist/ix-icons/p-dd52e4ef.entry.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-Rt6MP40k.js');
3
+ var index = require('./index-HU55KNQP.js');
4
4
 
5
5
  /**
6
6
  * Provide custom SVG path for icons
@@ -29,7 +29,14 @@ function parseSVGDataContent(content, element) {
29
29
  if (parser === null) {
30
30
  parser = new window['DOMParser']();
31
31
  }
32
- const svgDocument = parser.parseFromString(decodeURI(content), 'text/html');
32
+ // decode URI component if needed
33
+ try {
34
+ content = decodeURI(content);
35
+ }
36
+ catch {
37
+ // Content is not a valid URI component, which can happen if it's already decoded. Proceed with the original content.
38
+ }
39
+ const svgDocument = parser.parseFromString(content, 'text/html');
33
40
  const svgElement = svgDocument.querySelector('svg');
34
41
  if (!svgElement) {
35
42
  if (element) {
@@ -181,16 +188,36 @@ const iconCss = ":host{display:inline-flex;height:1.5rem;width:1.5rem;min-height
181
188
  const Icon = class {
182
189
  constructor(hostRef) {
183
190
  index.registerInstance(this, hostRef);
184
- /**
185
- * Size of the icon
186
- */
187
- this.size = '24';
188
- /**
189
- * Only fetch and parse svg data when icon is visible
190
- */
191
- this.lazyLoading = false;
192
- this.isVisible = false;
193
191
  }
192
+ get hostElement() { return index.getElement(this); }
193
+ /**
194
+ * Size of the icon
195
+ */
196
+ size = '24';
197
+ /**
198
+ * Color of the icon
199
+ */
200
+ color;
201
+ /**
202
+ * Use one of our defined icon names e.g. `copy`
203
+ *
204
+ * https://ix.siemens.io/docs/icon-library/icons
205
+ *
206
+ * or the import variant
207
+ *
208
+ * ```
209
+ * import { rocket } from '@siemens/ix-icons/icons';
210
+ *
211
+ * <ix-icon name={rocket}></ix-icon>
212
+ * ```
213
+ */
214
+ name;
215
+ /**
216
+ * Only fetch and parse svg data when icon is visible
217
+ */
218
+ lazyLoading = false;
219
+ svgContent;
220
+ isVisible = false;
194
221
  componentWillLoad() {
195
222
  this.waitForRendering(() => {
196
223
  this.isVisible = true;
@@ -236,7 +263,6 @@ const Icon = class {
236
263
  } }, index.h("div", { key: '570efdb71fcdd0c61b7c854c6ab3662508aae804', class: 'svg-container', innerHTML: this.svgContent, "aria-hidden": "true" })));
237
264
  }
238
265
  static get assetsDirs() { return ["svg"]; }
239
- get hostElement() { return index.getElement(this); }
240
266
  static get watchers() { return {
241
267
  "name": ["loadIconContent"]
242
268
  }; }
@@ -248,5 +274,3 @@ exports.Icon = Icon;
248
274
  exports.addIconToCache = addIconToCache;
249
275
  exports.addIcons = addIcons;
250
276
  //# sourceMappingURL=index.cjs.js.map
251
-
252
- //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["src/components/icon/meta-tag.ts","src/components/icon/parser.ts","src/components/icon/resolveIcon.ts","src/components/icon/icon.scss?tag=ix-icon&encapsulation=shadow","src/components/icon/icon.tsx"],"sourcesContent":["/**\n * Provide custom SVG path for icons\n *\n * <meta name=\"ix-icons:path\" content=\"/build/svg\" />\n */\nexport function getCustomAssetUrl() {\n const assetPath = document.querySelector(\"meta[name='ix-icons:path']\");\n if (assetPath) {\n const path = assetPath.getAttribute('content');\n return path;\n }\n\n return false;\n}\n","/*\n * COPYRIGHT (c) Siemens AG 2018-2025 ALL RIGHTS RESERVED.\n */\n\nlet parser: any = null;\n\nexport const errorSymbol =\n \"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'><path fill-rule='evenodd' d='M384,0 L384,384 L0,384 L0,0 L384,0 Z M192,207.085 L57.751,341.333 L326.248,341.333 L192,207.085 Z M42.666,57.751 L42.666,326.248 L176.915,192 L42.666,57.751 Z M341.333,57.751 L207.085,192 L341.333,326.248 L341.333,57.751 Z M326.248,42.666 L57.751,42.666 L192,176.915 L326.248,42.666 Z' transform='translate(64 64)'/></svg>\";\n\nexport function parseSVGDataContent(content: string, element?: HTMLElement): string {\n if (typeof window['DOMParser'] === 'undefined') {\n console.error('DOMParser not supported by your browser.');\n return '';\n }\n\n if (parser === null) {\n parser = new window['DOMParser']();\n }\n\n const svgDocument = parser.parseFromString(decodeURI(content), 'text/html');\n const svgElement = svgDocument.querySelector('svg') as HTMLElement;\n\n if (!svgElement) {\n if (element) {\n console.error('No valid svg data provided', element);\n } else {\n console.error('No valid svg data provided');\n }\n return '';\n }\n\n return svgElement.outerHTML;\n}\n","/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { getAssetPath } from '@stencil/core';\nimport { getCustomAssetUrl } from './meta-tag';\nimport { parseSVGDataContent } from './parser';\n\ndeclare global {\n interface Window {\n IxIcons: any;\n }\n}\n\nlet fetchCache: Map<string, string>;\nconst requests = new Map<string, Promise<string>>();\n\nexport const getIconCacheMap = (): Map<string, string> => {\n if (typeof window === 'undefined') {\n return new Map();\n }\n\n if (!fetchCache) {\n window.IxIcons = window.IxIcons || {};\n fetchCache = window.IxIcons.map = window.IxIcons.map || new Map();\n }\n\n return fetchCache;\n};\n\nexport const isSvgDataUrl = (url: string) => {\n if (!url) {\n return false;\n }\n\n if (typeof url !== 'string') {\n return false;\n }\n\n return url.startsWith('data:image/svg+xml');\n};\n\nasync function fetchSVG(url: string, element: HTMLIxIconElement) {\n const cache = getIconCacheMap();\n\n if (cache.has(url)) {\n return cache.get(url)!;\n }\n\n if (requests.has(url)) {\n return requests.get(url)!;\n }\n\n const fetching = fetch(url)\n .then(async response => {\n const responseText = await response.text();\n\n let svgContent = '';\n if (response.ok) {\n svgContent = parseSVGDataContent(responseText, element);\n cache.set(url, svgContent);\n } else {\n console.error('Failed to request svg data from', url, 'with status code', response.status, element);\n }\n\n return svgContent;\n })\n .catch(() => {\n console.error('Failed to fetch svg data:', url, element);\n cache.set(url, '');\n return '';\n })\n .finally(() => {\n requests.delete(url);\n });\n\n return fetching;\n}\n\nconst urlRegex = /^(?:(?:https?|ftp):\\/\\/)?(?:\\S+(?::\\S*)?@)?(?:www\\.)?(?:\\S+\\.\\S+)(?:\\S*)$/i;\n\nfunction isValidUrl(url: string) {\n return urlRegex.test(url);\n}\n\nexport function getIconUrl(name: string, element: HTMLIxIconElement) {\n const customAssetUrl = getCustomAssetUrl();\n\n if (customAssetUrl) {\n return `${customAssetUrl}/${name}.svg`;\n }\n\n let url: string = `svg/${name}.svg`;\n\n try {\n url = getAssetPath(url);\n } catch (error) {\n console.warn(`Could not load icon with name \"${name}\". Ensure that the icon is registered using addIcons or that the icon SVG data is passed directly to property.`, element);\n }\n\n return url;\n}\n\nexport async function resolveIcon(element: HTMLIxIconElement, iconName?: string): Promise<string> {\n if (!iconName) {\n console.warn('No icon was provided', element);\n return '';\n }\n\n if (isSvgDataUrl(iconName)) {\n const content = parseSVGDataContent(iconName, element);\n\n if (!content) {\n console.error('Failed to parse icon data', element);\n }\n return content;\n }\n\n return loadIcon(iconName, element);\n}\n\nasync function loadIcon(iconName: string, element: HTMLIxIconElement): Promise<string> {\n const cache = getIconCacheMap();\n\n if (cache.has(iconName)) {\n return cache.get(iconName)!;\n }\n\n if (isValidUrl(iconName)) {\n return fetchSVG(iconName, element);\n }\n\n const iconUrl = getIconUrl(iconName, element);\n\n if (!iconUrl) {\n return '';\n }\n\n return fetchSVG(iconUrl, element);\n}\n\nfunction removePrefix(name: string, prefix: string) {\n if (name.startsWith(prefix)) {\n name = name.slice(prefix.length);\n return name.replace(/^(\\w)/, (_match, p1) => p1.toLowerCase());\n }\n\n return name;\n}\n\nexport function addIcons(icons: { [name: string]: any }) {\n Object.keys(icons).forEach(name => {\n const icon = icons[name];\n name = removePrefix(name, 'icon');\n\n addIconToCache(name, icon);\n });\n}\n\nexport function addIconToCache(name: string, icon: string) {\n const cache = getIconCacheMap();\n\n if (cache.has(name)) {\n console.warn(`Icon name '${name}' already in cache. Overwritting with new icon data.`);\n }\n\n const svg = parseSVGDataContent(icon);\n\n cache.set(name, svg);\n\n const toKebabCase = name.replace(/([a-z0-9]|(?=[A-Z]))([A-Z0-9])/g, '$1-$2').toLowerCase();\n\n if (name != toKebabCase) {\n cache.set(toKebabCase, svg);\n }\n}\n","/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n@mixin size($size) {\n height: $size;\n width: $size;\n min-height: $size;\n min-width: $size;\n}\n\n:host {\n display: inline-flex;\n @include size(1.5rem);\n color: inherit;\n\n .svg-container {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n\n svg {\n display: block;\n position: relative;\n height: 100%;\n width: 100%;\n }\n\n svg,\n svg[fill],\n svg [fill] {\n fill: currentColor !important;\n }\n }\n}\n\n:host(.size-12) {\n @include size(0.75rem);\n}\n\n:host(.size-16) {\n @include size(1rem);\n}\n\n:host(.size-32) {\n @include size(2rem);\n}\n","/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { Component, h, Host, Prop, State, Watch, Element, Build } from '@stencil/core';\nimport { resolveIcon } from './resolveIcon';\nimport { errorSymbol, parseSVGDataContent } from './parser';\n\n@Component({\n tag: 'ix-icon',\n styleUrl: 'icon.scss',\n shadow: true,\n assetsDirs: ['svg'],\n})\nexport class Icon {\n @Element() hostElement!: HTMLIxIconElement;\n\n /**\n * Size of the icon\n */\n @Prop() size: '12' | '16' | '24' | '32' = '24';\n\n /**\n * Color of the icon\n */\n @Prop() color?: string;\n\n /**\n * Use one of our defined icon names e.g. `copy`\n *\n * https://ix.siemens.io/docs/icon-library/icons\n *\n * or the import variant\n *\n * ```\n * import { rocket } from '@siemens/ix-icons/icons';\n *\n * <ix-icon name={rocket}></ix-icon>\n * ```\n */\n @Prop() name?: string;\n\n /**\n * Only fetch and parse svg data when icon is visible\n */\n @Prop() lazyLoading = false;\n\n @State() svgContent?: string;\n @State() isVisible = false;\n\n componentWillLoad() {\n this.waitForRendering(() => {\n this.isVisible = true;\n this.loadIconContent();\n });\n }\n\n @Watch('name')\n async loadIconContent() {\n const content = await resolveIcon(this.hostElement, this.name);\n\n if (!content) {\n this.svgContent = parseSVGDataContent(errorSymbol);\n return;\n }\n\n this.svgContent = content;\n }\n\n private waitForRendering(onRender: () => void) {\n if (Build.isBrowser && this.lazyLoading && typeof window !== 'undefined' && (window as any).IntersectionObserver) {\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n onRender();\n observer.disconnect();\n }\n });\n },\n {\n rootMargin: '25px',\n },\n );\n\n observer.observe(this.hostElement);\n } else {\n onRender();\n }\n }\n\n render() {\n const style: {\n [key: string]: string;\n } = {};\n\n if (this.color) {\n style['color'] = `var(--theme-${this.color})`;\n }\n\n return (\n <Host\n role=\"img\"\n style={style}\n class={{\n ['size-12']: this.size === '12',\n ['size-16']: this.size === '16',\n ['size-24']: this.size === '24',\n ['size-32']: this.size === '32',\n }}\n >\n <div class={'svg-container'} innerHTML={this.svgContent} aria-hidden=\"true\"></div>\n </Host>\n );\n }\n}\n"],"names":["getAssetPath","h","Host"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["src/components/icon/meta-tag.ts","src/components/icon/parser.ts","src/components/icon/resolveIcon.ts","src/components/icon/icon.scss?tag=ix-icon&encapsulation=shadow","src/components/icon/icon.tsx"],"sourcesContent":["/**\n * Provide custom SVG path for icons\n *\n * <meta name=\"ix-icons:path\" content=\"/build/svg\" />\n */\nexport function getCustomAssetUrl() {\n const assetPath = document.querySelector(\"meta[name='ix-icons:path']\");\n if (assetPath) {\n const path = assetPath.getAttribute('content');\n return path;\n }\n\n return false;\n}\n","/*\n * COPYRIGHT (c) Siemens AG 2018-2025 ALL RIGHTS RESERVED.\n */\n\nlet parser: any = null;\n\nexport const errorSymbol =\n \"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'><path fill-rule='evenodd' d='M384,0 L384,384 L0,384 L0,0 L384,0 Z M192,207.085 L57.751,341.333 L326.248,341.333 L192,207.085 Z M42.666,57.751 L42.666,326.248 L176.915,192 L42.666,57.751 Z M341.333,57.751 L207.085,192 L341.333,326.248 L341.333,57.751 Z M326.248,42.666 L57.751,42.666 L192,176.915 L326.248,42.666 Z' transform='translate(64 64)'/></svg>\";\n\nexport function parseSVGDataContent(content: string, element?: HTMLElement): string {\n if (typeof window['DOMParser'] === 'undefined') {\n console.error('DOMParser not supported by your browser.');\n return '';\n }\n\n if (parser === null) {\n parser = new window['DOMParser']();\n }\n\n // decode URI component if needed\n try {\n content = decodeURI(content);\n } catch {\n // Content is not a valid URI component, which can happen if it's already decoded. Proceed with the original content.\n }\n\n const svgDocument = parser.parseFromString(content, 'text/html');\n const svgElement = svgDocument.querySelector('svg') as HTMLElement;\n\n if (!svgElement) {\n if (element) {\n console.error('No valid svg data provided', element);\n } else {\n console.error('No valid svg data provided');\n }\n return '';\n }\n\n return svgElement.outerHTML;\n}\n","/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { getAssetPath } from '@stencil/core';\nimport { getCustomAssetUrl } from './meta-tag';\nimport { parseSVGDataContent } from './parser';\n\ndeclare global {\n interface Window {\n IxIcons: any;\n }\n}\n\nlet fetchCache: Map<string, string>;\nconst requests = new Map<string, Promise<string>>();\n\nexport const getIconCacheMap = (): Map<string, string> => {\n if (typeof window === 'undefined') {\n return new Map();\n }\n\n if (!fetchCache) {\n window.IxIcons = window.IxIcons || {};\n fetchCache = window.IxIcons.map = window.IxIcons.map || new Map();\n }\n\n return fetchCache;\n};\n\nexport const isSvgDataUrl = (url: string) => {\n if (!url) {\n return false;\n }\n\n if (typeof url !== 'string') {\n return false;\n }\n\n return url.startsWith('data:image/svg+xml');\n};\n\nasync function fetchSVG(url: string, element: HTMLIxIconElement) {\n const cache = getIconCacheMap();\n\n if (cache.has(url)) {\n return cache.get(url)!;\n }\n\n if (requests.has(url)) {\n return requests.get(url)!;\n }\n\n const fetching = fetch(url)\n .then(async response => {\n const responseText = await response.text();\n\n let svgContent = '';\n if (response.ok) {\n svgContent = parseSVGDataContent(responseText, element);\n cache.set(url, svgContent);\n } else {\n console.error('Failed to request svg data from', url, 'with status code', response.status, element);\n }\n\n return svgContent;\n })\n .catch(() => {\n console.error('Failed to fetch svg data:', url, element);\n cache.set(url, '');\n return '';\n })\n .finally(() => {\n requests.delete(url);\n });\n\n return fetching;\n}\n\nconst urlRegex = /^(?:(?:https?|ftp):\\/\\/)?(?:\\S+(?::\\S*)?@)?(?:www\\.)?(?:\\S+\\.\\S+)(?:\\S*)$/i;\n\nfunction isValidUrl(url: string) {\n return urlRegex.test(url);\n}\n\nexport function getIconUrl(name: string, element: HTMLIxIconElement) {\n const customAssetUrl = getCustomAssetUrl();\n\n if (customAssetUrl) {\n return `${customAssetUrl}/${name}.svg`;\n }\n\n let url: string = `svg/${name}.svg`;\n\n try {\n url = getAssetPath(url);\n } catch (error) {\n console.warn(`Could not load icon with name \"${name}\". Ensure that the icon is registered using addIcons or that the icon SVG data is passed directly to property.`, element);\n }\n\n return url;\n}\n\nexport async function resolveIcon(element: HTMLIxIconElement, iconName?: string): Promise<string> {\n if (!iconName) {\n console.warn('No icon was provided', element);\n return '';\n }\n\n if (isSvgDataUrl(iconName)) {\n const content = parseSVGDataContent(iconName, element);\n\n if (!content) {\n console.error('Failed to parse icon data', element);\n }\n return content;\n }\n\n return loadIcon(iconName, element);\n}\n\nasync function loadIcon(iconName: string, element: HTMLIxIconElement): Promise<string> {\n const cache = getIconCacheMap();\n\n if (cache.has(iconName)) {\n return cache.get(iconName)!;\n }\n\n if (isValidUrl(iconName)) {\n return fetchSVG(iconName, element);\n }\n\n const iconUrl = getIconUrl(iconName, element);\n\n if (!iconUrl) {\n return '';\n }\n\n return fetchSVG(iconUrl, element);\n}\n\nfunction removePrefix(name: string, prefix: string) {\n if (name.startsWith(prefix)) {\n name = name.slice(prefix.length);\n return name.replace(/^(\\w)/, (_match, p1) => p1.toLowerCase());\n }\n\n return name;\n}\n\nexport function addIcons(icons: { [name: string]: any }) {\n Object.keys(icons).forEach(name => {\n const icon = icons[name];\n name = removePrefix(name, 'icon');\n\n addIconToCache(name, icon);\n });\n}\n\nexport function addIconToCache(name: string, icon: string) {\n const cache = getIconCacheMap();\n\n if (cache.has(name)) {\n console.warn(`Icon name '${name}' already in cache. Overwritting with new icon data.`);\n }\n\n const svg = parseSVGDataContent(icon);\n\n cache.set(name, svg);\n\n const toKebabCase = name.replace(/([a-z0-9]|(?=[A-Z]))([A-Z0-9])/g, '$1-$2').toLowerCase();\n\n if (name != toKebabCase) {\n cache.set(toKebabCase, svg);\n }\n}\n","/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n@mixin size($size) {\n height: $size;\n width: $size;\n min-height: $size;\n min-width: $size;\n}\n\n:host {\n display: inline-flex;\n @include size(1.5rem);\n color: inherit;\n\n .svg-container {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n\n svg {\n display: block;\n position: relative;\n height: 100%;\n width: 100%;\n }\n\n svg,\n svg[fill],\n svg [fill] {\n fill: currentColor !important;\n }\n }\n}\n\n:host(.size-12) {\n @include size(0.75rem);\n}\n\n:host(.size-16) {\n @include size(1rem);\n}\n\n:host(.size-32) {\n @include size(2rem);\n}\n","/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { Component, h, Host, Prop, State, Watch, Element, Build } from '@stencil/core';\nimport { resolveIcon } from './resolveIcon';\nimport { errorSymbol, parseSVGDataContent } from './parser';\n\n@Component({\n tag: 'ix-icon',\n styleUrl: 'icon.scss',\n shadow: true,\n assetsDirs: ['svg'],\n})\nexport class Icon {\n @Element() hostElement!: HTMLIxIconElement;\n\n /**\n * Size of the icon\n */\n @Prop() size: '12' | '16' | '24' | '32' = '24';\n\n /**\n * Color of the icon\n */\n @Prop() color?: string;\n\n /**\n * Use one of our defined icon names e.g. `copy`\n *\n * https://ix.siemens.io/docs/icon-library/icons\n *\n * or the import variant\n *\n * ```\n * import { rocket } from '@siemens/ix-icons/icons';\n *\n * <ix-icon name={rocket}></ix-icon>\n * ```\n */\n @Prop() name?: string;\n\n /**\n * Only fetch and parse svg data when icon is visible\n */\n @Prop() lazyLoading = false;\n\n @State() svgContent?: string;\n @State() isVisible = false;\n\n componentWillLoad() {\n this.waitForRendering(() => {\n this.isVisible = true;\n this.loadIconContent();\n });\n }\n\n @Watch('name')\n async loadIconContent() {\n const content = await resolveIcon(this.hostElement, this.name);\n\n if (!content) {\n this.svgContent = parseSVGDataContent(errorSymbol);\n return;\n }\n\n this.svgContent = content;\n }\n\n private waitForRendering(onRender: () => void) {\n if (Build.isBrowser && this.lazyLoading && typeof window !== 'undefined' && (window as any).IntersectionObserver) {\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n onRender();\n observer.disconnect();\n }\n });\n },\n {\n rootMargin: '25px',\n },\n );\n\n observer.observe(this.hostElement);\n } else {\n onRender();\n }\n }\n\n render() {\n const style: {\n [key: string]: string;\n } = {};\n\n if (this.color) {\n style['color'] = `var(--theme-${this.color})`;\n }\n\n return (\n <Host\n role=\"img\"\n style={style}\n class={{\n ['size-12']: this.size === '12',\n ['size-16']: this.size === '16',\n ['size-24']: this.size === '24',\n ['size-32']: this.size === '32',\n }}\n >\n <div class={'svg-container'} innerHTML={this.svgContent} aria-hidden=\"true\"></div>\n </Host>\n );\n }\n}\n"],"names":["getAssetPath","h","Host"],"mappings":"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"}
@@ -1,11 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index.cjs.js');
4
- require('./index-Rt6MP40k.js');
4
+ require('./index-HU55KNQP.js');
5
5
 
6
6
 
7
7
 
8
8
  exports.ix_icon = index.Icon;
9
9
  //# sourceMappingURL=ix-icon.entry.cjs.js.map
10
-
11
- //# sourceMappingURL=ix-icon.cjs.entry.js.map
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-Rt6MP40k.js');
3
+ var index = require('./index-HU55KNQP.js');
4
4
  var appGlobals = require('./app-globals-V2Kpy_OQ.js');
5
5
 
6
6
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
7
7
  /*
8
- Stencil Client Patch Browser v4.35.3 | MIT Licensed | https://stenciljs.com
8
+ Stencil Client Patch Browser v4.38.3 | MIT Licensed | https://stenciljs.com
9
9
  */
10
10
 
11
11
  var patchBrowser = () => {
@@ -19,10 +19,8 @@ var patchBrowser = () => {
19
19
 
20
20
  patchBrowser().then(async (options) => {
21
21
  await appGlobals.globalScripts();
22
- return index.bootstrapLazy([["ix-icon.cjs",[[1,"ix-icon",{"size":[1],"color":[1],"name":[1],"lazyLoading":[4,"lazy-loading"],"svgContent":[32],"isVisible":[32]},null,{"name":["loadIconContent"]}]]]], options);
22
+ return index.bootstrapLazy([["ix-icon.cjs",[[769,"ix-icon",{"size":[1],"color":[1],"name":[1],"lazyLoading":[4,"lazy-loading"],"svgContent":[32],"isVisible":[32]},null,{"name":["loadIconContent"]}]]]], options);
23
23
  });
24
24
 
25
25
  exports.setNonce = index.setNonce;
26
26
  //# sourceMappingURL=ix-icons.cjs.js.map
27
-
28
- //# sourceMappingURL=ix-icons.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ix-icons.cjs.js","sources":["node_modules/.pnpm/@stencil+core@4.35.3/node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.35.3 | MIT Licensed | https://stenciljs.com\n */\n\n// src/client/client-patch-browser.ts\nimport { BUILD, NAMESPACE } from \"@stencil/core/internal/app-data\";\nimport { consoleDevInfo, H, promiseResolve, win } from \"@stencil/core\";\nvar patchBrowser = () => {\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo(\"Running in development mode.\");\n }\n if (BUILD.cloneNodeFix) {\n patchCloneNodeFix(H.prototype);\n }\n const scriptElm = BUILD.scriptDataOpts ? win.document && Array.from(win.document.querySelectorAll(\"script\")).find(\n (s) => new RegExp(`/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) || s.getAttribute(\"data-stencil-namespace\") === NAMESPACE\n ) : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? (scriptElm || {})[\"data-opts\"] || {} : {};\n if (importMeta !== \"\") {\n opts.resourcesUrl = new URL(\".\", importMeta).href;\n }\n return promiseResolve(opts);\n};\nvar patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function(deep) {\n if (this.nodeName === \"TEMPLATE\") {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport {\n patchBrowser\n};\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(async (options) => {\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"names":["promiseResolve","globalScripts","bootstrapLazy"],"mappings":";;;;;;AAAA;AACA;AACA;;AAKA,IAAI,YAAY,GAAG,MAAM;AAUzB,EAAE,MAAM,UAAU,GAAG,iQAAe;AACpC,EAAE,MAAM,IAAI,GAAiE,EAAE;AAC/E,EAAE,IAAI,UAAU,KAAK,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI;AACrD;AACA,EAAE,OAAOA,oBAAc,CAAC,IAAI,CAAC;AAC7B,CAAC;;ACnBD,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK;AACvC,EAAE,MAAMC,wBAAa,EAAE;AACvB,EAAE,OAAOC,mBAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D,CAAC,CAAC;;;;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ix-icons.cjs.js","sources":["node_modules/.pnpm/@stencil+core@4.38.3/node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.38.3 | MIT Licensed | https://stenciljs.com\n */\n\n// src/client/client-patch-browser.ts\nimport { BUILD, NAMESPACE } from \"@stencil/core/internal/app-data\";\nimport { consoleDevInfo, H, promiseResolve, win } from \"@stencil/core\";\nvar patchBrowser = () => {\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo(\"Running in development mode.\");\n }\n if (BUILD.cloneNodeFix) {\n patchCloneNodeFix(H.prototype);\n }\n const scriptElm = BUILD.scriptDataOpts ? win.document && Array.from(win.document.querySelectorAll(\"script\")).find(\n (s) => new RegExp(`/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) || s.getAttribute(\"data-stencil-namespace\") === NAMESPACE\n ) : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? (scriptElm || {})[\"data-opts\"] || {} : {};\n if (importMeta !== \"\") {\n opts.resourcesUrl = new URL(\".\", importMeta).href;\n }\n return promiseResolve(opts);\n};\nvar patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function(deep) {\n if (this.nodeName === \"TEMPLATE\") {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport {\n patchBrowser\n};\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(async (options) => {\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"names":["promiseResolve","globalScripts","bootstrapLazy"],"mappings":";;;;;;AAAA;AACA;AACA;;AAKA,IAAI,YAAY,GAAG,MAAM;AAUzB,EAAE,MAAM,UAAU,GAAG,iQAAe;AACpC,EAAE,MAAM,IAAI,GAAiE,EAAE;AAC/E,EAAE,IAAI,UAAU,KAAK,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI;AACrD;AACA,EAAE,OAAOA,oBAAc,CAAC,IAAI,CAAC;AAC7B,CAAC;;ACnBD,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK;AACvC,EAAE,MAAMC,wBAAa,EAAE;AACvB,EAAE,OAAOC,mBAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D,CAAC,CAAC;;;;","x_google_ignoreList":[0]}
@@ -1,16 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-Rt6MP40k.js');
3
+ var index = require('./index-HU55KNQP.js');
4
4
  var appGlobals = require('./app-globals-V2Kpy_OQ.js');
5
5
 
6
6
  const defineCustomElements = async (win, options) => {
7
7
  if (typeof window === 'undefined') return undefined;
8
8
  await appGlobals.globalScripts();
9
- return index.bootstrapLazy([["ix-icon.cjs",[[1,"ix-icon",{"size":[1],"color":[1],"name":[1],"lazyLoading":[4,"lazy-loading"],"svgContent":[32],"isVisible":[32]},null,{"name":["loadIconContent"]}]]]], options);
9
+ return index.bootstrapLazy([["ix-icon.cjs",[[769,"ix-icon",{"size":[1],"color":[1],"name":[1],"lazyLoading":[4,"lazy-loading"],"svgContent":[32],"isVisible":[32]},null,{"name":["loadIconContent"]}]]]], options);
10
10
  };
11
11
 
12
12
  exports.setNonce = index.setNonce;
13
13
  exports.defineCustomElements = defineCustomElements;
14
14
  //# sourceMappingURL=loader.cjs.js.map
15
-
16
- //# sourceMappingURL=loader.cjs.js.map
@@ -4,8 +4,8 @@
4
4
  ],
5
5
  "compiler": {
6
6
  "name": "@stencil/core",
7
- "version": "4.35.3",
8
- "typescriptVersion": "5.5.4"
7
+ "version": "4.38.3",
8
+ "typescriptVersion": "5.9.3"
9
9
  },
10
10
  "collections": [],
11
11
  "bundles": []
@@ -10,17 +10,35 @@ import { h, Host, Build } from "@stencil/core";
10
10
  import { resolveIcon } from "./resolveIcon";
11
11
  import { errorSymbol, parseSVGDataContent } from "./parser";
12
12
  export class Icon {
13
- constructor() {
14
- /**
15
- * Size of the icon
16
- */
17
- this.size = '24';
18
- /**
19
- * Only fetch and parse svg data when icon is visible
20
- */
21
- this.lazyLoading = false;
22
- this.isVisible = false;
23
- }
13
+ hostElement;
14
+ /**
15
+ * Size of the icon
16
+ */
17
+ size = '24';
18
+ /**
19
+ * Color of the icon
20
+ */
21
+ color;
22
+ /**
23
+ * Use one of our defined icon names e.g. `copy`
24
+ *
25
+ * https://ix.siemens.io/docs/icon-library/icons
26
+ *
27
+ * or the import variant
28
+ *
29
+ * ```
30
+ * import { rocket } from '@siemens/ix-icons/icons';
31
+ *
32
+ * <ix-icon name={rocket}></ix-icon>
33
+ * ```
34
+ */
35
+ name;
36
+ /**
37
+ * Only fetch and parse svg data when icon is visible
38
+ */
39
+ lazyLoading = false;
40
+ svgContent;
41
+ isVisible = false;
24
42
  componentWillLoad() {
25
43
  this.waitForRendering(() => {
26
44
  this.isVisible = true;
@@ -82,7 +100,6 @@ export class Icon {
82
100
  return {
83
101
  "size": {
84
102
  "type": "string",
85
- "attribute": "size",
86
103
  "mutable": false,
87
104
  "complexType": {
88
105
  "original": "'12' | '16' | '24' | '32'",
@@ -98,11 +115,11 @@ export class Icon {
98
115
  "getter": false,
99
116
  "setter": false,
100
117
  "reflect": false,
118
+ "attribute": "size",
101
119
  "defaultValue": "'24'"
102
120
  },
103
121
  "color": {
104
122
  "type": "string",
105
- "attribute": "color",
106
123
  "mutable": false,
107
124
  "complexType": {
108
125
  "original": "string",
@@ -117,11 +134,11 @@ export class Icon {
117
134
  },
118
135
  "getter": false,
119
136
  "setter": false,
120
- "reflect": false
137
+ "reflect": false,
138
+ "attribute": "color"
121
139
  },
122
140
  "name": {
123
141
  "type": "string",
124
- "attribute": "name",
125
142
  "mutable": false,
126
143
  "complexType": {
127
144
  "original": "string",
@@ -136,11 +153,11 @@ export class Icon {
136
153
  },
137
154
  "getter": false,
138
155
  "setter": false,
139
- "reflect": false
156
+ "reflect": false,
157
+ "attribute": "name"
140
158
  },
141
159
  "lazyLoading": {
142
160
  "type": "boolean",
143
- "attribute": "lazy-loading",
144
161
  "mutable": false,
145
162
  "complexType": {
146
163
  "original": "boolean",
@@ -156,6 +173,7 @@ export class Icon {
156
173
  "getter": false,
157
174
  "setter": false,
158
175
  "reflect": false,
176
+ "attribute": "lazy-loading",
159
177
  "defaultValue": "false"
160
178
  }
161
179
  };
@@ -1 +1 @@
1
- {"version":3,"file":"icon.js","sourceRoot":"","sources":["../../../src/components/icon/icon.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAQ5D,MAAM,OAAO,IAAI;IANjB;QASE;;WAEG;QACK,SAAI,GAA8B,IAAI,CAAC;QAsB/C;;WAEG;QACK,gBAAW,GAAG,KAAK,CAAC;QAGnB,cAAS,GAAG,KAAK,CAAC;KAmE5B;IAjEC,iBAAiB;QACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;YACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAGD,KAAK,CAAC,eAAe;QACnB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;IAC5B,CAAC;IAEO,gBAAgB,CAAC,QAAoB;QAC3C,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,MAAM,KAAK,WAAW,IAAK,MAAc,CAAC,oBAAoB,EAAE,CAAC;YACjH,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CACvC,OAAO,CAAC,EAAE;gBACR,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACtB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;wBACzB,QAAQ,EAAE,CAAC;wBACX,QAAQ,CAAC,UAAU,EAAE,CAAC;oBACxB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,EACD;gBACE,UAAU,EAAE,MAAM;aACnB,CACF,CAAC;YAEF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,MAAM;QACJ,MAAM,KAAK,GAEP,EAAE,CAAC;QAEP,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,OAAO,CAAC,GAAG,eAAe,IAAI,CAAC,KAAK,GAAG,CAAC;QAChD,CAAC;QAED,OAAO,CACL,EAAC,IAAI,qDACH,IAAI,EAAC,KAAK,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE;gBACL,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;gBAC/B,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;gBAC/B,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;gBAC/B,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;aAChC;YAED,4DAAK,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,iBAAc,MAAM,GAAO,CAC7E,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { Component, h, Host, Prop, State, Watch, Element, Build } from '@stencil/core';\nimport { resolveIcon } from './resolveIcon';\nimport { errorSymbol, parseSVGDataContent } from './parser';\n\n@Component({\n tag: 'ix-icon',\n styleUrl: 'icon.scss',\n shadow: true,\n assetsDirs: ['svg'],\n})\nexport class Icon {\n @Element() hostElement!: HTMLIxIconElement;\n\n /**\n * Size of the icon\n */\n @Prop() size: '12' | '16' | '24' | '32' = '24';\n\n /**\n * Color of the icon\n */\n @Prop() color?: string;\n\n /**\n * Use one of our defined icon names e.g. `copy`\n *\n * https://ix.siemens.io/docs/icon-library/icons\n *\n * or the import variant\n *\n * ```\n * import { rocket } from '@siemens/ix-icons/icons';\n *\n * <ix-icon name={rocket}></ix-icon>\n * ```\n */\n @Prop() name?: string;\n\n /**\n * Only fetch and parse svg data when icon is visible\n */\n @Prop() lazyLoading = false;\n\n @State() svgContent?: string;\n @State() isVisible = false;\n\n componentWillLoad() {\n this.waitForRendering(() => {\n this.isVisible = true;\n this.loadIconContent();\n });\n }\n\n @Watch('name')\n async loadIconContent() {\n const content = await resolveIcon(this.hostElement, this.name);\n\n if (!content) {\n this.svgContent = parseSVGDataContent(errorSymbol);\n return;\n }\n\n this.svgContent = content;\n }\n\n private waitForRendering(onRender: () => void) {\n if (Build.isBrowser && this.lazyLoading && typeof window !== 'undefined' && (window as any).IntersectionObserver) {\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n onRender();\n observer.disconnect();\n }\n });\n },\n {\n rootMargin: '25px',\n },\n );\n\n observer.observe(this.hostElement);\n } else {\n onRender();\n }\n }\n\n render() {\n const style: {\n [key: string]: string;\n } = {};\n\n if (this.color) {\n style['color'] = `var(--theme-${this.color})`;\n }\n\n return (\n <Host\n role=\"img\"\n style={style}\n class={{\n ['size-12']: this.size === '12',\n ['size-16']: this.size === '16',\n ['size-24']: this.size === '24',\n ['size-32']: this.size === '32',\n }}\n >\n <div class={'svg-container'} innerHTML={this.svgContent} aria-hidden=\"true\"></div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"icon.js","sourceRoot":"","sources":["../../../src/components/icon/icon.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAQ5D,MAAM,OAAO,IAAI;IACJ,WAAW,CAAqB;IAE3C;;OAEG;IACK,IAAI,GAA8B,IAAI,CAAC;IAE/C;;OAEG;IACK,KAAK,CAAU;IAEvB;;;;;;;;;;;;OAYG;IACK,IAAI,CAAU;IAEtB;;OAEG;IACK,WAAW,GAAG,KAAK,CAAC;IAEnB,UAAU,CAAU;IACpB,SAAS,GAAG,KAAK,CAAC;IAE3B,iBAAiB;QACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;YACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAGD,KAAK,CAAC,eAAe;QACnB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;IAC5B,CAAC;IAEO,gBAAgB,CAAC,QAAoB;QAC3C,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,MAAM,KAAK,WAAW,IAAK,MAAc,CAAC,oBAAoB,EAAE,CAAC;YACjH,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CACvC,OAAO,CAAC,EAAE;gBACR,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACtB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;wBACzB,QAAQ,EAAE,CAAC;wBACX,QAAQ,CAAC,UAAU,EAAE,CAAC;oBACxB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,EACD;gBACE,UAAU,EAAE,MAAM;aACnB,CACF,CAAC;YAEF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,MAAM;QACJ,MAAM,KAAK,GAEP,EAAE,CAAC;QAEP,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,OAAO,CAAC,GAAG,eAAe,IAAI,CAAC,KAAK,GAAG,CAAC;QAChD,CAAC;QAED,OAAO,CACL,EAAC,IAAI,qDACH,IAAI,EAAC,KAAK,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE;gBACL,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;gBAC/B,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;gBAC/B,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;gBAC/B,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;aAChC;YAED,4DAAK,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,iBAAc,MAAM,GAAO,CAC7E,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { Component, h, Host, Prop, State, Watch, Element, Build } from '@stencil/core';\nimport { resolveIcon } from './resolveIcon';\nimport { errorSymbol, parseSVGDataContent } from './parser';\n\n@Component({\n tag: 'ix-icon',\n styleUrl: 'icon.scss',\n shadow: true,\n assetsDirs: ['svg'],\n})\nexport class Icon {\n @Element() hostElement!: HTMLIxIconElement;\n\n /**\n * Size of the icon\n */\n @Prop() size: '12' | '16' | '24' | '32' = '24';\n\n /**\n * Color of the icon\n */\n @Prop() color?: string;\n\n /**\n * Use one of our defined icon names e.g. `copy`\n *\n * https://ix.siemens.io/docs/icon-library/icons\n *\n * or the import variant\n *\n * ```\n * import { rocket } from '@siemens/ix-icons/icons';\n *\n * <ix-icon name={rocket}></ix-icon>\n * ```\n */\n @Prop() name?: string;\n\n /**\n * Only fetch and parse svg data when icon is visible\n */\n @Prop() lazyLoading = false;\n\n @State() svgContent?: string;\n @State() isVisible = false;\n\n componentWillLoad() {\n this.waitForRendering(() => {\n this.isVisible = true;\n this.loadIconContent();\n });\n }\n\n @Watch('name')\n async loadIconContent() {\n const content = await resolveIcon(this.hostElement, this.name);\n\n if (!content) {\n this.svgContent = parseSVGDataContent(errorSymbol);\n return;\n }\n\n this.svgContent = content;\n }\n\n private waitForRendering(onRender: () => void) {\n if (Build.isBrowser && this.lazyLoading && typeof window !== 'undefined' && (window as any).IntersectionObserver) {\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n onRender();\n observer.disconnect();\n }\n });\n },\n {\n rootMargin: '25px',\n },\n );\n\n observer.observe(this.hostElement);\n } else {\n onRender();\n }\n }\n\n render() {\n const style: {\n [key: string]: string;\n } = {};\n\n if (this.color) {\n style['color'] = `var(--theme-${this.color})`;\n }\n\n return (\n <Host\n role=\"img\"\n style={style}\n class={{\n ['size-12']: this.size === '12',\n ['size-16']: this.size === '16',\n ['size-24']: this.size === '24',\n ['size-32']: this.size === '32',\n }}\n >\n <div class={'svg-container'} innerHTML={this.svgContent} aria-hidden=\"true\"></div>\n </Host>\n );\n }\n}\n"]}
@@ -11,7 +11,14 @@ export function parseSVGDataContent(content, element) {
11
11
  if (parser === null) {
12
12
  parser = new window['DOMParser']();
13
13
  }
14
- const svgDocument = parser.parseFromString(decodeURI(content), 'text/html');
14
+ // decode URI component if needed
15
+ try {
16
+ content = decodeURI(content);
17
+ }
18
+ catch {
19
+ // Content is not a valid URI component, which can happen if it's already decoded. Proceed with the original content.
20
+ }
21
+ const svgDocument = parser.parseFromString(content, 'text/html');
15
22
  const svgElement = svgDocument.querySelector('svg');
16
23
  if (!svgElement) {
17
24
  if (element) {
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/components/icon/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,IAAI,MAAM,GAAQ,IAAI,CAAC;AAEvB,MAAM,CAAC,MAAM,WAAW,GACtB,gdAAgd,CAAC;AAEnd,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,OAAqB;IACxE,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,WAAW,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,CAAgB,CAAC;IAEnE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,UAAU,CAAC,SAAS,CAAC;AAC9B,CAAC","sourcesContent":["/*\n * COPYRIGHT (c) Siemens AG 2018-2025 ALL RIGHTS RESERVED.\n */\n\nlet parser: any = null;\n\nexport const errorSymbol =\n \"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'><path fill-rule='evenodd' d='M384,0 L384,384 L0,384 L0,0 L384,0 Z M192,207.085 L57.751,341.333 L326.248,341.333 L192,207.085 Z M42.666,57.751 L42.666,326.248 L176.915,192 L42.666,57.751 Z M341.333,57.751 L207.085,192 L341.333,326.248 L341.333,57.751 Z M326.248,42.666 L57.751,42.666 L192,176.915 L326.248,42.666 Z' transform='translate(64 64)'/></svg>\";\n\nexport function parseSVGDataContent(content: string, element?: HTMLElement): string {\n if (typeof window['DOMParser'] === 'undefined') {\n console.error('DOMParser not supported by your browser.');\n return '';\n }\n\n if (parser === null) {\n parser = new window['DOMParser']();\n }\n\n const svgDocument = parser.parseFromString(decodeURI(content), 'text/html');\n const svgElement = svgDocument.querySelector('svg') as HTMLElement;\n\n if (!svgElement) {\n if (element) {\n console.error('No valid svg data provided', element);\n } else {\n console.error('No valid svg data provided');\n }\n return '';\n }\n\n return svgElement.outerHTML;\n}\n"]}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/components/icon/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,IAAI,MAAM,GAAQ,IAAI,CAAC;AAEvB,MAAM,CAAC,MAAM,WAAW,GACtB,gdAAgd,CAAC;AAEnd,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,OAAqB;IACxE,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,WAAW,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC;QACH,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,qHAAqH;IACvH,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,CAAgB,CAAC;IAEnE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,UAAU,CAAC,SAAS,CAAC;AAC9B,CAAC","sourcesContent":["/*\n * COPYRIGHT (c) Siemens AG 2018-2025 ALL RIGHTS RESERVED.\n */\n\nlet parser: any = null;\n\nexport const errorSymbol =\n \"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'><path fill-rule='evenodd' d='M384,0 L384,384 L0,384 L0,0 L384,0 Z M192,207.085 L57.751,341.333 L326.248,341.333 L192,207.085 Z M42.666,57.751 L42.666,326.248 L176.915,192 L42.666,57.751 Z M341.333,57.751 L207.085,192 L341.333,326.248 L341.333,57.751 Z M326.248,42.666 L57.751,42.666 L192,176.915 L326.248,42.666 Z' transform='translate(64 64)'/></svg>\";\n\nexport function parseSVGDataContent(content: string, element?: HTMLElement): string {\n if (typeof window['DOMParser'] === 'undefined') {\n console.error('DOMParser not supported by your browser.');\n return '';\n }\n\n if (parser === null) {\n parser = new window['DOMParser']();\n }\n\n // decode URI component if needed\n try {\n content = decodeURI(content);\n } catch {\n // Content is not a valid URI component, which can happen if it's already decoded. Proceed with the original content.\n }\n\n const svgDocument = parser.parseFromString(content, 'text/html');\n const svgElement = svgDocument.querySelector('svg') as HTMLElement;\n\n if (!svgElement) {\n if (element) {\n console.error('No valid svg data provided', element);\n } else {\n console.error('No valid svg data provided');\n }\n return '';\n }\n\n return svgElement.outerHTML;\n}\n"]}