@cognivo/components 0.8.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/dist/chunks/focus-trap-vlQwKK-3.js +82 -0
  2. package/dist/chunks/focus-trap-vlQwKK-3.js.map +1 -0
  3. package/dist/chunks/{premium.css-9I4kHrsl.js → premium.css-DHekUEUt.js} +25 -25
  4. package/dist/chunks/{premium.css-9I4kHrsl.js.map → premium.css-DHekUEUt.js.map} +1 -1
  5. package/dist/cognivo.min.js +3375 -5270
  6. package/dist/cognivo.min.js.map +1 -1
  7. package/dist/components/ai-ab-test/ai-ab-test.js +1 -1
  8. package/dist/components/ai-accessibility-report/ai-accessibility-report.d.ts.map +1 -1
  9. package/dist/components/ai-accessibility-report/ai-accessibility-report.js +14 -13
  10. package/dist/components/ai-accessibility-report/ai-accessibility-report.js.map +1 -1
  11. package/dist/components/ai-action-preview/ai-action-preview.d.ts.map +1 -1
  12. package/dist/components/ai-action-preview/ai-action-preview.js +15 -14
  13. package/dist/components/ai-action-preview/ai-action-preview.js.map +1 -1
  14. package/dist/components/ai-agent-card/ai-agent-card.js +1 -1
  15. package/dist/components/ai-agent-steps/ai-agent-steps.d.ts +8 -21
  16. package/dist/components/ai-agent-steps/ai-agent-steps.d.ts.map +1 -1
  17. package/dist/components/ai-agent-steps/ai-agent-steps.js +85 -139
  18. package/dist/components/ai-agent-steps/ai-agent-steps.js.map +1 -1
  19. package/dist/components/ai-alert-card/ai-alert-card.js +5 -5
  20. package/dist/components/ai-alert-card/ai-alert-card.js.map +1 -1
  21. package/dist/components/ai-analytics-chart/ai-analytics-chart.d.ts +0 -13
  22. package/dist/components/ai-analytics-chart/ai-analytics-chart.d.ts.map +1 -1
  23. package/dist/components/ai-analytics-chart/ai-analytics-chart.js +75 -125
  24. package/dist/components/ai-analytics-chart/ai-analytics-chart.js.map +1 -1
  25. package/dist/components/ai-annotation/ai-annotation.js +2 -2
  26. package/dist/components/ai-annotation/ai-annotation.js.map +1 -1
  27. package/dist/components/ai-api-key-manager/ai-api-key-manager.d.ts +0 -9
  28. package/dist/components/ai-api-key-manager/ai-api-key-manager.d.ts.map +1 -1
  29. package/dist/components/ai-api-key-manager/ai-api-key-manager.js +115 -276
  30. package/dist/components/ai-api-key-manager/ai-api-key-manager.js.map +1 -1
  31. package/dist/components/ai-app-sidebar/ai-app-sidebar.js +13 -13
  32. package/dist/components/ai-app-sidebar/ai-app-sidebar.js.map +1 -1
  33. package/dist/components/ai-assistant-widget/ai-assistant-widget.d.ts.map +1 -1
  34. package/dist/components/ai-assistant-widget/ai-assistant-widget.js +5 -2
  35. package/dist/components/ai-assistant-widget/ai-assistant-widget.js.map +1 -1
  36. package/dist/components/ai-audio-player/ai-audio-player.d.ts.map +1 -1
  37. package/dist/components/ai-audio-player/ai-audio-player.js +23 -19
  38. package/dist/components/ai-audio-player/ai-audio-player.js.map +1 -1
  39. package/dist/components/ai-avatar/ai-avatar.js +1 -1
  40. package/dist/components/ai-badge/ai-badge.js +1 -1
  41. package/dist/components/ai-batch-progress/ai-batch-progress.js +6 -6
  42. package/dist/components/ai-batch-progress/ai-batch-progress.js.map +1 -1
  43. package/dist/components/ai-cache-indicator/ai-cache-indicator.d.ts +0 -13
  44. package/dist/components/ai-cache-indicator/ai-cache-indicator.d.ts.map +1 -1
  45. package/dist/components/ai-cache-indicator/ai-cache-indicator.js +90 -185
  46. package/dist/components/ai-cache-indicator/ai-cache-indicator.js.map +1 -1
  47. package/dist/components/ai-capture-flow/ai-capture-flow.js +21 -21
  48. package/dist/components/ai-capture-flow/ai-capture-flow.js.map +1 -1
  49. package/dist/components/ai-changelog/ai-changelog.js +26 -26
  50. package/dist/components/ai-changelog/ai-changelog.js.map +1 -1
  51. package/dist/components/ai-chart-summary/ai-chart-summary.d.ts +0 -6
  52. package/dist/components/ai-chart-summary/ai-chart-summary.d.ts.map +1 -1
  53. package/dist/components/ai-chart-summary/ai-chart-summary.js +100 -103
  54. package/dist/components/ai-chart-summary/ai-chart-summary.js.map +1 -1
  55. package/dist/components/ai-chat/ai-chat.d.ts.map +1 -1
  56. package/dist/components/ai-chat/ai-chat.js +9 -3
  57. package/dist/components/ai-chat/ai-chat.js.map +1 -1
  58. package/dist/components/ai-citation/ai-citation.d.ts +0 -6
  59. package/dist/components/ai-citation/ai-citation.d.ts.map +1 -1
  60. package/dist/components/ai-citation/ai-citation.js +64 -90
  61. package/dist/components/ai-citation/ai-citation.js.map +1 -1
  62. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.d.ts +1 -27
  63. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.d.ts.map +1 -1
  64. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.js +114 -260
  65. package/dist/components/ai-collaborative-editor/ai-collaborative-editor.js.map +1 -1
  66. package/dist/components/ai-command-palette/ai-command-palette.js +1 -1
  67. package/dist/components/ai-confidence-badge/ai-confidence-badge.d.ts +11 -9
  68. package/dist/components/ai-confidence-badge/ai-confidence-badge.d.ts.map +1 -1
  69. package/dist/components/ai-confidence-badge/ai-confidence-badge.js +183 -101
  70. package/dist/components/ai-confidence-badge/ai-confidence-badge.js.map +1 -1
  71. package/dist/components/ai-confidence-slider/ai-confidence-slider.js +27 -27
  72. package/dist/components/ai-confidence-slider/ai-confidence-slider.js.map +1 -1
  73. package/dist/components/ai-consent-manager/ai-consent-manager.js +2 -2
  74. package/dist/components/ai-consent-manager/ai-consent-manager.js.map +1 -1
  75. package/dist/components/ai-context-window/ai-context-window.js +19 -19
  76. package/dist/components/ai-context-window/ai-context-window.js.map +1 -1
  77. package/dist/components/ai-copy-button/ai-copy-button.js +4 -4
  78. package/dist/components/ai-copy-button/ai-copy-button.js.map +1 -1
  79. package/dist/components/ai-cost-dashboard/ai-cost-dashboard.js +14 -14
  80. package/dist/components/ai-cost-dashboard/ai-cost-dashboard.js.map +1 -1
  81. package/dist/components/ai-data-card/ai-data-card.js +2 -2
  82. package/dist/components/ai-data-card/ai-data-card.js.map +1 -1
  83. package/dist/components/ai-data-lineage/ai-data-lineage.js +6 -6
  84. package/dist/components/ai-data-lineage/ai-data-lineage.js.map +1 -1
  85. package/dist/components/ai-data-preview/ai-data-preview.d.ts +0 -7
  86. package/dist/components/ai-data-preview/ai-data-preview.d.ts.map +1 -1
  87. package/dist/components/ai-data-preview/ai-data-preview.js +130 -267
  88. package/dist/components/ai-data-preview/ai-data-preview.js.map +1 -1
  89. package/dist/components/ai-data-table/ai-data-table.js +9 -9
  90. package/dist/components/ai-data-table/ai-data-table.js.map +1 -1
  91. package/dist/components/ai-debug-console/ai-debug-console.d.ts +1 -13
  92. package/dist/components/ai-debug-console/ai-debug-console.d.ts.map +1 -1
  93. package/dist/components/ai-debug-console/ai-debug-console.js +134 -340
  94. package/dist/components/ai-debug-console/ai-debug-console.js.map +1 -1
  95. package/dist/components/ai-detection-canvas/ai-detection-canvas.js +2 -2
  96. package/dist/components/ai-detection-canvas/ai-detection-canvas.js.map +1 -1
  97. package/dist/components/ai-diff-panel/ai-diff-panel.js +1 -1
  98. package/dist/components/ai-embedding-viz/ai-embedding-viz.js +4 -4
  99. package/dist/components/ai-embedding-viz/ai-embedding-viz.js.map +1 -1
  100. package/dist/components/ai-empty-state/ai-empty-state.js +1 -1
  101. package/dist/components/ai-error-boundary/ai-error-boundary.d.ts.map +1 -1
  102. package/dist/components/ai-error-boundary/ai-error-boundary.js +26 -21
  103. package/dist/components/ai-error-boundary/ai-error-boundary.js.map +1 -1
  104. package/dist/components/ai-eval-scorecard/ai-eval-scorecard.js +5 -5
  105. package/dist/components/ai-eval-scorecard/ai-eval-scorecard.js.map +1 -1
  106. package/dist/components/ai-feature-flag/ai-feature-flag.d.ts +0 -14
  107. package/dist/components/ai-feature-flag/ai-feature-flag.d.ts.map +1 -1
  108. package/dist/components/ai-feature-flag/ai-feature-flag.js +181 -322
  109. package/dist/components/ai-feature-flag/ai-feature-flag.js.map +1 -1
  110. package/dist/components/ai-feedback/ai-feedback.d.ts.map +1 -1
  111. package/dist/components/ai-feedback/ai-feedback.js +10 -5
  112. package/dist/components/ai-feedback/ai-feedback.js.map +1 -1
  113. package/dist/components/ai-file-upload/ai-file-upload.js +1 -1
  114. package/dist/components/ai-form-generator/ai-form-generator.js +1 -1
  115. package/dist/components/ai-guardrail/ai-guardrail.js +2 -2
  116. package/dist/components/ai-guardrail/ai-guardrail.js.map +1 -1
  117. package/dist/components/ai-heatmap/ai-heatmap.js +1 -1
  118. package/dist/components/ai-insight-card/ai-insight-card.js +4 -4
  119. package/dist/components/ai-insight-card/ai-insight-card.js.map +1 -1
  120. package/dist/components/ai-json-viewer/ai-json-viewer.js +13 -13
  121. package/dist/components/ai-json-viewer/ai-json-viewer.js.map +1 -1
  122. package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.js +24 -24
  123. package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.js.map +1 -1
  124. package/dist/components/ai-kpi-grid/ai-kpi-grid.js +2 -2
  125. package/dist/components/ai-kpi-grid/ai-kpi-grid.js.map +1 -1
  126. package/dist/components/ai-labeling-board/ai-labeling-board.js +11 -11
  127. package/dist/components/ai-labeling-board/ai-labeling-board.js.map +1 -1
  128. package/dist/components/ai-memory-panel/ai-memory-panel.js +7 -7
  129. package/dist/components/ai-memory-panel/ai-memory-panel.js.map +1 -1
  130. package/dist/components/ai-model-comparison/ai-model-comparison.js +2 -2
  131. package/dist/components/ai-model-comparison/ai-model-comparison.js.map +1 -1
  132. package/dist/components/ai-model-selector/ai-model-selector.js +7 -7
  133. package/dist/components/ai-model-selector/ai-model-selector.js.map +1 -1
  134. package/dist/components/ai-notification-center/ai-notification-center.js +27 -27
  135. package/dist/components/ai-notification-center/ai-notification-center.js.map +1 -1
  136. package/dist/components/ai-onboarding/ai-onboarding.js +5 -5
  137. package/dist/components/ai-onboarding/ai-onboarding.js.map +1 -1
  138. package/dist/components/ai-permission-gate/ai-permission-gate.js +1 -1
  139. package/dist/components/ai-personalization-dash/ai-personalization-dash.js +1 -1
  140. package/dist/components/ai-presence/ai-presence.js +25 -25
  141. package/dist/components/ai-presence/ai-presence.js.map +1 -1
  142. package/dist/components/ai-progress-steps/ai-progress-steps.js +11 -11
  143. package/dist/components/ai-progress-steps/ai-progress-steps.js.map +1 -1
  144. package/dist/components/ai-prompt-editor/ai-prompt-editor.js +1 -1
  145. package/dist/components/ai-prompt-template/ai-prompt-template.js +29 -29
  146. package/dist/components/ai-prompt-template/ai-prompt-template.js.map +1 -1
  147. package/dist/components/ai-rag-panel/ai-rag-panel.js +4 -4
  148. package/dist/components/ai-rag-panel/ai-rag-panel.js.map +1 -1
  149. package/dist/components/ai-reasoning-tree/ai-reasoning-tree.js +16 -16
  150. package/dist/components/ai-reasoning-tree/ai-reasoning-tree.js.map +1 -1
  151. package/dist/components/ai-result-panel/ai-result-panel.js +1 -1
  152. package/dist/components/ai-reveal-animation/ai-reveal-animation.js +3 -3
  153. package/dist/components/ai-reveal-animation/ai-reveal-animation.js.map +1 -1
  154. package/dist/components/ai-reward-signal/ai-reward-signal.js +1 -1
  155. package/dist/components/ai-rich-message/ai-rich-message.d.ts.map +1 -1
  156. package/dist/components/ai-rich-message/ai-rich-message.js +37 -30
  157. package/dist/components/ai-rich-message/ai-rich-message.js.map +1 -1
  158. package/dist/components/ai-scenario-panel/ai-scenario-panel.js +10 -10
  159. package/dist/components/ai-scenario-panel/ai-scenario-panel.js.map +1 -1
  160. package/dist/components/ai-search/ai-search.js +1 -1
  161. package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.js +3 -3
  162. package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.js.map +1 -1
  163. package/dist/components/ai-sidebar/ai-sidebar.js +1 -1
  164. package/dist/components/ai-similarity-card/ai-similarity-card.js +1 -1
  165. package/dist/components/ai-source-graph/ai-source-graph.js +2 -2
  166. package/dist/components/ai-source-graph/ai-source-graph.js.map +1 -1
  167. package/dist/components/ai-status-page/ai-status-page.js +15 -15
  168. package/dist/components/ai-status-page/ai-status-page.js.map +1 -1
  169. package/dist/components/ai-streaming-text/ai-streaming-text.js +1 -1
  170. package/dist/components/ai-test-runner/ai-test-runner.d.ts +0 -8
  171. package/dist/components/ai-test-runner/ai-test-runner.d.ts.map +1 -1
  172. package/dist/components/ai-test-runner/ai-test-runner.js +100 -257
  173. package/dist/components/ai-test-runner/ai-test-runner.js.map +1 -1
  174. package/dist/components/ai-thinking/ai-thinking.js +1 -1
  175. package/dist/components/ai-timeline/ai-timeline.js +2 -2
  176. package/dist/components/ai-timeline/ai-timeline.js.map +1 -1
  177. package/dist/components/ai-token-tracker/ai-token-tracker.js +3 -3
  178. package/dist/components/ai-token-tracker/ai-token-tracker.js.map +1 -1
  179. package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.js +23 -23
  180. package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.js.map +1 -1
  181. package/dist/components/ai-tool-indicator/ai-tool-indicator.js +3 -3
  182. package/dist/components/ai-tool-indicator/ai-tool-indicator.js.map +1 -1
  183. package/dist/components/ai-transform-slider/ai-transform-slider.js +1 -1
  184. package/dist/components/ai-translation-panel/ai-translation-panel.js +2 -2
  185. package/dist/components/ai-translation-panel/ai-translation-panel.js.map +1 -1
  186. package/dist/components/ai-usage-meter/ai-usage-meter.js +1 -1
  187. package/dist/components/ai-validation-checklist/ai-validation-checklist.d.ts +1 -11
  188. package/dist/components/ai-validation-checklist/ai-validation-checklist.d.ts.map +1 -1
  189. package/dist/components/ai-validation-checklist/ai-validation-checklist.js +133 -187
  190. package/dist/components/ai-validation-checklist/ai-validation-checklist.js.map +1 -1
  191. package/dist/components/ai-version-selector/ai-version-selector.d.ts +0 -4
  192. package/dist/components/ai-version-selector/ai-version-selector.d.ts.map +1 -1
  193. package/dist/components/ai-version-selector/ai-version-selector.js +189 -210
  194. package/dist/components/ai-version-selector/ai-version-selector.js.map +1 -1
  195. package/dist/components/ai-voice-panel/ai-voice-panel.js +28 -28
  196. package/dist/components/ai-voice-panel/ai-voice-panel.js.map +1 -1
  197. package/dist/components/ai-webhook-config/ai-webhook-config.d.ts +0 -17
  198. package/dist/components/ai-webhook-config/ai-webhook-config.d.ts.map +1 -1
  199. package/dist/components/ai-webhook-config/ai-webhook-config.js +281 -221
  200. package/dist/components/ai-webhook-config/ai-webhook-config.js.map +1 -1
  201. package/dist/components/ai-workflow-builder/ai-workflow-builder.js +2 -2
  202. package/dist/components/ai-workflow-builder/ai-workflow-builder.js.map +1 -1
  203. package/dist/components/bias-anchoring/bias-anchoring.js +1 -1
  204. package/dist/components/bias-authority/bias-authority.js +1 -1
  205. package/dist/components/bias-commitment/bias-commitment.js +1 -1
  206. package/dist/components/bias-reciprocity/bias-reciprocity.js +1 -1
  207. package/dist/components/bias-scarcity/bias-scarcity.js +1 -1
  208. package/dist/components/bias-social-proof/bias-social-proof.js +1 -1
  209. package/dist/components/cg-accordion/cg-accordion.d.ts.map +1 -1
  210. package/dist/components/cg-accordion/cg-accordion.js +51 -43
  211. package/dist/components/cg-accordion/cg-accordion.js.map +1 -1
  212. package/dist/components/cg-alert-dialog/cg-alert-dialog.js +18 -18
  213. package/dist/components/cg-alert-dialog/cg-alert-dialog.js.map +1 -1
  214. package/dist/components/cg-aspect-ratio/cg-aspect-ratio.d.ts.map +1 -1
  215. package/dist/components/cg-aspect-ratio/cg-aspect-ratio.js +25 -21
  216. package/dist/components/cg-aspect-ratio/cg-aspect-ratio.js.map +1 -1
  217. package/dist/components/cg-autocomplete/cg-autocomplete.d.ts +1 -0
  218. package/dist/components/cg-autocomplete/cg-autocomplete.d.ts.map +1 -1
  219. package/dist/components/cg-autocomplete/cg-autocomplete.js +59 -43
  220. package/dist/components/cg-autocomplete/cg-autocomplete.js.map +1 -1
  221. package/dist/components/cg-avatar/cg-avatar.d.ts.map +1 -1
  222. package/dist/components/cg-avatar/cg-avatar.js +24 -24
  223. package/dist/components/cg-avatar/cg-avatar.js.map +1 -1
  224. package/dist/components/cg-avatar-group/cg-avatar-group.d.ts.map +1 -1
  225. package/dist/components/cg-avatar-group/cg-avatar-group.js +18 -12
  226. package/dist/components/cg-avatar-group/cg-avatar-group.js.map +1 -1
  227. package/dist/components/cg-badge/cg-badge.d.ts.map +1 -1
  228. package/dist/components/cg-badge/cg-badge.js +26 -20
  229. package/dist/components/cg-badge/cg-badge.js.map +1 -1
  230. package/dist/components/cg-badge-group/cg-badge-group.d.ts +0 -1
  231. package/dist/components/cg-badge-group/cg-badge-group.d.ts.map +1 -1
  232. package/dist/components/cg-badge-group/cg-badge-group.js +31 -29
  233. package/dist/components/cg-badge-group/cg-badge-group.js.map +1 -1
  234. package/dist/components/cg-breadcrumbs/cg-breadcrumbs.js +21 -21
  235. package/dist/components/cg-breadcrumbs/cg-breadcrumbs.js.map +1 -1
  236. package/dist/components/cg-button/cg-button.d.ts +5 -71
  237. package/dist/components/cg-button/cg-button.d.ts.map +1 -1
  238. package/dist/components/cg-button/cg-button.js +63 -172
  239. package/dist/components/cg-button/cg-button.js.map +1 -1
  240. package/dist/components/cg-button-group/cg-button-group.d.ts +2 -0
  241. package/dist/components/cg-button-group/cg-button-group.d.ts.map +1 -1
  242. package/dist/components/cg-button-group/cg-button-group.js +43 -29
  243. package/dist/components/cg-button-group/cg-button-group.js.map +1 -1
  244. package/dist/components/cg-calendar/cg-calendar.d.ts +4 -0
  245. package/dist/components/cg-calendar/cg-calendar.d.ts.map +1 -1
  246. package/dist/components/cg-calendar/cg-calendar.js +28 -12
  247. package/dist/components/cg-calendar/cg-calendar.js.map +1 -1
  248. package/dist/components/cg-callout/cg-callout.d.ts.map +1 -1
  249. package/dist/components/cg-callout/cg-callout.js +49 -48
  250. package/dist/components/cg-callout/cg-callout.js.map +1 -1
  251. package/dist/components/cg-card/cg-card.d.ts +9 -22
  252. package/dist/components/cg-card/cg-card.d.ts.map +1 -1
  253. package/dist/components/cg-card/cg-card.js +28 -56
  254. package/dist/components/cg-card/cg-card.js.map +1 -1
  255. package/dist/components/cg-carousel/cg-carousel.d.ts.map +1 -1
  256. package/dist/components/cg-carousel/cg-carousel.js +19 -13
  257. package/dist/components/cg-carousel/cg-carousel.js.map +1 -1
  258. package/dist/components/cg-chart/cg-chart.d.ts.map +1 -1
  259. package/dist/components/cg-chart/cg-chart.js +63 -58
  260. package/dist/components/cg-chart/cg-chart.js.map +1 -1
  261. package/dist/components/cg-checkbox/cg-checkbox.d.ts +0 -6
  262. package/dist/components/cg-checkbox/cg-checkbox.d.ts.map +1 -1
  263. package/dist/components/cg-checkbox/cg-checkbox.js +51 -51
  264. package/dist/components/cg-checkbox/cg-checkbox.js.map +1 -1
  265. package/dist/components/cg-chip/cg-chip.js +31 -31
  266. package/dist/components/cg-chip/cg-chip.js.map +1 -1
  267. package/dist/components/cg-code-block/cg-code-block.d.ts.map +1 -1
  268. package/dist/components/cg-code-block/cg-code-block.js +36 -34
  269. package/dist/components/cg-code-block/cg-code-block.js.map +1 -1
  270. package/dist/components/cg-collapsible/cg-collapsible.d.ts.map +1 -1
  271. package/dist/components/cg-collapsible/cg-collapsible.js +23 -18
  272. package/dist/components/cg-collapsible/cg-collapsible.js.map +1 -1
  273. package/dist/components/cg-color-picker/cg-color-picker.d.ts +3 -0
  274. package/dist/components/cg-color-picker/cg-color-picker.d.ts.map +1 -1
  275. package/dist/components/cg-color-picker/cg-color-picker.js +189 -91
  276. package/dist/components/cg-color-picker/cg-color-picker.js.map +1 -1
  277. package/dist/components/cg-combobox/cg-combobox.d.ts.map +1 -1
  278. package/dist/components/cg-combobox/cg-combobox.js +13 -6
  279. package/dist/components/cg-combobox/cg-combobox.js.map +1 -1
  280. package/dist/components/cg-command/cg-command.d.ts.map +1 -1
  281. package/dist/components/cg-command/cg-command.js +52 -45
  282. package/dist/components/cg-command/cg-command.js.map +1 -1
  283. package/dist/components/cg-context-menu/cg-context-menu.js +1 -1
  284. package/dist/components/cg-date-picker/cg-date-picker.d.ts.map +1 -1
  285. package/dist/components/cg-date-picker/cg-date-picker.js +36 -34
  286. package/dist/components/cg-date-picker/cg-date-picker.js.map +1 -1
  287. package/dist/components/cg-date-range-picker/cg-date-range-picker.d.ts +2 -0
  288. package/dist/components/cg-date-range-picker/cg-date-range-picker.d.ts.map +1 -1
  289. package/dist/components/cg-date-range-picker/cg-date-range-picker.js +12 -8
  290. package/dist/components/cg-date-range-picker/cg-date-range-picker.js.map +1 -1
  291. package/dist/components/cg-date-time-picker/cg-date-time-picker.d.ts.map +1 -1
  292. package/dist/components/cg-date-time-picker/cg-date-time-picker.js +3 -1
  293. package/dist/components/cg-date-time-picker/cg-date-time-picker.js.map +1 -1
  294. package/dist/components/cg-drawer/cg-drawer.js +3 -3
  295. package/dist/components/cg-drawer/cg-drawer.js.map +1 -1
  296. package/dist/components/cg-dropdown/cg-dropdown.d.ts.map +1 -1
  297. package/dist/components/cg-dropdown/cg-dropdown.js +1 -2
  298. package/dist/components/cg-dropdown/cg-dropdown.js.map +1 -1
  299. package/dist/components/cg-empty-state/cg-empty-state.d.ts +3 -24
  300. package/dist/components/cg-empty-state/cg-empty-state.d.ts.map +1 -1
  301. package/dist/components/cg-empty-state/cg-empty-state.js +51 -74
  302. package/dist/components/cg-empty-state/cg-empty-state.js.map +1 -1
  303. package/dist/components/cg-file-input/cg-file-input.d.ts.map +1 -1
  304. package/dist/components/cg-file-input/cg-file-input.js +9 -10
  305. package/dist/components/cg-file-input/cg-file-input.js.map +1 -1
  306. package/dist/components/cg-focus-scope/cg-focus-scope.js +1 -1
  307. package/dist/components/cg-follow-up/cg-follow-up.d.ts.map +1 -1
  308. package/dist/components/cg-follow-up/cg-follow-up.js +6 -7
  309. package/dist/components/cg-follow-up/cg-follow-up.js.map +1 -1
  310. package/dist/components/cg-form/cg-form.js +17 -17
  311. package/dist/components/cg-form/cg-form.js.map +1 -1
  312. package/dist/components/cg-hover-card/cg-hover-card.d.ts +1 -0
  313. package/dist/components/cg-hover-card/cg-hover-card.d.ts.map +1 -1
  314. package/dist/components/cg-hover-card/cg-hover-card.js +37 -32
  315. package/dist/components/cg-hover-card/cg-hover-card.js.map +1 -1
  316. package/dist/components/cg-icon/cg-icon.d.ts.map +1 -1
  317. package/dist/components/cg-icon/cg-icon.js +44 -37
  318. package/dist/components/cg-icon/cg-icon.js.map +1 -1
  319. package/dist/components/cg-image/cg-image.js +2 -2
  320. package/dist/components/cg-image/cg-image.js.map +1 -1
  321. package/dist/components/cg-image-block/cg-image-block.js +3 -3
  322. package/dist/components/cg-image-block/cg-image-block.js.map +1 -1
  323. package/dist/components/cg-image-gallery/cg-image-gallery.js +20 -20
  324. package/dist/components/cg-image-gallery/cg-image-gallery.js.map +1 -1
  325. package/dist/components/cg-input/cg-input.js +3 -3
  326. package/dist/components/cg-input/cg-input.js.map +1 -1
  327. package/dist/components/cg-kbd/cg-kbd.d.ts.map +1 -1
  328. package/dist/components/cg-kbd/cg-kbd.js +26 -24
  329. package/dist/components/cg-kbd/cg-kbd.js.map +1 -1
  330. package/dist/components/cg-label/cg-label.d.ts +4 -1
  331. package/dist/components/cg-label/cg-label.d.ts.map +1 -1
  332. package/dist/components/cg-label/cg-label.js +44 -41
  333. package/dist/components/cg-label/cg-label.js.map +1 -1
  334. package/dist/components/cg-link/cg-link.js +23 -23
  335. package/dist/components/cg-link/cg-link.js.map +1 -1
  336. package/dist/components/cg-list/cg-list.js +5 -5
  337. package/dist/components/cg-list/cg-list.js.map +1 -1
  338. package/dist/components/cg-listbox/cg-listbox.d.ts.map +1 -1
  339. package/dist/components/cg-listbox/cg-listbox.js +46 -40
  340. package/dist/components/cg-listbox/cg-listbox.js.map +1 -1
  341. package/dist/components/cg-markdown/cg-markdown.d.ts +2 -0
  342. package/dist/components/cg-markdown/cg-markdown.d.ts.map +1 -1
  343. package/dist/components/cg-markdown/cg-markdown.js +171 -121
  344. package/dist/components/cg-markdown/cg-markdown.js.map +1 -1
  345. package/dist/components/cg-menubar/cg-menubar.d.ts +6 -0
  346. package/dist/components/cg-menubar/cg-menubar.d.ts.map +1 -1
  347. package/dist/components/cg-menubar/cg-menubar.js +59 -47
  348. package/dist/components/cg-menubar/cg-menubar.js.map +1 -1
  349. package/dist/components/cg-meter/cg-meter.d.ts.map +1 -1
  350. package/dist/components/cg-meter/cg-meter.js +76 -76
  351. package/dist/components/cg-meter/cg-meter.js.map +1 -1
  352. package/dist/components/cg-metric-card/cg-metric-card.d.ts.map +1 -1
  353. package/dist/components/cg-metric-card/cg-metric-card.js +65 -68
  354. package/dist/components/cg-metric-card/cg-metric-card.js.map +1 -1
  355. package/dist/components/cg-modal/cg-modal.d.ts +3 -0
  356. package/dist/components/cg-modal/cg-modal.d.ts.map +1 -1
  357. package/dist/components/cg-modal/cg-modal.js +82 -83
  358. package/dist/components/cg-modal/cg-modal.js.map +1 -1
  359. package/dist/components/cg-navbar/cg-navbar.d.ts +1 -1
  360. package/dist/components/cg-navbar/cg-navbar.d.ts.map +1 -1
  361. package/dist/components/cg-navbar/cg-navbar.js +64 -55
  362. package/dist/components/cg-navbar/cg-navbar.js.map +1 -1
  363. package/dist/components/cg-navigation-menu/cg-navigation-menu.d.ts +3 -0
  364. package/dist/components/cg-navigation-menu/cg-navigation-menu.d.ts.map +1 -1
  365. package/dist/components/cg-navigation-menu/cg-navigation-menu.js +38 -26
  366. package/dist/components/cg-navigation-menu/cg-navigation-menu.js.map +1 -1
  367. package/dist/components/cg-number-input/cg-number-input.d.ts +1 -0
  368. package/dist/components/cg-number-input/cg-number-input.d.ts.map +1 -1
  369. package/dist/components/cg-number-input/cg-number-input.js +90 -77
  370. package/dist/components/cg-number-input/cg-number-input.js.map +1 -1
  371. package/dist/components/cg-otp-input/cg-otp-input.d.ts.map +1 -1
  372. package/dist/components/cg-otp-input/cg-otp-input.js +70 -60
  373. package/dist/components/cg-otp-input/cg-otp-input.js.map +1 -1
  374. package/dist/components/cg-pagination/cg-pagination.d.ts +2 -0
  375. package/dist/components/cg-pagination/cg-pagination.d.ts.map +1 -1
  376. package/dist/components/cg-pagination/cg-pagination.js +50 -49
  377. package/dist/components/cg-pagination/cg-pagination.js.map +1 -1
  378. package/dist/components/cg-password-input/cg-password-input.d.ts.map +1 -1
  379. package/dist/components/cg-password-input/cg-password-input.js +42 -34
  380. package/dist/components/cg-password-input/cg-password-input.js.map +1 -1
  381. package/dist/components/cg-phone-input/cg-phone-input.d.ts.map +1 -1
  382. package/dist/components/cg-phone-input/cg-phone-input.js +18 -14
  383. package/dist/components/cg-phone-input/cg-phone-input.js.map +1 -1
  384. package/dist/components/cg-popover/cg-popover.d.ts +12 -2
  385. package/dist/components/cg-popover/cg-popover.d.ts.map +1 -1
  386. package/dist/components/cg-popover/cg-popover.js +90 -63
  387. package/dist/components/cg-popover/cg-popover.js.map +1 -1
  388. package/dist/components/cg-portal/cg-portal.d.ts.map +1 -1
  389. package/dist/components/cg-portal/cg-portal.js +42 -41
  390. package/dist/components/cg-portal/cg-portal.js.map +1 -1
  391. package/dist/components/cg-progress-bar/cg-progress-bar.d.ts.map +1 -1
  392. package/dist/components/cg-progress-bar/cg-progress-bar.js +25 -25
  393. package/dist/components/cg-progress-bar/cg-progress-bar.js.map +1 -1
  394. package/dist/components/cg-radio/cg-radio.d.ts +10 -0
  395. package/dist/components/cg-radio/cg-radio.d.ts.map +1 -1
  396. package/dist/components/cg-radio/cg-radio.js +59 -48
  397. package/dist/components/cg-radio/cg-radio.js.map +1 -1
  398. package/dist/components/cg-radio-group/cg-radio-group.d.ts +6 -0
  399. package/dist/components/cg-radio-group/cg-radio-group.d.ts.map +1 -1
  400. package/dist/components/cg-radio-group/cg-radio-group.js +50 -37
  401. package/dist/components/cg-radio-group/cg-radio-group.js.map +1 -1
  402. package/dist/components/cg-rating/cg-rating.d.ts.map +1 -1
  403. package/dist/components/cg-rating/cg-rating.js +56 -54
  404. package/dist/components/cg-rating/cg-rating.js.map +1 -1
  405. package/dist/components/cg-resizable/cg-resizable.d.ts +4 -1
  406. package/dist/components/cg-resizable/cg-resizable.d.ts.map +1 -1
  407. package/dist/components/cg-resizable/cg-resizable.js +45 -35
  408. package/dist/components/cg-resizable/cg-resizable.js.map +1 -1
  409. package/dist/components/cg-scroll-area/cg-scroll-area.d.ts +8 -0
  410. package/dist/components/cg-scroll-area/cg-scroll-area.d.ts.map +1 -1
  411. package/dist/components/cg-scroll-area/cg-scroll-area.js +64 -21
  412. package/dist/components/cg-scroll-area/cg-scroll-area.js.map +1 -1
  413. package/dist/components/cg-segmented-control/cg-segmented-control.d.ts +4 -0
  414. package/dist/components/cg-segmented-control/cg-segmented-control.d.ts.map +1 -1
  415. package/dist/components/cg-segmented-control/cg-segmented-control.js +75 -39
  416. package/dist/components/cg-segmented-control/cg-segmented-control.js.map +1 -1
  417. package/dist/components/cg-select/cg-select.d.ts +4 -2
  418. package/dist/components/cg-select/cg-select.d.ts.map +1 -1
  419. package/dist/components/cg-select/cg-select.js +96 -58
  420. package/dist/components/cg-select/cg-select.js.map +1 -1
  421. package/dist/components/cg-separator/cg-separator.d.ts +1 -2
  422. package/dist/components/cg-separator/cg-separator.d.ts.map +1 -1
  423. package/dist/components/cg-separator/cg-separator.js +5 -8
  424. package/dist/components/cg-separator/cg-separator.js.map +1 -1
  425. package/dist/components/cg-sheet/cg-sheet.d.ts +4 -0
  426. package/dist/components/cg-sheet/cg-sheet.d.ts.map +1 -1
  427. package/dist/components/cg-sheet/cg-sheet.js +80 -43
  428. package/dist/components/cg-sheet/cg-sheet.js.map +1 -1
  429. package/dist/components/cg-sidebar/cg-sidebar.d.ts.map +1 -1
  430. package/dist/components/cg-sidebar/cg-sidebar.js +82 -19
  431. package/dist/components/cg-sidebar/cg-sidebar.js.map +1 -1
  432. package/dist/components/cg-skeleton/cg-skeleton.d.ts +7 -1
  433. package/dist/components/cg-skeleton/cg-skeleton.d.ts.map +1 -1
  434. package/dist/components/cg-skeleton/cg-skeleton.js +61 -63
  435. package/dist/components/cg-skeleton/cg-skeleton.js.map +1 -1
  436. package/dist/components/cg-slider/cg-slider.d.ts.map +1 -1
  437. package/dist/components/cg-slider/cg-slider.js +80 -73
  438. package/dist/components/cg-slider/cg-slider.js.map +1 -1
  439. package/dist/components/cg-spinner/cg-spinner.d.ts.map +1 -1
  440. package/dist/components/cg-spinner/cg-spinner.js +10 -19
  441. package/dist/components/cg-spinner/cg-spinner.js.map +1 -1
  442. package/dist/components/cg-split-button/cg-split-button.d.ts.map +1 -1
  443. package/dist/components/cg-split-button/cg-split-button.js +64 -50
  444. package/dist/components/cg-split-button/cg-split-button.js.map +1 -1
  445. package/dist/components/cg-stack/cg-stack.js +1 -1
  446. package/dist/components/cg-steps/cg-steps.js +1 -1
  447. package/dist/components/cg-switch/cg-switch.d.ts +3 -0
  448. package/dist/components/cg-switch/cg-switch.d.ts.map +1 -1
  449. package/dist/components/cg-switch/cg-switch.js +39 -47
  450. package/dist/components/cg-switch/cg-switch.js.map +1 -1
  451. package/dist/components/cg-table/cg-table.d.ts +0 -7
  452. package/dist/components/cg-table/cg-table.d.ts.map +1 -1
  453. package/dist/components/cg-table/cg-table.js +50 -47
  454. package/dist/components/cg-table/cg-table.js.map +1 -1
  455. package/dist/components/cg-tabs/cg-tabs.js +1 -1
  456. package/dist/components/cg-tag-input/cg-tag-input.js +1 -1
  457. package/dist/components/cg-text/cg-text.js +1 -1
  458. package/dist/components/cg-textarea/cg-textarea.js +1 -1
  459. package/dist/components/cg-time-picker/cg-time-picker.js +1 -1
  460. package/dist/components/cg-toaster/cg-toaster.js +3 -3
  461. package/dist/components/cg-toaster/cg-toaster.js.map +1 -1
  462. package/dist/components/cg-toggle/cg-toggle.js +1 -1
  463. package/dist/components/cg-toggle-group/cg-toggle-group.js +1 -1
  464. package/dist/components/cg-tree-view/cg-tree-view.js +1 -1
  465. package/dist/foundation.d.ts +0 -16
  466. package/dist/foundation.d.ts.map +1 -1
  467. package/dist/foundation.js +174 -206
  468. package/dist/foundation.js.map +1 -1
  469. package/dist/index.d.ts +1 -17
  470. package/dist/index.d.ts.map +1 -1
  471. package/dist/index.js +100 -132
  472. package/dist/index.js.map +1 -1
  473. package/dist/utils/focus-trap.d.ts +19 -2
  474. package/dist/utils/focus-trap.d.ts.map +1 -1
  475. package/package.json +6 -810
  476. package/dist/chunks/focus-trap-BdRNhSPD.js +0 -53
  477. package/dist/chunks/focus-trap-BdRNhSPD.js.map +0 -1
  478. package/dist/components/cg-app-shell/cg-app-shell.d.ts +0 -54
  479. package/dist/components/cg-app-shell/cg-app-shell.d.ts.map +0 -1
  480. package/dist/components/cg-app-shell/cg-app-shell.js +0 -135
  481. package/dist/components/cg-app-shell/cg-app-shell.js.map +0 -1
  482. package/dist/components/cg-auth-shell/cg-auth-shell.d.ts +0 -61
  483. package/dist/components/cg-auth-shell/cg-auth-shell.d.ts.map +0 -1
  484. package/dist/components/cg-auth-shell/cg-auth-shell.js +0 -163
  485. package/dist/components/cg-auth-shell/cg-auth-shell.js.map +0 -1
  486. package/dist/components/cg-definition-list/cg-definition-list.d.ts +0 -99
  487. package/dist/components/cg-definition-list/cg-definition-list.d.ts.map +0 -1
  488. package/dist/components/cg-definition-list/cg-definition-list.js +0 -332
  489. package/dist/components/cg-definition-list/cg-definition-list.js.map +0 -1
  490. package/dist/components/cg-draggable/cg-draggable.d.ts +0 -53
  491. package/dist/components/cg-draggable/cg-draggable.d.ts.map +0 -1
  492. package/dist/components/cg-draggable/cg-draggable.js +0 -136
  493. package/dist/components/cg-draggable/cg-draggable.js.map +0 -1
  494. package/dist/components/cg-droppable/cg-droppable.d.ts +0 -57
  495. package/dist/components/cg-droppable/cg-droppable.d.ts.map +0 -1
  496. package/dist/components/cg-droppable/cg-droppable.js +0 -114
  497. package/dist/components/cg-droppable/cg-droppable.js.map +0 -1
  498. package/dist/components/cg-filter-bar/cg-filter-bar.d.ts +0 -50
  499. package/dist/components/cg-filter-bar/cg-filter-bar.d.ts.map +0 -1
  500. package/dist/components/cg-filter-bar/cg-filter-bar.js +0 -115
  501. package/dist/components/cg-filter-bar/cg-filter-bar.js.map +0 -1
  502. package/dist/components/cg-filter-chip/cg-filter-chip.d.ts +0 -55
  503. package/dist/components/cg-filter-chip/cg-filter-chip.d.ts.map +0 -1
  504. package/dist/components/cg-filter-chip/cg-filter-chip.js +0 -213
  505. package/dist/components/cg-filter-chip/cg-filter-chip.js.map +0 -1
  506. package/dist/components/cg-kanban/cg-kanban.d.ts +0 -44
  507. package/dist/components/cg-kanban/cg-kanban.d.ts.map +0 -1
  508. package/dist/components/cg-kanban/cg-kanban.js +0 -86
  509. package/dist/components/cg-kanban/cg-kanban.js.map +0 -1
  510. package/dist/components/cg-kanban-column/cg-kanban-column.d.ts +0 -58
  511. package/dist/components/cg-kanban-column/cg-kanban-column.d.ts.map +0 -1
  512. package/dist/components/cg-kanban-column/cg-kanban-column.js +0 -144
  513. package/dist/components/cg-kanban-column/cg-kanban-column.js.map +0 -1
  514. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.d.ts +0 -77
  515. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.d.ts.map +0 -1
  516. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.js +0 -245
  517. package/dist/components/cg-mfa-prompt/cg-mfa-prompt.js.map +0 -1
  518. package/dist/components/cg-search-input/cg-search-input.d.ts +0 -62
  519. package/dist/components/cg-search-input/cg-search-input.d.ts.map +0 -1
  520. package/dist/components/cg-search-input/cg-search-input.js +0 -106
  521. package/dist/components/cg-search-input/cg-search-input.js.map +0 -1
  522. package/dist/components/cg-sortable/cg-sortable.d.ts +0 -72
  523. package/dist/components/cg-sortable/cg-sortable.d.ts.map +0 -1
  524. package/dist/components/cg-sortable/cg-sortable.js +0 -177
  525. package/dist/components/cg-sortable/cg-sortable.js.map +0 -1
  526. package/dist/components/cg-theme/cg-theme.d.ts +0 -82
  527. package/dist/components/cg-theme/cg-theme.d.ts.map +0 -1
  528. package/dist/components/cg-theme/cg-theme.js +0 -91
  529. package/dist/components/cg-theme/cg-theme.js.map +0 -1
  530. package/dist/components/cg-theme-editor/cg-theme-editor.d.ts +0 -98
  531. package/dist/components/cg-theme-editor/cg-theme-editor.d.ts.map +0 -1
  532. package/dist/components/cg-theme-editor/cg-theme-editor.js +0 -341
  533. package/dist/components/cg-theme-editor/cg-theme-editor.js.map +0 -1
  534. package/dist/components/cg-timeline/cg-timeline.d.ts +0 -70
  535. package/dist/components/cg-timeline/cg-timeline.d.ts.map +0 -1
  536. package/dist/components/cg-timeline/cg-timeline.js +0 -131
  537. package/dist/components/cg-timeline/cg-timeline.js.map +0 -1
  538. package/dist/components/cg-timeline-event/cg-timeline-event.d.ts +0 -59
  539. package/dist/components/cg-timeline-event/cg-timeline-event.d.ts.map +0 -1
  540. package/dist/components/cg-timeline-event/cg-timeline-event.js +0 -190
  541. package/dist/components/cg-timeline-event/cg-timeline-event.js.map +0 -1
  542. package/dist/utils/drag-manager.d.ts +0 -40
  543. package/dist/utils/drag-manager.d.ts.map +0 -1
@@ -1,12 +1,12 @@
1
- import { css as u, LitElement as v, html as t, nothing as d } from "lit";
2
- import { property as c, customElement as b } from "lit/decorators.js";
3
- import { h as p, r as h, f } from "../../chunks/premium.css-9I4kHrsl.js";
4
- var m = Object.defineProperty, x = Object.getOwnPropertyDescriptor, s = (a, r, n, o) => {
5
- for (var i = o > 1 ? void 0 : o ? x(r, n) : r, l = a.length - 1, g; l >= 0; l--)
6
- (g = a[l]) && (i = (o ? g(r, n, i) : g(i)) || i);
7
- return o && i && m(r, n, i), i;
1
+ import { css as b, LitElement as u, html as t, nothing as n } from "lit";
2
+ import { property as c, customElement as v } from "lit/decorators.js";
3
+ import { h as p, r as f, f as h } from "../../chunks/premium.css-DHekUEUt.js";
4
+ var m = Object.defineProperty, y = Object.getOwnPropertyDescriptor, o = (a, r, d, s) => {
5
+ for (var i = s > 1 ? void 0 : s ? y(r, d) : r, l = a.length - 1, g; l >= 0; l--)
6
+ (g = a[l]) && (i = (s ? g(r, d, i) : g(i)) || i);
7
+ return s && i && m(r, d, i), i;
8
8
  };
9
- let e = class extends v {
9
+ let e = class extends u {
10
10
  constructor() {
11
11
  super(...arguments), this.role = "assistant", this.text = "", this.cards = [], this.avatar = "", this.timestamp = "", this.actions = [];
12
12
  }
@@ -27,7 +27,7 @@ let e = class extends v {
27
27
  `;
28
28
  }
29
29
  _renderText() {
30
- if (!this.text) return d;
30
+ if (!this.text) return n;
31
31
  const a = this.text.split(`
32
32
 
33
33
  `).filter(Boolean);
@@ -44,32 +44,32 @@ let e = class extends v {
44
44
  return typeof a == "string" && a.includes("-") && e._allowedCardTypes.has(a);
45
45
  }
46
46
  _renderCards() {
47
- if (this.cards.length === 0) return d;
47
+ if (this.cards.length === 0) return n;
48
48
  this._cardAbort?.abort(), this._cardAbort = new AbortController();
49
49
  const a = this._cardAbort.signal;
50
50
  return t`
51
51
  <div class="cards">
52
- ${this.cards.map((r, n) => {
52
+ ${this.cards.map((r, d) => {
53
53
  try {
54
54
  if (!this._isValidCardType(r.type))
55
- return console.warn(`[ai-rich-message] Blocked unknown card type: "${r.type}"`), t`<div style="padding:8px;font-size:12px;color:var(--cg-color-input-text-placeholder,#71717a);">Card unavailable</div>`;
56
- const o = document.createElement(r.type);
57
- return o.data = r.data, o.toolData = r.data, o.addEventListener("ai-tool-card-action", ((i) => {
55
+ return console.warn(`[ai-rich-message] Blocked unknown card type: "${r.type}"`), t`<div class="card-fallback">Card unavailable</div>`;
56
+ const s = document.createElement(r.type);
57
+ return s.data = r.data, s.toolData = r.data, s.addEventListener("ai-tool-card-action", ((i) => {
58
58
  this._dispatch("ai-message-card-action", {
59
- cardIndex: n,
59
+ cardIndex: d,
60
60
  action: i.detail?.action,
61
61
  data: i.detail?.data
62
62
  });
63
- }), { signal: a }), o;
63
+ }), { signal: a }), s;
64
64
  } catch {
65
- return t`<div style="padding:8px;font-size:12px;color:var(--cg-color-input-text-placeholder,#71717a);">Card unavailable</div>`;
65
+ return t`<div class="card-fallback">Card unavailable</div>`;
66
66
  }
67
67
  })}
68
68
  </div>
69
69
  `;
70
70
  }
71
71
  _renderActions() {
72
- return this.actions.length === 0 ? d : t`
72
+ return this.actions.length === 0 ? n : t`
73
73
  <div class="actions" role="group" aria-label="Message actions">
74
74
  ${this.actions.map((a) => t`
75
75
  <button
@@ -97,13 +97,13 @@ let e = class extends v {
97
97
  </div>
98
98
  ${this._renderCards()}
99
99
  ${this._renderActions()}
100
- ${this.timestamp ? t`<div class="timestamp">${this.timestamp}</div>` : d}
100
+ ${this.timestamp ? t`<div class="timestamp">${this.timestamp}</div>` : n}
101
101
  </div>
102
102
  </div>
103
103
  `;
104
104
  }
105
105
  };
106
- e.styles = [p, h, f, u`
106
+ e.styles = [p, f, h, b`
107
107
  :host {
108
108
  animation: fadeSlideIn var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
109
109
  }
@@ -172,12 +172,19 @@ e.styles = [p, h, f, u`
172
172
  }
173
173
  .message.system .bubble-body {
174
174
  background: var(--cg-color-surface-base-background);
175
- border: 1px dashed var(--cg-color-surface-cards-border);
175
+ border: var(--cg-border-width-50) dashed var(--cg-color-surface-cards-border);
176
176
  font-size: var(--cg-font-size-sm);
177
177
  color: var(--cg-color-input-text-placeholder);
178
178
  font-style: italic;
179
179
  }
180
180
 
181
+ /* ── Card fallback (unknown/blocked card type) ── */
182
+ .card-fallback {
183
+ padding: var(--cg-spacing-8);
184
+ font-size: var(--cg-font-size-sm);
185
+ color: var(--cg-color-input-text-placeholder);
186
+ }
187
+
181
188
  /* ── Text ── */
182
189
  .text {
183
190
  white-space: pre-wrap;
@@ -229,7 +236,7 @@ e.styles = [p, h, f, u`
229
236
  border-color: var(--cg-color-surface-base-text);
230
237
  }
231
238
  .action-btn:focus-visible {
232
- outline: 2px solid var(--cg-overlay-accent-strong);
239
+ outline: var(--cg-border-width-100) solid var(--cg-color-focus-ring);
233
240
  outline-offset: var(--cg-outline-offset-default);
234
241
  }
235
242
 
@@ -258,26 +265,26 @@ e._allowedCardTypes = /* @__PURE__ */ new Set([
258
265
  "ai-table-card",
259
266
  "ai-metric-card"
260
267
  ]);
261
- s([
268
+ o([
262
269
  c({ type: String })
263
270
  ], e.prototype, "role", 2);
264
- s([
271
+ o([
265
272
  c({ type: String })
266
273
  ], e.prototype, "text", 2);
267
- s([
274
+ o([
268
275
  c({ attribute: !1 })
269
276
  ], e.prototype, "cards", 2);
270
- s([
277
+ o([
271
278
  c({ type: String })
272
279
  ], e.prototype, "avatar", 2);
273
- s([
280
+ o([
274
281
  c({ type: String })
275
282
  ], e.prototype, "timestamp", 2);
276
- s([
283
+ o([
277
284
  c({ attribute: !1 })
278
285
  ], e.prototype, "actions", 2);
279
- e = s([
280
- b("ai-rich-message")
286
+ e = o([
287
+ v("ai-rich-message")
281
288
  ], e);
282
289
  export {
283
290
  e as AiRichMessage
@@ -1 +1 @@
1
- {"version":3,"file":"ai-rich-message.js","sources":["../../../src/components/ai-rich-message/ai-rich-message.ts"],"sourcesContent":["/**\n * @element ai-rich-message\n * Chat message bubble supporting user, assistant, and system roles.\n * Renders avatar, text with paragraph splitting, embedded tool cards,\n * action buttons, and timestamp. User messages get accent styling.\n *\n * @example\n * ```html\n * <ai-rich-message\n * role=\"assistant\"\n * text=\"Here are the results of my analysis.\"\n * timestamp=\"2:34 PM\"\n * .actions=${[{ label: 'Regenerate', id: 'regen' }]}\n * ></ai-rich-message>\n * ```\n *\n * @prop {'user'|'assistant'|'system'} role - Message sender role\n * @prop {string} text - Message text content\n * @prop {string} avatar - Avatar image URL (falls back to initials)\n * @prop {string} timestamp - Display timestamp\n * @prop {CardRef[]} cards - Embedded tool card components to render\n * @prop {ActionRef[]} actions - Action buttons shown below the message\n *\n * @fires {CustomEvent<{actionId: string}>} ai-message-action - When an action button is clicked\n * @fires {CustomEvent<{cardIndex: number}>} ai-message-card-action - When a card emits an action\n *\n * @slot - Additional content inside the message bubble\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion, fadeSlideInKeyframes } from '../../styles/index.js';\n\ninterface CardRef {\n type: string;\n data: unknown;\n}\n\ninterface ActionRef {\n label: string;\n id: string;\n}\n\n@customElement('ai-rich-message')\nexport class AiRichMessage extends LitElement {\n static override styles = [hostBlock, reducedMotion, fadeSlideInKeyframes, css`\n :host {\n animation: fadeSlideIn var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n\n .message {\n display: flex;\n gap: var(--cg-spacing-12);\n max-width: 100%;\n }\n .message.user { flex-direction: row-reverse; }\n\n /* ── Avatar ── */\n .avatar {\n width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-bold);\n flex-shrink: 0;\n overflow: hidden;\n }\n .avatar.assistant {\n background: var(--cg-color-action-primary-background-default);\n color: var(--cg-color-surface-base-background);\n }\n .avatar.user {\n background: var(--cg-color-surface-cards-border);\n color: var(--cg-color-surface-base-text);\n }\n .avatar.system {\n background: var(--cg-color-surface-container-background);\n color: var(--cg-color-input-text-placeholder);\n }\n .avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n /* ── Bubble ── */\n .bubble {\n flex: 1;\n min-width: 0;\n max-width: 80%;\n }\n .message.user .bubble { max-width: 70%; }\n\n .bubble-body {\n border-radius: var(--cg-border-radius-150);\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n font-size: var(--cg-font-size-sm);\n line-height: 1.6;\n color: var(--cg-color-surface-base-text);\n }\n .message.assistant .bubble-body {\n background: var(--cg-color-surface-cards-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n }\n .message.user .bubble-body {\n background: var(--cg-color-action-primary-background-default);\n color: var(--cg-color-surface-base-background);\n border-radius: var(--cg-border-radius-150) var(--cg-border-radius-150) var(--cg-border-radius-50) var(--cg-border-radius-150);\n }\n .message.system .bubble-body {\n background: var(--cg-color-surface-base-background);\n border: 1px dashed var(--cg-color-surface-cards-border);\n font-size: var(--cg-font-size-sm);\n color: var(--cg-color-input-text-placeholder);\n font-style: italic;\n }\n\n /* ── Text ── */\n .text {\n white-space: pre-wrap;\n word-break: break-word;\n }\n .text p { margin: 0 0 var(--cg-spacing-8); }\n .text p:last-child { margin-bottom: 0; }\n .text code {\n background: var(--cg-overlay-dark-medium);\n padding: var(--cg-spacing-1) var(--cg-spacing-6);\n border-radius: var(--cg-border-radius-50);\n font-family: var(--cg-font-family-mono);\n font-size: var(--cg-font-size-sm);\n }\n .message.user .text code {\n background: var(--cg-overlay-dark-subtle);\n }\n\n /* ── Cards section ── */\n .cards {\n display: flex;\n flex-direction: column;\n gap: var(--cg-spacing-8);\n margin-top: var(--cg-spacing-8);\n }\n\n /* ── Action buttons ── */\n .actions {\n padding-top: var(--cg-spacing-12);\n border-top: var(--cg-border-width-50) solid var(--cg-color-surface-cards-divider);\n display: flex;\n flex-wrap: wrap;\n gap: var(--cg-spacing-6);\n margin-top: var(--cg-spacing-8);\n }\n .action-btn {\n padding: var(--cg-spacing-6) var(--cg-spacing-12);\n border-radius: var(--cg-border-radius-100);\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-semibold);\n background: var(--cg-color-surface-container-background);\n color: var(--cg-color-surface-base-text);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n cursor: pointer;\n transition: background-color var(--cg-transition-duration-default) var(--cg-transition-easing-default), color var(--cg-transition-duration-default) var(--cg-transition-easing-default), border-color var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n }\n .action-btn:hover {\n background: var(--cg-color-surface-cards-border);\n border-color: var(--cg-color-surface-base-text);\n }\n .action-btn:focus-visible {\n outline: 2px solid var(--cg-overlay-accent-strong);\n outline-offset: var(--cg-outline-offset-default);\n }\n\n /* ── Timestamp ── */\n .timestamp {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n margin-top: var(--cg-spacing-6);\n }\n .message.user .timestamp { text-align: right; }\n\n `];\n\n @property({ type: String }) override role: 'user' | 'assistant' | 'system' = 'assistant';\n @property({ type: String }) text = '';\n @property({ attribute: false }) cards: CardRef[] = [];\n @property({ type: String }) avatar = '';\n @property({ type: String }) timestamp = '';\n @property({ attribute: false }) actions: ActionRef[] = [];\n\n private _dispatch(name: string, detail: unknown) {\n this.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail }));\n }\n\n private _handleAction(actionId: string) {\n this._dispatch('ai-message-action', { actionId });\n }\n\n private _avatarFallback(): string {\n if (this.role === 'assistant') return 'AI';\n if (this.role === 'user') return 'U';\n return 'S';\n }\n\n private _renderAvatar() {\n return html`\n <div class=\"avatar ${this.role}\" aria-hidden=\"true\">\n ${this.avatar\n ? html`<img src=${this.avatar} alt=\"${this.role} avatar\">`\n : this._avatarFallback()}\n </div>\n `;\n }\n\n private _renderText() {\n if (!this.text) return nothing;\n // Simple paragraph splitting (no innerHTML — safe text rendering)\n const paragraphs = this.text.split('\\n\\n').filter(Boolean);\n return html`\n <div class=\"text\">\n ${paragraphs.map(p => html`<p>${p}</p>`)}\n </div>\n `;\n }\n\n private _cardAbort?: AbortController;\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._cardAbort?.abort();\n }\n\n /** Allowlist of known component tag names that can be created as cards. */\n private static _allowedCardTypes = new Set([\n 'ai-tool-card', 'ai-chart-card', 'ai-code-card', 'ai-data-card',\n 'ai-file-card', 'ai-image-card', 'ai-link-card', 'ai-map-card',\n 'ai-search-card', 'ai-weather-card', 'ai-progress-card',\n 'ai-summary-card', 'ai-table-card', 'ai-metric-card',\n ]);\n\n private _isValidCardType(type: string): boolean {\n // Must be a valid custom element name (contains hyphen) and be in the allowlist\n return typeof type === 'string'\n && type.includes('-')\n && AiRichMessage._allowedCardTypes.has(type);\n }\n\n private _renderCards() {\n if (this.cards.length === 0) return nothing;\n // Clean up previous card listeners\n this._cardAbort?.abort();\n this._cardAbort = new AbortController();\n const signal = this._cardAbort.signal;\n\n return html`\n <div class=\"cards\">\n ${this.cards.map((card, idx) => {\n try {\n if (!this._isValidCardType(card.type)) {\n console.warn(`[ai-rich-message] Blocked unknown card type: \"${card.type}\"`);\n return html`<div style=\"padding:8px;font-size:12px;color:var(--cg-color-input-text-placeholder,#71717a);\">Card unavailable</div>`;\n }\n const el = document.createElement(card.type);\n (el as unknown as Record<string, unknown>)['data'] = card.data;\n (el as unknown as Record<string, unknown>)['toolData'] = card.data;\n el.addEventListener('ai-tool-card-action', ((e: CustomEvent) => {\n this._dispatch('ai-message-card-action', {\n cardIndex: idx, action: e.detail?.action, data: e.detail?.data,\n });\n }) as EventListener, { signal });\n return el;\n } catch {\n return html`<div style=\"padding:8px;font-size:12px;color:var(--cg-color-input-text-placeholder,#71717a);\">Card unavailable</div>`;\n }\n })}\n </div>\n `;\n }\n\n private _renderActions() {\n if (this.actions.length === 0) return nothing;\n return html`\n <div class=\"actions\" role=\"group\" aria-label=\"Message actions\">\n ${this.actions.map(a => html`\n <button\n class=\"action-btn\"\n @click=${() => this._handleAction(a.id)}\n aria-label=\"${a.label}\"\n >${a.label}</button>\n `)}\n </div>\n `;\n }\n\n override render() {\n return html`\n <div\n class=\"message ${this.role}\"\n role=\"article\"\n aria-label=\"${this.role} message\"\n tabindex=\"0\"\n >\n ${this._renderAvatar()}\n <div class=\"bubble\">\n <div class=\"bubble-body\">\n ${this._renderText()}\n <slot></slot>\n </div>\n ${this._renderCards()}\n ${this._renderActions()}\n ${this.timestamp ? html`<div class=\"timestamp\">${this.timestamp}</div>` : nothing}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ai-rich-message': AiRichMessage;\n }\n}\n"],"names":["AiRichMessage","LitElement","name","detail","actionId","html","nothing","paragraphs","p","type","signal","card","idx","el","e","hostBlock","reducedMotion","fadeSlideInKeyframes","css","__decorateClass","property","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"ai-rich-message.js","sources":["../../../src/components/ai-rich-message/ai-rich-message.ts"],"sourcesContent":["/**\n * @element ai-rich-message\n * Chat message bubble supporting user, assistant, and system roles.\n * Renders avatar, text with paragraph splitting, embedded tool cards,\n * action buttons, and timestamp. User messages get accent styling.\n *\n * @example\n * ```html\n * <ai-rich-message\n * role=\"assistant\"\n * text=\"Here are the results of my analysis.\"\n * timestamp=\"2:34 PM\"\n * .actions=${[{ label: 'Regenerate', id: 'regen' }]}\n * ></ai-rich-message>\n * ```\n *\n * @prop {'user'|'assistant'|'system'} role - Message sender role\n * @prop {string} text - Message text content\n * @prop {string} avatar - Avatar image URL (falls back to initials)\n * @prop {string} timestamp - Display timestamp\n * @prop {CardRef[]} cards - Embedded tool card components to render\n * @prop {ActionRef[]} actions - Action buttons shown below the message\n *\n * @fires {CustomEvent<{actionId: string}>} ai-message-action - When an action button is clicked\n * @fires {CustomEvent<{cardIndex: number}>} ai-message-card-action - When a card emits an action\n *\n * @slot - Additional content inside the message bubble\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion, fadeSlideInKeyframes } from '../../styles/index.js';\n\ninterface CardRef {\n type: string;\n data: unknown;\n}\n\ninterface ActionRef {\n label: string;\n id: string;\n}\n\n@customElement('ai-rich-message')\nexport class AiRichMessage extends LitElement {\n static override styles = [hostBlock, reducedMotion, fadeSlideInKeyframes, css`\n :host {\n animation: fadeSlideIn var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n\n .message {\n display: flex;\n gap: var(--cg-spacing-12);\n max-width: 100%;\n }\n .message.user { flex-direction: row-reverse; }\n\n /* ── Avatar ── */\n .avatar {\n width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-bold);\n flex-shrink: 0;\n overflow: hidden;\n }\n .avatar.assistant {\n background: var(--cg-color-action-primary-background-default);\n color: var(--cg-color-surface-base-background);\n }\n .avatar.user {\n background: var(--cg-color-surface-cards-border);\n color: var(--cg-color-surface-base-text);\n }\n .avatar.system {\n background: var(--cg-color-surface-container-background);\n color: var(--cg-color-input-text-placeholder);\n }\n .avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n /* ── Bubble ── */\n .bubble {\n flex: 1;\n min-width: 0;\n max-width: 80%;\n }\n .message.user .bubble { max-width: 70%; }\n\n .bubble-body {\n border-radius: var(--cg-border-radius-150);\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n font-size: var(--cg-font-size-sm);\n line-height: 1.6;\n color: var(--cg-color-surface-base-text);\n }\n .message.assistant .bubble-body {\n background: var(--cg-color-surface-cards-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n }\n .message.user .bubble-body {\n background: var(--cg-color-action-primary-background-default);\n color: var(--cg-color-surface-base-background);\n border-radius: var(--cg-border-radius-150) var(--cg-border-radius-150) var(--cg-border-radius-50) var(--cg-border-radius-150);\n }\n .message.system .bubble-body {\n background: var(--cg-color-surface-base-background);\n border: var(--cg-border-width-50) dashed var(--cg-color-surface-cards-border);\n font-size: var(--cg-font-size-sm);\n color: var(--cg-color-input-text-placeholder);\n font-style: italic;\n }\n\n /* ── Card fallback (unknown/blocked card type) ── */\n .card-fallback {\n padding: var(--cg-spacing-8);\n font-size: var(--cg-font-size-sm);\n color: var(--cg-color-input-text-placeholder);\n }\n\n /* ── Text ── */\n .text {\n white-space: pre-wrap;\n word-break: break-word;\n }\n .text p { margin: 0 0 var(--cg-spacing-8); }\n .text p:last-child { margin-bottom: 0; }\n .text code {\n background: var(--cg-overlay-dark-medium);\n padding: var(--cg-spacing-1) var(--cg-spacing-6);\n border-radius: var(--cg-border-radius-50);\n font-family: var(--cg-font-family-mono);\n font-size: var(--cg-font-size-sm);\n }\n .message.user .text code {\n background: var(--cg-overlay-dark-subtle);\n }\n\n /* ── Cards section ── */\n .cards {\n display: flex;\n flex-direction: column;\n gap: var(--cg-spacing-8);\n margin-top: var(--cg-spacing-8);\n }\n\n /* ── Action buttons ── */\n .actions {\n padding-top: var(--cg-spacing-12);\n border-top: var(--cg-border-width-50) solid var(--cg-color-surface-cards-divider);\n display: flex;\n flex-wrap: wrap;\n gap: var(--cg-spacing-6);\n margin-top: var(--cg-spacing-8);\n }\n .action-btn {\n padding: var(--cg-spacing-6) var(--cg-spacing-12);\n border-radius: var(--cg-border-radius-100);\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-semibold);\n background: var(--cg-color-surface-container-background);\n color: var(--cg-color-surface-base-text);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n cursor: pointer;\n transition: background-color var(--cg-transition-duration-default) var(--cg-transition-easing-default), color var(--cg-transition-duration-default) var(--cg-transition-easing-default), border-color var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n }\n .action-btn:hover {\n background: var(--cg-color-surface-cards-border);\n border-color: var(--cg-color-surface-base-text);\n }\n .action-btn:focus-visible {\n outline: var(--cg-border-width-100) solid var(--cg-color-focus-ring);\n outline-offset: var(--cg-outline-offset-default);\n }\n\n /* ── Timestamp ── */\n .timestamp {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n margin-top: var(--cg-spacing-6);\n }\n .message.user .timestamp { text-align: right; }\n\n `];\n\n @property({ type: String }) override role: 'user' | 'assistant' | 'system' = 'assistant';\n @property({ type: String }) text = '';\n @property({ attribute: false }) cards: CardRef[] = [];\n @property({ type: String }) avatar = '';\n @property({ type: String }) timestamp = '';\n @property({ attribute: false }) actions: ActionRef[] = [];\n\n private _dispatch(name: string, detail: unknown) {\n this.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail }));\n }\n\n private _handleAction(actionId: string) {\n this._dispatch('ai-message-action', { actionId });\n }\n\n private _avatarFallback(): string {\n if (this.role === 'assistant') return 'AI';\n if (this.role === 'user') return 'U';\n return 'S';\n }\n\n private _renderAvatar() {\n return html`\n <div class=\"avatar ${this.role}\" aria-hidden=\"true\">\n ${this.avatar\n ? html`<img src=${this.avatar} alt=\"${this.role} avatar\">`\n : this._avatarFallback()}\n </div>\n `;\n }\n\n private _renderText() {\n if (!this.text) return nothing;\n // Simple paragraph splitting (no innerHTML — safe text rendering)\n const paragraphs = this.text.split('\\n\\n').filter(Boolean);\n return html`\n <div class=\"text\">\n ${paragraphs.map(p => html`<p>${p}</p>`)}\n </div>\n `;\n }\n\n private _cardAbort?: AbortController;\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._cardAbort?.abort();\n }\n\n /** Allowlist of known component tag names that can be created as cards. */\n private static _allowedCardTypes = new Set([\n 'ai-tool-card', 'ai-chart-card', 'ai-code-card', 'ai-data-card',\n 'ai-file-card', 'ai-image-card', 'ai-link-card', 'ai-map-card',\n 'ai-search-card', 'ai-weather-card', 'ai-progress-card',\n 'ai-summary-card', 'ai-table-card', 'ai-metric-card',\n ]);\n\n private _isValidCardType(type: string): boolean {\n // Must be a valid custom element name (contains hyphen) and be in the allowlist\n return typeof type === 'string'\n && type.includes('-')\n && AiRichMessage._allowedCardTypes.has(type);\n }\n\n private _renderCards() {\n if (this.cards.length === 0) return nothing;\n // Clean up previous card listeners\n this._cardAbort?.abort();\n this._cardAbort = new AbortController();\n const signal = this._cardAbort.signal;\n\n return html`\n <div class=\"cards\">\n ${this.cards.map((card, idx) => {\n try {\n if (!this._isValidCardType(card.type)) {\n console.warn(`[ai-rich-message] Blocked unknown card type: \"${card.type}\"`);\n return html`<div class=\"card-fallback\">Card unavailable</div>`;\n }\n const el = document.createElement(card.type);\n (el as unknown as Record<string, unknown>)['data'] = card.data;\n (el as unknown as Record<string, unknown>)['toolData'] = card.data;\n el.addEventListener('ai-tool-card-action', ((e: CustomEvent) => {\n this._dispatch('ai-message-card-action', {\n cardIndex: idx, action: e.detail?.action, data: e.detail?.data,\n });\n }) as EventListener, { signal });\n return el;\n } catch {\n return html`<div class=\"card-fallback\">Card unavailable</div>`;\n }\n })}\n </div>\n `;\n }\n\n private _renderActions() {\n if (this.actions.length === 0) return nothing;\n return html`\n <div class=\"actions\" role=\"group\" aria-label=\"Message actions\">\n ${this.actions.map(a => html`\n <button\n class=\"action-btn\"\n @click=${() => this._handleAction(a.id)}\n aria-label=\"${a.label}\"\n >${a.label}</button>\n `)}\n </div>\n `;\n }\n\n override render() {\n return html`\n <div\n class=\"message ${this.role}\"\n role=\"article\"\n aria-label=\"${this.role} message\"\n tabindex=\"0\"\n >\n ${this._renderAvatar()}\n <div class=\"bubble\">\n <div class=\"bubble-body\">\n ${this._renderText()}\n <slot></slot>\n </div>\n ${this._renderCards()}\n ${this._renderActions()}\n ${this.timestamp ? html`<div class=\"timestamp\">${this.timestamp}</div>` : nothing}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ai-rich-message': AiRichMessage;\n }\n}\n"],"names":["AiRichMessage","LitElement","name","detail","actionId","html","nothing","paragraphs","p","type","signal","card","idx","el","e","hostBlock","reducedMotion","fadeSlideInKeyframes","css","__decorateClass","property","customElement"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { css as g, LitElement as p, html as i, nothing as d } from "lit";
2
2
  import { property as v, customElement as u } from "lit/decorators.js";
3
- import { h as f, r as b } from "../../chunks/premium.css-9I4kHrsl.js";
4
- var h = Object.defineProperty, m = Object.getOwnPropertyDescriptor, t = (r, e, s, c) => {
5
- for (var a = c > 1 ? void 0 : c ? m(e, s) : e, n = r.length - 1, l; n >= 0; n--)
6
- (l = r[n]) && (a = (c ? l(e, s, a) : l(a)) || a);
7
- return c && a && h(e, s, a), a;
3
+ import { h as f, r as b } from "../../chunks/premium.css-DHekUEUt.js";
4
+ var h = Object.defineProperty, m = Object.getOwnPropertyDescriptor, c = (r, e, s, t) => {
5
+ for (var a = t > 1 ? void 0 : t ? m(e, s) : e, n = r.length - 1, l; n >= 0; n--)
6
+ (l = r[n]) && (a = (t ? l(e, s, a) : l(a)) || a);
7
+ return t && a && h(e, s, a), a;
8
8
  };
9
9
  let o = class extends p {
10
10
  constructor() {
@@ -101,7 +101,7 @@ o.styles = [f, b, g`
101
101
  }
102
102
  .scenario:focus-visible {
103
103
  outline: none;
104
- box-shadow: inset 0 0 0 2px var(--cg-overlay-accent-strong);
104
+ box-shadow: inset 0 0 0 var(--cg-outline-width-default) var(--cg-overlay-accent-strong);
105
105
  }
106
106
 
107
107
  .scenario-info { flex: 1; min-width: 0; }
@@ -164,16 +164,16 @@ o.styles = [f, b, g`
164
164
  font-size: var(--cg-font-size-sm);
165
165
  }
166
166
  `];
167
- t([
167
+ c([
168
168
  v({ type: Array })
169
169
  ], o.prototype, "scenarios", 2);
170
- t([
170
+ c([
171
171
  v()
172
172
  ], o.prototype, "activeScenario", 2);
173
- t([
173
+ c([
174
174
  v({ type: Boolean })
175
175
  ], o.prototype, "loading", 2);
176
- o = t([
176
+ o = c([
177
177
  u("ai-scenario-panel")
178
178
  ], o);
179
179
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"ai-scenario-panel.js","sources":["../../../src/components/ai-scenario-panel/ai-scenario-panel.ts"],"sourcesContent":["/**\n * @element ai-scenario-panel\n * What-if scenario comparison panel. Clean list with probability, outcome, and status.\n *\n * @fires {CustomEvent<{id: string}>} ai-scenario-select\n * @fires {CustomEvent<{id: string}>} ai-scenario-run\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, state, customElement } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\ninterface Scenario {\n id: string;\n label: string;\n description?: string;\n probability?: number;\n outcome?: string;\n status?: 'idle' | 'running' | 'complete' | 'error';\n}\n\n@customElement('ai-scenario-panel')\nexport class AiScenarioPanel extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host { display: block; }\n\n .panel {\n background: var(--cg-color-surface-cards-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-component-card-radius);\n overflow: hidden;\n }\n\n .header {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-8);\n padding: var(--cg-spacing-20) var(--cg-spacing-20) var(--cg-spacing-12);\n }\n .header-title {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-base-text);\n }\n\n /* Scenarios list */\n .scenarios {\n margin: 0 var(--cg-spacing-12) var(--cg-spacing-12);\n background: var(--cg-overlay-dark-subtle);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-125);\n overflow: hidden;\n }\n\n .scenario {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-12);\n padding: var(--cg-spacing-16) var(--cg-spacing-16);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n cursor: pointer;\n transition: background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .scenario:last-child { border-bottom: none; }\n .scenario:hover { background: var(--cg-color-action-secondary-background-hover); }\n .scenario.active {\n background: var(--cg-overlay-dark-subtle);\n }\n .scenario:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--cg-overlay-accent-strong);\n }\n\n .scenario-info { flex: 1; min-width: 0; }\n .scenario-label {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n color: var(--cg-color-surface-base-text);\n }\n .scenario-desc {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n margin-top: var(--cg-spacing-2);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n /* Right side metrics */\n .scenario-metrics {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-16);\n flex-shrink: 0;\n }\n .metric {\n text-align: right;\n }\n .metric-val {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-semibold);\n font-family: var(--cg-font-family-mono);\n color: var(--cg-color-surface-base-text);\n }\n .metric-label {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n }\n\n /* Status dot */\n .status-dot {\n width: var(--cg-spacing-8);\n height: var(--cg-spacing-8);\n border-radius: var(--cg-border-radius-full);\n flex-shrink: 0;\n }\n .status-dot.idle { background: var(--cg-color-input-text-placeholder); }\n .status-dot.running { background: var(--cg-color-status-warning-text-default); }\n .status-dot.complete { background: var(--cg-color-status-success-text-default); }\n .status-dot.error { background: var(--cg-color-status-error-text-default); }\n\n /* Footer */\n .footer {\n padding: var(--cg-spacing-12);\n }\n\n .empty {\n padding: var(--cg-spacing-32) var(--cg-spacing-20);\n text-align: center;\n color: var(--cg-color-input-text-placeholder);\n font-size: var(--cg-font-size-sm);\n }\n `];\n\n @property({ type: Array }) scenarios: Scenario[] = [];\n @property() activeScenario = '';\n @property({ type: Boolean }) loading = false;\n\n private _select(id: string) {\n this.activeScenario = id;\n this.dispatchEvent(new CustomEvent('ai-scenario-select', { bubbles: true, composed: true, detail: { id } }));\n }\n\n override render() {\n if (this.loading) {\n return html`<div class=\"panel\"><div class=\"empty\">Loading scenarios...</div></div>`;\n }\n\n if (!this.scenarios.length) {\n return html`<div class=\"panel\"><div class=\"empty\">No scenarios available.</div></div>`;\n }\n\n return html`\n <div class=\"panel\" role=\"listbox\" aria-label=\"Scenarios\">\n <div class=\"header\">\n <span class=\"header-title\">Scenarios</span>\n </div>\n <div class=\"scenarios\">\n ${this.scenarios.map(s => html`\n <div class=\"scenario ${s.id === this.activeScenario ? 'active' : ''}\"\n role=\"option\" tabindex=\"0\"\n aria-selected=\"${s.id === this.activeScenario}\"\n @click=${() => this._select(s.id)}\n @keydown=${(e: KeyboardEvent) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); this._select(s.id); } }}>\n <span class=\"status-dot ${s.status || 'idle'}\"></span>\n <div class=\"scenario-info\">\n <div class=\"scenario-label\">${s.label}</div>\n ${s.description ? html`<div class=\"scenario-desc\">${s.description}</div>` : nothing}\n </div>\n <div class=\"scenario-metrics\">\n ${s.probability != null ? html`\n <div class=\"metric\">\n <div class=\"metric-val\">${Math.round(s.probability * 100)}%</div>\n <div class=\"metric-label\">Prob</div>\n </div>\n ` : nothing}\n ${s.outcome ? html`\n <div class=\"metric\">\n <div class=\"metric-val\">${s.outcome}</div>\n <div class=\"metric-label\">Outcome</div>\n </div>\n ` : nothing}\n </div>\n </div>\n `)}\n </div>\n </div>\n `;\n }\n}\n"],"names":["AiScenarioPanel","LitElement","id","html","s","nothing","hostBlock","reducedMotion","css","__decorateClass","property","customElement"],"mappings":";;;;;;;;AAqBO,IAAMA,IAAN,cAA8BC,EAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA,GAgHsB,KAAA,YAAwB,CAAA,GACvC,KAAA,iBAAiB,IACA,KAAA,UAAU;AAAA,EAAA;AAAA,EAE/B,QAAQC,GAAY;AAC1B,SAAK,iBAAiBA,GACtB,KAAK,cAAc,IAAI,YAAY,sBAAsB,EAAE,SAAS,IAAM,UAAU,IAAM,QAAQ,EAAE,IAAAA,EAAA,EAAG,CAAG,CAAC;AAAA,EAC7G;AAAA,EAES,SAAS;AAChB,WAAI,KAAK,UACAC,4EAGJ,KAAK,UAAU,SAIbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMC,KAAK,UAAU,IAAI,CAAAC,MAAKD;AAAA,mCACDC,EAAE,OAAO,KAAK,iBAAiB,WAAW,EAAE;AAAA;AAAA,+BAEhDA,EAAE,OAAO,KAAK,cAAc;AAAA,uBACpC,MAAM,KAAK,QAAQA,EAAE,EAAE,CAAC;AAAA,yBACtB,CAAC,MAAqB;AAAE,OAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SAAO,EAAE,eAAA,GAAkB,KAAK,QAAQA,EAAE,EAAE;AAAA,IAAK,CAAC;AAAA,wCAC9FA,EAAE,UAAU,MAAM;AAAA;AAAA,8CAEZA,EAAE,KAAK;AAAA,kBACnCA,EAAE,cAAcD,+BAAkCC,EAAE,WAAW,WAAWC,CAAO;AAAA;AAAA;AAAA,kBAGjFD,EAAE,eAAe,OAAOD;AAAA;AAAA,8CAEI,KAAK,MAAMC,EAAE,cAAc,GAAG,CAAC;AAAA;AAAA;AAAA,oBAGzDC,CAAO;AAAA,kBACTD,EAAE,UAAUD;AAAA;AAAA,8CAEgBC,EAAE,OAAO;AAAA;AAAA;AAAA,oBAGnCC,CAAO;AAAA;AAAA;AAAA,WAGhB,CAAC;AAAA;AAAA;AAAA,QAnCCF;AAAA,EAuCX;AACF;AAvKaH,EACK,SAAS,CAACM,GAAWC,GAAeC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA6GnD;AAE0BC,EAAA;AAAA,EAA1BC,EAAS,EAAE,MAAM,MAAA,CAAO;AAAA,GAhHdV,EAgHgB,WAAA,aAAA,CAAA;AACfS,EAAA;AAAA,EAAXC,EAAA;AAAS,GAjHCV,EAiHC,WAAA,kBAAA,CAAA;AACiBS,EAAA;AAAA,EAA5BC,EAAS,EAAE,MAAM,QAAA,CAAS;AAAA,GAlHhBV,EAkHkB,WAAA,WAAA,CAAA;AAlHlBA,IAANS,EAAA;AAAA,EADNE,EAAc,mBAAmB;AAAA,GACrBX,CAAA;"}
1
+ {"version":3,"file":"ai-scenario-panel.js","sources":["../../../src/components/ai-scenario-panel/ai-scenario-panel.ts"],"sourcesContent":["/**\n * @element ai-scenario-panel\n * What-if scenario comparison panel. Clean list with probability, outcome, and status.\n *\n * @fires {CustomEvent<{id: string}>} ai-scenario-select\n * @fires {CustomEvent<{id: string}>} ai-scenario-run\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, state, customElement } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\ninterface Scenario {\n id: string;\n label: string;\n description?: string;\n probability?: number;\n outcome?: string;\n status?: 'idle' | 'running' | 'complete' | 'error';\n}\n\n@customElement('ai-scenario-panel')\nexport class AiScenarioPanel extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host { display: block; }\n\n .panel {\n background: var(--cg-color-surface-cards-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-component-card-radius);\n overflow: hidden;\n }\n\n .header {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-8);\n padding: var(--cg-spacing-20) var(--cg-spacing-20) var(--cg-spacing-12);\n }\n .header-title {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-base-text);\n }\n\n /* Scenarios list */\n .scenarios {\n margin: 0 var(--cg-spacing-12) var(--cg-spacing-12);\n background: var(--cg-overlay-dark-subtle);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-125);\n overflow: hidden;\n }\n\n .scenario {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-12);\n padding: var(--cg-spacing-16) var(--cg-spacing-16);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n cursor: pointer;\n transition: background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .scenario:last-child { border-bottom: none; }\n .scenario:hover { background: var(--cg-color-action-secondary-background-hover); }\n .scenario.active {\n background: var(--cg-overlay-dark-subtle);\n }\n .scenario:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 var(--cg-outline-width-default) var(--cg-overlay-accent-strong);\n }\n\n .scenario-info { flex: 1; min-width: 0; }\n .scenario-label {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n color: var(--cg-color-surface-base-text);\n }\n .scenario-desc {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n margin-top: var(--cg-spacing-2);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n /* Right side metrics */\n .scenario-metrics {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-16);\n flex-shrink: 0;\n }\n .metric {\n text-align: right;\n }\n .metric-val {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-semibold);\n font-family: var(--cg-font-family-mono);\n color: var(--cg-color-surface-base-text);\n }\n .metric-label {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n }\n\n /* Status dot */\n .status-dot {\n width: var(--cg-spacing-8);\n height: var(--cg-spacing-8);\n border-radius: var(--cg-border-radius-full);\n flex-shrink: 0;\n }\n .status-dot.idle { background: var(--cg-color-input-text-placeholder); }\n .status-dot.running { background: var(--cg-color-status-warning-text-default); }\n .status-dot.complete { background: var(--cg-color-status-success-text-default); }\n .status-dot.error { background: var(--cg-color-status-error-text-default); }\n\n /* Footer */\n .footer {\n padding: var(--cg-spacing-12);\n }\n\n .empty {\n padding: var(--cg-spacing-32) var(--cg-spacing-20);\n text-align: center;\n color: var(--cg-color-input-text-placeholder);\n font-size: var(--cg-font-size-sm);\n }\n `];\n\n @property({ type: Array }) scenarios: Scenario[] = [];\n @property() activeScenario = '';\n @property({ type: Boolean }) loading = false;\n\n private _select(id: string) {\n this.activeScenario = id;\n this.dispatchEvent(new CustomEvent('ai-scenario-select', { bubbles: true, composed: true, detail: { id } }));\n }\n\n override render() {\n if (this.loading) {\n return html`<div class=\"panel\"><div class=\"empty\">Loading scenarios...</div></div>`;\n }\n\n if (!this.scenarios.length) {\n return html`<div class=\"panel\"><div class=\"empty\">No scenarios available.</div></div>`;\n }\n\n return html`\n <div class=\"panel\" role=\"listbox\" aria-label=\"Scenarios\">\n <div class=\"header\">\n <span class=\"header-title\">Scenarios</span>\n </div>\n <div class=\"scenarios\">\n ${this.scenarios.map(s => html`\n <div class=\"scenario ${s.id === this.activeScenario ? 'active' : ''}\"\n role=\"option\" tabindex=\"0\"\n aria-selected=\"${s.id === this.activeScenario}\"\n @click=${() => this._select(s.id)}\n @keydown=${(e: KeyboardEvent) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); this._select(s.id); } }}>\n <span class=\"status-dot ${s.status || 'idle'}\"></span>\n <div class=\"scenario-info\">\n <div class=\"scenario-label\">${s.label}</div>\n ${s.description ? html`<div class=\"scenario-desc\">${s.description}</div>` : nothing}\n </div>\n <div class=\"scenario-metrics\">\n ${s.probability != null ? html`\n <div class=\"metric\">\n <div class=\"metric-val\">${Math.round(s.probability * 100)}%</div>\n <div class=\"metric-label\">Prob</div>\n </div>\n ` : nothing}\n ${s.outcome ? html`\n <div class=\"metric\">\n <div class=\"metric-val\">${s.outcome}</div>\n <div class=\"metric-label\">Outcome</div>\n </div>\n ` : nothing}\n </div>\n </div>\n `)}\n </div>\n </div>\n `;\n }\n}\n"],"names":["AiScenarioPanel","LitElement","id","html","s","nothing","hostBlock","reducedMotion","css","__decorateClass","property","customElement"],"mappings":";;;;;;;;AAqBO,IAAMA,IAAN,cAA8BC,EAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA,GAgHsB,KAAA,YAAwB,CAAA,GACvC,KAAA,iBAAiB,IACA,KAAA,UAAU;AAAA,EAAA;AAAA,EAE/B,QAAQC,GAAY;AAC1B,SAAK,iBAAiBA,GACtB,KAAK,cAAc,IAAI,YAAY,sBAAsB,EAAE,SAAS,IAAM,UAAU,IAAM,QAAQ,EAAE,IAAAA,EAAA,EAAG,CAAG,CAAC;AAAA,EAC7G;AAAA,EAES,SAAS;AAChB,WAAI,KAAK,UACAC,4EAGJ,KAAK,UAAU,SAIbA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMC,KAAK,UAAU,IAAI,CAAAC,MAAKD;AAAA,mCACDC,EAAE,OAAO,KAAK,iBAAiB,WAAW,EAAE;AAAA;AAAA,+BAEhDA,EAAE,OAAO,KAAK,cAAc;AAAA,uBACpC,MAAM,KAAK,QAAQA,EAAE,EAAE,CAAC;AAAA,yBACtB,CAAC,MAAqB;AAAE,OAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SAAO,EAAE,eAAA,GAAkB,KAAK,QAAQA,EAAE,EAAE;AAAA,IAAK,CAAC;AAAA,wCAC9FA,EAAE,UAAU,MAAM;AAAA;AAAA,8CAEZA,EAAE,KAAK;AAAA,kBACnCA,EAAE,cAAcD,+BAAkCC,EAAE,WAAW,WAAWC,CAAO;AAAA;AAAA;AAAA,kBAGjFD,EAAE,eAAe,OAAOD;AAAA;AAAA,8CAEI,KAAK,MAAMC,EAAE,cAAc,GAAG,CAAC;AAAA;AAAA;AAAA,oBAGzDC,CAAO;AAAA,kBACTD,EAAE,UAAUD;AAAA;AAAA,8CAEgBC,EAAE,OAAO;AAAA;AAAA;AAAA,oBAGnCC,CAAO;AAAA;AAAA;AAAA,WAGhB,CAAC;AAAA;AAAA;AAAA,QAnCCF;AAAA,EAuCX;AACF;AAvKaH,EACK,SAAS,CAACM,GAAWC,GAAeC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA6GnD;AAE0BC,EAAA;AAAA,EAA1BC,EAAS,EAAE,MAAM,MAAA,CAAO;AAAA,GAhHdV,EAgHgB,WAAA,aAAA,CAAA;AACfS,EAAA;AAAA,EAAXC,EAAA;AAAS,GAjHCV,EAiHC,WAAA,kBAAA,CAAA;AACiBS,EAAA;AAAA,EAA5BC,EAAS,EAAE,MAAM,QAAA,CAAS;AAAA,GAlHhBV,EAkHkB,WAAA,WAAA,CAAA;AAlHlBA,IAANS,EAAA;AAAA,EADNE,EAAc,mBAAmB;AAAA,GACrBX,CAAA;"}
@@ -1,6 +1,6 @@
1
1
  import { css as u, LitElement as v, nothing as c, html as s } from "lit";
2
2
  import { property as l, state as h, customElement as p } from "lit/decorators.js";
3
- import { h as f, r as b } from "../../chunks/premium.css-9I4kHrsl.js";
3
+ import { h as f, r as b } from "../../chunks/premium.css-DHekUEUt.js";
4
4
  var _ = Object.defineProperty, m = Object.getOwnPropertyDescriptor, o = (e, n, t, r) => {
5
5
  for (var i = r > 1 ? void 0 : r ? m(n, t) : n, d = e.length - 1, g; d >= 0; d--)
6
6
  (g = e[d]) && (i = (r ? g(n, t, i) : g(i)) || i);
@@ -1,6 +1,6 @@
1
1
  import { css as p, LitElement as v, nothing as g, html as c } from "lit";
2
2
  import { property as n, customElement as u } from "lit/decorators.js";
3
- import { h, r as b } from "../../chunks/premium.css-9I4kHrsl.js";
3
+ import { h, r as b } from "../../chunks/premium.css-DHekUEUt.js";
4
4
  var f = Object.defineProperty, w = Object.getOwnPropertyDescriptor, i = (r, e, a, t) => {
5
5
  for (var o = t > 1 ? void 0 : t ? w(e, a) : e, l = r.length - 1, d; l >= 0; l--)
6
6
  (d = r[l]) && (o = (t ? d(e, a, o) : d(o)) || o);
@@ -123,7 +123,7 @@ s.styles = [h, b, p`
123
123
  }
124
124
  .legend-title {
125
125
  font-size: var(--cg-font-size-xs); font-weight: var(--cg-font-weight-semibold);
126
- color: var(--cg-color-surface-container-outlined);
126
+ color: var(--cg-color-surface-cards-text);
127
127
  text-transform: uppercase; letter-spacing: var(--cg-letter-spacing-wide);
128
128
  }
129
129
  .legend-items { display: flex; flex-wrap: wrap; gap: var(--cg-spacing-8); }
@@ -134,7 +134,7 @@ s.styles = [h, b, p`
134
134
  border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);
135
135
  background: transparent;
136
136
  font-size: var(--cg-font-size-xs); font-weight: var(--cg-font-weight-medium);
137
- color: var(--cg-color-surface-container-outlined);
137
+ color: var(--cg-color-surface-cards-text);
138
138
  cursor: pointer;
139
139
  transition: border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default), color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
140
140
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ai-segmentation-viewer.js","sources":["../../../src/components/ai-segmentation-viewer/ai-segmentation-viewer.ts"],"sourcesContent":["/**\n * @element ai-segmentation-viewer\n * Image segmentation viewer with colored mask overlays, legend, visibility toggles, and opacity control.\n *\n * @fires {CustomEvent<{id: string, label: string}>} ai-segment-select\n * @fires {CustomEvent<{id: string, visible: boolean}>} ai-segment-toggle\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, customElement } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\nexport interface SegmentMask {\n id: string;\n label: string;\n color: string;\n visible?: boolean;\n}\n\n@customElement('ai-segmentation-viewer')\nexport class AiSegmentationViewer extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n .panel {\n background: var(--cg-color-surface-cards-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-150);\n overflow: hidden;\n }\n\n .header {\n padding: var(--cg-spacing-16) var(--cg-spacing-24);\n }\n .header-title {\n font-size: var(--cg-font-size-sm); font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-base-text);\n }\n\n /* ── Canvas ── */\n .canvas-wrap {\n position: relative; overflow: hidden;\n background: var(--cg-color-surface-base-background);\n }\n .canvas-wrap img { display: block; width: 100%; height: auto; }\n .mask-overlay {\n position: absolute; inset: 0; pointer-events: none;\n transition: opacity var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .mask-overlay.selected {\n outline: var(--cg-border-width-100) solid var(--cg-color-action-primary-background-default);\n outline-offset: calc(-1 * var(--cg-spacing-2));\n }\n\n /* ── Opacity slider ── */\n .opacity-row {\n padding: var(--cg-spacing-4) var(--cg-spacing-16);\n }\n\n /* ── Legend ── */\n .legend {\n padding: var(--cg-spacing-16) var(--cg-spacing-24);\n display: flex; flex-direction: column; gap: var(--cg-spacing-12);\n }\n .legend-title {\n font-size: var(--cg-font-size-xs); font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-container-outlined);\n text-transform: uppercase; letter-spacing: var(--cg-letter-spacing-wide);\n }\n .legend-items { display: flex; flex-wrap: wrap; gap: var(--cg-spacing-8); }\n .legend-item {\n display: inline-flex; align-items: center; gap: var(--cg-spacing-8);\n padding: var(--cg-spacing-6) var(--cg-spacing-16);\n border-radius: var(--cg-border-radius-full);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n background: transparent;\n font-size: var(--cg-font-size-xs); font-weight: var(--cg-font-weight-medium);\n color: var(--cg-color-surface-container-outlined);\n cursor: pointer;\n transition: border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default), color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .legend-item:hover { border-color: var(--cg-color-surface-cards-hover-border); color: var(--cg-color-surface-base-text); }\n .legend-item.selected { border-color: var(--cg-color-action-primary-background-default); color: var(--cg-color-surface-base-text); }\n .legend-item.hidden { opacity: 0.4; }\n .legend-item:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong); }\n .legend-swatch { width: var(--cg-spacing-8); height: var(--cg-spacing-8); border-radius: var(--cg-border-radius-full); flex-shrink: 0; }\n .legend-toggle {\n background: none; border: none; padding: 0; color: inherit; cursor: pointer;\n display: flex; align-items: center;\n }\n .legend-toggle svg { width: var(--cg-spacing-12); height: var(--cg-spacing-12); }\n\n /* ── Rounded ── */\n :host([rounded=\"none\"]) .panel { border-radius: 0; }\n :host([rounded=\"sm\"]) .panel { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .panel { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .panel { border-radius: var(--cg-border-radius-150); }\n `];\n\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' = 'lg';\n @property() src = '';\n @property({ type: Array }) masks: SegmentMask[] = [];\n @property() selectedMask = '';\n @property({ type: Number }) opacity = 0.4;\n @property({ type: Boolean }) showLabels = false;\n @property({ type: Boolean }) showLegend = false;\n\n private _selectMask(mask: SegmentMask) {\n this.selectedMask = mask.id;\n this.dispatchEvent(new CustomEvent('ai-segment-select', { bubbles: true, composed: true, detail: { id: mask.id, label: mask.label } }));\n }\n\n private _toggleMask(mask: SegmentMask, e: Event) {\n e.stopPropagation();\n const newVisible = !(mask.visible !== false);\n this.masks = this.masks.map(m => m.id === mask.id ? { ...m, visible: newVisible } : m);\n this.dispatchEvent(new CustomEvent('ai-segment-toggle', { bubbles: true, composed: true, detail: { id: mask.id, visible: newVisible } }));\n }\n\n override render() {\n const visibleMasks = this.masks.filter(m => m.visible !== false);\n\n return html`\n <div class=\"panel\">\n <div class=\"header\">\n <span class=\"header-title\">Segmentation</span>\n </div>\n\n <div class=\"canvas-wrap\">\n ${this.src ? html`<img src=${this.src} alt=\"Segmentation source\" />` : nothing}\n ${visibleMasks.map(m => html`\n <div class=\"mask-overlay ${m.id === this.selectedMask ? 'selected' : ''}\"\n style=\"background: ${m.color}; opacity: ${this.opacity};\"></div>\n `)}\n </div>\n\n <div class=\"opacity-row\">\n <cg-slider\n label=\"Opacity\"\n value=\"${Math.round(this.opacity * 100)}\"\n min=\"0\" max=\"100\"\n unit=\"%\"\n size=\"sm\"\n showValue\n .showTooltip=${false}\n .showRange=${false}\n @cg-change=${(e: CustomEvent) => { this.opacity = e.detail.value / 100; }}\n ></cg-slider>\n </div>\n\n ${this.showLegend ? html`\n <div class=\"legend\">\n <span class=\"legend-title\">Masks</span>\n <div class=\"legend-items\">\n ${this.masks.map(m => html`\n <div class=\"legend-item ${m.id === this.selectedMask ? 'selected' : ''} ${m.visible === false ? 'hidden' : ''}\"\n tabindex=\"0\" role=\"button\"\n @click=${() => this._selectMask(m)}\n @keydown=${(e: KeyboardEvent) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); this._selectMask(m); } }}>\n <span class=\"legend-swatch\" style=\"background: ${m.color}\"></span>\n ${m.label}\n <button class=\"legend-toggle\" @click=${(e: Event) => this._toggleMask(m, e)}\n aria-label=\"${m.visible !== false ? 'Hide' : 'Show'} ${m.label}\">\n ${m.visible !== false ? html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/></svg>\n ` : html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"/><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/></svg>\n `}\n </button>\n </div>\n `)}\n </div>\n </div>\n ` : nothing}\n </div>\n `;\n }\n}\n"],"names":["AiSegmentationViewer","LitElement","mask","newVisible","m","visibleMasks","html","nothing","e","hostBlock","reducedMotion","css","__decorateClass","property","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"ai-segmentation-viewer.js","sources":["../../../src/components/ai-segmentation-viewer/ai-segmentation-viewer.ts"],"sourcesContent":["/**\n * @element ai-segmentation-viewer\n * Image segmentation viewer with colored mask overlays, legend, visibility toggles, and opacity control.\n *\n * @fires {CustomEvent<{id: string, label: string}>} ai-segment-select\n * @fires {CustomEvent<{id: string, visible: boolean}>} ai-segment-toggle\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, customElement } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\nexport interface SegmentMask {\n id: string;\n label: string;\n color: string;\n visible?: boolean;\n}\n\n@customElement('ai-segmentation-viewer')\nexport class AiSegmentationViewer extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n .panel {\n background: var(--cg-color-surface-cards-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-150);\n overflow: hidden;\n }\n\n .header {\n padding: var(--cg-spacing-16) var(--cg-spacing-24);\n }\n .header-title {\n font-size: var(--cg-font-size-sm); font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-base-text);\n }\n\n /* ── Canvas ── */\n .canvas-wrap {\n position: relative; overflow: hidden;\n background: var(--cg-color-surface-base-background);\n }\n .canvas-wrap img { display: block; width: 100%; height: auto; }\n .mask-overlay {\n position: absolute; inset: 0; pointer-events: none;\n transition: opacity var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .mask-overlay.selected {\n outline: var(--cg-border-width-100) solid var(--cg-color-action-primary-background-default);\n outline-offset: calc(-1 * var(--cg-spacing-2));\n }\n\n /* ── Opacity slider ── */\n .opacity-row {\n padding: var(--cg-spacing-4) var(--cg-spacing-16);\n }\n\n /* ── Legend ── */\n .legend {\n padding: var(--cg-spacing-16) var(--cg-spacing-24);\n display: flex; flex-direction: column; gap: var(--cg-spacing-12);\n }\n .legend-title {\n font-size: var(--cg-font-size-xs); font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-cards-text);\n text-transform: uppercase; letter-spacing: var(--cg-letter-spacing-wide);\n }\n .legend-items { display: flex; flex-wrap: wrap; gap: var(--cg-spacing-8); }\n .legend-item {\n display: inline-flex; align-items: center; gap: var(--cg-spacing-8);\n padding: var(--cg-spacing-6) var(--cg-spacing-16);\n border-radius: var(--cg-border-radius-full);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n background: transparent;\n font-size: var(--cg-font-size-xs); font-weight: var(--cg-font-weight-medium);\n color: var(--cg-color-surface-cards-text);\n cursor: pointer;\n transition: border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default), color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .legend-item:hover { border-color: var(--cg-color-surface-cards-hover-border); color: var(--cg-color-surface-base-text); }\n .legend-item.selected { border-color: var(--cg-color-action-primary-background-default); color: var(--cg-color-surface-base-text); }\n .legend-item.hidden { opacity: 0.4; }\n .legend-item:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong); }\n .legend-swatch { width: var(--cg-spacing-8); height: var(--cg-spacing-8); border-radius: var(--cg-border-radius-full); flex-shrink: 0; }\n .legend-toggle {\n background: none; border: none; padding: 0; color: inherit; cursor: pointer;\n display: flex; align-items: center;\n }\n .legend-toggle svg { width: var(--cg-spacing-12); height: var(--cg-spacing-12); }\n\n /* ── Rounded ── */\n :host([rounded=\"none\"]) .panel { border-radius: 0; }\n :host([rounded=\"sm\"]) .panel { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .panel { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .panel { border-radius: var(--cg-border-radius-150); }\n `];\n\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' = 'lg';\n @property() src = '';\n @property({ type: Array }) masks: SegmentMask[] = [];\n @property() selectedMask = '';\n @property({ type: Number }) opacity = 0.4;\n @property({ type: Boolean }) showLabels = false;\n @property({ type: Boolean }) showLegend = false;\n\n private _selectMask(mask: SegmentMask) {\n this.selectedMask = mask.id;\n this.dispatchEvent(new CustomEvent('ai-segment-select', { bubbles: true, composed: true, detail: { id: mask.id, label: mask.label } }));\n }\n\n private _toggleMask(mask: SegmentMask, e: Event) {\n e.stopPropagation();\n const newVisible = !(mask.visible !== false);\n this.masks = this.masks.map(m => m.id === mask.id ? { ...m, visible: newVisible } : m);\n this.dispatchEvent(new CustomEvent('ai-segment-toggle', { bubbles: true, composed: true, detail: { id: mask.id, visible: newVisible } }));\n }\n\n override render() {\n const visibleMasks = this.masks.filter(m => m.visible !== false);\n\n return html`\n <div class=\"panel\">\n <div class=\"header\">\n <span class=\"header-title\">Segmentation</span>\n </div>\n\n <div class=\"canvas-wrap\">\n ${this.src ? html`<img src=${this.src} alt=\"Segmentation source\" />` : nothing}\n ${visibleMasks.map(m => html`\n <div class=\"mask-overlay ${m.id === this.selectedMask ? 'selected' : ''}\"\n style=\"background: ${m.color}; opacity: ${this.opacity};\"></div>\n `)}\n </div>\n\n <div class=\"opacity-row\">\n <cg-slider\n label=\"Opacity\"\n value=\"${Math.round(this.opacity * 100)}\"\n min=\"0\" max=\"100\"\n unit=\"%\"\n size=\"sm\"\n showValue\n .showTooltip=${false}\n .showRange=${false}\n @cg-change=${(e: CustomEvent) => { this.opacity = e.detail.value / 100; }}\n ></cg-slider>\n </div>\n\n ${this.showLegend ? html`\n <div class=\"legend\">\n <span class=\"legend-title\">Masks</span>\n <div class=\"legend-items\">\n ${this.masks.map(m => html`\n <div class=\"legend-item ${m.id === this.selectedMask ? 'selected' : ''} ${m.visible === false ? 'hidden' : ''}\"\n tabindex=\"0\" role=\"button\"\n @click=${() => this._selectMask(m)}\n @keydown=${(e: KeyboardEvent) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); this._selectMask(m); } }}>\n <span class=\"legend-swatch\" style=\"background: ${m.color}\"></span>\n ${m.label}\n <button class=\"legend-toggle\" @click=${(e: Event) => this._toggleMask(m, e)}\n aria-label=\"${m.visible !== false ? 'Hide' : 'Show'} ${m.label}\">\n ${m.visible !== false ? html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/></svg>\n ` : html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"/><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/></svg>\n `}\n </button>\n </div>\n `)}\n </div>\n </div>\n ` : nothing}\n </div>\n `;\n }\n}\n"],"names":["AiSegmentationViewer","LitElement","mask","newVisible","m","visibleMasks","html","nothing","e","hostBlock","reducedMotion","css","__decorateClass","property","customElement"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { css as n, LitElement as h, html as b } from "lit";
2
2
  import { property as c, customElement as m } from "lit/decorators.js";
3
- import { h as u } from "../../chunks/premium.css-9I4kHrsl.js";
3
+ import { h as u } from "../../chunks/premium.css-DHekUEUt.js";
4
4
  import "../ai-app-sidebar/ai-app-sidebar.js";
5
5
  var v = Object.defineProperty, f = Object.getOwnPropertyDescriptor, o = (e, i, r, a) => {
6
6
  for (var t = a > 1 ? void 0 : a ? f(i, r) : i, l = e.length - 1, p; l >= 0; l--)
@@ -1,6 +1,6 @@
1
1
  import { css as u, LitElement as v, nothing as n, html as i } from "lit";
2
2
  import { property as o, customElement as p } from "lit/decorators.js";
3
- import { h as f, r as b } from "../../chunks/premium.css-9I4kHrsl.js";
3
+ import { h as f, r as b } from "../../chunks/premium.css-DHekUEUt.js";
4
4
  var m = Object.defineProperty, h = Object.getOwnPropertyDescriptor, c = (r, a, t, d) => {
5
5
  for (var s = d > 1 ? void 0 : d ? h(a, t) : a, l = r.length - 1, g; l >= 0; l--)
6
6
  (g = r[l]) && (s = (d ? g(a, t, s) : g(s)) || s);
@@ -1,6 +1,6 @@
1
1
  import { css as g, LitElement as u, html as c, nothing as p } from "lit";
2
2
  import { property as l, state as v, customElement as h } from "lit/decorators.js";
3
- import { h as f, r as b, f as m } from "../../chunks/premium.css-9I4kHrsl.js";
3
+ import { h as f, r as b, f as m } from "../../chunks/premium.css-DHekUEUt.js";
4
4
  var x = Object.defineProperty, w = Object.getOwnPropertyDescriptor, s = (a, e, t, o) => {
5
5
  for (var r = o > 1 ? void 0 : o ? w(e, t) : e, n = a.length - 1, d; n >= 0; n--)
6
6
  (d = a[n]) && (r = (o ? d(e, t, r) : d(r)) || r);
@@ -181,7 +181,7 @@ i.styles = [f, b, m, g`
181
181
 
182
182
  /* Excerpt */
183
183
  .excerpt {
184
- font-size: var(--cg-font-size-xs);
184
+ font-size: var(--cg-font-size-sm);
185
185
  color: var(--cg-color-input-text-placeholder);
186
186
  line-height: var(--cg-line-height-normal);
187
187
  margin-top: var(--cg-spacing-4);
@@ -1 +1 @@
1
- {"version":3,"file":"ai-source-graph.js","sources":["../../../src/components/ai-source-graph/ai-source-graph.ts"],"sourcesContent":["/**\n * @element ai-source-graph\n * Source attribution panel showing which knowledge sources contributed to an\n * AI response — Perplexity/ChatGPT-style numbered list with type badges,\n * weight bars, expandable excerpts, and inline footnote references.\n *\n * @example\n * ```html\n * <ai-source-graph\n * .sources=${[\n * { id: 's1', title: 'API Docs', type: 'doc', weight: 0.8, url: '#', excerpt: 'Rate limits...' },\n * { id: 's2', title: 'Stack Overflow', type: 'web', weight: 0.4 }\n * ]}\n * ></ai-source-graph>\n * ```\n *\n * @fires {CustomEvent<{id, title, type, weight}>} ai-source-click - Source clicked\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, state, customElement } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion, fadeSlideInKeyframes } from '../../styles/index.js';\n\ninterface SourceNode {\n id: string;\n title: string;\n type: 'doc' | 'web' | 'database' | 'api';\n weight: number;\n url?: string;\n excerpt?: string;\n}\n\nconst TYPE_BADGE = 'accent';\n\n@customElement('ai-source-graph')\nexport class AiSourceGraph extends LitElement {\n static override styles = [hostBlock, reducedMotion, fadeSlideInKeyframes, css`\n :host {\n animation: fadeSlideIn var(--cg-transition-duration-fast) var(--cg-transition-easing-ease-out) both;\n }\n\n .panel {\n background: var(--cg-color-surface-cards-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-150);\n overflow: hidden;\n }\n\n /* ── Header ── */\n .header {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-8);\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-divider);\n }\n .header-title {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-bold);\n color: var(--cg-color-surface-base-text);\n flex: 1;\n }\n .source-count {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n }\n\n /* ── Source list ── */\n .sources {\n display: flex;\n flex-direction: column;\n }\n\n .source {\n display: flex;\n align-items: flex-start;\n gap: var(--cg-spacing-12);\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-divider);\n cursor: pointer;\n transition:\n background var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .source:last-child { border-bottom: none; }\n .source:hover { background: var(--cg-overlay-dark-subtle); }\n .source:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--cg-color-focus-ring);\n }\n\n /* Footnote number */\n .footnote {\n width: var(--cg-spacing-24);\n height: var(--cg-spacing-24);\n border-radius: var(--cg-border-radius-full);\n background: var(--cg-color-surface-container-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-bold);\n color: var(--cg-color-surface-base-text);\n font-family: var(--cg-font-family-mono);\n }\n\n /* Source content */\n .source-body { flex: 1; min-width: 0; }\n .source-top {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-8);\n }\n .source-title {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-base-text);\n line-height: var(--cg-line-height-tight);\n }\n .source-title a {\n color: inherit;\n text-decoration: none;\n }\n .source-title a:hover { text-decoration: underline; }\n\n /* Weight bar */\n .weight-area {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-6);\n margin-left: auto;\n }\n .weight-bar {\n width: var(--cg-spacing-48);\n height: var(--cg-spacing-4);\n background: var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-full);\n overflow: hidden;\n }\n .weight-fill {\n height: 100%;\n border-radius: var(--cg-border-radius-full);\n background: var(--cg-color-action-primary-background-default);\n transition: width var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n }\n .weight-label {\n font-size: var(--cg-font-size-xs);\n font-family: var(--cg-font-family-mono);\n color: var(--cg-color-input-text-placeholder);\n min-width: var(--cg-spacing-32);\n text-align: right;\n }\n\n /* Excerpt */\n .excerpt {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n line-height: var(--cg-line-height-normal);\n margin-top: var(--cg-spacing-4);\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n .source.expanded .excerpt {\n -webkit-line-clamp: unset;\n display: block;\n }\n\n .empty {\n text-align: center;\n padding: var(--cg-spacing-32);\n color: var(--cg-color-input-text-placeholder);\n font-size: var(--cg-font-size-sm);\n }\n\n /* ── Rounded variants ── */\n :host([rounded=\"none\"]) .panel { border-radius: 0; }\n :host([rounded=\"sm\"]) .panel { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .panel { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .panel { border-radius: var(--cg-border-radius-150); }\n `];\n\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' = 'lg';\n @property({ type: Array }) sources: SourceNode[] = [];\n\n @state() private _expandedId: string = '';\n\n private _handleSourceClick(source: SourceNode) {\n this._expandedId = this._expandedId === source.id ? '' : source.id;\n this.dispatchEvent(new CustomEvent('ai-source-click', {\n bubbles: true, composed: true,\n detail: { id: source.id, title: source.title, type: source.type, weight: source.weight },\n }));\n }\n\n override render() {\n if (this.sources.length === 0) {\n return html`<div class=\"panel\"><div class=\"empty\">No sources</div></div>`;\n }\n\n const sorted = [...this.sources].sort((a, b) => b.weight - a.weight);\n\n return html`\n <div class=\"panel\" role=\"list\" aria-label=\"Source attribution\">\n <div class=\"header\">\n <span class=\"header-title\">Sources</span>\n <span class=\"source-count\">${this.sources.length}</span>\n </div>\n <div class=\"sources\">\n ${sorted.map((s, i) => {\n const isExpanded = s.id === this._expandedId;\n return html`\n <div class=\"source ${isExpanded ? 'expanded' : ''}\"\n role=\"listitem\" tabindex=\"0\"\n @click=${() => this._handleSourceClick(s)}\n @keydown=${(e: KeyboardEvent) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); this._handleSourceClick(s); } }}>\n <span class=\"footnote\">${i + 1}</span>\n <div class=\"source-body\">\n <div class=\"source-top\">\n <span class=\"source-title\">\n ${s.url ? html`<a href=${s.url} target=\"_blank\" rel=\"noopener\" @click=${(e: Event) => e.stopPropagation()}>${s.title}</a>` : s.title}\n </span>\n <cg-badge variant=${TYPE_BADGE} label=${s.type} size=\"sm\" rounded=\"full\"></cg-badge>\n </div>\n ${s.excerpt ? html`<div class=\"excerpt\">${s.excerpt}</div>` : nothing}\n </div>\n <div class=\"weight-area\">\n <div class=\"weight-bar\"><div class=\"weight-fill\" style=\"width: ${Math.round(s.weight * 100)}%\"></div></div>\n <span class=\"weight-label\">${Math.round(s.weight * 100)}%</span>\n </div>\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n}\n"],"names":["TYPE_BADGE","AiSourceGraph","LitElement","source","html","sorted","a","b","s","i","isExpanded","e","nothing","hostBlock","reducedMotion","fadeSlideInKeyframes","css","__decorateClass","property","state","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"ai-source-graph.js","sources":["../../../src/components/ai-source-graph/ai-source-graph.ts"],"sourcesContent":["/**\n * @element ai-source-graph\n * Source attribution panel showing which knowledge sources contributed to an\n * AI response — Perplexity/ChatGPT-style numbered list with type badges,\n * weight bars, expandable excerpts, and inline footnote references.\n *\n * @example\n * ```html\n * <ai-source-graph\n * .sources=${[\n * { id: 's1', title: 'API Docs', type: 'doc', weight: 0.8, url: '#', excerpt: 'Rate limits...' },\n * { id: 's2', title: 'Stack Overflow', type: 'web', weight: 0.4 }\n * ]}\n * ></ai-source-graph>\n * ```\n *\n * @fires {CustomEvent<{id, title, type, weight}>} ai-source-click - Source clicked\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, state, customElement } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion, fadeSlideInKeyframes } from '../../styles/index.js';\n\ninterface SourceNode {\n id: string;\n title: string;\n type: 'doc' | 'web' | 'database' | 'api';\n weight: number;\n url?: string;\n excerpt?: string;\n}\n\nconst TYPE_BADGE = 'accent';\n\n@customElement('ai-source-graph')\nexport class AiSourceGraph extends LitElement {\n static override styles = [hostBlock, reducedMotion, fadeSlideInKeyframes, css`\n :host {\n animation: fadeSlideIn var(--cg-transition-duration-fast) var(--cg-transition-easing-ease-out) both;\n }\n\n .panel {\n background: var(--cg-color-surface-cards-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-150);\n overflow: hidden;\n }\n\n /* ── Header ── */\n .header {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-8);\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-divider);\n }\n .header-title {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-bold);\n color: var(--cg-color-surface-base-text);\n flex: 1;\n }\n .source-count {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n }\n\n /* ── Source list ── */\n .sources {\n display: flex;\n flex-direction: column;\n }\n\n .source {\n display: flex;\n align-items: flex-start;\n gap: var(--cg-spacing-12);\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-divider);\n cursor: pointer;\n transition:\n background var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .source:last-child { border-bottom: none; }\n .source:hover { background: var(--cg-overlay-dark-subtle); }\n .source:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--cg-color-focus-ring);\n }\n\n /* Footnote number */\n .footnote {\n width: var(--cg-spacing-24);\n height: var(--cg-spacing-24);\n border-radius: var(--cg-border-radius-full);\n background: var(--cg-color-surface-container-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-bold);\n color: var(--cg-color-surface-base-text);\n font-family: var(--cg-font-family-mono);\n }\n\n /* Source content */\n .source-body { flex: 1; min-width: 0; }\n .source-top {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-8);\n }\n .source-title {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-surface-base-text);\n line-height: var(--cg-line-height-tight);\n }\n .source-title a {\n color: inherit;\n text-decoration: none;\n }\n .source-title a:hover { text-decoration: underline; }\n\n /* Weight bar */\n .weight-area {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-6);\n margin-left: auto;\n }\n .weight-bar {\n width: var(--cg-spacing-48);\n height: var(--cg-spacing-4);\n background: var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-full);\n overflow: hidden;\n }\n .weight-fill {\n height: 100%;\n border-radius: var(--cg-border-radius-full);\n background: var(--cg-color-action-primary-background-default);\n transition: width var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n }\n .weight-label {\n font-size: var(--cg-font-size-xs);\n font-family: var(--cg-font-family-mono);\n color: var(--cg-color-input-text-placeholder);\n min-width: var(--cg-spacing-32);\n text-align: right;\n }\n\n /* Excerpt */\n .excerpt {\n font-size: var(--cg-font-size-sm);\n color: var(--cg-color-input-text-placeholder);\n line-height: var(--cg-line-height-normal);\n margin-top: var(--cg-spacing-4);\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n .source.expanded .excerpt {\n -webkit-line-clamp: unset;\n display: block;\n }\n\n .empty {\n text-align: center;\n padding: var(--cg-spacing-32);\n color: var(--cg-color-input-text-placeholder);\n font-size: var(--cg-font-size-sm);\n }\n\n /* ── Rounded variants ── */\n :host([rounded=\"none\"]) .panel { border-radius: 0; }\n :host([rounded=\"sm\"]) .panel { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .panel { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .panel { border-radius: var(--cg-border-radius-150); }\n `];\n\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' = 'lg';\n @property({ type: Array }) sources: SourceNode[] = [];\n\n @state() private _expandedId: string = '';\n\n private _handleSourceClick(source: SourceNode) {\n this._expandedId = this._expandedId === source.id ? '' : source.id;\n this.dispatchEvent(new CustomEvent('ai-source-click', {\n bubbles: true, composed: true,\n detail: { id: source.id, title: source.title, type: source.type, weight: source.weight },\n }));\n }\n\n override render() {\n if (this.sources.length === 0) {\n return html`<div class=\"panel\"><div class=\"empty\">No sources</div></div>`;\n }\n\n const sorted = [...this.sources].sort((a, b) => b.weight - a.weight);\n\n return html`\n <div class=\"panel\" role=\"list\" aria-label=\"Source attribution\">\n <div class=\"header\">\n <span class=\"header-title\">Sources</span>\n <span class=\"source-count\">${this.sources.length}</span>\n </div>\n <div class=\"sources\">\n ${sorted.map((s, i) => {\n const isExpanded = s.id === this._expandedId;\n return html`\n <div class=\"source ${isExpanded ? 'expanded' : ''}\"\n role=\"listitem\" tabindex=\"0\"\n @click=${() => this._handleSourceClick(s)}\n @keydown=${(e: KeyboardEvent) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); this._handleSourceClick(s); } }}>\n <span class=\"footnote\">${i + 1}</span>\n <div class=\"source-body\">\n <div class=\"source-top\">\n <span class=\"source-title\">\n ${s.url ? html`<a href=${s.url} target=\"_blank\" rel=\"noopener\" @click=${(e: Event) => e.stopPropagation()}>${s.title}</a>` : s.title}\n </span>\n <cg-badge variant=${TYPE_BADGE} label=${s.type} size=\"sm\" rounded=\"full\"></cg-badge>\n </div>\n ${s.excerpt ? html`<div class=\"excerpt\">${s.excerpt}</div>` : nothing}\n </div>\n <div class=\"weight-area\">\n <div class=\"weight-bar\"><div class=\"weight-fill\" style=\"width: ${Math.round(s.weight * 100)}%\"></div></div>\n <span class=\"weight-label\">${Math.round(s.weight * 100)}%</span>\n </div>\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n}\n"],"names":["TYPE_BADGE","AiSourceGraph","LitElement","source","html","sorted","a","b","s","i","isExpanded","e","nothing","hostBlock","reducedMotion","fadeSlideInKeyframes","css","__decorateClass","property","state","customElement"],"mappings":";;;;;;;;AA+BA,MAAMA,IAAa;AAGZ,IAAMC,IAAN,cAA4BC,EAAW;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA,GAsJwB,KAAA,UAAuC,MACzC,KAAA,UAAwB,CAAA,GAE1C,KAAQ,cAAsB;AAAA,EAAA;AAAA,EAE/B,mBAAmBC,GAAoB;AAC7C,SAAK,cAAc,KAAK,gBAAgBA,EAAO,KAAK,KAAKA,EAAO,IAChE,KAAK,cAAc,IAAI,YAAY,mBAAmB;AAAA,MACpD,SAAS;AAAA,MAAM,UAAU;AAAA,MACzB,QAAQ,EAAE,IAAIA,EAAO,IAAI,OAAOA,EAAO,OAAO,MAAMA,EAAO,MAAM,QAAQA,EAAO,OAAA;AAAA,IAAO,CACxF,CAAC;AAAA,EACJ;AAAA,EAES,SAAS;AAChB,QAAI,KAAK,QAAQ,WAAW;AAC1B,aAAOC;AAGT,UAAMC,IAAS,CAAC,GAAG,KAAK,OAAO,EAAE,KAAK,CAACC,GAAGC,MAAMA,EAAE,SAASD,EAAE,MAAM;AAEnE,WAAOF;AAAA;AAAA;AAAA;AAAA,uCAI4B,KAAK,QAAQ,MAAM;AAAA;AAAA;AAAA,YAG9CC,EAAO,IAAI,CAACG,GAAGC,MAAM;AACrB,YAAMC,IAAaF,EAAE,OAAO,KAAK;AACjC,aAAOJ;AAAA,mCACgBM,IAAa,aAAa,EAAE;AAAA;AAAA,yBAEtC,MAAM,KAAK,mBAAmBF,CAAC,CAAC;AAAA,2BAC9B,CAACG,MAAqB;AAAE,SAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAAOA,EAAE,eAAA,GAAkB,KAAK,mBAAmBH,CAAC;AAAA,MAAK,CAAC;AAAA,yCACvGC,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,wBAItBD,EAAE,MAAMJ,YAAeI,EAAE,GAAG,0CAA0C,CAACG,MAAaA,EAAE,gBAAA,CAAiB,IAAIH,EAAE,KAAK,SAASA,EAAE,KAAK;AAAA;AAAA,wCAElHR,CAAU,UAAUQ,EAAE,IAAI;AAAA;AAAA,oBAE9CA,EAAE,UAAUJ,yBAA4BI,EAAE,OAAO,WAAWI,CAAO;AAAA;AAAA;AAAA,mFAGJ,KAAK,MAAMJ,EAAE,SAAS,GAAG,CAAC;AAAA,+CAC9D,KAAK,MAAMA,EAAE,SAAS,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,IAI/D,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,EAIV;AACF;AA7MaP,EACK,SAAS,CAACY,GAAWC,GAAeC,GAAsBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmJzE;AAE4BC,EAAA;AAAA,EAA5BC,EAAS,EAAE,SAAS,GAAA,CAAM;AAAA,GAtJhBjB,EAsJkB,WAAA,WAAA,CAAA;AACFgB,EAAA;AAAA,EAA1BC,EAAS,EAAE,MAAM,MAAA,CAAO;AAAA,GAvJdjB,EAuJgB,WAAA,WAAA,CAAA;AAEVgB,EAAA;AAAA,EAAhBE,EAAA;AAAM,GAzJIlB,EAyJM,WAAA,eAAA,CAAA;AAzJNA,IAANgB,EAAA;AAAA,EADNG,EAAc,iBAAiB;AAAA,GACnBnB,CAAA;"}
@@ -1,15 +1,15 @@
1
1
  import { css as u, LitElement as p, nothing as n, html as s } from "lit";
2
2
  import { property as g, state as v, customElement as h } from "lit/decorators.js";
3
- import { h as m, r as f, f as y } from "../../chunks/premium.css-9I4kHrsl.js";
3
+ import { h as m, r as f, f as y } from "../../chunks/premium.css-DHekUEUt.js";
4
4
  import "../cg-card/cg-card.js";
5
5
  import "../cg-text/cg-text.js";
6
6
  import "../cg-stack/cg-stack.js";
7
- var b = Object.defineProperty, x = Object.getOwnPropertyDescriptor, c = (t, i, r, a) => {
7
+ var b = Object.defineProperty, x = Object.getOwnPropertyDescriptor, l = (t, i, r, a) => {
8
8
  for (var e = a > 1 ? void 0 : a ? x(i, r) : i, o = t.length - 1, d; o >= 0; o--)
9
9
  (d = t[o]) && (e = (a ? d(i, r, e) : d(e)) || e);
10
10
  return a && e && b(i, r, e), e;
11
11
  };
12
- let l = class extends p {
12
+ let c = class extends p {
13
13
  constructor() {
14
14
  super(...arguments), this.services = [], this._hasIncident = !1;
15
15
  }
@@ -99,7 +99,7 @@ let l = class extends p {
99
99
  `;
100
100
  }
101
101
  };
102
- l.styles = [m, f, y, u`
102
+ c.styles = [m, f, y, u`
103
103
  :host {
104
104
  animation: fadeSlideIn var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
105
105
  display: block;
@@ -161,7 +161,7 @@ l.styles = [m, f, y, u`
161
161
  align-items: center;
162
162
  padding: var(--cg-spacing-2) var(--cg-spacing-8);
163
163
  border-radius: var(--cg-border-radius-full);
164
- font-size: 10px;
164
+ font-size: var(--cg-font-size-xs);
165
165
  font-weight: var(--cg-font-weight-bold);
166
166
  letter-spacing: var(--cg-letter-spacing-wide);
167
167
  text-transform: uppercase;
@@ -269,7 +269,7 @@ l.styles = [m, f, y, u`
269
269
  background: var(--cg-color-status-success-text-default);
270
270
  opacity: 0.35;
271
271
  }
272
- .history-day.day-operational:hover { opacity: 0.6; }
272
+ .history-day.day-operational:hover { opacity: var(--cg-opacity-60); }
273
273
  /* Incident days: full opacity, eye locks on */
274
274
  .history-day.day-degraded { background: var(--cg-color-status-warning-text-default); opacity: 1; }
275
275
  .history-day.day-down { background: var(--cg-color-status-error-text-default); opacity: 1; }
@@ -286,19 +286,19 @@ l.styles = [m, f, y, u`
286
286
  border: 0;
287
287
  }
288
288
  `];
289
- c([
289
+ l([
290
290
  g({ type: Array })
291
- ], l.prototype, "services", 2);
292
- c([
291
+ ], c.prototype, "services", 2);
292
+ l([
293
293
  g({ attribute: "last-updated" })
294
- ], l.prototype, "lastUpdated", 2);
295
- c([
294
+ ], c.prototype, "lastUpdated", 2);
295
+ l([
296
296
  v()
297
- ], l.prototype, "_hasIncident", 2);
298
- l = c([
297
+ ], c.prototype, "_hasIncident", 2);
298
+ c = l([
299
299
  h("ai-status-page")
300
- ], l);
300
+ ], c);
301
301
  export {
302
- l as AiStatusPage
302
+ c as AiStatusPage
303
303
  };
304
304
  //# sourceMappingURL=ai-status-page.js.map