@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.
- package/dist/chunks/focus-trap-vlQwKK-3.js +82 -0
- package/dist/chunks/focus-trap-vlQwKK-3.js.map +1 -0
- package/dist/chunks/{premium.css-9I4kHrsl.js → premium.css-DHekUEUt.js} +25 -25
- package/dist/chunks/{premium.css-9I4kHrsl.js.map → premium.css-DHekUEUt.js.map} +1 -1
- package/dist/cognivo.min.js +3375 -5270
- package/dist/cognivo.min.js.map +1 -1
- package/dist/components/ai-ab-test/ai-ab-test.js +1 -1
- package/dist/components/ai-accessibility-report/ai-accessibility-report.d.ts.map +1 -1
- package/dist/components/ai-accessibility-report/ai-accessibility-report.js +14 -13
- package/dist/components/ai-accessibility-report/ai-accessibility-report.js.map +1 -1
- package/dist/components/ai-action-preview/ai-action-preview.d.ts.map +1 -1
- package/dist/components/ai-action-preview/ai-action-preview.js +15 -14
- package/dist/components/ai-action-preview/ai-action-preview.js.map +1 -1
- package/dist/components/ai-agent-card/ai-agent-card.js +1 -1
- package/dist/components/ai-agent-steps/ai-agent-steps.d.ts +8 -21
- package/dist/components/ai-agent-steps/ai-agent-steps.d.ts.map +1 -1
- package/dist/components/ai-agent-steps/ai-agent-steps.js +85 -139
- package/dist/components/ai-agent-steps/ai-agent-steps.js.map +1 -1
- package/dist/components/ai-alert-card/ai-alert-card.js +5 -5
- package/dist/components/ai-alert-card/ai-alert-card.js.map +1 -1
- package/dist/components/ai-analytics-chart/ai-analytics-chart.d.ts +0 -13
- package/dist/components/ai-analytics-chart/ai-analytics-chart.d.ts.map +1 -1
- package/dist/components/ai-analytics-chart/ai-analytics-chart.js +75 -125
- package/dist/components/ai-analytics-chart/ai-analytics-chart.js.map +1 -1
- package/dist/components/ai-annotation/ai-annotation.js +2 -2
- package/dist/components/ai-annotation/ai-annotation.js.map +1 -1
- package/dist/components/ai-api-key-manager/ai-api-key-manager.d.ts +0 -9
- package/dist/components/ai-api-key-manager/ai-api-key-manager.d.ts.map +1 -1
- package/dist/components/ai-api-key-manager/ai-api-key-manager.js +115 -276
- package/dist/components/ai-api-key-manager/ai-api-key-manager.js.map +1 -1
- package/dist/components/ai-app-sidebar/ai-app-sidebar.js +13 -13
- package/dist/components/ai-app-sidebar/ai-app-sidebar.js.map +1 -1
- package/dist/components/ai-assistant-widget/ai-assistant-widget.d.ts.map +1 -1
- package/dist/components/ai-assistant-widget/ai-assistant-widget.js +5 -2
- package/dist/components/ai-assistant-widget/ai-assistant-widget.js.map +1 -1
- package/dist/components/ai-audio-player/ai-audio-player.d.ts.map +1 -1
- package/dist/components/ai-audio-player/ai-audio-player.js +23 -19
- package/dist/components/ai-audio-player/ai-audio-player.js.map +1 -1
- package/dist/components/ai-avatar/ai-avatar.js +1 -1
- package/dist/components/ai-badge/ai-badge.js +1 -1
- package/dist/components/ai-batch-progress/ai-batch-progress.js +6 -6
- package/dist/components/ai-batch-progress/ai-batch-progress.js.map +1 -1
- package/dist/components/ai-cache-indicator/ai-cache-indicator.d.ts +0 -13
- package/dist/components/ai-cache-indicator/ai-cache-indicator.d.ts.map +1 -1
- package/dist/components/ai-cache-indicator/ai-cache-indicator.js +90 -185
- package/dist/components/ai-cache-indicator/ai-cache-indicator.js.map +1 -1
- package/dist/components/ai-capture-flow/ai-capture-flow.js +21 -21
- package/dist/components/ai-capture-flow/ai-capture-flow.js.map +1 -1
- package/dist/components/ai-changelog/ai-changelog.js +26 -26
- package/dist/components/ai-changelog/ai-changelog.js.map +1 -1
- package/dist/components/ai-chart-summary/ai-chart-summary.d.ts +0 -6
- package/dist/components/ai-chart-summary/ai-chart-summary.d.ts.map +1 -1
- package/dist/components/ai-chart-summary/ai-chart-summary.js +100 -103
- package/dist/components/ai-chart-summary/ai-chart-summary.js.map +1 -1
- package/dist/components/ai-chat/ai-chat.d.ts.map +1 -1
- package/dist/components/ai-chat/ai-chat.js +9 -3
- package/dist/components/ai-chat/ai-chat.js.map +1 -1
- package/dist/components/ai-citation/ai-citation.d.ts +0 -6
- package/dist/components/ai-citation/ai-citation.d.ts.map +1 -1
- package/dist/components/ai-citation/ai-citation.js +64 -90
- package/dist/components/ai-citation/ai-citation.js.map +1 -1
- package/dist/components/ai-collaborative-editor/ai-collaborative-editor.d.ts +1 -27
- package/dist/components/ai-collaborative-editor/ai-collaborative-editor.d.ts.map +1 -1
- package/dist/components/ai-collaborative-editor/ai-collaborative-editor.js +114 -260
- package/dist/components/ai-collaborative-editor/ai-collaborative-editor.js.map +1 -1
- package/dist/components/ai-command-palette/ai-command-palette.js +1 -1
- package/dist/components/ai-confidence-badge/ai-confidence-badge.d.ts +11 -9
- package/dist/components/ai-confidence-badge/ai-confidence-badge.d.ts.map +1 -1
- package/dist/components/ai-confidence-badge/ai-confidence-badge.js +183 -101
- package/dist/components/ai-confidence-badge/ai-confidence-badge.js.map +1 -1
- package/dist/components/ai-confidence-slider/ai-confidence-slider.js +27 -27
- package/dist/components/ai-confidence-slider/ai-confidence-slider.js.map +1 -1
- package/dist/components/ai-consent-manager/ai-consent-manager.js +2 -2
- package/dist/components/ai-consent-manager/ai-consent-manager.js.map +1 -1
- package/dist/components/ai-context-window/ai-context-window.js +19 -19
- package/dist/components/ai-context-window/ai-context-window.js.map +1 -1
- package/dist/components/ai-copy-button/ai-copy-button.js +4 -4
- package/dist/components/ai-copy-button/ai-copy-button.js.map +1 -1
- package/dist/components/ai-cost-dashboard/ai-cost-dashboard.js +14 -14
- package/dist/components/ai-cost-dashboard/ai-cost-dashboard.js.map +1 -1
- package/dist/components/ai-data-card/ai-data-card.js +2 -2
- package/dist/components/ai-data-card/ai-data-card.js.map +1 -1
- package/dist/components/ai-data-lineage/ai-data-lineage.js +6 -6
- package/dist/components/ai-data-lineage/ai-data-lineage.js.map +1 -1
- package/dist/components/ai-data-preview/ai-data-preview.d.ts +0 -7
- package/dist/components/ai-data-preview/ai-data-preview.d.ts.map +1 -1
- package/dist/components/ai-data-preview/ai-data-preview.js +130 -267
- package/dist/components/ai-data-preview/ai-data-preview.js.map +1 -1
- package/dist/components/ai-data-table/ai-data-table.js +9 -9
- package/dist/components/ai-data-table/ai-data-table.js.map +1 -1
- package/dist/components/ai-debug-console/ai-debug-console.d.ts +1 -13
- package/dist/components/ai-debug-console/ai-debug-console.d.ts.map +1 -1
- package/dist/components/ai-debug-console/ai-debug-console.js +134 -340
- package/dist/components/ai-debug-console/ai-debug-console.js.map +1 -1
- package/dist/components/ai-detection-canvas/ai-detection-canvas.js +2 -2
- package/dist/components/ai-detection-canvas/ai-detection-canvas.js.map +1 -1
- package/dist/components/ai-diff-panel/ai-diff-panel.js +1 -1
- package/dist/components/ai-embedding-viz/ai-embedding-viz.js +4 -4
- package/dist/components/ai-embedding-viz/ai-embedding-viz.js.map +1 -1
- package/dist/components/ai-empty-state/ai-empty-state.js +1 -1
- package/dist/components/ai-error-boundary/ai-error-boundary.d.ts.map +1 -1
- package/dist/components/ai-error-boundary/ai-error-boundary.js +26 -21
- package/dist/components/ai-error-boundary/ai-error-boundary.js.map +1 -1
- package/dist/components/ai-eval-scorecard/ai-eval-scorecard.js +5 -5
- package/dist/components/ai-eval-scorecard/ai-eval-scorecard.js.map +1 -1
- package/dist/components/ai-feature-flag/ai-feature-flag.d.ts +0 -14
- package/dist/components/ai-feature-flag/ai-feature-flag.d.ts.map +1 -1
- package/dist/components/ai-feature-flag/ai-feature-flag.js +181 -322
- package/dist/components/ai-feature-flag/ai-feature-flag.js.map +1 -1
- package/dist/components/ai-feedback/ai-feedback.d.ts.map +1 -1
- package/dist/components/ai-feedback/ai-feedback.js +10 -5
- package/dist/components/ai-feedback/ai-feedback.js.map +1 -1
- package/dist/components/ai-file-upload/ai-file-upload.js +1 -1
- package/dist/components/ai-form-generator/ai-form-generator.js +1 -1
- package/dist/components/ai-guardrail/ai-guardrail.js +2 -2
- package/dist/components/ai-guardrail/ai-guardrail.js.map +1 -1
- package/dist/components/ai-heatmap/ai-heatmap.js +1 -1
- package/dist/components/ai-insight-card/ai-insight-card.js +4 -4
- package/dist/components/ai-insight-card/ai-insight-card.js.map +1 -1
- package/dist/components/ai-json-viewer/ai-json-viewer.js +13 -13
- package/dist/components/ai-json-viewer/ai-json-viewer.js.map +1 -1
- package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.js +24 -24
- package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.js.map +1 -1
- package/dist/components/ai-kpi-grid/ai-kpi-grid.js +2 -2
- package/dist/components/ai-kpi-grid/ai-kpi-grid.js.map +1 -1
- package/dist/components/ai-labeling-board/ai-labeling-board.js +11 -11
- package/dist/components/ai-labeling-board/ai-labeling-board.js.map +1 -1
- package/dist/components/ai-memory-panel/ai-memory-panel.js +7 -7
- package/dist/components/ai-memory-panel/ai-memory-panel.js.map +1 -1
- package/dist/components/ai-model-comparison/ai-model-comparison.js +2 -2
- package/dist/components/ai-model-comparison/ai-model-comparison.js.map +1 -1
- package/dist/components/ai-model-selector/ai-model-selector.js +7 -7
- package/dist/components/ai-model-selector/ai-model-selector.js.map +1 -1
- package/dist/components/ai-notification-center/ai-notification-center.js +27 -27
- package/dist/components/ai-notification-center/ai-notification-center.js.map +1 -1
- package/dist/components/ai-onboarding/ai-onboarding.js +5 -5
- package/dist/components/ai-onboarding/ai-onboarding.js.map +1 -1
- package/dist/components/ai-permission-gate/ai-permission-gate.js +1 -1
- package/dist/components/ai-personalization-dash/ai-personalization-dash.js +1 -1
- package/dist/components/ai-presence/ai-presence.js +25 -25
- package/dist/components/ai-presence/ai-presence.js.map +1 -1
- package/dist/components/ai-progress-steps/ai-progress-steps.js +11 -11
- package/dist/components/ai-progress-steps/ai-progress-steps.js.map +1 -1
- package/dist/components/ai-prompt-editor/ai-prompt-editor.js +1 -1
- package/dist/components/ai-prompt-template/ai-prompt-template.js +29 -29
- package/dist/components/ai-prompt-template/ai-prompt-template.js.map +1 -1
- package/dist/components/ai-rag-panel/ai-rag-panel.js +4 -4
- package/dist/components/ai-rag-panel/ai-rag-panel.js.map +1 -1
- package/dist/components/ai-reasoning-tree/ai-reasoning-tree.js +16 -16
- package/dist/components/ai-reasoning-tree/ai-reasoning-tree.js.map +1 -1
- package/dist/components/ai-result-panel/ai-result-panel.js +1 -1
- package/dist/components/ai-reveal-animation/ai-reveal-animation.js +3 -3
- package/dist/components/ai-reveal-animation/ai-reveal-animation.js.map +1 -1
- package/dist/components/ai-reward-signal/ai-reward-signal.js +1 -1
- package/dist/components/ai-rich-message/ai-rich-message.d.ts.map +1 -1
- package/dist/components/ai-rich-message/ai-rich-message.js +37 -30
- package/dist/components/ai-rich-message/ai-rich-message.js.map +1 -1
- package/dist/components/ai-scenario-panel/ai-scenario-panel.js +10 -10
- package/dist/components/ai-scenario-panel/ai-scenario-panel.js.map +1 -1
- package/dist/components/ai-search/ai-search.js +1 -1
- package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.js +3 -3
- package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.js.map +1 -1
- package/dist/components/ai-sidebar/ai-sidebar.js +1 -1
- package/dist/components/ai-similarity-card/ai-similarity-card.js +1 -1
- package/dist/components/ai-source-graph/ai-source-graph.js +2 -2
- package/dist/components/ai-source-graph/ai-source-graph.js.map +1 -1
- package/dist/components/ai-status-page/ai-status-page.js +15 -15
- package/dist/components/ai-status-page/ai-status-page.js.map +1 -1
- package/dist/components/ai-streaming-text/ai-streaming-text.js +1 -1
- package/dist/components/ai-test-runner/ai-test-runner.d.ts +0 -8
- package/dist/components/ai-test-runner/ai-test-runner.d.ts.map +1 -1
- package/dist/components/ai-test-runner/ai-test-runner.js +100 -257
- package/dist/components/ai-test-runner/ai-test-runner.js.map +1 -1
- package/dist/components/ai-thinking/ai-thinking.js +1 -1
- package/dist/components/ai-timeline/ai-timeline.js +2 -2
- package/dist/components/ai-timeline/ai-timeline.js.map +1 -1
- package/dist/components/ai-token-tracker/ai-token-tracker.js +3 -3
- package/dist/components/ai-token-tracker/ai-token-tracker.js.map +1 -1
- package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.js +23 -23
- package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.js.map +1 -1
- package/dist/components/ai-tool-indicator/ai-tool-indicator.js +3 -3
- package/dist/components/ai-tool-indicator/ai-tool-indicator.js.map +1 -1
- package/dist/components/ai-transform-slider/ai-transform-slider.js +1 -1
- package/dist/components/ai-translation-panel/ai-translation-panel.js +2 -2
- package/dist/components/ai-translation-panel/ai-translation-panel.js.map +1 -1
- package/dist/components/ai-usage-meter/ai-usage-meter.js +1 -1
- package/dist/components/ai-validation-checklist/ai-validation-checklist.d.ts +1 -11
- package/dist/components/ai-validation-checklist/ai-validation-checklist.d.ts.map +1 -1
- package/dist/components/ai-validation-checklist/ai-validation-checklist.js +133 -187
- package/dist/components/ai-validation-checklist/ai-validation-checklist.js.map +1 -1
- package/dist/components/ai-version-selector/ai-version-selector.d.ts +0 -4
- package/dist/components/ai-version-selector/ai-version-selector.d.ts.map +1 -1
- package/dist/components/ai-version-selector/ai-version-selector.js +189 -210
- package/dist/components/ai-version-selector/ai-version-selector.js.map +1 -1
- package/dist/components/ai-voice-panel/ai-voice-panel.js +28 -28
- package/dist/components/ai-voice-panel/ai-voice-panel.js.map +1 -1
- package/dist/components/ai-webhook-config/ai-webhook-config.d.ts +0 -17
- package/dist/components/ai-webhook-config/ai-webhook-config.d.ts.map +1 -1
- package/dist/components/ai-webhook-config/ai-webhook-config.js +281 -221
- package/dist/components/ai-webhook-config/ai-webhook-config.js.map +1 -1
- package/dist/components/ai-workflow-builder/ai-workflow-builder.js +2 -2
- package/dist/components/ai-workflow-builder/ai-workflow-builder.js.map +1 -1
- package/dist/components/bias-anchoring/bias-anchoring.js +1 -1
- package/dist/components/bias-authority/bias-authority.js +1 -1
- package/dist/components/bias-commitment/bias-commitment.js +1 -1
- package/dist/components/bias-reciprocity/bias-reciprocity.js +1 -1
- package/dist/components/bias-scarcity/bias-scarcity.js +1 -1
- package/dist/components/bias-social-proof/bias-social-proof.js +1 -1
- package/dist/components/cg-accordion/cg-accordion.d.ts.map +1 -1
- package/dist/components/cg-accordion/cg-accordion.js +51 -43
- package/dist/components/cg-accordion/cg-accordion.js.map +1 -1
- package/dist/components/cg-alert-dialog/cg-alert-dialog.js +18 -18
- package/dist/components/cg-alert-dialog/cg-alert-dialog.js.map +1 -1
- package/dist/components/cg-aspect-ratio/cg-aspect-ratio.d.ts.map +1 -1
- package/dist/components/cg-aspect-ratio/cg-aspect-ratio.js +25 -21
- package/dist/components/cg-aspect-ratio/cg-aspect-ratio.js.map +1 -1
- package/dist/components/cg-autocomplete/cg-autocomplete.d.ts +1 -0
- package/dist/components/cg-autocomplete/cg-autocomplete.d.ts.map +1 -1
- package/dist/components/cg-autocomplete/cg-autocomplete.js +59 -43
- package/dist/components/cg-autocomplete/cg-autocomplete.js.map +1 -1
- package/dist/components/cg-avatar/cg-avatar.d.ts.map +1 -1
- package/dist/components/cg-avatar/cg-avatar.js +24 -24
- package/dist/components/cg-avatar/cg-avatar.js.map +1 -1
- package/dist/components/cg-avatar-group/cg-avatar-group.d.ts.map +1 -1
- package/dist/components/cg-avatar-group/cg-avatar-group.js +18 -12
- package/dist/components/cg-avatar-group/cg-avatar-group.js.map +1 -1
- package/dist/components/cg-badge/cg-badge.d.ts.map +1 -1
- package/dist/components/cg-badge/cg-badge.js +26 -20
- package/dist/components/cg-badge/cg-badge.js.map +1 -1
- package/dist/components/cg-badge-group/cg-badge-group.d.ts +0 -1
- package/dist/components/cg-badge-group/cg-badge-group.d.ts.map +1 -1
- package/dist/components/cg-badge-group/cg-badge-group.js +31 -29
- package/dist/components/cg-badge-group/cg-badge-group.js.map +1 -1
- package/dist/components/cg-breadcrumbs/cg-breadcrumbs.js +21 -21
- package/dist/components/cg-breadcrumbs/cg-breadcrumbs.js.map +1 -1
- package/dist/components/cg-button/cg-button.d.ts +5 -71
- package/dist/components/cg-button/cg-button.d.ts.map +1 -1
- package/dist/components/cg-button/cg-button.js +63 -172
- package/dist/components/cg-button/cg-button.js.map +1 -1
- package/dist/components/cg-button-group/cg-button-group.d.ts +2 -0
- package/dist/components/cg-button-group/cg-button-group.d.ts.map +1 -1
- package/dist/components/cg-button-group/cg-button-group.js +43 -29
- package/dist/components/cg-button-group/cg-button-group.js.map +1 -1
- package/dist/components/cg-calendar/cg-calendar.d.ts +4 -0
- package/dist/components/cg-calendar/cg-calendar.d.ts.map +1 -1
- package/dist/components/cg-calendar/cg-calendar.js +28 -12
- package/dist/components/cg-calendar/cg-calendar.js.map +1 -1
- package/dist/components/cg-callout/cg-callout.d.ts.map +1 -1
- package/dist/components/cg-callout/cg-callout.js +49 -48
- package/dist/components/cg-callout/cg-callout.js.map +1 -1
- package/dist/components/cg-card/cg-card.d.ts +9 -22
- package/dist/components/cg-card/cg-card.d.ts.map +1 -1
- package/dist/components/cg-card/cg-card.js +28 -56
- package/dist/components/cg-card/cg-card.js.map +1 -1
- package/dist/components/cg-carousel/cg-carousel.d.ts.map +1 -1
- package/dist/components/cg-carousel/cg-carousel.js +19 -13
- package/dist/components/cg-carousel/cg-carousel.js.map +1 -1
- package/dist/components/cg-chart/cg-chart.d.ts.map +1 -1
- package/dist/components/cg-chart/cg-chart.js +63 -58
- package/dist/components/cg-chart/cg-chart.js.map +1 -1
- package/dist/components/cg-checkbox/cg-checkbox.d.ts +0 -6
- package/dist/components/cg-checkbox/cg-checkbox.d.ts.map +1 -1
- package/dist/components/cg-checkbox/cg-checkbox.js +51 -51
- package/dist/components/cg-checkbox/cg-checkbox.js.map +1 -1
- package/dist/components/cg-chip/cg-chip.js +31 -31
- package/dist/components/cg-chip/cg-chip.js.map +1 -1
- package/dist/components/cg-code-block/cg-code-block.d.ts.map +1 -1
- package/dist/components/cg-code-block/cg-code-block.js +36 -34
- package/dist/components/cg-code-block/cg-code-block.js.map +1 -1
- package/dist/components/cg-collapsible/cg-collapsible.d.ts.map +1 -1
- package/dist/components/cg-collapsible/cg-collapsible.js +23 -18
- package/dist/components/cg-collapsible/cg-collapsible.js.map +1 -1
- package/dist/components/cg-color-picker/cg-color-picker.d.ts +3 -0
- package/dist/components/cg-color-picker/cg-color-picker.d.ts.map +1 -1
- package/dist/components/cg-color-picker/cg-color-picker.js +189 -91
- package/dist/components/cg-color-picker/cg-color-picker.js.map +1 -1
- package/dist/components/cg-combobox/cg-combobox.d.ts.map +1 -1
- package/dist/components/cg-combobox/cg-combobox.js +13 -6
- package/dist/components/cg-combobox/cg-combobox.js.map +1 -1
- package/dist/components/cg-command/cg-command.d.ts.map +1 -1
- package/dist/components/cg-command/cg-command.js +52 -45
- package/dist/components/cg-command/cg-command.js.map +1 -1
- package/dist/components/cg-context-menu/cg-context-menu.js +1 -1
- package/dist/components/cg-date-picker/cg-date-picker.d.ts.map +1 -1
- package/dist/components/cg-date-picker/cg-date-picker.js +36 -34
- package/dist/components/cg-date-picker/cg-date-picker.js.map +1 -1
- package/dist/components/cg-date-range-picker/cg-date-range-picker.d.ts +2 -0
- package/dist/components/cg-date-range-picker/cg-date-range-picker.d.ts.map +1 -1
- package/dist/components/cg-date-range-picker/cg-date-range-picker.js +12 -8
- package/dist/components/cg-date-range-picker/cg-date-range-picker.js.map +1 -1
- package/dist/components/cg-date-time-picker/cg-date-time-picker.d.ts.map +1 -1
- package/dist/components/cg-date-time-picker/cg-date-time-picker.js +3 -1
- package/dist/components/cg-date-time-picker/cg-date-time-picker.js.map +1 -1
- package/dist/components/cg-drawer/cg-drawer.js +3 -3
- package/dist/components/cg-drawer/cg-drawer.js.map +1 -1
- package/dist/components/cg-dropdown/cg-dropdown.d.ts.map +1 -1
- package/dist/components/cg-dropdown/cg-dropdown.js +1 -2
- package/dist/components/cg-dropdown/cg-dropdown.js.map +1 -1
- package/dist/components/cg-empty-state/cg-empty-state.d.ts +3 -24
- package/dist/components/cg-empty-state/cg-empty-state.d.ts.map +1 -1
- package/dist/components/cg-empty-state/cg-empty-state.js +51 -74
- package/dist/components/cg-empty-state/cg-empty-state.js.map +1 -1
- package/dist/components/cg-file-input/cg-file-input.d.ts.map +1 -1
- package/dist/components/cg-file-input/cg-file-input.js +9 -10
- package/dist/components/cg-file-input/cg-file-input.js.map +1 -1
- package/dist/components/cg-focus-scope/cg-focus-scope.js +1 -1
- package/dist/components/cg-follow-up/cg-follow-up.d.ts.map +1 -1
- package/dist/components/cg-follow-up/cg-follow-up.js +6 -7
- package/dist/components/cg-follow-up/cg-follow-up.js.map +1 -1
- package/dist/components/cg-form/cg-form.js +17 -17
- package/dist/components/cg-form/cg-form.js.map +1 -1
- package/dist/components/cg-hover-card/cg-hover-card.d.ts +1 -0
- package/dist/components/cg-hover-card/cg-hover-card.d.ts.map +1 -1
- package/dist/components/cg-hover-card/cg-hover-card.js +37 -32
- package/dist/components/cg-hover-card/cg-hover-card.js.map +1 -1
- package/dist/components/cg-icon/cg-icon.d.ts.map +1 -1
- package/dist/components/cg-icon/cg-icon.js +44 -37
- package/dist/components/cg-icon/cg-icon.js.map +1 -1
- package/dist/components/cg-image/cg-image.js +2 -2
- package/dist/components/cg-image/cg-image.js.map +1 -1
- package/dist/components/cg-image-block/cg-image-block.js +3 -3
- package/dist/components/cg-image-block/cg-image-block.js.map +1 -1
- package/dist/components/cg-image-gallery/cg-image-gallery.js +20 -20
- package/dist/components/cg-image-gallery/cg-image-gallery.js.map +1 -1
- package/dist/components/cg-input/cg-input.js +3 -3
- package/dist/components/cg-input/cg-input.js.map +1 -1
- package/dist/components/cg-kbd/cg-kbd.d.ts.map +1 -1
- package/dist/components/cg-kbd/cg-kbd.js +26 -24
- package/dist/components/cg-kbd/cg-kbd.js.map +1 -1
- package/dist/components/cg-label/cg-label.d.ts +4 -1
- package/dist/components/cg-label/cg-label.d.ts.map +1 -1
- package/dist/components/cg-label/cg-label.js +44 -41
- package/dist/components/cg-label/cg-label.js.map +1 -1
- package/dist/components/cg-link/cg-link.js +23 -23
- package/dist/components/cg-link/cg-link.js.map +1 -1
- package/dist/components/cg-list/cg-list.js +5 -5
- package/dist/components/cg-list/cg-list.js.map +1 -1
- package/dist/components/cg-listbox/cg-listbox.d.ts.map +1 -1
- package/dist/components/cg-listbox/cg-listbox.js +46 -40
- package/dist/components/cg-listbox/cg-listbox.js.map +1 -1
- package/dist/components/cg-markdown/cg-markdown.d.ts +2 -0
- package/dist/components/cg-markdown/cg-markdown.d.ts.map +1 -1
- package/dist/components/cg-markdown/cg-markdown.js +171 -121
- package/dist/components/cg-markdown/cg-markdown.js.map +1 -1
- package/dist/components/cg-menubar/cg-menubar.d.ts +6 -0
- package/dist/components/cg-menubar/cg-menubar.d.ts.map +1 -1
- package/dist/components/cg-menubar/cg-menubar.js +59 -47
- package/dist/components/cg-menubar/cg-menubar.js.map +1 -1
- package/dist/components/cg-meter/cg-meter.d.ts.map +1 -1
- package/dist/components/cg-meter/cg-meter.js +76 -76
- package/dist/components/cg-meter/cg-meter.js.map +1 -1
- package/dist/components/cg-metric-card/cg-metric-card.d.ts.map +1 -1
- package/dist/components/cg-metric-card/cg-metric-card.js +65 -68
- package/dist/components/cg-metric-card/cg-metric-card.js.map +1 -1
- package/dist/components/cg-modal/cg-modal.d.ts +3 -0
- package/dist/components/cg-modal/cg-modal.d.ts.map +1 -1
- package/dist/components/cg-modal/cg-modal.js +82 -83
- package/dist/components/cg-modal/cg-modal.js.map +1 -1
- package/dist/components/cg-navbar/cg-navbar.d.ts +1 -1
- package/dist/components/cg-navbar/cg-navbar.d.ts.map +1 -1
- package/dist/components/cg-navbar/cg-navbar.js +64 -55
- package/dist/components/cg-navbar/cg-navbar.js.map +1 -1
- package/dist/components/cg-navigation-menu/cg-navigation-menu.d.ts +3 -0
- package/dist/components/cg-navigation-menu/cg-navigation-menu.d.ts.map +1 -1
- package/dist/components/cg-navigation-menu/cg-navigation-menu.js +38 -26
- package/dist/components/cg-navigation-menu/cg-navigation-menu.js.map +1 -1
- package/dist/components/cg-number-input/cg-number-input.d.ts +1 -0
- package/dist/components/cg-number-input/cg-number-input.d.ts.map +1 -1
- package/dist/components/cg-number-input/cg-number-input.js +90 -77
- package/dist/components/cg-number-input/cg-number-input.js.map +1 -1
- package/dist/components/cg-otp-input/cg-otp-input.d.ts.map +1 -1
- package/dist/components/cg-otp-input/cg-otp-input.js +70 -60
- package/dist/components/cg-otp-input/cg-otp-input.js.map +1 -1
- package/dist/components/cg-pagination/cg-pagination.d.ts +2 -0
- package/dist/components/cg-pagination/cg-pagination.d.ts.map +1 -1
- package/dist/components/cg-pagination/cg-pagination.js +50 -49
- package/dist/components/cg-pagination/cg-pagination.js.map +1 -1
- package/dist/components/cg-password-input/cg-password-input.d.ts.map +1 -1
- package/dist/components/cg-password-input/cg-password-input.js +42 -34
- package/dist/components/cg-password-input/cg-password-input.js.map +1 -1
- package/dist/components/cg-phone-input/cg-phone-input.d.ts.map +1 -1
- package/dist/components/cg-phone-input/cg-phone-input.js +18 -14
- package/dist/components/cg-phone-input/cg-phone-input.js.map +1 -1
- package/dist/components/cg-popover/cg-popover.d.ts +12 -2
- package/dist/components/cg-popover/cg-popover.d.ts.map +1 -1
- package/dist/components/cg-popover/cg-popover.js +90 -63
- package/dist/components/cg-popover/cg-popover.js.map +1 -1
- package/dist/components/cg-portal/cg-portal.d.ts.map +1 -1
- package/dist/components/cg-portal/cg-portal.js +42 -41
- package/dist/components/cg-portal/cg-portal.js.map +1 -1
- package/dist/components/cg-progress-bar/cg-progress-bar.d.ts.map +1 -1
- package/dist/components/cg-progress-bar/cg-progress-bar.js +25 -25
- package/dist/components/cg-progress-bar/cg-progress-bar.js.map +1 -1
- package/dist/components/cg-radio/cg-radio.d.ts +10 -0
- package/dist/components/cg-radio/cg-radio.d.ts.map +1 -1
- package/dist/components/cg-radio/cg-radio.js +59 -48
- package/dist/components/cg-radio/cg-radio.js.map +1 -1
- package/dist/components/cg-radio-group/cg-radio-group.d.ts +6 -0
- package/dist/components/cg-radio-group/cg-radio-group.d.ts.map +1 -1
- package/dist/components/cg-radio-group/cg-radio-group.js +50 -37
- package/dist/components/cg-radio-group/cg-radio-group.js.map +1 -1
- package/dist/components/cg-rating/cg-rating.d.ts.map +1 -1
- package/dist/components/cg-rating/cg-rating.js +56 -54
- package/dist/components/cg-rating/cg-rating.js.map +1 -1
- package/dist/components/cg-resizable/cg-resizable.d.ts +4 -1
- package/dist/components/cg-resizable/cg-resizable.d.ts.map +1 -1
- package/dist/components/cg-resizable/cg-resizable.js +45 -35
- package/dist/components/cg-resizable/cg-resizable.js.map +1 -1
- package/dist/components/cg-scroll-area/cg-scroll-area.d.ts +8 -0
- package/dist/components/cg-scroll-area/cg-scroll-area.d.ts.map +1 -1
- package/dist/components/cg-scroll-area/cg-scroll-area.js +64 -21
- package/dist/components/cg-scroll-area/cg-scroll-area.js.map +1 -1
- package/dist/components/cg-segmented-control/cg-segmented-control.d.ts +4 -0
- package/dist/components/cg-segmented-control/cg-segmented-control.d.ts.map +1 -1
- package/dist/components/cg-segmented-control/cg-segmented-control.js +75 -39
- package/dist/components/cg-segmented-control/cg-segmented-control.js.map +1 -1
- package/dist/components/cg-select/cg-select.d.ts +4 -2
- package/dist/components/cg-select/cg-select.d.ts.map +1 -1
- package/dist/components/cg-select/cg-select.js +96 -58
- package/dist/components/cg-select/cg-select.js.map +1 -1
- package/dist/components/cg-separator/cg-separator.d.ts +1 -2
- package/dist/components/cg-separator/cg-separator.d.ts.map +1 -1
- package/dist/components/cg-separator/cg-separator.js +5 -8
- package/dist/components/cg-separator/cg-separator.js.map +1 -1
- package/dist/components/cg-sheet/cg-sheet.d.ts +4 -0
- package/dist/components/cg-sheet/cg-sheet.d.ts.map +1 -1
- package/dist/components/cg-sheet/cg-sheet.js +80 -43
- package/dist/components/cg-sheet/cg-sheet.js.map +1 -1
- package/dist/components/cg-sidebar/cg-sidebar.d.ts.map +1 -1
- package/dist/components/cg-sidebar/cg-sidebar.js +82 -19
- package/dist/components/cg-sidebar/cg-sidebar.js.map +1 -1
- package/dist/components/cg-skeleton/cg-skeleton.d.ts +7 -1
- package/dist/components/cg-skeleton/cg-skeleton.d.ts.map +1 -1
- package/dist/components/cg-skeleton/cg-skeleton.js +61 -63
- package/dist/components/cg-skeleton/cg-skeleton.js.map +1 -1
- package/dist/components/cg-slider/cg-slider.d.ts.map +1 -1
- package/dist/components/cg-slider/cg-slider.js +80 -73
- package/dist/components/cg-slider/cg-slider.js.map +1 -1
- package/dist/components/cg-spinner/cg-spinner.d.ts.map +1 -1
- package/dist/components/cg-spinner/cg-spinner.js +10 -19
- package/dist/components/cg-spinner/cg-spinner.js.map +1 -1
- package/dist/components/cg-split-button/cg-split-button.d.ts.map +1 -1
- package/dist/components/cg-split-button/cg-split-button.js +64 -50
- package/dist/components/cg-split-button/cg-split-button.js.map +1 -1
- package/dist/components/cg-stack/cg-stack.js +1 -1
- package/dist/components/cg-steps/cg-steps.js +1 -1
- package/dist/components/cg-switch/cg-switch.d.ts +3 -0
- package/dist/components/cg-switch/cg-switch.d.ts.map +1 -1
- package/dist/components/cg-switch/cg-switch.js +39 -47
- package/dist/components/cg-switch/cg-switch.js.map +1 -1
- package/dist/components/cg-table/cg-table.d.ts +0 -7
- package/dist/components/cg-table/cg-table.d.ts.map +1 -1
- package/dist/components/cg-table/cg-table.js +50 -47
- package/dist/components/cg-table/cg-table.js.map +1 -1
- package/dist/components/cg-tabs/cg-tabs.js +1 -1
- package/dist/components/cg-tag-input/cg-tag-input.js +1 -1
- package/dist/components/cg-text/cg-text.js +1 -1
- package/dist/components/cg-textarea/cg-textarea.js +1 -1
- package/dist/components/cg-time-picker/cg-time-picker.js +1 -1
- package/dist/components/cg-toaster/cg-toaster.js +3 -3
- package/dist/components/cg-toaster/cg-toaster.js.map +1 -1
- package/dist/components/cg-toggle/cg-toggle.js +1 -1
- package/dist/components/cg-toggle-group/cg-toggle-group.js +1 -1
- package/dist/components/cg-tree-view/cg-tree-view.js +1 -1
- package/dist/foundation.d.ts +0 -16
- package/dist/foundation.d.ts.map +1 -1
- package/dist/foundation.js +174 -206
- package/dist/foundation.js.map +1 -1
- package/dist/index.d.ts +1 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +100 -132
- package/dist/index.js.map +1 -1
- package/dist/utils/focus-trap.d.ts +19 -2
- package/dist/utils/focus-trap.d.ts.map +1 -1
- package/package.json +6 -810
- package/dist/chunks/focus-trap-BdRNhSPD.js +0 -53
- package/dist/chunks/focus-trap-BdRNhSPD.js.map +0 -1
- package/dist/components/cg-app-shell/cg-app-shell.d.ts +0 -54
- package/dist/components/cg-app-shell/cg-app-shell.d.ts.map +0 -1
- package/dist/components/cg-app-shell/cg-app-shell.js +0 -135
- package/dist/components/cg-app-shell/cg-app-shell.js.map +0 -1
- package/dist/components/cg-auth-shell/cg-auth-shell.d.ts +0 -61
- package/dist/components/cg-auth-shell/cg-auth-shell.d.ts.map +0 -1
- package/dist/components/cg-auth-shell/cg-auth-shell.js +0 -163
- package/dist/components/cg-auth-shell/cg-auth-shell.js.map +0 -1
- package/dist/components/cg-definition-list/cg-definition-list.d.ts +0 -99
- package/dist/components/cg-definition-list/cg-definition-list.d.ts.map +0 -1
- package/dist/components/cg-definition-list/cg-definition-list.js +0 -332
- package/dist/components/cg-definition-list/cg-definition-list.js.map +0 -1
- package/dist/components/cg-draggable/cg-draggable.d.ts +0 -53
- package/dist/components/cg-draggable/cg-draggable.d.ts.map +0 -1
- package/dist/components/cg-draggable/cg-draggable.js +0 -136
- package/dist/components/cg-draggable/cg-draggable.js.map +0 -1
- package/dist/components/cg-droppable/cg-droppable.d.ts +0 -57
- package/dist/components/cg-droppable/cg-droppable.d.ts.map +0 -1
- package/dist/components/cg-droppable/cg-droppable.js +0 -114
- package/dist/components/cg-droppable/cg-droppable.js.map +0 -1
- package/dist/components/cg-filter-bar/cg-filter-bar.d.ts +0 -50
- package/dist/components/cg-filter-bar/cg-filter-bar.d.ts.map +0 -1
- package/dist/components/cg-filter-bar/cg-filter-bar.js +0 -115
- package/dist/components/cg-filter-bar/cg-filter-bar.js.map +0 -1
- package/dist/components/cg-filter-chip/cg-filter-chip.d.ts +0 -55
- package/dist/components/cg-filter-chip/cg-filter-chip.d.ts.map +0 -1
- package/dist/components/cg-filter-chip/cg-filter-chip.js +0 -213
- package/dist/components/cg-filter-chip/cg-filter-chip.js.map +0 -1
- package/dist/components/cg-kanban/cg-kanban.d.ts +0 -44
- package/dist/components/cg-kanban/cg-kanban.d.ts.map +0 -1
- package/dist/components/cg-kanban/cg-kanban.js +0 -86
- package/dist/components/cg-kanban/cg-kanban.js.map +0 -1
- package/dist/components/cg-kanban-column/cg-kanban-column.d.ts +0 -58
- package/dist/components/cg-kanban-column/cg-kanban-column.d.ts.map +0 -1
- package/dist/components/cg-kanban-column/cg-kanban-column.js +0 -144
- package/dist/components/cg-kanban-column/cg-kanban-column.js.map +0 -1
- package/dist/components/cg-mfa-prompt/cg-mfa-prompt.d.ts +0 -77
- package/dist/components/cg-mfa-prompt/cg-mfa-prompt.d.ts.map +0 -1
- package/dist/components/cg-mfa-prompt/cg-mfa-prompt.js +0 -245
- package/dist/components/cg-mfa-prompt/cg-mfa-prompt.js.map +0 -1
- package/dist/components/cg-search-input/cg-search-input.d.ts +0 -62
- package/dist/components/cg-search-input/cg-search-input.d.ts.map +0 -1
- package/dist/components/cg-search-input/cg-search-input.js +0 -106
- package/dist/components/cg-search-input/cg-search-input.js.map +0 -1
- package/dist/components/cg-sortable/cg-sortable.d.ts +0 -72
- package/dist/components/cg-sortable/cg-sortable.d.ts.map +0 -1
- package/dist/components/cg-sortable/cg-sortable.js +0 -177
- package/dist/components/cg-sortable/cg-sortable.js.map +0 -1
- package/dist/components/cg-theme/cg-theme.d.ts +0 -82
- package/dist/components/cg-theme/cg-theme.d.ts.map +0 -1
- package/dist/components/cg-theme/cg-theme.js +0 -91
- package/dist/components/cg-theme/cg-theme.js.map +0 -1
- package/dist/components/cg-theme-editor/cg-theme-editor.d.ts +0 -98
- package/dist/components/cg-theme-editor/cg-theme-editor.d.ts.map +0 -1
- package/dist/components/cg-theme-editor/cg-theme-editor.js +0 -341
- package/dist/components/cg-theme-editor/cg-theme-editor.js.map +0 -1
- package/dist/components/cg-timeline/cg-timeline.d.ts +0 -70
- package/dist/components/cg-timeline/cg-timeline.d.ts.map +0 -1
- package/dist/components/cg-timeline/cg-timeline.js +0 -131
- package/dist/components/cg-timeline/cg-timeline.js.map +0 -1
- package/dist/components/cg-timeline-event/cg-timeline-event.d.ts +0 -59
- package/dist/components/cg-timeline-event/cg-timeline-event.d.ts.map +0 -1
- package/dist/components/cg-timeline-event/cg-timeline-event.js +0 -190
- package/dist/components/cg-timeline-event/cg-timeline-event.js.map +0 -1
- package/dist/utils/drag-manager.d.ts +0 -40
- package/dist/utils/drag-manager.d.ts.map +0 -1
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import { css as
|
|
2
|
-
import { property as
|
|
3
|
-
import { h as
|
|
4
|
-
var
|
|
5
|
-
for (var
|
|
6
|
-
(
|
|
7
|
-
return
|
|
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
|
|
9
|
+
let o = class extends v {
|
|
10
10
|
constructor() {
|
|
11
|
-
super(...arguments), this.keys = [], this.maxKeys = 10, this._copiedId = null
|
|
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(
|
|
19
|
+
_onRevoke(t) {
|
|
23
20
|
this.dispatchEvent(new CustomEvent("ai-key-revoke", {
|
|
24
21
|
bubbles: !0,
|
|
25
22
|
composed: !0,
|
|
26
|
-
detail: { id:
|
|
23
|
+
detail: { id: t.id, name: t.name }
|
|
27
24
|
}));
|
|
28
25
|
}
|
|
29
|
-
_onDelete(
|
|
26
|
+
_onDelete(t) {
|
|
30
27
|
this.dispatchEvent(new CustomEvent("ai-key-delete", {
|
|
31
28
|
bubbles: !0,
|
|
32
29
|
composed: !0,
|
|
33
|
-
detail: { id:
|
|
30
|
+
detail: { id: t.id, name: t.name }
|
|
34
31
|
}));
|
|
35
32
|
}
|
|
36
|
-
async _onCopy(
|
|
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
|
-
|
|
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
|
|
73
|
-
return
|
|
42
|
+
const t = this.keys.length >= this.maxKeys;
|
|
43
|
+
return r`
|
|
74
44
|
<div class="header">
|
|
75
|
-
<div
|
|
45
|
+
<div>
|
|
76
46
|
<h3 class="title">API Keys</h3>
|
|
77
|
-
<span class="count">${this.keys.length}
|
|
47
|
+
<span class="count">${this.keys.length} / ${this.maxKeys} keys</span>
|
|
78
48
|
</div>
|
|
79
|
-
<button class="create-btn"
|
|
80
|
-
?disabled=${e}
|
|
49
|
+
<button class="create-btn" ?disabled=${t}
|
|
81
50
|
@click=${this._onCreate}
|
|
82
|
-
aria-label
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
91
|
-
|
|
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((
|
|
95
|
-
<div class="key-item
|
|
60
|
+
${this.keys.map((e) => r`
|
|
61
|
+
<div class="key-item" role="listitem">
|
|
96
62
|
<div class="key-info">
|
|
97
|
-
<div class="key-name">${
|
|
98
|
-
<div class="key-prefix
|
|
99
|
-
|
|
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 ${
|
|
104
|
-
${
|
|
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="
|
|
109
|
-
<
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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">⎘</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">✘</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">🗑</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
|
-
|
|
93
|
+
o.styles = [f, m, h, u`
|
|
158
94
|
:host {
|
|
159
|
-
|
|
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
|
-
|
|
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
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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-
|
|
127
|
+
gap: var(--cg-spacing-4);
|
|
202
128
|
background: var(--cg-color-action-primary-background-default);
|
|
203
|
-
color: var(--cg-color-
|
|
204
|
-
border:
|
|
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-
|
|
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:
|
|
224
|
-
|
|
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
|
-
|
|
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:
|
|
249
|
-
gap: var(--cg-spacing-
|
|
250
|
-
padding: var(--cg-spacing-
|
|
251
|
-
background: var(--cg-color-surface-cards-
|
|
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
|
-
|
|
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:
|
|
329
|
-
font-weight: var(--cg-font-weight-
|
|
199
|
+
font-size: var(--cg-font-size-xs);
|
|
200
|
+
font-weight: var(--cg-font-weight-semibold);
|
|
330
201
|
text-transform: uppercase;
|
|
331
|
-
letter-spacing:
|
|
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
|
-
|
|
347
|
-
|
|
348
|
-
|
|
206
|
+
.status-active {
|
|
207
|
+
background: var(--cg-color-status-success-background-default);
|
|
208
|
+
color: var(--cg-color-status-success-text-default);
|
|
349
209
|
}
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
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-
|
|
367
|
-
height: var(--cg-spacing-
|
|
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-
|
|
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-
|
|
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:
|
|
397
|
-
|
|
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-
|
|
251
|
+
border-color: var(--cg-color-status-error-text-default);
|
|
403
252
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
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-
|
|
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
|
-
|
|
426
|
-
|
|
427
|
-
],
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
],
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
],
|
|
434
|
-
|
|
435
|
-
b()
|
|
436
|
-
],
|
|
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
|
-
|
|
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\">⎘</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\">✘</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\">🗑</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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"}
|