@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,17 +1,14 @@
1
- import { css as m, LitElement as y, html as n, nothing as h } from "lit";
2
- import { property as f, state as b, customElement as x } from "lit/decorators.js";
3
- import { h as k, r as w, f as _ } from "../../chunks/premium.css-9I4kHrsl.js";
4
- var C = Object.defineProperty, $ = Object.getOwnPropertyDescriptor, g = (e, t, a, r) => {
5
- for (var i = r > 1 ? void 0 : r ? $(t, a) : t, s = e.length - 1, o; s >= 0; s--)
6
- (o = e[s]) && (i = (r ? o(t, a, i) : o(i)) || i);
7
- return r && i && C(t, a, i), i;
1
+ import { css as u, LitElement as v, html as r, nothing as l } from "lit";
2
+ import { property as g, state as p, customElement as b } from "lit/decorators.js";
3
+ import { h as f, r as m, f as h } from "../../chunks/premium.css-DHekUEUt.js";
4
+ var y = Object.defineProperty, x = Object.getOwnPropertyDescriptor, i = (t, e, c, s) => {
5
+ for (var a = s > 1 ? void 0 : s ? x(e, c) : e, n = t.length - 1, d; n >= 0; n--)
6
+ (d = t[n]) && (a = (s ? d(e, c, a) : d(a)) || a);
7
+ return s && a && y(e, c, a), a;
8
8
  };
9
- let l = class extends y {
9
+ let o = class extends v {
10
10
  constructor() {
11
- super(...arguments), this.keys = [], this.maxKeys = 10, this._copiedId = null, this._announcement = "";
12
- }
13
- disconnectedCallback() {
14
- super.disconnectedCallback(), this._copyTimer && clearTimeout(this._copyTimer);
11
+ super(...arguments), this.keys = [], this.maxKeys = 10, this._copiedId = null;
15
12
  }
16
13
  _onCreate() {
17
14
  this.dispatchEvent(new CustomEvent("ai-key-create", {
@@ -19,153 +16,87 @@ let l = class extends y {
19
16
  composed: !0
20
17
  }));
21
18
  }
22
- _onRevoke(e) {
19
+ _onRevoke(t) {
23
20
  this.dispatchEvent(new CustomEvent("ai-key-revoke", {
24
21
  bubbles: !0,
25
22
  composed: !0,
26
- detail: { id: e.id, name: e.name }
23
+ detail: { id: t.id, name: t.name }
27
24
  }));
28
25
  }
29
- _onDelete(e) {
26
+ _onDelete(t) {
30
27
  this.dispatchEvent(new CustomEvent("ai-key-delete", {
31
28
  bubbles: !0,
32
29
  composed: !0,
33
- detail: { id: e.id, name: e.name }
30
+ detail: { id: t.id, name: t.name }
34
31
  }));
35
32
  }
36
- async _onCopy(e) {
37
- try {
38
- await navigator.clipboard.writeText(e.prefix), this._copiedId = e.id, this._announce(`${e.name} key prefix copied to clipboard`), this._copyTimer && clearTimeout(this._copyTimer), this._copyTimer = window.setTimeout(() => {
39
- this._copiedId = null, this._copyTimer = void 0;
40
- }, 2e3), this.dispatchEvent(new CustomEvent("ai-key-copy", {
41
- bubbles: !0,
42
- composed: !0,
43
- detail: { id: e.id, prefix: e.prefix }
44
- }));
45
- } catch {
46
- this._announce("Copy failed — clipboard unavailable");
47
- }
48
- }
49
- _announce(e) {
50
- this._announcement = "", requestAnimationFrame(() => {
51
- this._announcement = e;
52
- });
53
- }
54
- /**
55
- * Format an ISO date as a relative-time string ("3 days ago", "in 2 weeks").
56
- * Falls back to the raw string for non-ISO inputs.
57
- */
58
- _relativeTime(e) {
59
- if (!e) return "";
60
- const t = new Date(e);
61
- if (isNaN(t.getTime())) return e;
62
- const a = t.getTime() - Date.now(), r = Math.abs(a), i = 6e4, s = 60 * i, o = 24 * s, u = 7 * o, p = 30 * o, v = 365 * o;
63
- let c, d;
64
- r < s ? (c = Math.round(a / i), d = "minute") : r < o ? (c = Math.round(a / s), d = "hour") : r < u ? (c = Math.round(a / o), d = "day") : r < p ? (c = Math.round(a / u), d = "week") : r < v ? (c = Math.round(a / p), d = "month") : (c = Math.round(a / v), d = "year");
33
+ async _onCopy(t) {
65
34
  try {
66
- return new Intl.RelativeTimeFormat("en", { numeric: "auto" }).format(c, d);
35
+ await navigator.clipboard.writeText(t.prefix), this._copiedId = t.id, setTimeout(() => {
36
+ this._copiedId = null;
37
+ }, 2e3);
67
38
  } catch {
68
- return e;
69
39
  }
70
40
  }
71
41
  render() {
72
- const e = this.keys.length >= this.maxKeys;
73
- return n`
42
+ const t = this.keys.length >= this.maxKeys;
43
+ return r`
74
44
  <div class="header">
75
- <div class="header-left">
45
+ <div>
76
46
  <h3 class="title">API Keys</h3>
77
- <span class="count">${this.keys.length} of ${this.maxKeys} keys</span>
47
+ <span class="count">${this.keys.length} / ${this.maxKeys} keys</span>
78
48
  </div>
79
- <button class="create-btn" type="button"
80
- ?disabled=${e}
49
+ <button class="create-btn" ?disabled=${t}
81
50
  @click=${this._onCreate}
82
- aria-label=${e ? `Maximum ${this.maxKeys} keys reached` : "Create new API key"}>
83
- <svg class="plus-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" aria-hidden="true">
84
- <path d="M12 5v14M5 12h14"/>
85
- </svg>
86
- Create key
51
+ aria-label="Create new API key"
52
+ tabindex="0">
53
+ + Create Key
87
54
  </button>
88
55
  </div>
89
-
90
- ${this.keys.length === 0 ? n`
91
- <div class="empty" role="status">No API keys yet — click <strong>Create key</strong> to add one.</div>
92
- ` : n`
56
+ ${this.keys.length === 0 ? r`
57
+ <div class="empty" role="status">No API keys created yet.</div>
58
+ ` : r`
93
59
  <div class="key-list" role="list" aria-label="API keys">
94
- ${this.keys.map((t) => n`
95
- <div class="key-item ${t.status === "revoked" ? "revoked" : ""}" role="listitem">
60
+ ${this.keys.map((e) => r`
61
+ <div class="key-item" role="listitem">
96
62
  <div class="key-info">
97
- <div class="key-name">${t.name}</div>
98
- <div class="key-prefix-row">
99
- <span class="key-prefix">${t.prefix}••••••••</span>
100
- ${this._copiedId === t.id ? n`<span class="copied-toast" aria-hidden="true">Copied</span>` : h}
63
+ <div class="key-name">${e.name}</div>
64
+ <div class="key-prefix">${e.prefix}...xxxx
65
+ ${this._copiedId === e.id ? r`<span class="copied-toast">Copied!</span>` : l}
101
66
  </div>
102
67
  <div class="key-meta">
103
- <span>Created ${this._relativeTime(t.createdAt)}</span>
104
- ${t.lastUsed ? n`<spanLast used ${this._relativeTime(t.lastUsed)}</span>` : n`<span>· Never used</span>`}
68
+ <span>Created ${e.createdAt}</span>
69
+ ${e.lastUsed ? r`<span>Last used ${e.lastUsed}</span>` : l}
105
70
  </div>
106
71
  </div>
107
-
108
- <div class="key-side">
109
- <span class="status-badge status-${t.status}">
110
- <span class="dot" aria-hidden="true"></span>
111
- ${t.status}
112
- </span>
113
-
114
- <div class="actions">
115
- <button class="action-btn" type="button"
116
- @click=${() => this._onCopy(t)}
117
- aria-label="Copy ${t.name} key prefix"
118
- title="Copy prefix">
119
- <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
120
- <rect x="9" y="9" width="13" height="13" rx="2"/>
121
- <path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/>
122
- </svg>
123
- </button>
124
-
125
- ${t.status === "active" ? n`
126
- <button class="action-btn" type="button"
127
- @click=${() => this._onRevoke(t)}
128
- aria-label="Revoke ${t.name} key"
129
- title="Revoke">
130
- <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
131
- <circle cx="12" cy="12" r="9"/>
132
- <path d="M5.6 5.6l12.8 12.8"/>
133
- </svg>
134
- </button>
135
- ` : h}
136
-
137
- <button class="action-btn danger" type="button"
138
- @click=${() => this._onDelete(t)}
139
- aria-label="Delete ${t.name} key"
140
- title="Delete">
141
- <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
142
- <path d="M3 6h18M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2M6 6l1 14a2 2 0 002 2h6a2 2 0 002-2l1-14"/>
143
- <path d="M10 11v6M14 11v6"/>
144
- </svg>
145
- </button>
146
- </div>
72
+ <span class="status-badge status-${e.status}">${e.status}</span>
73
+ <div class="actions">
74
+ <button class="action-btn" @click=${() => this._onCopy(e)}
75
+ aria-label="Copy key prefix" tabindex="0"
76
+ title="Copy">&#x2398;</button>
77
+ ${e.status === "active" ? r`
78
+ <button class="action-btn" @click=${() => this._onRevoke(e)}
79
+ aria-label="Revoke key ${e.name}" tabindex="0"
80
+ title="Revoke">&#x2718;</button>
81
+ ` : l}
82
+ <button class="action-btn danger" @click=${() => this._onDelete(e)}
83
+ aria-label="Delete key ${e.name}" tabindex="0"
84
+ title="Delete">&#x1f5d1;</button>
147
85
  </div>
148
86
  </div>
149
87
  `)}
150
88
  </div>
151
89
  `}
152
-
153
- <span class="sr-only" role="status" aria-live="polite" aria-atomic="true">${this._announcement}</span>
154
90
  `;
155
91
  }
156
92
  };
157
- l.styles = [k, w, _, m`
93
+ o.styles = [f, m, h, u`
158
94
  :host {
159
- display: block;
160
- background: var(--cg-color-surface-cards-background);
95
+ background: var(--cg-color-surface-base-background);
161
96
  color: var(--cg-color-surface-base-text);
162
97
  border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);
163
98
  border-radius: var(--cg-border-radius-150);
164
- /* Longhand padding so a stale shorthand ghost (Lit HMR quirk) can't
165
- erase both axes at once. Total = spacing-24 each side. */
166
- padding-block: var(--cg-spacing-24);
167
- padding-inline: var(--cg-spacing-24);
168
- box-shadow: var(--cg-elevation-1);
99
+ padding: var(--cg-spacing-16);
169
100
  animation: fadeSlideIn var(--cg-transition-duration-default) var(--cg-transition-easing-ease-out) both;
170
101
  }
171
102
  :host([hidden]) { display: none; }
@@ -174,14 +105,11 @@ l.styles = [k, w, _, m`
174
105
  display: flex;
175
106
  justify-content: space-between;
176
107
  align-items: center;
177
- gap: var(--cg-spacing-16);
178
- padding-bottom: var(--cg-spacing-16);
179
- border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-divider);
180
- margin-bottom: var(--cg-spacing-16);
108
+ padding-bottom: var(--cg-spacing-12);
109
+ border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);
110
+ margin-bottom: var(--cg-spacing-12);
181
111
  }
182
112
 
183
- .header-left { min-width: 0; }
184
-
185
113
  .title {
186
114
  font-size: var(--cg-font-size-sm);
187
115
  font-weight: var(--cg-font-weight-semibold);
@@ -191,253 +119,164 @@ l.styles = [k, w, _, m`
191
119
  .count {
192
120
  font-size: var(--cg-font-size-xs);
193
121
  color: var(--cg-color-input-text-placeholder);
194
- font-variant-numeric: tabular-nums;
195
122
  }
196
123
 
197
- /* ── Create button ── */
198
124
  .create-btn {
199
125
  display: inline-flex;
200
126
  align-items: center;
201
- gap: var(--cg-spacing-6);
127
+ gap: var(--cg-spacing-4);
202
128
  background: var(--cg-color-action-primary-background-default);
203
- color: var(--cg-color-action-primary-text-default);
204
- border: var(--cg-border-width-50) solid var(--cg-color-action-primary-border-default);
129
+ color: var(--cg-color-surface-container-background);
130
+ border: none;
205
131
  border-radius: var(--cg-border-radius-100);
206
- padding: var(--cg-spacing-8) var(--cg-spacing-12);
132
+ padding: var(--cg-spacing-6) var(--cg-spacing-12);
207
133
  font-size: var(--cg-font-size-xs);
208
134
  font-weight: var(--cg-font-weight-semibold);
209
135
  cursor: pointer;
210
136
  font-family: inherit;
211
- flex-shrink: 0;
212
- transition:
213
- background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),
214
- transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
215
- }
216
- .create-btn:hover:not(:disabled) {
217
- background: var(--cg-color-action-primary-background-hover);
218
- }
219
- .create-btn:active:not(:disabled) {
220
- transform: scale(var(--cg-interaction-press-scale));
221
137
  }
138
+
222
139
  .create-btn:focus-visible {
223
- outline: none;
224
- box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);
140
+ outline: var(--cg-border-width-100) solid var(--cg-color-focus-ring);
141
+ outline-offset: var(--cg-outline-offset-default);
142
+ }
143
+
144
+ .create-btn:hover:not(:disabled) {
145
+ filter: brightness(1.1);
225
146
  }
226
147
  .create-btn:disabled {
227
- opacity: 0.5;
148
+ background: var(--cg-color-action-primary-background-disable);
149
+ color: var(--cg-color-action-primary-text-disable);
228
150
  cursor: not-allowed;
229
151
  }
230
- .create-btn .plus-icon {
231
- width: var(--cg-spacing-12);
232
- height: var(--cg-spacing-12);
233
- }
234
152
 
235
- /* ── Key list ── */
236
153
  .key-list {
237
154
  display: flex;
238
155
  flex-direction: column;
239
156
  gap: var(--cg-spacing-8);
240
157
  }
241
158
 
242
- /* Inner card border — uses --cg-color-surface-cards-border, which is
243
- theme-aware: gray-300 on light, gray-800 on dark. Subtle and tonally
244
- matches the surrounding surface so the card-on-card stays calm.
245
- Hover bumps to cards-border-strong for a clearer affordance. */
246
159
  .key-item {
247
160
  display: flex;
248
- align-items: stretch;
249
- gap: var(--cg-spacing-16);
250
- padding: var(--cg-spacing-16);
251
- background: var(--cg-color-surface-cards-emphasis);
161
+ align-items: center;
162
+ gap: var(--cg-spacing-12);
163
+ padding: var(--cg-spacing-12);
164
+ background: var(--cg-color-surface-cards-background);
252
165
  border-radius: var(--cg-border-radius-100);
253
166
  border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);
254
- transition: border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
255
- }
256
- .key-item:hover {
257
- border-color: var(--cg-color-surface-cards-border-strong);
258
- }
259
- .key-item.revoked {
260
- opacity: 0.7;
261
167
  }
262
168
 
263
169
  .key-info {
264
170
  flex: 1;
265
171
  min-width: 0;
266
- display: flex;
267
- flex-direction: column;
268
- gap: var(--cg-spacing-2);
269
- justify-content: center;
270
- }
271
-
272
- /* Right-side column: status pill on top, actions on the bottom. */
273
- .key-side {
274
- display: flex;
275
- flex-direction: column;
276
- align-items: flex-end;
277
- justify-content: space-between;
278
- gap: var(--cg-spacing-12);
279
- flex-shrink: 0;
280
172
  }
281
173
 
282
174
  .key-name {
283
175
  font-size: var(--cg-font-size-sm);
284
176
  font-weight: var(--cg-font-weight-medium);
285
- }
286
-
287
- .key-prefix-row {
288
- display: flex;
289
- align-items: center;
290
- gap: var(--cg-spacing-6);
291
- min-width: 0;
177
+ margin-bottom: var(--cg-spacing-2);
292
178
  }
293
179
 
294
180
  .key-prefix {
295
181
  font-family: var(--cg-font-family-mono);
296
182
  font-size: var(--cg-font-size-xs);
297
183
  color: var(--cg-color-input-text-placeholder);
298
- letter-spacing: 0.02em;
299
- }
300
-
301
- .copied-toast {
302
- font-size: var(--cg-font-size-xs);
303
- color: var(--cg-color-status-success-text-default);
304
- font-weight: var(--cg-font-weight-medium);
305
- animation: cg-key-pop var(--cg-transition-duration-default) var(--cg-transition-easing-spring) both;
306
- }
307
- @keyframes cg-key-pop {
308
- from { opacity: 0; transform: translateY(2px); }
309
- to { opacity: 1; transform: translateY(0); }
310
184
  }
311
185
 
312
186
  .key-meta {
313
187
  font-size: var(--cg-font-size-xs);
314
188
  color: var(--cg-color-input-text-placeholder);
189
+ margin-top: var(--cg-spacing-4);
315
190
  display: flex;
316
- flex-wrap: wrap;
317
- gap: var(--cg-spacing-2) var(--cg-spacing-12);
318
- font-variant-numeric: tabular-nums;
191
+ gap: var(--cg-spacing-8);
319
192
  }
320
193
 
321
- /* ── Status badge with dot ── */
322
194
  .status-badge {
323
195
  display: inline-flex;
324
196
  align-items: center;
325
- gap: var(--cg-spacing-6);
326
197
  padding: var(--cg-spacing-2) var(--cg-spacing-8);
327
198
  border-radius: var(--cg-border-radius-full);
328
- font-size: 10px;
329
- font-weight: var(--cg-font-weight-bold);
199
+ font-size: var(--cg-font-size-xs);
200
+ font-weight: var(--cg-font-weight-semibold);
330
201
  text-transform: uppercase;
331
- letter-spacing: var(--cg-letter-spacing-wide);
202
+ letter-spacing: 0.05em;
332
203
  flex-shrink: 0;
333
- border: var(--cg-border-width-50) solid currentColor;
334
- background: transparent;
335
204
  }
336
- .status-badge .dot {
337
- width: var(--cg-spacing-6);
338
- height: var(--cg-spacing-6);
339
- border-radius: var(--cg-border-radius-full);
340
- background: currentColor;
341
- flex-shrink: 0;
342
- }
343
- .status-active { color: var(--cg-color-status-success-text-default); }
344
- .status-revoked { color: var(--cg-color-status-error-text-default); }
345
205
 
346
- /* Pulse on the active dot — a subtle "alive" signal. */
347
- .status-active .dot {
348
- animation: cg-key-pulse 2s var(--cg-transition-easing-default) infinite;
206
+ .status-active {
207
+ background: var(--cg-color-status-success-background-default);
208
+ color: var(--cg-color-status-success-text-default);
349
209
  }
350
- @keyframes cg-key-pulse {
351
- 0%, 100% { opacity: 1; }
352
- 50% { opacity: 0.5; }
210
+
211
+ .status-revoked {
212
+ background: var(--cg-color-status-error-background-default);
213
+ color: var(--cg-color-status-error-text-default);
353
214
  }
354
215
 
355
- /* ── Action buttons ── */
356
216
  .actions {
357
217
  display: flex;
358
218
  gap: var(--cg-spacing-4);
359
219
  flex-shrink: 0;
360
220
  }
221
+
361
222
  .action-btn {
362
- position: relative;
363
223
  display: inline-flex;
364
224
  align-items: center;
365
225
  justify-content: center;
366
- width: var(--cg-spacing-32);
367
- height: var(--cg-spacing-32);
226
+ width: var(--cg-spacing-24);
227
+ height: var(--cg-spacing-24);
368
228
  background: transparent;
369
229
  border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);
370
- border-radius: var(--cg-border-radius-100);
230
+ border-radius: var(--cg-border-radius-50);
371
231
  color: var(--cg-color-input-text-placeholder);
372
232
  cursor: pointer;
233
+ font-size: var(--cg-font-size-xs);
373
234
  font-family: inherit;
374
235
  padding: 0;
375
- transition:
376
- background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),
377
- border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),
378
- color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),
379
- transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
380
- }
381
- /* Extends pointer hit area to ~44px without changing visual size. */
382
- .action-btn::before {
383
- content: '';
384
- position: absolute;
385
- inset: calc(-1 * var(--cg-spacing-6));
386
236
  }
237
+
387
238
  .action-btn:hover {
388
- background: var(--cg-color-action-tertiary-background-hover);
239
+ background: var(--cg-color-surface-cards-hover-background);
389
240
  color: var(--cg-color-surface-base-text);
390
- border-color: var(--cg-color-surface-cards-border-strong);
391
- }
392
- .action-btn:active {
393
- transform: scale(var(--cg-interaction-press-scale));
394
241
  }
242
+
395
243
  .action-btn:focus-visible {
396
- outline: none;
397
- box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);
244
+ outline: var(--cg-border-width-100) solid var(--cg-color-focus-ring);
245
+ outline-offset: var(--cg-outline-offset-default);
398
246
  }
247
+
399
248
  .action-btn.danger:hover {
400
249
  background: var(--cg-color-status-error-background-default);
401
250
  color: var(--cg-color-status-error-text-default);
402
- border-color: var(--cg-color-status-error-border-default);
251
+ border-color: var(--cg-color-status-error-text-default);
403
252
  }
404
- .action-btn .icon {
405
- width: var(--cg-icon-size-100);
406
- height: var(--cg-icon-size-100);
407
- pointer-events: none;
253
+
254
+ .copied-toast {
255
+ font-size: var(--cg-font-size-xs);
256
+ color: var(--cg-color-surface-base-text);
257
+ margin-left: var(--cg-spacing-4);
408
258
  }
409
259
 
410
- /* ── Empty ── */
411
260
  .empty {
412
261
  text-align: center;
413
- padding: var(--cg-spacing-32);
262
+ padding: var(--cg-spacing-24);
414
263
  color: var(--cg-color-input-text-placeholder);
415
264
  font-size: var(--cg-font-size-sm);
416
265
  }
417
-
418
- /* ── Visually-hidden live region ── */
419
- .sr-only {
420
- position: absolute; width: 1px; height: 1px;
421
- padding: 0; margin: -1px; overflow: hidden;
422
- clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
423
- }
424
266
  `];
425
- g([
426
- f({ type: Array })
427
- ], l.prototype, "keys", 2);
428
- g([
429
- f({ type: Number, attribute: "max-keys" })
430
- ], l.prototype, "maxKeys", 2);
431
- g([
432
- b()
433
- ], l.prototype, "_copiedId", 2);
434
- g([
435
- b()
436
- ], l.prototype, "_announcement", 2);
437
- l = g([
438
- x("ai-api-key-manager")
439
- ], l);
267
+ i([
268
+ g({ type: Array })
269
+ ], o.prototype, "keys", 2);
270
+ i([
271
+ g({ type: Number })
272
+ ], o.prototype, "maxKeys", 2);
273
+ i([
274
+ p()
275
+ ], o.prototype, "_copiedId", 2);
276
+ o = i([
277
+ b("ai-api-key-manager")
278
+ ], o);
440
279
  export {
441
- l as AiApiKeyManager
280
+ o as AiApiKeyManager
442
281
  };
443
282
  //# sourceMappingURL=ai-api-key-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-api-key-manager.js","sources":["../../../src/components/ai-api-key-manager/ai-api-key-manager.ts"],"sourcesContent":["/**\n * @element ai-api-key-manager\n * API key management panel — masked prefix display, copy, revoke, delete,\n * and create controls with ≥44px tap targets and screen-reader announcements.\n *\n * @example\n * ```html\n * <ai-api-key-manager\n * .keys=${[{\n * id: '1',\n * name: 'Production',\n * prefix: 'sk-prod-7f3a',\n * createdAt: '2026-04-12',\n * lastUsed: '2026-05-01',\n * status: 'active',\n * }]}\n * maxKeys=\"5\"\n * ></ai-api-key-manager>\n * ```\n *\n * @fires {CustomEvent} ai-key-create - Create button clicked\n * @fires {CustomEvent<{id: string, name: string}>} ai-key-revoke - Revoke clicked\n * @fires {CustomEvent<{id: string, name: string}>} ai-key-delete - Delete clicked\n * @fires {CustomEvent<{id: string, prefix: string}>} ai-key-copy - Prefix copied to clipboard\n *\n * @cssprop [--cg-color-surface-cards-background] - Card background\n * @cssprop [--cg-color-surface-cards-emphasis] - Each row's tonal lift\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion, fadeSlideInKeyframes } from '../../styles/index.js';\n\nexport interface ApiKeyEntry {\n id: string;\n name: string;\n prefix: string;\n createdAt: string;\n lastUsed?: string;\n status: 'active' | 'revoked';\n}\n\n@customElement('ai-api-key-manager')\nexport class AiApiKeyManager extends LitElement {\n static override styles = [hostBlock, reducedMotion, fadeSlideInKeyframes, css`\n :host {\n display: block;\n background: var(--cg-color-surface-cards-background);\n color: var(--cg-color-surface-base-text);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-150);\n /* Longhand padding so a stale shorthand ghost (Lit HMR quirk) can't\n erase both axes at once. Total = spacing-24 each side. */\n padding-block: var(--cg-spacing-24);\n padding-inline: var(--cg-spacing-24);\n box-shadow: var(--cg-elevation-1);\n animation: fadeSlideIn var(--cg-transition-duration-default) var(--cg-transition-easing-ease-out) both;\n }\n :host([hidden]) { display: none; }\n\n .header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--cg-spacing-16);\n padding-bottom: var(--cg-spacing-16);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-divider);\n margin-bottom: var(--cg-spacing-16);\n }\n\n .header-left { min-width: 0; }\n\n .title {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-semibold);\n margin: 0;\n }\n\n .count {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n font-variant-numeric: tabular-nums;\n }\n\n /* ── Create button ── */\n .create-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--cg-spacing-6);\n background: var(--cg-color-action-primary-background-default);\n color: var(--cg-color-action-primary-text-default);\n border: var(--cg-border-width-50) solid var(--cg-color-action-primary-border-default);\n border-radius: var(--cg-border-radius-100);\n padding: var(--cg-spacing-8) var(--cg-spacing-12);\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-semibold);\n cursor: pointer;\n font-family: inherit;\n flex-shrink: 0;\n transition:\n background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .create-btn:hover:not(:disabled) {\n background: var(--cg-color-action-primary-background-hover);\n }\n .create-btn:active:not(:disabled) {\n transform: scale(var(--cg-interaction-press-scale));\n }\n .create-btn:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n }\n .create-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .create-btn .plus-icon {\n width: var(--cg-spacing-12);\n height: var(--cg-spacing-12);\n }\n\n /* ── Key list ── */\n .key-list {\n display: flex;\n flex-direction: column;\n gap: var(--cg-spacing-8);\n }\n\n /* Inner card border — uses --cg-color-surface-cards-border, which is\n theme-aware: gray-300 on light, gray-800 on dark. Subtle and tonally\n matches the surrounding surface so the card-on-card stays calm.\n Hover bumps to cards-border-strong for a clearer affordance. */\n .key-item {\n display: flex;\n align-items: stretch;\n gap: var(--cg-spacing-16);\n padding: var(--cg-spacing-16);\n background: var(--cg-color-surface-cards-emphasis);\n border-radius: var(--cg-border-radius-100);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n transition: border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .key-item:hover {\n border-color: var(--cg-color-surface-cards-border-strong);\n }\n .key-item.revoked {\n opacity: 0.7;\n }\n\n .key-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: var(--cg-spacing-2);\n justify-content: center;\n }\n\n /* Right-side column: status pill on top, actions on the bottom. */\n .key-side {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n justify-content: space-between;\n gap: var(--cg-spacing-12);\n flex-shrink: 0;\n }\n\n .key-name {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n }\n\n .key-prefix-row {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-6);\n min-width: 0;\n }\n\n .key-prefix {\n font-family: var(--cg-font-family-mono);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n letter-spacing: 0.02em;\n }\n\n .copied-toast {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-status-success-text-default);\n font-weight: var(--cg-font-weight-medium);\n animation: cg-key-pop var(--cg-transition-duration-default) var(--cg-transition-easing-spring) both;\n }\n @keyframes cg-key-pop {\n from { opacity: 0; transform: translateY(2px); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n .key-meta {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n display: flex;\n flex-wrap: wrap;\n gap: var(--cg-spacing-2) var(--cg-spacing-12);\n font-variant-numeric: tabular-nums;\n }\n\n /* ── Status badge with dot ── */\n .status-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--cg-spacing-6);\n padding: var(--cg-spacing-2) var(--cg-spacing-8);\n border-radius: var(--cg-border-radius-full);\n font-size: 10px;\n font-weight: var(--cg-font-weight-bold);\n text-transform: uppercase;\n letter-spacing: var(--cg-letter-spacing-wide);\n flex-shrink: 0;\n border: var(--cg-border-width-50) solid currentColor;\n background: transparent;\n }\n .status-badge .dot {\n width: var(--cg-spacing-6);\n height: var(--cg-spacing-6);\n border-radius: var(--cg-border-radius-full);\n background: currentColor;\n flex-shrink: 0;\n }\n .status-active { color: var(--cg-color-status-success-text-default); }\n .status-revoked { color: var(--cg-color-status-error-text-default); }\n\n /* Pulse on the active dot — a subtle \"alive\" signal. */\n .status-active .dot {\n animation: cg-key-pulse 2s var(--cg-transition-easing-default) infinite;\n }\n @keyframes cg-key-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n /* ── Action buttons ── */\n .actions {\n display: flex;\n gap: var(--cg-spacing-4);\n flex-shrink: 0;\n }\n .action-btn {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n background: transparent;\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-100);\n color: var(--cg-color-input-text-placeholder);\n cursor: pointer;\n font-family: inherit;\n padding: 0;\n transition:\n background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n /* Extends pointer hit area to ~44px without changing visual size. */\n .action-btn::before {\n content: '';\n position: absolute;\n inset: calc(-1 * var(--cg-spacing-6));\n }\n .action-btn:hover {\n background: var(--cg-color-action-tertiary-background-hover);\n color: var(--cg-color-surface-base-text);\n border-color: var(--cg-color-surface-cards-border-strong);\n }\n .action-btn:active {\n transform: scale(var(--cg-interaction-press-scale));\n }\n .action-btn:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n }\n .action-btn.danger:hover {\n background: var(--cg-color-status-error-background-default);\n color: var(--cg-color-status-error-text-default);\n border-color: var(--cg-color-status-error-border-default);\n }\n .action-btn .icon {\n width: var(--cg-icon-size-100);\n height: var(--cg-icon-size-100);\n pointer-events: none;\n }\n\n /* ── Empty ── */\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 /* ── Visually-hidden live region ── */\n .sr-only {\n position: absolute; width: 1px; height: 1px;\n padding: 0; margin: -1px; overflow: hidden;\n clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;\n }\n `];\n\n @property({ type: Array }) keys: ApiKeyEntry[] = [];\n @property({ type: Number, attribute: 'max-keys' }) maxKeys = 10;\n\n @state() private _copiedId: string | null = null;\n @state() private _announcement = '';\n\n private _copyTimer: number | undefined;\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n if (this._copyTimer) clearTimeout(this._copyTimer);\n }\n\n private _onCreate(): void {\n this.dispatchEvent(new CustomEvent('ai-key-create', {\n bubbles: true, composed: true,\n }));\n }\n\n private _onRevoke(key: ApiKeyEntry): void {\n this.dispatchEvent(new CustomEvent('ai-key-revoke', {\n bubbles: true, composed: true,\n detail: { id: key.id, name: key.name },\n }));\n }\n\n private _onDelete(key: ApiKeyEntry): void {\n this.dispatchEvent(new CustomEvent('ai-key-delete', {\n bubbles: true, composed: true,\n detail: { id: key.id, name: key.name },\n }));\n }\n\n private async _onCopy(key: ApiKeyEntry): Promise<void> {\n try {\n await navigator.clipboard.writeText(key.prefix);\n this._copiedId = key.id;\n this._announce(`${key.name} key prefix copied to clipboard`);\n if (this._copyTimer) clearTimeout(this._copyTimer);\n this._copyTimer = window.setTimeout(() => {\n this._copiedId = null;\n this._copyTimer = undefined;\n }, 2000);\n this.dispatchEvent(new CustomEvent('ai-key-copy', {\n bubbles: true, composed: true,\n detail: { id: key.id, prefix: key.prefix },\n }));\n } catch {\n this._announce('Copy failed — clipboard unavailable');\n }\n }\n\n private _announce(message: string): void {\n this._announcement = '';\n requestAnimationFrame(() => { this._announcement = message; });\n }\n\n /**\n * Format an ISO date as a relative-time string (\"3 days ago\", \"in 2 weeks\").\n * Falls back to the raw string for non-ISO inputs.\n */\n private _relativeTime(input: string): string {\n if (!input) return '';\n const date = new Date(input);\n if (isNaN(date.getTime())) return input;\n const diffMs = date.getTime() - Date.now();\n const abs = Math.abs(diffMs);\n const min = 60_000, hr = 60 * min, day = 24 * hr, week = 7 * day, month = 30 * day, year = 365 * day;\n let value: number, unit: Intl.RelativeTimeFormatUnit;\n if (abs < hr) { value = Math.round(diffMs / min); unit = 'minute'; }\n else if (abs < day) { value = Math.round(diffMs / hr); unit = 'hour'; }\n else if (abs < week) { value = Math.round(diffMs / day); unit = 'day'; }\n else if (abs < month) { value = Math.round(diffMs / week); unit = 'week'; }\n else if (abs < year) { value = Math.round(diffMs / month); unit = 'month'; }\n else { value = Math.round(diffMs / year); unit = 'year'; }\n try {\n return new Intl.RelativeTimeFormat('en', { numeric: 'auto' }).format(value, unit);\n } catch {\n return input;\n }\n }\n\n override render() {\n const atLimit = this.keys.length >= this.maxKeys;\n\n return html`\n <div class=\"header\">\n <div class=\"header-left\">\n <h3 class=\"title\">API Keys</h3>\n <span class=\"count\">${this.keys.length} of ${this.maxKeys} keys</span>\n </div>\n <button class=\"create-btn\" type=\"button\"\n ?disabled=${atLimit}\n @click=${this._onCreate}\n aria-label=${atLimit ? `Maximum ${this.maxKeys} keys reached` : 'Create new API key'}>\n <svg class=\"plus-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" aria-hidden=\"true\">\n <path d=\"M12 5v14M5 12h14\"/>\n </svg>\n Create key\n </button>\n </div>\n\n ${this.keys.length === 0 ? html`\n <div class=\"empty\" role=\"status\">No API keys yet — click <strong>Create key</strong> to add one.</div>\n ` : html`\n <div class=\"key-list\" role=\"list\" aria-label=\"API keys\">\n ${this.keys.map(k => html`\n <div class=\"key-item ${k.status === 'revoked' ? 'revoked' : ''}\" role=\"listitem\">\n <div class=\"key-info\">\n <div class=\"key-name\">${k.name}</div>\n <div class=\"key-prefix-row\">\n <span class=\"key-prefix\">${k.prefix}••••••••</span>\n ${this._copiedId === k.id ? html`<span class=\"copied-toast\" aria-hidden=\"true\">Copied</span>` : nothing}\n </div>\n <div class=\"key-meta\">\n <span>Created ${this._relativeTime(k.createdAt)}</span>\n ${k.lastUsed ? html`<span>· Last used ${this._relativeTime(k.lastUsed)}</span>` : html`<span>· Never used</span>`}\n </div>\n </div>\n\n <div class=\"key-side\">\n <span class=\"status-badge status-${k.status}\">\n <span class=\"dot\" aria-hidden=\"true\"></span>\n ${k.status}\n </span>\n\n <div class=\"actions\">\n <button class=\"action-btn\" type=\"button\"\n @click=${() => this._onCopy(k)}\n aria-label=\"Copy ${k.name} key prefix\"\n title=\"Copy prefix\">\n <svg class=\"icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/>\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"/>\n </svg>\n </button>\n\n ${k.status === 'active' ? html`\n <button class=\"action-btn\" type=\"button\"\n @click=${() => this._onRevoke(k)}\n aria-label=\"Revoke ${k.name} key\"\n title=\"Revoke\">\n <svg class=\"icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"9\"/>\n <path d=\"M5.6 5.6l12.8 12.8\"/>\n </svg>\n </button>\n ` : nothing}\n\n <button class=\"action-btn danger\" type=\"button\"\n @click=${() => this._onDelete(k)}\n aria-label=\"Delete ${k.name} key\"\n title=\"Delete\">\n <svg class=\"icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M3 6h18M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2M6 6l1 14a2 2 0 002 2h6a2 2 0 002-2l1-14\"/>\n <path d=\"M10 11v6M14 11v6\"/>\n </svg>\n </button>\n </div>\n </div>\n </div>\n `)}\n </div>\n `}\n\n <span class=\"sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">${this._announcement}</span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ai-api-key-manager': AiApiKeyManager;\n }\n}\n"],"names":["AiApiKeyManager","LitElement","key","message","input","date","diffMs","abs","min","hr","day","week","month","year","value","unit","atLimit","html","k","nothing","hostBlock","reducedMotion","fadeSlideInKeyframes","css","__decorateClass","property","state","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"ai-api-key-manager.js","sources":["../../../src/components/ai-api-key-manager/ai-api-key-manager.ts"],"sourcesContent":["/**\n * @element ai-api-key-manager\n * API key management panel with masked display, copy, revoke, delete, and create controls.\n *\n * @example\n * ```html\n * <ai-api-key-manager\n * .keys=${[{id:'1', name:'Production', prefix:'sk-abc', createdAt:'2024-01-15', status:'active'}]}\n * maxKeys=\"5\"\n * ></ai-api-key-manager>\n * ```\n *\n * @fires {CustomEvent} ai-key-create - Create button clicked\n * @fires {CustomEvent<{id: string, name: string}>} ai-key-revoke - Revoke button clicked\n * @fires {CustomEvent<{id: string, name: string}>} ai-key-delete - Delete button clicked\n *\n * @cssprop [--cg-color-accent=#dfff61] - Create button and focus ring color\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion, fadeSlideInKeyframes } from '../../styles/index.js';\n\nexport interface ApiKeyEntry {\n id: string;\n name: string;\n prefix: string;\n createdAt: string;\n lastUsed?: string;\n status: 'active' | 'revoked';\n}\n\n@customElement('ai-api-key-manager')\nexport class AiApiKeyManager extends LitElement {\n static override styles = [hostBlock, reducedMotion, fadeSlideInKeyframes, css`\n :host {\n background: var(--cg-color-surface-base-background);\n color: var(--cg-color-surface-base-text);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-150);\n padding: var(--cg-spacing-16);\n animation: fadeSlideIn var(--cg-transition-duration-default) var(--cg-transition-easing-ease-out) both;\n }\n :host([hidden]) { display: none; }\n\n .header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: var(--cg-spacing-12);\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n margin-bottom: var(--cg-spacing-12);\n }\n\n .title {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-semibold);\n margin: 0;\n }\n\n .count {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n }\n\n .create-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--cg-spacing-4);\n background: var(--cg-color-action-primary-background-default);\n color: var(--cg-color-surface-container-background);\n border: none;\n border-radius: var(--cg-border-radius-100);\n padding: var(--cg-spacing-6) var(--cg-spacing-12);\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-semibold);\n cursor: pointer;\n font-family: inherit;\n }\n\n .create-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 .create-btn:hover:not(:disabled) {\n filter: brightness(1.1);\n }\n .create-btn:disabled {\n background: var(--cg-color-action-primary-background-disable);\n color: var(--cg-color-action-primary-text-disable);\n cursor: not-allowed;\n }\n\n .key-list {\n display: flex;\n flex-direction: column;\n gap: var(--cg-spacing-8);\n }\n\n .key-item {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-12);\n padding: var(--cg-spacing-12);\n background: var(--cg-color-surface-cards-background);\n border-radius: var(--cg-border-radius-100);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n }\n\n .key-info {\n flex: 1;\n min-width: 0;\n }\n\n .key-name {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n margin-bottom: var(--cg-spacing-2);\n }\n\n .key-prefix {\n font-family: var(--cg-font-family-mono);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n }\n\n .key-meta {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n margin-top: var(--cg-spacing-4);\n display: flex;\n gap: var(--cg-spacing-8);\n }\n\n .status-badge {\n display: inline-flex;\n align-items: center;\n padding: var(--cg-spacing-2) var(--cg-spacing-8);\n border-radius: var(--cg-border-radius-full);\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-semibold);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n flex-shrink: 0;\n }\n\n .status-active {\n background: var(--cg-color-status-success-background-default);\n color: var(--cg-color-status-success-text-default);\n }\n\n .status-revoked {\n background: var(--cg-color-status-error-background-default);\n color: var(--cg-color-status-error-text-default);\n }\n\n .actions {\n display: flex;\n gap: var(--cg-spacing-4);\n flex-shrink: 0;\n }\n\n .action-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--cg-spacing-24);\n height: var(--cg-spacing-24);\n background: transparent;\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-border-radius-50);\n color: var(--cg-color-input-text-placeholder);\n cursor: pointer;\n font-size: var(--cg-font-size-xs);\n font-family: inherit;\n padding: 0;\n }\n\n .action-btn:hover {\n background: var(--cg-color-surface-cards-hover-background);\n color: var(--cg-color-surface-base-text);\n }\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 .action-btn.danger:hover {\n background: var(--cg-color-status-error-background-default);\n color: var(--cg-color-status-error-text-default);\n border-color: var(--cg-color-status-error-text-default);\n }\n\n .copied-toast {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-base-text);\n margin-left: var(--cg-spacing-4);\n }\n\n .empty {\n text-align: center;\n padding: var(--cg-spacing-24);\n color: var(--cg-color-input-text-placeholder);\n font-size: var(--cg-font-size-sm);\n }\n `];\n @property({ type: Array }) keys: ApiKeyEntry[] = [];\n @property({ type: Number }) maxKeys = 10;\n\n @state() private _copiedId: string | null = null;\n\n private _onCreate(): void {\n this.dispatchEvent(new CustomEvent('ai-key-create', {\n bubbles: true, composed: true,\n }));\n }\n\n private _onRevoke(key: ApiKeyEntry): void {\n this.dispatchEvent(new CustomEvent('ai-key-revoke', {\n bubbles: true, composed: true,\n detail: { id: key.id, name: key.name },\n }));\n }\n\n private _onDelete(key: ApiKeyEntry): void {\n this.dispatchEvent(new CustomEvent('ai-key-delete', {\n bubbles: true, composed: true,\n detail: { id: key.id, name: key.name },\n }));\n }\n\n private async _onCopy(key: ApiKeyEntry): Promise<void> {\n try {\n await navigator.clipboard.writeText(key.prefix);\n this._copiedId = key.id;\n setTimeout(() => { this._copiedId = null; }, 2000);\n } catch { /* clipboard not available */ }\n }\n\n override render() {\n const atLimit = this.keys.length >= this.maxKeys;\n\n return html`\n <div class=\"header\">\n <div>\n <h3 class=\"title\">API Keys</h3>\n <span class=\"count\">${this.keys.length} / ${this.maxKeys} keys</span>\n </div>\n <button class=\"create-btn\" ?disabled=${atLimit}\n @click=${this._onCreate}\n aria-label=\"Create new API key\"\n tabindex=\"0\">\n + Create Key\n </button>\n </div>\n ${this.keys.length === 0 ? html`\n <div class=\"empty\" role=\"status\">No API keys created yet.</div>\n ` : html`\n <div class=\"key-list\" role=\"list\" aria-label=\"API keys\">\n ${this.keys.map(k => html`\n <div class=\"key-item\" role=\"listitem\">\n <div class=\"key-info\">\n <div class=\"key-name\">${k.name}</div>\n <div class=\"key-prefix\">${k.prefix}...xxxx\n ${this._copiedId === k.id ? html`<span class=\"copied-toast\">Copied!</span>` : nothing}\n </div>\n <div class=\"key-meta\">\n <span>Created ${k.createdAt}</span>\n ${k.lastUsed ? html`<span>Last used ${k.lastUsed}</span>` : nothing}\n </div>\n </div>\n <span class=\"status-badge status-${k.status}\">${k.status}</span>\n <div class=\"actions\">\n <button class=\"action-btn\" @click=${() => this._onCopy(k)}\n aria-label=\"Copy key prefix\" tabindex=\"0\"\n title=\"Copy\">&#x2398;</button>\n ${k.status === 'active' ? html`\n <button class=\"action-btn\" @click=${() => this._onRevoke(k)}\n aria-label=\"Revoke key ${k.name}\" tabindex=\"0\"\n title=\"Revoke\">&#x2718;</button>\n ` : nothing}\n <button class=\"action-btn danger\" @click=${() => this._onDelete(k)}\n aria-label=\"Delete key ${k.name}\" tabindex=\"0\"\n title=\"Delete\">&#x1f5d1;</button>\n </div>\n </div>\n `)}\n </div>\n `}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ai-api-key-manager': AiApiKeyManager;\n }\n}\n"],"names":["AiApiKeyManager","LitElement","key","atLimit","html","k","nothing","hostBlock","reducedMotion","fadeSlideInKeyframes","css","__decorateClass","property","state","customElement"],"mappings":"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"}