@clusterenvision/ui-framework 1.0.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 (193) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -0
  3. package/dist/ai-assistant-Db002XYC.d.ts +92 -0
  4. package/dist/ai-assistant-EobSUV70.d.cts +92 -0
  5. package/dist/browser-DnHpnWwE.d.cts +354 -0
  6. package/dist/browser-Dx4oKf5e.d.ts +354 -0
  7. package/dist/browser-signals-07qodpYT.d.cts +66 -0
  8. package/dist/browser-signals-07qodpYT.d.ts +66 -0
  9. package/dist/browser-signals.cjs +32 -0
  10. package/dist/browser-signals.cjs.map +1 -0
  11. package/dist/browser-signals.d.cts +1 -0
  12. package/dist/browser-signals.d.ts +1 -0
  13. package/dist/browser-signals.js +3 -0
  14. package/dist/browser-signals.js.map +1 -0
  15. package/dist/browser.cjs +197 -0
  16. package/dist/browser.cjs.map +1 -0
  17. package/dist/browser.d.cts +13 -0
  18. package/dist/browser.d.ts +13 -0
  19. package/dist/browser.js +12 -0
  20. package/dist/browser.js.map +1 -0
  21. package/dist/chunk-22HQL2Y4.js +568 -0
  22. package/dist/chunk-22HQL2Y4.js.map +1 -0
  23. package/dist/chunk-3ZBRNFEE.js +1525 -0
  24. package/dist/chunk-3ZBRNFEE.js.map +1 -0
  25. package/dist/chunk-4HRORR2Q.js +1953 -0
  26. package/dist/chunk-4HRORR2Q.js.map +1 -0
  27. package/dist/chunk-4L3UXVL5.cjs +68 -0
  28. package/dist/chunk-4L3UXVL5.cjs.map +1 -0
  29. package/dist/chunk-6BYWFGQY.cjs +226 -0
  30. package/dist/chunk-6BYWFGQY.cjs.map +1 -0
  31. package/dist/chunk-7SCIB5HP.js +57 -0
  32. package/dist/chunk-7SCIB5HP.js.map +1 -0
  33. package/dist/chunk-BBAUALNU.js +888 -0
  34. package/dist/chunk-BBAUALNU.js.map +1 -0
  35. package/dist/chunk-CHLDE4JQ.js +715 -0
  36. package/dist/chunk-CHLDE4JQ.js.map +1 -0
  37. package/dist/chunk-CXTAUXLG.cjs +71 -0
  38. package/dist/chunk-CXTAUXLG.cjs.map +1 -0
  39. package/dist/chunk-D2USIT6V.js +121 -0
  40. package/dist/chunk-D2USIT6V.js.map +1 -0
  41. package/dist/chunk-D3H5CGVD.js +36 -0
  42. package/dist/chunk-D3H5CGVD.js.map +1 -0
  43. package/dist/chunk-DQBX75NJ.js +92 -0
  44. package/dist/chunk-DQBX75NJ.js.map +1 -0
  45. package/dist/chunk-DRPG2DFX.js +208 -0
  46. package/dist/chunk-DRPG2DFX.js.map +1 -0
  47. package/dist/chunk-EFOOXCY7.cjs +41 -0
  48. package/dist/chunk-EFOOXCY7.cjs.map +1 -0
  49. package/dist/chunk-FFCZSYC7.cjs +906 -0
  50. package/dist/chunk-FFCZSYC7.cjs.map +1 -0
  51. package/dist/chunk-FNXIYAET.cjs +1593 -0
  52. package/dist/chunk-FNXIYAET.cjs.map +1 -0
  53. package/dist/chunk-I6GNUM3P.cjs +63 -0
  54. package/dist/chunk-I6GNUM3P.cjs.map +1 -0
  55. package/dist/chunk-IHAMVLRY.js +129 -0
  56. package/dist/chunk-IHAMVLRY.js.map +1 -0
  57. package/dist/chunk-IRBUKIRF.cjs +133 -0
  58. package/dist/chunk-IRBUKIRF.cjs.map +1 -0
  59. package/dist/chunk-KPG5HAHK.cjs +97 -0
  60. package/dist/chunk-KPG5HAHK.cjs.map +1 -0
  61. package/dist/chunk-N7Q2ESLG.cjs +130 -0
  62. package/dist/chunk-N7Q2ESLG.cjs.map +1 -0
  63. package/dist/chunk-PFBEIFVS.js +180 -0
  64. package/dist/chunk-PFBEIFVS.js.map +1 -0
  65. package/dist/chunk-PVZVFICK.cjs +318 -0
  66. package/dist/chunk-PVZVFICK.cjs.map +1 -0
  67. package/dist/chunk-Q3KH6HMU.js +305 -0
  68. package/dist/chunk-Q3KH6HMU.js.map +1 -0
  69. package/dist/chunk-QPAAV32J.cjs +1985 -0
  70. package/dist/chunk-QPAAV32J.cjs.map +1 -0
  71. package/dist/chunk-R6XQUMWT.cjs +61 -0
  72. package/dist/chunk-R6XQUMWT.cjs.map +1 -0
  73. package/dist/chunk-SA5UD5B6.js +92 -0
  74. package/dist/chunk-SA5UD5B6.js.map +1 -0
  75. package/dist/chunk-SM35JOYD.cjs +211 -0
  76. package/dist/chunk-SM35JOYD.cjs.map +1 -0
  77. package/dist/chunk-SZQNIMYI.cjs +592 -0
  78. package/dist/chunk-SZQNIMYI.cjs.map +1 -0
  79. package/dist/chunk-T6T7QE4J.js +224 -0
  80. package/dist/chunk-T6T7QE4J.js.map +1 -0
  81. package/dist/chunk-TIF372DZ.js +65 -0
  82. package/dist/chunk-TIF372DZ.js.map +1 -0
  83. package/dist/chunk-V6JCOBGY.js +69 -0
  84. package/dist/chunk-V6JCOBGY.js.map +1 -0
  85. package/dist/chunk-VHUXNDW2.cjs +189 -0
  86. package/dist/chunk-VHUXNDW2.cjs.map +1 -0
  87. package/dist/chunk-W3LNNY3U.cjs +729 -0
  88. package/dist/chunk-W3LNNY3U.cjs.map +1 -0
  89. package/dist/chunk-ZUWSU4OA.js +61 -0
  90. package/dist/chunk-ZUWSU4OA.js.map +1 -0
  91. package/dist/chunk-ZWUA2LPB.cjs +103 -0
  92. package/dist/chunk-ZWUA2LPB.cjs.map +1 -0
  93. package/dist/cli/index.cjs +566 -0
  94. package/dist/cli/index.cjs.map +1 -0
  95. package/dist/cli/index.d.cts +1 -0
  96. package/dist/cli/index.d.ts +1 -0
  97. package/dist/cli/index.js +558 -0
  98. package/dist/cli/index.js.map +1 -0
  99. package/dist/compiler/index.cjs +80 -0
  100. package/dist/compiler/index.cjs.map +1 -0
  101. package/dist/compiler/index.d.cts +130 -0
  102. package/dist/compiler/index.d.ts +130 -0
  103. package/dist/compiler/index.js +3 -0
  104. package/dist/compiler/index.js.map +1 -0
  105. package/dist/component-BVzvepw9.d.cts +90 -0
  106. package/dist/component-wTxZ2BPD.d.ts +90 -0
  107. package/dist/index-CpxDa60m.d.cts +644 -0
  108. package/dist/index-CpxDa60m.d.ts +644 -0
  109. package/dist/index.cjs +1356 -0
  110. package/dist/index.cjs.map +1 -0
  111. package/dist/index.d.cts +165 -0
  112. package/dist/index.d.ts +165 -0
  113. package/dist/index.js +772 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/lib/dom.cjs +102 -0
  116. package/dist/lib/dom.cjs.map +1 -0
  117. package/dist/lib/dom.d.cts +373 -0
  118. package/dist/lib/dom.d.ts +373 -0
  119. package/dist/lib/dom.js +3 -0
  120. package/dist/lib/dom.js.map +1 -0
  121. package/dist/lib/icons.cjs +20 -0
  122. package/dist/lib/icons.cjs.map +1 -0
  123. package/dist/lib/icons.d.cts +64 -0
  124. package/dist/lib/icons.d.ts +64 -0
  125. package/dist/lib/icons.js +3 -0
  126. package/dist/lib/icons.js.map +1 -0
  127. package/dist/lib/index.cjs +247 -0
  128. package/dist/lib/index.cjs.map +1 -0
  129. package/dist/lib/index.d.cts +30 -0
  130. package/dist/lib/index.d.ts +30 -0
  131. package/dist/lib/index.js +92 -0
  132. package/dist/lib/index.js.map +1 -0
  133. package/dist/lib/theme.cjs +56 -0
  134. package/dist/lib/theme.cjs.map +1 -0
  135. package/dist/lib/theme.d.cts +27 -0
  136. package/dist/lib/theme.d.ts +27 -0
  137. package/dist/lib/theme.js +3 -0
  138. package/dist/lib/theme.js.map +1 -0
  139. package/dist/router-B9kms5XQ.d.ts +124 -0
  140. package/dist/router-YnpW_sIK.d.cts +124 -0
  141. package/dist/runtime/adapters/angular.cjs +48 -0
  142. package/dist/runtime/adapters/angular.cjs.map +1 -0
  143. package/dist/runtime/adapters/angular.d.cts +38 -0
  144. package/dist/runtime/adapters/angular.d.ts +38 -0
  145. package/dist/runtime/adapters/angular.js +46 -0
  146. package/dist/runtime/adapters/angular.js.map +1 -0
  147. package/dist/runtime/adapters/react.cjs +41 -0
  148. package/dist/runtime/adapters/react.cjs.map +1 -0
  149. package/dist/runtime/adapters/react.d.cts +26 -0
  150. package/dist/runtime/adapters/react.d.ts +26 -0
  151. package/dist/runtime/adapters/react.js +39 -0
  152. package/dist/runtime/adapters/react.js.map +1 -0
  153. package/dist/runtime/adapters/vue.cjs +44 -0
  154. package/dist/runtime/adapters/vue.cjs.map +1 -0
  155. package/dist/runtime/adapters/vue.d.cts +37 -0
  156. package/dist/runtime/adapters/vue.d.ts +37 -0
  157. package/dist/runtime/adapters/vue.js +42 -0
  158. package/dist/runtime/adapters/vue.js.map +1 -0
  159. package/dist/runtime/components/ai-assistant.cjs +18 -0
  160. package/dist/runtime/components/ai-assistant.cjs.map +1 -0
  161. package/dist/runtime/components/ai-assistant.d.cts +8 -0
  162. package/dist/runtime/components/ai-assistant.d.ts +8 -0
  163. package/dist/runtime/components/ai-assistant.js +9 -0
  164. package/dist/runtime/components/ai-assistant.js.map +1 -0
  165. package/dist/runtime/components/ai-summary-card.cjs +18 -0
  166. package/dist/runtime/components/ai-summary-card.cjs.map +1 -0
  167. package/dist/runtime/components/ai-summary-card.d.cts +19 -0
  168. package/dist/runtime/components/ai-summary-card.d.ts +19 -0
  169. package/dist/runtime/components/ai-summary-card.js +9 -0
  170. package/dist/runtime/components/ai-summary-card.js.map +1 -0
  171. package/dist/runtime/router.cjs +429 -0
  172. package/dist/runtime/router.cjs.map +1 -0
  173. package/dist/runtime/router.d.cts +2 -0
  174. package/dist/runtime/router.d.ts +2 -0
  175. package/dist/runtime/router.js +421 -0
  176. package/dist/runtime/router.js.map +1 -0
  177. package/dist/runtime/server.cjs +125 -0
  178. package/dist/runtime/server.cjs.map +1 -0
  179. package/dist/runtime/server.d.cts +27 -0
  180. package/dist/runtime/server.d.ts +27 -0
  181. package/dist/runtime/server.js +117 -0
  182. package/dist/runtime/server.js.map +1 -0
  183. package/dist/runtime/workflow/index.cjs +282 -0
  184. package/dist/runtime/workflow/index.cjs.map +1 -0
  185. package/dist/runtime/workflow/index.d.cts +1 -0
  186. package/dist/runtime/workflow/index.d.ts +1 -0
  187. package/dist/runtime/workflow/index.js +5 -0
  188. package/dist/runtime/workflow/index.js.map +1 -0
  189. package/dist/tracing-DGdvMCEl.d.cts +109 -0
  190. package/dist/tracing-DGdvMCEl.d.ts +109 -0
  191. package/dist/types-C4RXXKfk.d.cts +76 -0
  192. package/dist/types-C4RXXKfk.d.ts +76 -0
  193. package/package.json +166 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/components/ai-assistant.ts"],"names":["defineComponent","signal"],"mappings":"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","file":"chunk-6BYWFGQY.cjs","sourcesContent":["import { defineComponent } from '../component.js';\nimport { signal } from '../signals.js';\nimport type { AiMessage, AiRole, AiSessionStatus } from '../ai.js';\n\nexport interface AiAssistantPanelProps extends Record<string, unknown> {\n title?: string;\n description?: string;\n messages: AiMessage[];\n suggestions?: string[];\n status?: AiSessionStatus;\n error?: string | null;\n placeholder?: string;\n sendLabel?: string;\n resetLabel?: string;\n busyLabel?: string;\n disabled?: boolean;\n}\n\nconst PANEL_STYLES = `\n .ai-panel {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n }\n .ai-panel__body {\n max-height: 420px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n }\n .ai-panel__messages {\n list-style: none;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n margin: 0;\n padding: 0;\n }\n .ai-panel__message {\n display: flex;\n flex-direction: column;\n gap: 0.35rem;\n }\n .ai-panel__bubble {\n background: var(--ce-surface-muted, #f8fafc);\n border-radius: 1rem;\n padding: 0.75rem 1rem;\n border: 1px solid var(--ce-border, rgba(15, 23, 42, 0.08));\n }\n .ai-panel__message[data-role=\"assistant\"] .ai-panel__bubble {\n background: var(--ce-surface, #ffffff);\n border-color: rgba(56, 189, 248, 0.35);\n }\n .ai-panel__author {\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--ce-text-subtle, #475569);\n }\n .ai-panel__bubble p {\n margin: 0.25rem 0;\n white-space: pre-wrap;\n }\n .ai-panel__bubble small {\n color: var(--ce-text-subtle, #94a3b8);\n font-size: 0.7rem;\n }\n .ai-panel__empty {\n font-size: 0.9rem;\n color: var(--ce-text-subtle, #94a3b8);\n }\n .ai-panel__error {\n border-radius: 0.75rem;\n border: 1px solid rgba(248, 113, 113, 0.5);\n background: rgba(248, 113, 113, 0.08);\n padding: 0.75rem 1rem;\n color: var(--ce-danger, #b91c1c);\n }\n .ai-panel__form {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n .ai-panel__input {\n width: 100%;\n min-height: 120px;\n border-radius: 0.75rem;\n border: 1px solid var(--ce-border, rgba(15, 23, 42, 0.1));\n padding: 0.75rem 1rem;\n font: inherit;\n resize: vertical;\n background: var(--ce-surface, #ffffff);\n }\n .ai-panel__actions {\n display: flex;\n gap: 0.75rem;\n flex-wrap: wrap;\n }\n .ai-panel__suggestions {\n margin-top: 1rem;\n }\n .ai-panel__chip-row {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .ai-panel__chip {\n border: 1px dashed var(--ce-border, rgba(15, 23, 42, 0.25));\n border-radius: 999px;\n padding: 0.35rem 0.85rem;\n font-size: 0.85rem;\n }\n`;\n\nexport const AiAssistantPanel = defineComponent<AiAssistantPanelProps>({\n name: 'ce-ai-assistant-panel',\n template: `\n <section class=\"card card--shadow ai-panel\" role=\"region\" aria-live=\"polite\">\n <header class=\"card__header\">\n <div>\n <p class=\"badge badge--primary\">AI Assistant</p>\n <h3>{{ props.title ?? 'Strategy copilot' }}</h3>\n <p>{{ props.description ?? 'Ask the model to summarize milestones, risks, and delivery plans.' }}</p>\n </div>\n <span class=\"badge badge--warning\" ce:if=\"isBusy()\">{{ props.busyLabel ?? 'Working' }}</span>\n </header>\n <div class=\"card__body ai-panel__body\">\n <ul class=\"ai-panel__messages\" aria-live=\"polite\">\n <li ce:for=\"message in props.messages\" track=\"message.id\" class=\"ai-panel__message\" data-role=\"{{ message.role }}\">\n <div class=\"ai-panel__bubble\">\n <span class=\"ai-panel__author\">{{ formatRole(message.role) }}</span>\n <p>{{ message.content }}</p>\n <small>{{ formatTimestamp(message) }}</small>\n </div>\n </li>\n <li ce:if=\"!props.messages.length\" class=\"ai-panel__empty\">No prompts yet — start with one of the suggestions below.</li>\n </ul>\n <div class=\"ai-panel__error\" ce:if=\"hasError()\">\n <p>{{ props.error ?? 'The assistant could not finish this request.' }}</p>\n </div>\n </div>\n <footer class=\"card__footer ai-panel__footer\">\n <form class=\"ai-panel__form\" on:submit=\"submit\" novalidate>\n <label class=\"ai-panel__label\" for=\"ce-ai-assistant-input\">Prompt</label>\n <textarea\n id=\"ce-ai-assistant-input\"\n class=\"ai-panel__input\"\n rows=\"3\"\n placeholder=\"{{ props.placeholder ?? 'Ask anything about your CE UI adoption plan…' }}\"\n value=\"{{ prompt() }}\"\n on:input=\"handleInput\"\n required\n aria-label=\"AI prompt input\"\n ></textarea>\n <div class=\"ai-panel__actions\">\n <button type=\"submit\" class=\"button button--primary\" disabled=\"{{ props.disabled || isBusy() ? 'true' : 'false' }}\">{{ sendLabel() }}</button>\n <button type=\"button\" class=\"button button--secondary\" on:click=\"reset\">{{ props.resetLabel ?? 'Reset' }}</button>\n </div>\n </form>\n <section class=\"ai-panel__suggestions\" ce:if=\"props.suggestions?.length\">\n <p>Suggestions</p>\n <div class=\"ai-panel__chip-row\">\n <button\n ce:for=\"suggestion in props.suggestions\"\n track=\"suggestion\"\n type=\"button\"\n class=\"button button--ghost ai-panel__chip\"\n on:click=\"useSuggestion(suggestion)\"\n >\n {{ suggestion }}\n </button>\n </div>\n </section>\n </footer>\n </section>\n `,\n styles: [PANEL_STYLES],\n setup({ emit, props }) {\n const prompt = signal('');\n const formatter = new Intl.DateTimeFormat('en-US', { hour: '2-digit', minute: '2-digit' });\n\n const handleInput = (event: Event) => {\n const value = (event.target as HTMLTextAreaElement | null)?.value ?? '';\n prompt.set(value);\n };\n\n const submit = (event: Event) => {\n event.preventDefault();\n if (props.disabled || props.status === 'processing') {\n return;\n }\n const value = prompt().trim();\n if (!value) {\n return;\n }\n emit('send', { prompt: value });\n prompt.set('');\n };\n\n const reset = () => {\n prompt.set('');\n emit('reset');\n };\n\n const useSuggestion = (suggestion: string) => {\n prompt.set(suggestion);\n emit('prefill', { prompt: suggestion });\n };\n\n const hasError = () => Boolean(props.error);\n const isBusy = () => props.status === 'processing';\n const sendLabel = () => (isBusy() ? props.busyLabel ?? 'Thinking…' : props.sendLabel ?? 'Send');\n\n const formatTimestamp = (message: AiMessage) => formatter.format(new Date(message.createdAt));\n const formatRole = (role: AiRole) => {\n switch (role) {\n case 'assistant':\n return 'Assistant';\n case 'system':\n return 'System';\n case 'tool':\n return 'Tool';\n default:\n return 'You';\n }\n };\n\n return {\n prompt,\n handleInput,\n submit,\n reset,\n useSuggestion,\n hasError,\n isBusy,\n sendLabel,\n formatTimestamp,\n formatRole,\n };\n },\n});\n"]}
@@ -0,0 +1,57 @@
1
+ // src/lib/icons.ts
2
+ function icon(name, options = {}) {
3
+ const el = document.createElement("ce-icon");
4
+ el.setAttribute("name", name);
5
+ if (options.size) {
6
+ el.setAttribute("size", options.size);
7
+ }
8
+ if (options.title) {
9
+ el.setAttribute("title", options.title);
10
+ }
11
+ if (options.className) {
12
+ el.className = options.className;
13
+ }
14
+ return el;
15
+ }
16
+ function iconHtml(name, options = {}) {
17
+ const attrs = [`name="${name}"`];
18
+ if (options.size) {
19
+ attrs.push(`size="${options.size}"`);
20
+ }
21
+ if (options.title) {
22
+ attrs.push(`title="${options.title}"`);
23
+ }
24
+ if (options.className) {
25
+ attrs.push(`class="${options.className}"`);
26
+ }
27
+ return `<ce-icon ${attrs.join(" ")}></ce-icon>`;
28
+ }
29
+ var ICONS = {
30
+ // Navigation
31
+ menu: "menu-3",
32
+ close: "xmark",
33
+ // E-commerce
34
+ cart: "cart-2",
35
+ star: "star",
36
+ heart: "heart",
37
+ // User
38
+ user: "user",
39
+ settings: "settings",
40
+ logout: "logout",
41
+ // Actions
42
+ search: "search",
43
+ filter: "filter",
44
+ sort: "sort",
45
+ edit: "edit",
46
+ delete: "trash",
47
+ add: "plus",
48
+ // Status
49
+ check: "check",
50
+ warning: "triangle-warning",
51
+ error: "xmark",
52
+ info: "info-circle"
53
+ };
54
+
55
+ export { ICONS, icon, iconHtml };
56
+ //# sourceMappingURL=chunk-7SCIB5HP.js.map
57
+ //# sourceMappingURL=chunk-7SCIB5HP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/icons.ts"],"names":[],"mappings":";AAgCO,SAAS,IAAA,CAAK,IAAA,EAAc,OAAA,GAAuB,EAAC,EAAgB;AACzE,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,aAAA,CAAc,SAAS,CAAA;AAC3C,EAAA,EAAA,CAAG,YAAA,CAAa,QAAQ,IAAI,CAAA;AAE5B,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,EAAA,CAAG,YAAA,CAAa,MAAA,EAAQ,OAAA,CAAQ,IAAI,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,EAAA,CAAG,YAAA,CAAa,OAAA,EAAS,OAAA,CAAQ,KAAK,CAAA;AAAA,EACxC;AAEA,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,EAAA,CAAG,YAAY,OAAA,CAAQ,SAAA;AAAA,EACzB;AAEA,EAAA,OAAO,EAAA;AACT;AASO,SAAS,QAAA,CAAS,IAAA,EAAc,OAAA,GAAuB,EAAC,EAAW;AACxE,EAAA,MAAM,KAAA,GAAkB,CAAC,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,CAAG,CAAA;AAEzC,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,MAAA,EAAS,OAAA,CAAQ,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,OAAA,CAAQ,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,OAAA,CAAQ,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,EAC3C;AAEA,EAAA,OAAO,CAAA,SAAA,EAAY,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,WAAA,CAAA;AACpC;AAKO,IAAM,KAAA,GAAQ;AAAA;AAAA,EAEnB,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA;AAAA,EAGP,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA;AAAA,EAGP,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU,UAAA;AAAA,EACV,MAAA,EAAQ,QAAA;AAAA;AAAA,EAGR,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,EAAQ,OAAA;AAAA,EACR,GAAA,EAAK,MAAA;AAAA;AAAA,EAGL,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,kBAAA;AAAA,EACT,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM;AACR","file":"chunk-7SCIB5HP.js","sourcesContent":["/**\n * Icon utilities for the CE E-Commerce application\n *\n * This module provides helper functions for working with icons using the <ce-icon> web component.\n *\n * @example\n * ```typescript\n * // Create an icon element\n * const cartIcon = icon('cart-2', { size: '24px', title: 'Shopping cart' });\n * element.appendChild(cartIcon);\n *\n * // Get icon HTML string for innerHTML\n * const menuHtml = iconHtml('menu-3', { size: '20px', title: 'Menu' });\n * ```\n */\n\nexport interface IconOptions {\n /** Size of the icon (CSS length: px, rem, em, %) */\n size?: string;\n /** Accessible label for the icon */\n title?: string;\n /** CSS class names to add to the icon element */\n className?: string;\n}\n\n/**\n * Create a <ce-icon> element programmatically\n *\n * @param name - Icon name from Nucleo set (e.g., 'cart-2', 'menu-3', 'user')\n * @param options - Icon configuration options\n * @returns HTMLElement - The ce-icon custom element\n */\nexport function icon(name: string, options: IconOptions = {}): HTMLElement {\n const el = document.createElement('ce-icon');\n el.setAttribute('name', name);\n\n if (options.size) {\n el.setAttribute('size', options.size);\n }\n\n if (options.title) {\n el.setAttribute('title', options.title);\n }\n\n if (options.className) {\n el.className = options.className;\n }\n\n return el;\n}\n\n/**\n * Get icon HTML string for use with innerHTML\n *\n * @param name - Icon name from Nucleo set\n * @param options - Icon configuration options\n * @returns string - HTML string of the ce-icon element\n */\nexport function iconHtml(name: string, options: IconOptions = {}): string {\n const attrs: string[] = [`name=\"${name}\"`];\n\n if (options.size) {\n attrs.push(`size=\"${options.size}\"`);\n }\n\n if (options.title) {\n attrs.push(`title=\"${options.title}\"`);\n }\n\n if (options.className) {\n attrs.push(`class=\"${options.className}\"`);\n }\n\n return `<ce-icon ${attrs.join(' ')}></ce-icon>`;\n}\n\n/**\n * Common icon names used in the application\n */\nexport const ICONS = {\n // Navigation\n menu: 'menu-3',\n close: 'xmark',\n\n // E-commerce\n cart: 'cart-2',\n star: 'star',\n heart: 'heart',\n\n // User\n user: 'user',\n settings: 'settings',\n logout: 'logout',\n\n // Actions\n search: 'search',\n filter: 'filter',\n sort: 'sort',\n edit: 'edit',\n delete: 'trash',\n add: 'plus',\n\n // Status\n check: 'check',\n warning: 'triangle-warning',\n error: 'xmark',\n info: 'info-circle',\n} as const;\n"]}