@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
|
@@ -33,6 +33,8 @@ export declare class CgMenubar extends LitElement {
|
|
|
33
33
|
* canonical macOS / VSCode / Figma app-menubar look.
|
|
34
34
|
*/
|
|
35
35
|
indicator: 'underline' | 'none';
|
|
36
|
+
/** Accessible name for the menubar (W3C APG requires a labeled menubar). */
|
|
37
|
+
label: string;
|
|
36
38
|
private _openIndex;
|
|
37
39
|
/** Roving-tabindex: only the focused menubar item is in the tab order. */
|
|
38
40
|
private _focusedTopIndex;
|
|
@@ -40,8 +42,12 @@ export declare class CgMenubar extends LitElement {
|
|
|
40
42
|
private _indicatorLeft;
|
|
41
43
|
private _indicatorWidth;
|
|
42
44
|
private _outsideHandler;
|
|
45
|
+
/** Re-measure the indicator on resize so it doesn't drift while a menu is open. */
|
|
46
|
+
private _resizeObserver;
|
|
43
47
|
connectedCallback(): void;
|
|
44
48
|
disconnectedCallback(): void;
|
|
49
|
+
/** Measure the active trigger and slide the underline indicator under it. */
|
|
50
|
+
private _measureIndicator;
|
|
45
51
|
updated(changed: Map<string, unknown>): void;
|
|
46
52
|
/** Hover-switches: once a menu is open, hovering a sibling top-trigger
|
|
47
53
|
* instantly switches to that menu. Standard app-bar behavior. Does NOT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cg-menubar.d.ts","sourceRoot":"","sources":["../../../src/components/cg-menubar/cg-menubar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED;;;;;GAKG;AACH,qBACa,SAAU,SAAQ,UAAU;IACvC,OAAgB,MAAM,
|
|
1
|
+
{"version":3,"file":"cg-menubar.d.ts","sourceRoot":"","sources":["../../../src/components/cg-menubar/cg-menubar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED;;;;;GAKG;AACH,qBACa,SAAU,SAAQ,UAAU;IACvC,OAAgB,MAAM,4BAwHnB;IAEwB,KAAK,EAAE,WAAW,EAAE,CAAM;IACrD,mEAAmE;IACtC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAQ;IAClF,yDAAyD;IAC5B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAC7D;;;;;;OAMG;IAC0B,SAAS,EAAE,WAAW,GAAG,MAAM,CAAe;IAC3E,4EAA4E;IAChE,KAAK,SAAsB;IAE9B,OAAO,CAAC,UAAU,CAAM;IACjC,0EAA0E;IACjE,OAAO,CAAC,gBAAgB,CAAK;IACtC,qEAAqE;IAC5D,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,eAAe,CAAK;IAErC,OAAO,CAAC,eAAe,CAErB;IAEF,mFAAmF;IACnF,OAAO,CAAC,eAAe,CAA6B;IAE3C,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAOrC,6EAA6E;IAC7E,OAAO,CAAC,iBAAiB;IAYhB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAWrD;;yEAEqE;IACrE,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAwDrB,OAAO,CAAC,iBAAiB;IA4EzB;2EACuE;IACvE,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,YAAY;IASX,MAAM;CAyChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,SAAS,CAAC;KACzB;CACF"}
|
|
@@ -1,32 +1,36 @@
|
|
|
1
|
-
import { css as f, LitElement as
|
|
2
|
-
import { property as l, state as u, customElement as
|
|
3
|
-
import { h as
|
|
4
|
-
var
|
|
5
|
-
for (var
|
|
6
|
-
(
|
|
7
|
-
return t &&
|
|
1
|
+
import { css as f, LitElement as b, nothing as h, html as d } from "lit";
|
|
2
|
+
import { property as l, state as u, customElement as m } from "lit/decorators.js";
|
|
3
|
+
import { h as v, r as _, m as y, e as w } from "../../chunks/premium.css-DHekUEUt.js";
|
|
4
|
+
var x = Object.defineProperty, k = Object.getOwnPropertyDescriptor, a = (e, r, o, t) => {
|
|
5
|
+
for (var n = t > 1 ? void 0 : t ? k(r, o) : r, s = e.length - 1, c; s >= 0; s--)
|
|
6
|
+
(c = e[s]) && (n = (t ? c(r, o, n) : c(n)) || n);
|
|
7
|
+
return t && n && x(r, o, n), n;
|
|
8
8
|
};
|
|
9
|
-
let i = class extends
|
|
9
|
+
let i = class extends b {
|
|
10
10
|
constructor() {
|
|
11
|
-
super(...arguments), this.items = [], this.rounded = "md", this.size = "md", this.indicator = "underline", this._openIndex = -1, this._focusedTopIndex = 0, this._indicatorLeft = 0, this._indicatorWidth = 0, this._outsideHandler = (e) => {
|
|
11
|
+
super(...arguments), this.items = [], this.rounded = "md", this.size = "md", this.indicator = "underline", this.label = "Application menu", this._openIndex = -1, this._focusedTopIndex = 0, this._indicatorLeft = 0, this._indicatorWidth = 0, this._outsideHandler = (e) => {
|
|
12
12
|
e.composedPath().includes(this) || (this._openIndex = -1);
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
15
|
connectedCallback() {
|
|
16
|
-
super.connectedCallback(), document.addEventListener("click", this._outsideHandler)
|
|
16
|
+
super.connectedCallback(), document.addEventListener("click", this._outsideHandler), this._resizeObserver = new ResizeObserver(() => {
|
|
17
|
+
this._openIndex >= 0 && this._measureIndicator();
|
|
18
|
+
}), this._resizeObserver.observe(this);
|
|
17
19
|
}
|
|
18
20
|
disconnectedCallback() {
|
|
19
|
-
super.disconnectedCallback(), document.removeEventListener("click", this._outsideHandler);
|
|
21
|
+
super.disconnectedCallback(), document.removeEventListener("click", this._outsideHandler), this._resizeObserver?.disconnect(), this._resizeObserver = void 0;
|
|
20
22
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
23
|
+
/** Measure the active trigger and slide the underline indicator under it. */
|
|
24
|
+
_measureIndicator() {
|
|
25
|
+
const e = this.shadowRoot?.querySelectorAll(".top-trigger"), r = this.shadowRoot?.querySelector('[role="menubar"]'), o = e?.[this._openIndex];
|
|
26
|
+
if (o && r) {
|
|
27
|
+
const t = o.getBoundingClientRect(), n = r.getBoundingClientRect();
|
|
28
|
+
this._indicatorLeft = t.left - n.left, this._indicatorWidth = t.width;
|
|
28
29
|
}
|
|
29
30
|
}
|
|
31
|
+
updated(e) {
|
|
32
|
+
this.toggleAttribute("open", this._openIndex >= 0), e.has("_openIndex") && this._openIndex >= 0 && this._measureIndicator();
|
|
33
|
+
}
|
|
30
34
|
/** Hover-switches: once a menu is open, hovering a sibling top-trigger
|
|
31
35
|
* instantly switches to that menu. Standard app-bar behavior. Does NOT
|
|
32
36
|
* activate on hover when no menu is open — that would be hostile. */
|
|
@@ -55,6 +59,12 @@ let i = class extends m {
|
|
|
55
59
|
case "End":
|
|
56
60
|
e.preventDefault(), this._focusTop(o - 1);
|
|
57
61
|
break;
|
|
62
|
+
case "ArrowUp":
|
|
63
|
+
e.preventDefault(), this._openIndex = r, this.updateComplete.then(() => {
|
|
64
|
+
const t = this.shadowRoot?.querySelectorAll(".menu .menu-item:not(.disabled)");
|
|
65
|
+
t?.[t.length - 1]?.focus();
|
|
66
|
+
});
|
|
67
|
+
break;
|
|
58
68
|
case "Escape":
|
|
59
69
|
e.preventDefault(), this._openIndex = -1;
|
|
60
70
|
break;
|
|
@@ -74,21 +84,21 @@ let i = class extends m {
|
|
|
74
84
|
return;
|
|
75
85
|
}
|
|
76
86
|
if (e.key === "Tab") {
|
|
77
|
-
this._openIndex = -1;
|
|
87
|
+
this._focusedTopIndex = r, this.shadowRoot?.querySelectorAll(".top-trigger")[r]?.focus(), this._openIndex = -1;
|
|
78
88
|
return;
|
|
79
89
|
}
|
|
80
90
|
if (e.key === "ArrowRight") {
|
|
81
91
|
e.preventDefault();
|
|
82
|
-
const
|
|
83
|
-
this._openIndex =
|
|
92
|
+
const s = (r + 1) % o;
|
|
93
|
+
this._openIndex = s, this._focusedTopIndex = s, this.updateComplete.then(() => {
|
|
84
94
|
this.shadowRoot?.querySelector(".menu .menu-item:not(.disabled)")?.focus();
|
|
85
95
|
});
|
|
86
96
|
return;
|
|
87
97
|
}
|
|
88
98
|
if (e.key === "ArrowLeft") {
|
|
89
99
|
e.preventDefault();
|
|
90
|
-
const
|
|
91
|
-
this._openIndex =
|
|
100
|
+
const s = (r - 1 + o) % o;
|
|
101
|
+
this._openIndex = s, this._focusedTopIndex = s, this.updateComplete.then(() => {
|
|
92
102
|
this.shadowRoot?.querySelector(".menu .menu-item:not(.disabled)")?.focus();
|
|
93
103
|
});
|
|
94
104
|
return;
|
|
@@ -97,20 +107,20 @@ let i = class extends m {
|
|
|
97
107
|
this.shadowRoot?.querySelectorAll(".menu .menu-item:not(.disabled)") ?? []
|
|
98
108
|
);
|
|
99
109
|
if (!t.length) return;
|
|
100
|
-
const
|
|
110
|
+
const n = t.findIndex((s) => s === this.shadowRoot?.activeElement);
|
|
101
111
|
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
102
112
|
e.preventDefault();
|
|
103
|
-
const
|
|
104
|
-
t[
|
|
113
|
+
const s = e.key === "ArrowDown" ? 1 : -1, c = (n + s + t.length) % t.length;
|
|
114
|
+
t[c]?.focus();
|
|
105
115
|
} else if (e.key === "Home")
|
|
106
116
|
e.preventDefault(), t[0]?.focus();
|
|
107
117
|
else if (e.key === "End")
|
|
108
118
|
e.preventDefault(), t[t.length - 1]?.focus();
|
|
109
119
|
else if (e.key.length === 1 && /\S/.test(e.key) && !e.metaKey && !e.ctrlKey && !e.altKey) {
|
|
110
|
-
const
|
|
120
|
+
const s = e.key.toLowerCase(), c = n >= 0 ? (n + 1) % t.length : 0;
|
|
111
121
|
for (let p = 0; p < t.length; p++) {
|
|
112
|
-
const g = (
|
|
113
|
-
if (t[g]?.textContent?.trim().toLowerCase().startsWith(
|
|
122
|
+
const g = (c + p) % t.length;
|
|
123
|
+
if (t[g]?.textContent?.trim().toLowerCase().startsWith(s)) {
|
|
114
124
|
e.preventDefault(), t[g]?.focus();
|
|
115
125
|
break;
|
|
116
126
|
}
|
|
@@ -121,9 +131,9 @@ let i = class extends m {
|
|
|
121
131
|
* starting AFTER `fromIdx`. Wraps around. Returns -1 if none match. */
|
|
122
132
|
_findTypeaheadIndex(e, r) {
|
|
123
133
|
const o = e.toLowerCase(), t = this.items.length;
|
|
124
|
-
for (let
|
|
125
|
-
const
|
|
126
|
-
if (this.items[
|
|
134
|
+
for (let n = 1; n <= t; n++) {
|
|
135
|
+
const s = (r + n) % t;
|
|
136
|
+
if (this.items[s]?.label.toLowerCase().startsWith(o)) return s;
|
|
127
137
|
}
|
|
128
138
|
return -1;
|
|
129
139
|
}
|
|
@@ -142,7 +152,7 @@ let i = class extends m {
|
|
|
142
152
|
render() {
|
|
143
153
|
const e = `transform: translateX(${this._indicatorLeft}px); width: ${this._indicatorWidth}px;`;
|
|
144
154
|
return d`
|
|
145
|
-
<div role="menubar">
|
|
155
|
+
<div role="menubar" aria-label=${this.label}>
|
|
146
156
|
<div class="indicator ${this._openIndex >= 0 ? "visible" : ""}" style=${e} aria-hidden="true"></div>
|
|
147
157
|
${this.items.map((r, o) => d`
|
|
148
158
|
<div class="menu-wrap">
|
|
@@ -163,12 +173,12 @@ let i = class extends m {
|
|
|
163
173
|
>${r.label}</button>
|
|
164
174
|
${this._openIndex === o ? d`
|
|
165
175
|
<div class="menu" role="menu" aria-label=${r.label} @keydown=${(t) => this._onSubmenuKeydown(t, o)}>
|
|
166
|
-
${r.children.map((t,
|
|
176
|
+
${r.children.map((t, n) => t.separator ? d`<div class="divider" role="separator"></div>` : d`
|
|
167
177
|
<button
|
|
168
178
|
class="menu-item ${t.disabled ? "disabled" : ""} ${t.danger ? "danger" : ""}"
|
|
169
179
|
role="menuitem"
|
|
170
180
|
aria-disabled=${t.disabled ? "true" : "false"}
|
|
171
|
-
style="--stagger-index: ${
|
|
181
|
+
style="--stagger-index: ${n}"
|
|
172
182
|
@click=${() => this._selectChild(r, t)}
|
|
173
183
|
>
|
|
174
184
|
<span>${t.label}</span>
|
|
@@ -183,7 +193,7 @@ let i = class extends m {
|
|
|
183
193
|
`;
|
|
184
194
|
}
|
|
185
195
|
};
|
|
186
|
-
i.styles = [
|
|
196
|
+
i.styles = [v, _, y, w, f`
|
|
187
197
|
:host {
|
|
188
198
|
display: block;
|
|
189
199
|
color: var(--cg-color-surface-container-text);
|
|
@@ -259,7 +269,6 @@ i.styles = [b, y, _, f`
|
|
|
259
269
|
font-weight: var(--cg-font-weight-medium);
|
|
260
270
|
border-radius: var(--cg-border-radius-50);
|
|
261
271
|
cursor: pointer;
|
|
262
|
-
transition: background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
|
|
263
272
|
}
|
|
264
273
|
:host([size="sm"]) .top-trigger {
|
|
265
274
|
padding: var(--cg-spacing-6) var(--cg-spacing-8);
|
|
@@ -305,32 +314,35 @@ i.styles = [b, y, _, f`
|
|
|
305
314
|
z-index: var(--cg-z-index-500);
|
|
306
315
|
}
|
|
307
316
|
`];
|
|
308
|
-
|
|
317
|
+
a([
|
|
309
318
|
l({ type: Array })
|
|
310
319
|
], i.prototype, "items", 2);
|
|
311
|
-
|
|
320
|
+
a([
|
|
312
321
|
l({ reflect: !0 })
|
|
313
322
|
], i.prototype, "rounded", 2);
|
|
314
|
-
|
|
323
|
+
a([
|
|
315
324
|
l({ reflect: !0 })
|
|
316
325
|
], i.prototype, "size", 2);
|
|
317
|
-
|
|
326
|
+
a([
|
|
318
327
|
l({ reflect: !0 })
|
|
319
328
|
], i.prototype, "indicator", 2);
|
|
320
|
-
|
|
329
|
+
a([
|
|
330
|
+
l()
|
|
331
|
+
], i.prototype, "label", 2);
|
|
332
|
+
a([
|
|
321
333
|
u()
|
|
322
334
|
], i.prototype, "_openIndex", 2);
|
|
323
|
-
|
|
335
|
+
a([
|
|
324
336
|
u()
|
|
325
337
|
], i.prototype, "_focusedTopIndex", 2);
|
|
326
|
-
|
|
338
|
+
a([
|
|
327
339
|
u()
|
|
328
340
|
], i.prototype, "_indicatorLeft", 2);
|
|
329
|
-
|
|
341
|
+
a([
|
|
330
342
|
u()
|
|
331
343
|
], i.prototype, "_indicatorWidth", 2);
|
|
332
|
-
i =
|
|
333
|
-
|
|
344
|
+
i = a([
|
|
345
|
+
m("cg-menubar")
|
|
334
346
|
], i);
|
|
335
347
|
export {
|
|
336
348
|
i as CgMenubar
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cg-menubar.js","sources":["../../../src/components/cg-menubar/cg-menubar.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion, menuListStyles } from '../../styles/index.js';\n\nexport interface MenubarChildItem {\n label: string;\n shortcut?: string;\n disabled?: boolean;\n danger?: boolean;\n separator?: boolean;\n id?: string;\n}\n\nexport interface MenubarItem {\n label: string;\n id?: string;\n children: MenubarChildItem[];\n}\n\n/**\n * @element cg-menubar\n * App-style horizontal menu bar (File/Edit/View) with dropdown submenus.\n *\n * @fires {CustomEvent<{menu:string,item:string}>} cg-menubar-select\n */\n@customElement('cg-menubar')\nexport class CgMenubar extends LitElement {\n static override styles = [hostBlock, reducedMotion, menuListStyles, css`\n :host {\n display: block;\n color: var(--cg-color-surface-container-text);\n }\n\n /* Top-level horizontal bar containing the menu triggers. */\n [role=\"menubar\"] {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-4);\n padding: var(--cg-spacing-6);\n background: var(--cg-color-surface-container-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-container-border);\n border-radius: var(--cg-border-radius-100);\n position: relative; /* anchor for the magnetic underline indicator */\n }\n\n /* Magnetic underline that slides under the active trigger. JS measures\n the trigger's position; CSS handles the smooth slide. */\n .indicator {\n position: absolute;\n bottom: calc(var(--cg-spacing-2) * -1);\n left: 0;\n height: var(--cg-spacing-2);\n background: var(--cg-color-action-primary-background-default);\n border-radius: var(--cg-border-radius-full);\n pointer-events: none;\n opacity: 0;\n transform: translateX(0);\n transition:\n transform var(--cg-transition-duration-default) var(--cg-transition-easing-bounce),\n width var(--cg-transition-duration-default) var(--cg-transition-easing-bounce),\n opacity var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .indicator.visible {\n opacity: 1;\n }\n @media (prefers-reduced-motion: reduce) {\n .indicator { transition: opacity var(--cg-transition-duration-fast) ease; }\n }\n /* Indicator can be disabled for the canonical macOS / VSCode app-menubar\n look — only the open trigger's background highlight remains. */\n :host([indicator=\"none\"]) .indicator { display: none; }\n\n /* ── Rounded variants — match cg-button's rounded scale ── */\n :host([rounded=\"none\"]) [role=\"menubar\"] { border-radius: 0; }\n :host([rounded=\"sm\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-full); }\n /* Fully-rounded bar wants pill triggers too so corners don't clash. */\n :host([rounded=\"full\"]) .top-trigger { border-radius: var(--cg-border-radius-full); }\n\n /* ── Size variants ── */\n :host([size=\"sm\"]) [role=\"menubar\"] {\n gap: var(--cg-spacing-2);\n padding: var(--cg-spacing-4);\n }\n :host([size=\"lg\"]) [role=\"menubar\"] {\n gap: var(--cg-spacing-6);\n padding: var(--cg-spacing-8);\n }\n\n .top-trigger {\n display: inline-flex;\n align-items: center;\n padding: var(--cg-spacing-8) var(--cg-spacing-12);\n background: transparent;\n border: none;\n color: inherit;\n font: inherit;\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n border-radius: var(--cg-border-radius-50);\n cursor: pointer;\n transition: background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n :host([size=\"sm\"]) .top-trigger {\n padding: var(--cg-spacing-6) var(--cg-spacing-8);\n font-size: var(--cg-font-size-xs);\n }\n :host([size=\"lg\"]) .top-trigger {\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n font-size: var(--cg-font-size-base);\n }\n .top-trigger:hover,\n .top-trigger.open {\n background: var(--cg-color-action-tertiary-background-hover);\n }\n .top-trigger.open {\n color: var(--cg-color-surface-base-text);\n }\n .top-trigger:active:not([disabled]) {\n transform: scale(var(--cg-interaction-press-scale));\n }\n .top-trigger {\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 color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .top-trigger:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 var(--cg-focus-ring-offset) var(--cg-color-focus-ring-offset),\n 0 0 0 calc(var(--cg-focus-ring-offset) + var(--cg-focus-ring-width)) var(--cg-color-focus-ring);\n }\n\n /* Submenu positioning — visual styling (surface, items, divider, animation,\n rounded variants) inherited from menuListStyles for consistency with\n cg-dropdown / cg-split-button. */\n .menu-wrap {\n position: relative;\n }\n .menu {\n position: absolute;\n top: calc(100% + var(--cg-spacing-6));\n left: 0;\n z-index: var(--cg-z-index-500);\n }\n `];\n\n @property({ type: Array }) items: MenubarItem[] = [];\n /** Border-radius variant — matches cg-button's `rounded` scale. */\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n /** Size variant — drives padding, gap, and font size. */\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n /**\n * Active-menu indicator style.\n * - `\"underline\"` (default): magnetic 2px bar slides between open menus —\n * modern web menubars (Notion, Vercel, Linear) use this style.\n * - `\"none\"`: rely only on the open trigger's background highlight —\n * canonical macOS / VSCode / Figma app-menubar look.\n */\n @property({ reflect: true }) indicator: 'underline' | 'none' = 'underline';\n\n @state() private _openIndex = -1;\n /** Roving-tabindex: only the focused menubar item is in the tab order. */\n @state() private _focusedTopIndex = 0;\n /** Magnetic indicator geometry, measured from the active trigger. */\n @state() private _indicatorLeft = 0;\n @state() private _indicatorWidth = 0;\n\n private _outsideHandler = (e: MouseEvent) => {\n if (!e.composedPath().includes(this)) this._openIndex = -1;\n };\n\n override connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('click', this._outsideHandler);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('click', this._outsideHandler);\n }\n\n override updated(changed: Map<string, unknown>): void {\n // Measure the active trigger and slide the underline indicator under it.\n if (changed.has('_openIndex') && this._openIndex >= 0) {\n const triggers = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n const bar = this.shadowRoot?.querySelector<HTMLElement>('[role=\"menubar\"]');\n const trigger = triggers?.[this._openIndex];\n if (trigger && bar) {\n const tRect = trigger.getBoundingClientRect();\n const bRect = bar.getBoundingClientRect();\n this._indicatorLeft = tRect.left - bRect.left;\n this._indicatorWidth = tRect.width;\n }\n }\n }\n\n /** Hover-switches: once a menu is open, hovering a sibling top-trigger\n * instantly switches to that menu. Standard app-bar behavior. Does NOT\n * activate on hover when no menu is open — that would be hostile. */\n private _onTopHover(idx: number): void {\n if (this._openIndex >= 0 && this._openIndex !== idx) {\n this._openIndex = idx;\n this._focusedTopIndex = idx;\n }\n }\n\n private _onTopKeydown(e: KeyboardEvent, idx: number): void {\n const n = this.items.length;\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n this._focusTop((idx - 1 + n) % n);\n break;\n case 'ArrowRight':\n e.preventDefault();\n this._focusTop((idx + 1) % n);\n break;\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n e.preventDefault();\n this._openIndex = idx;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n break;\n case 'Home':\n e.preventDefault();\n this._focusTop(0);\n break;\n case 'End':\n e.preventDefault();\n this._focusTop(n - 1);\n break;\n case 'Escape':\n e.preventDefault();\n this._openIndex = -1;\n break;\n default:\n // Typeahead — single printable character jumps to next menubar item\n // whose label starts with that character (W3C APG menubar pattern).\n if (e.key.length === 1 && /\\S/.test(e.key) && !e.metaKey && !e.ctrlKey && !e.altKey) {\n const target = this._findTypeaheadIndex(e.key, idx);\n if (target !== -1 && target !== idx) {\n e.preventDefault();\n this._focusTop(target);\n }\n }\n }\n }\n\n private _onSubmenuKeydown(e: KeyboardEvent, triggerIdx: number): void {\n const n = this.items.length;\n if (e.key === 'Escape') {\n e.preventDefault();\n this._openIndex = -1;\n this.updateComplete.then(() => {\n const btns = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n btns?.[triggerIdx]?.focus();\n });\n return;\n }\n if (e.key === 'Tab') {\n // Per W3C APG: Tab exits the menubar entirely. Close the submenu and\n // let the browser's natural tab order take over.\n this._openIndex = -1;\n return;\n }\n if (e.key === 'ArrowRight') {\n // Close current submenu, move to next menubar item, open its submenu.\n e.preventDefault();\n const next = (triggerIdx + 1) % n;\n this._openIndex = next;\n this._focusedTopIndex = next;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n return;\n }\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n const prev = (triggerIdx - 1 + n) % n;\n this._openIndex = prev;\n this._focusedTopIndex = prev;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n return;\n }\n const items = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.menu .menu-item:not(.disabled)') ?? [],\n );\n if (!items.length) return;\n const current = items.findIndex(el => el === this.shadowRoot?.activeElement);\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const delta = e.key === 'ArrowDown' ? 1 : -1;\n const next = (current + delta + items.length) % items.length;\n items[next]?.focus();\n } else if (e.key === 'Home') {\n e.preventDefault();\n items[0]?.focus();\n } else if (e.key === 'End') {\n e.preventDefault();\n items[items.length - 1]?.focus();\n } else if (e.key.length === 1 && /\\S/.test(e.key) && !e.metaKey && !e.ctrlKey && !e.altKey) {\n // Typeahead inside an open submenu.\n const ch = e.key.toLowerCase();\n const start = current >= 0 ? (current + 1) % items.length : 0;\n for (let i = 0; i < items.length; i++) {\n const j = (start + i) % items.length;\n if (items[j]?.textContent?.trim().toLowerCase().startsWith(ch)) {\n e.preventDefault();\n items[j]?.focus();\n break;\n }\n }\n }\n }\n\n /** Find the next menubar item whose label starts with the typed character,\n * starting AFTER `fromIdx`. Wraps around. Returns -1 if none match. */\n private _findTypeaheadIndex(char: string, fromIdx: number): number {\n const ch = char.toLowerCase();\n const n = this.items.length;\n for (let i = 1; i <= n; i++) {\n const j = (fromIdx + i) % n;\n if (this.items[j]?.label.toLowerCase().startsWith(ch)) return j;\n }\n return -1;\n }\n\n private _focusTop(idx: number): void {\n this._openIndex = this._openIndex >= 0 ? idx : -1;\n this._focusedTopIndex = idx;\n this.updateComplete.then(() => {\n const btns = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n btns?.[idx]?.focus();\n });\n }\n\n private _selectChild(menu: MenubarItem, child: MenubarChildItem): void {\n if (child.disabled || child.separator) return;\n this.dispatchEvent(new CustomEvent('cg-menubar-select', {\n bubbles: true, composed: true,\n detail: { menu: menu.id ?? menu.label, item: child.id ?? child.label },\n }));\n this._openIndex = -1;\n }\n\n override render() {\n const indicatorStyle = `transform: translateX(${this._indicatorLeft}px); width: ${this._indicatorWidth}px;`;\n return html`\n <div role=\"menubar\">\n <div class=\"indicator ${this._openIndex >= 0 ? 'visible' : ''}\" style=${indicatorStyle} aria-hidden=\"true\"></div>\n ${this.items.map((menu, i) => html`\n <div class=\"menu-wrap\">\n <button\n class=\"top-trigger ${this._openIndex === i ? 'open' : ''}\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded=${this._openIndex === i ? 'true' : 'false'}\n tabindex=${this._focusedTopIndex === i ? 0 : -1}\n @click=${(e: MouseEvent) => { e.stopPropagation(); this._focusedTopIndex = i; this._openIndex = this._openIndex === i ? -1 : i; }}\n @focus=${() => { this._focusedTopIndex = i; }}\n @mouseenter=${() => this._onTopHover(i)}\n @keydown=${(e: KeyboardEvent) => this._onTopKeydown(e, i)}\n >${menu.label}</button>\n ${this._openIndex === i ? html`\n <div class=\"menu\" role=\"menu\" aria-label=${menu.label} @keydown=${(e: KeyboardEvent) => this._onSubmenuKeydown(e, i)}>\n ${menu.children.map((child, idx) => child.separator\n ? html`<div class=\"divider\" role=\"separator\"></div>`\n : html`\n <button\n class=\"menu-item ${child.disabled ? 'disabled' : ''} ${child.danger ? 'danger' : ''}\"\n role=\"menuitem\"\n aria-disabled=${child.disabled ? 'true' : 'false'}\n style=\"--stagger-index: ${idx}\"\n @click=${() => this._selectChild(menu, child)}\n >\n <span>${child.label}</span>\n ${child.shortcut ? html`<span class=\"menu-item-shortcut\">${child.shortcut}</span>` : nothing}\n </button>\n `)}\n </div>\n ` : nothing}\n </div>\n `)}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-menubar': CgMenubar;\n }\n}\n"],"names":["CgMenubar","LitElement","changed","triggers","bar","trigger","tRect","bRect","idx","n","target","triggerIdx","next","prev","items","current","el","delta","ch","start","i","j","char","fromIdx","menu","child","indicatorStyle","html","e","nothing","hostBlock","reducedMotion","menuListStyles","css","__decorateClass","property","state","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cg-menubar.js","sources":["../../../src/components/cg-menubar/cg-menubar.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion, menuListStyles, entranceStagger } from '../../styles/index.js';\n\nexport interface MenubarChildItem {\n label: string;\n shortcut?: string;\n disabled?: boolean;\n danger?: boolean;\n separator?: boolean;\n id?: string;\n}\n\nexport interface MenubarItem {\n label: string;\n id?: string;\n children: MenubarChildItem[];\n}\n\n/**\n * @element cg-menubar\n * App-style horizontal menu bar (File/Edit/View) with dropdown submenus.\n *\n * @fires {CustomEvent<{menu:string,item:string}>} cg-menubar-select\n */\n@customElement('cg-menubar')\nexport class CgMenubar extends LitElement {\n static override styles = [hostBlock, reducedMotion, menuListStyles, entranceStagger, css`\n :host {\n display: block;\n color: var(--cg-color-surface-container-text);\n }\n\n /* Top-level horizontal bar containing the menu triggers. */\n [role=\"menubar\"] {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-4);\n padding: var(--cg-spacing-6);\n background: var(--cg-color-surface-container-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-container-border);\n border-radius: var(--cg-border-radius-100);\n position: relative; /* anchor for the magnetic underline indicator */\n }\n\n /* Magnetic underline that slides under the active trigger. JS measures\n the trigger's position; CSS handles the smooth slide. */\n .indicator {\n position: absolute;\n bottom: calc(var(--cg-spacing-2) * -1);\n left: 0;\n height: var(--cg-spacing-2);\n background: var(--cg-color-action-primary-background-default);\n border-radius: var(--cg-border-radius-full);\n pointer-events: none;\n opacity: 0;\n transform: translateX(0);\n transition:\n transform var(--cg-transition-duration-default) var(--cg-transition-easing-bounce),\n width var(--cg-transition-duration-default) var(--cg-transition-easing-bounce),\n opacity var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .indicator.visible {\n opacity: 1;\n }\n @media (prefers-reduced-motion: reduce) {\n .indicator { transition: opacity var(--cg-transition-duration-fast) ease; }\n }\n /* Indicator can be disabled for the canonical macOS / VSCode app-menubar\n look — only the open trigger's background highlight remains. */\n :host([indicator=\"none\"]) .indicator { display: none; }\n\n /* ── Rounded variants — match cg-button's rounded scale ── */\n :host([rounded=\"none\"]) [role=\"menubar\"] { border-radius: 0; }\n :host([rounded=\"sm\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) [role=\"menubar\"] { border-radius: var(--cg-border-radius-full); }\n /* Fully-rounded bar wants pill triggers too so corners don't clash. */\n :host([rounded=\"full\"]) .top-trigger { border-radius: var(--cg-border-radius-full); }\n\n /* ── Size variants ── */\n :host([size=\"sm\"]) [role=\"menubar\"] {\n gap: var(--cg-spacing-2);\n padding: var(--cg-spacing-4);\n }\n :host([size=\"lg\"]) [role=\"menubar\"] {\n gap: var(--cg-spacing-6);\n padding: var(--cg-spacing-8);\n }\n\n .top-trigger {\n display: inline-flex;\n align-items: center;\n padding: var(--cg-spacing-8) var(--cg-spacing-12);\n background: transparent;\n border: none;\n color: inherit;\n font: inherit;\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n border-radius: var(--cg-border-radius-50);\n cursor: pointer;\n }\n :host([size=\"sm\"]) .top-trigger {\n padding: var(--cg-spacing-6) var(--cg-spacing-8);\n font-size: var(--cg-font-size-xs);\n }\n :host([size=\"lg\"]) .top-trigger {\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n font-size: var(--cg-font-size-base);\n }\n .top-trigger:hover,\n .top-trigger.open {\n background: var(--cg-color-action-tertiary-background-hover);\n }\n .top-trigger.open {\n color: var(--cg-color-surface-base-text);\n }\n .top-trigger:active:not([disabled]) {\n transform: scale(var(--cg-interaction-press-scale));\n }\n .top-trigger {\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 color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .top-trigger:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 var(--cg-focus-ring-offset) var(--cg-color-focus-ring-offset),\n 0 0 0 calc(var(--cg-focus-ring-offset) + var(--cg-focus-ring-width)) var(--cg-color-focus-ring);\n }\n\n /* Submenu positioning — visual styling (surface, items, divider, animation,\n rounded variants) inherited from menuListStyles for consistency with\n cg-dropdown / cg-split-button. */\n .menu-wrap {\n position: relative;\n }\n .menu {\n position: absolute;\n top: calc(100% + var(--cg-spacing-6));\n left: 0;\n z-index: var(--cg-z-index-500);\n }\n `];\n\n @property({ type: Array }) items: MenubarItem[] = [];\n /** Border-radius variant — matches cg-button's `rounded` scale. */\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n /** Size variant — drives padding, gap, and font size. */\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n /**\n * Active-menu indicator style.\n * - `\"underline\"` (default): magnetic 2px bar slides between open menus —\n * modern web menubars (Notion, Vercel, Linear) use this style.\n * - `\"none\"`: rely only on the open trigger's background highlight —\n * canonical macOS / VSCode / Figma app-menubar look.\n */\n @property({ reflect: true }) indicator: 'underline' | 'none' = 'underline';\n /** Accessible name for the menubar (W3C APG requires a labeled menubar). */\n @property() label = 'Application menu';\n\n @state() private _openIndex = -1;\n /** Roving-tabindex: only the focused menubar item is in the tab order. */\n @state() private _focusedTopIndex = 0;\n /** Magnetic indicator geometry, measured from the active trigger. */\n @state() private _indicatorLeft = 0;\n @state() private _indicatorWidth = 0;\n\n private _outsideHandler = (e: MouseEvent) => {\n if (!e.composedPath().includes(this)) this._openIndex = -1;\n };\n\n /** Re-measure the indicator on resize so it doesn't drift while a menu is open. */\n private _resizeObserver: ResizeObserver | undefined;\n\n override connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('click', this._outsideHandler);\n this._resizeObserver = new ResizeObserver(() => {\n if (this._openIndex >= 0) this._measureIndicator();\n });\n this._resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('click', this._outsideHandler);\n this._resizeObserver?.disconnect();\n this._resizeObserver = undefined;\n }\n\n /** Measure the active trigger and slide the underline indicator under it. */\n private _measureIndicator(): void {\n const triggers = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n const bar = this.shadowRoot?.querySelector<HTMLElement>('[role=\"menubar\"]');\n const trigger = triggers?.[this._openIndex];\n if (trigger && bar) {\n const tRect = trigger.getBoundingClientRect();\n const bRect = bar.getBoundingClientRect();\n this._indicatorLeft = tRect.left - bRect.left;\n this._indicatorWidth = tRect.width;\n }\n }\n\n override updated(changed: Map<string, unknown>): void {\n // Reflect open state so menuListStyles' `:host([open]) .menu` reveal rule\n // (and the shared cg-menu-enter animation) activates — matches\n // cg-dropdown / cg-split-button. `open` is not a reactive property, so\n // this cannot trigger an update loop.\n this.toggleAttribute('open', this._openIndex >= 0);\n if (changed.has('_openIndex') && this._openIndex >= 0) {\n this._measureIndicator();\n }\n }\n\n /** Hover-switches: once a menu is open, hovering a sibling top-trigger\n * instantly switches to that menu. Standard app-bar behavior. Does NOT\n * activate on hover when no menu is open — that would be hostile. */\n private _onTopHover(idx: number): void {\n if (this._openIndex >= 0 && this._openIndex !== idx) {\n this._openIndex = idx;\n this._focusedTopIndex = idx;\n }\n }\n\n private _onTopKeydown(e: KeyboardEvent, idx: number): void {\n const n = this.items.length;\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n this._focusTop((idx - 1 + n) % n);\n break;\n case 'ArrowRight':\n e.preventDefault();\n this._focusTop((idx + 1) % n);\n break;\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n e.preventDefault();\n this._openIndex = idx;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n break;\n case 'Home':\n e.preventDefault();\n this._focusTop(0);\n break;\n case 'End':\n e.preventDefault();\n this._focusTop(n - 1);\n break;\n case 'ArrowUp':\n // W3C APG: ArrowUp on a menubar item opens its submenu and focuses\n // the LAST item (complement of ArrowDown-focuses-first).\n e.preventDefault();\n this._openIndex = idx;\n this.updateComplete.then(() => {\n const menuItems = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n menuItems?.[menuItems.length - 1]?.focus();\n });\n break;\n case 'Escape':\n e.preventDefault();\n this._openIndex = -1;\n break;\n default:\n // Typeahead — single printable character jumps to next menubar item\n // whose label starts with that character (W3C APG menubar pattern).\n if (e.key.length === 1 && /\\S/.test(e.key) && !e.metaKey && !e.ctrlKey && !e.altKey) {\n const target = this._findTypeaheadIndex(e.key, idx);\n if (target !== -1 && target !== idx) {\n e.preventDefault();\n this._focusTop(target);\n }\n }\n }\n }\n\n private _onSubmenuKeydown(e: KeyboardEvent, triggerIdx: number): void {\n const n = this.items.length;\n if (e.key === 'Escape') {\n e.preventDefault();\n this._openIndex = -1;\n this.updateComplete.then(() => {\n const btns = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n btns?.[triggerIdx]?.focus();\n });\n return;\n }\n if (e.key === 'Tab') {\n // Per W3C APG: Tab exits the menubar entirely. Synchronously move focus\n // back to the owning trigger (which holds the roving tabindex=0) before\n // the default Tab action runs, so Tab / Shift+Tab proceed from the\n // menubar to the adjacent tab-sequence element instead of dropping\n // focus to <body> when the submenu is removed. No preventDefault.\n this._focusedTopIndex = triggerIdx;\n this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger')[triggerIdx]?.focus();\n this._openIndex = -1;\n return;\n }\n if (e.key === 'ArrowRight') {\n // Close current submenu, move to next menubar item, open its submenu.\n e.preventDefault();\n const next = (triggerIdx + 1) % n;\n this._openIndex = next;\n this._focusedTopIndex = next;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n return;\n }\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n const prev = (triggerIdx - 1 + n) % n;\n this._openIndex = prev;\n this._focusedTopIndex = prev;\n this.updateComplete.then(() => {\n const first = this.shadowRoot?.querySelector<HTMLButtonElement>('.menu .menu-item:not(.disabled)');\n first?.focus();\n });\n return;\n }\n const items = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.menu .menu-item:not(.disabled)') ?? [],\n );\n if (!items.length) return;\n const current = items.findIndex(el => el === this.shadowRoot?.activeElement);\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const delta = e.key === 'ArrowDown' ? 1 : -1;\n const next = (current + delta + items.length) % items.length;\n items[next]?.focus();\n } else if (e.key === 'Home') {\n e.preventDefault();\n items[0]?.focus();\n } else if (e.key === 'End') {\n e.preventDefault();\n items[items.length - 1]?.focus();\n } else if (e.key.length === 1 && /\\S/.test(e.key) && !e.metaKey && !e.ctrlKey && !e.altKey) {\n // Typeahead inside an open submenu.\n const ch = e.key.toLowerCase();\n const start = current >= 0 ? (current + 1) % items.length : 0;\n for (let i = 0; i < items.length; i++) {\n const j = (start + i) % items.length;\n if (items[j]?.textContent?.trim().toLowerCase().startsWith(ch)) {\n e.preventDefault();\n items[j]?.focus();\n break;\n }\n }\n }\n }\n\n /** Find the next menubar item whose label starts with the typed character,\n * starting AFTER `fromIdx`. Wraps around. Returns -1 if none match. */\n private _findTypeaheadIndex(char: string, fromIdx: number): number {\n const ch = char.toLowerCase();\n const n = this.items.length;\n for (let i = 1; i <= n; i++) {\n const j = (fromIdx + i) % n;\n if (this.items[j]?.label.toLowerCase().startsWith(ch)) return j;\n }\n return -1;\n }\n\n private _focusTop(idx: number): void {\n this._openIndex = this._openIndex >= 0 ? idx : -1;\n this._focusedTopIndex = idx;\n this.updateComplete.then(() => {\n const btns = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.top-trigger');\n btns?.[idx]?.focus();\n });\n }\n\n private _selectChild(menu: MenubarItem, child: MenubarChildItem): void {\n if (child.disabled || child.separator) return;\n this.dispatchEvent(new CustomEvent('cg-menubar-select', {\n bubbles: true, composed: true,\n detail: { menu: menu.id ?? menu.label, item: child.id ?? child.label },\n }));\n this._openIndex = -1;\n }\n\n override render() {\n const indicatorStyle = `transform: translateX(${this._indicatorLeft}px); width: ${this._indicatorWidth}px;`;\n return html`\n <div role=\"menubar\" aria-label=${this.label}>\n <div class=\"indicator ${this._openIndex >= 0 ? 'visible' : ''}\" style=${indicatorStyle} aria-hidden=\"true\"></div>\n ${this.items.map((menu, i) => html`\n <div class=\"menu-wrap\">\n <button\n class=\"top-trigger ${this._openIndex === i ? 'open' : ''}\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded=${this._openIndex === i ? 'true' : 'false'}\n tabindex=${this._focusedTopIndex === i ? 0 : -1}\n @click=${(e: MouseEvent) => { e.stopPropagation(); this._focusedTopIndex = i; this._openIndex = this._openIndex === i ? -1 : i; }}\n @focus=${() => { this._focusedTopIndex = i; }}\n @mouseenter=${() => this._onTopHover(i)}\n @keydown=${(e: KeyboardEvent) => this._onTopKeydown(e, i)}\n >${menu.label}</button>\n ${this._openIndex === i ? html`\n <div class=\"menu\" role=\"menu\" aria-label=${menu.label} @keydown=${(e: KeyboardEvent) => this._onSubmenuKeydown(e, i)}>\n ${menu.children.map((child, idx) => child.separator\n ? html`<div class=\"divider\" role=\"separator\"></div>`\n : html`\n <button\n class=\"menu-item ${child.disabled ? 'disabled' : ''} ${child.danger ? 'danger' : ''}\"\n role=\"menuitem\"\n aria-disabled=${child.disabled ? 'true' : 'false'}\n style=\"--stagger-index: ${idx}\"\n @click=${() => this._selectChild(menu, child)}\n >\n <span>${child.label}</span>\n ${child.shortcut ? html`<span class=\"menu-item-shortcut\">${child.shortcut}</span>` : nothing}\n </button>\n `)}\n </div>\n ` : nothing}\n </div>\n `)}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-menubar': CgMenubar;\n }\n}\n"],"names":["CgMenubar","LitElement","triggers","bar","trigger","tRect","bRect","changed","idx","n","menuItems","target","triggerIdx","next","prev","items","current","el","delta","ch","start","i","j","char","fromIdx","menu","child","indicatorStyle","html","e","nothing","hostBlock","reducedMotion","menuListStyles","entranceStagger","css","__decorateClass","property","state","customElement"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cg-meter.d.ts","sourceRoot":"","sources":["../../../src/components/cg-meter/cg-meter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,KAAK,CAAC;AAI1D;;;;;;;;;;GAUG;AACH,qBACa,OAAQ,SAAQ,UAAU;IACrC,OAAgB,MAAM,4BAsFnB;IAEyB,KAAK,SAAK;IACV,GAAG,SAAK;IACR,GAAG,SAAO;IACV,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9C,KAAK,SAAM;IACM,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAY;IAC1C,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IACP,SAAS,UAAS;IAC5B,QAAQ,UAAS;IAE7D,wEAAwE;IACxE,OAAO,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"cg-meter.d.ts","sourceRoot":"","sources":["../../../src/components/cg-meter/cg-meter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,KAAK,CAAC;AAI1D;;;;;;;;;;GAUG;AACH,qBACa,OAAQ,SAAQ,UAAU;IACrC,OAAgB,MAAM,4BAsFnB;IAEyB,KAAK,SAAK;IACV,GAAG,SAAK;IACR,GAAG,SAAO;IACV,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9C,KAAK,SAAM;IACM,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAY;IAC1C,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IACP,SAAS,UAAS;IAC5B,QAAQ,UAAS;IAE7D,wEAAwE;IACxE,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,IAAI;IAOH,MAAM;CA+DhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
import { css as d, LitElement as
|
|
2
|
-
import { property as
|
|
3
|
-
import { h as
|
|
4
|
-
var
|
|
5
|
-
for (var
|
|
6
|
-
(
|
|
7
|
-
return
|
|
1
|
+
import { css as d, LitElement as v, nothing as s, html as h, svg as p } from "lit";
|
|
2
|
+
import { property as o, customElement as f } from "lit/decorators.js";
|
|
3
|
+
import { h as b, r as w } from "../../chunks/premium.css-DHekUEUt.js";
|
|
4
|
+
var y = Object.defineProperty, x = Object.getOwnPropertyDescriptor, a = (l, r, n, i) => {
|
|
5
|
+
for (var t = i > 1 ? void 0 : i ? x(r, n) : r, u = l.length - 1, c; u >= 0; u--)
|
|
6
|
+
(c = l[u]) && (t = (i ? c(r, n, t) : c(t)) || t);
|
|
7
|
+
return i && t && y(r, n, t), t;
|
|
8
8
|
};
|
|
9
|
-
let
|
|
9
|
+
let e = class extends v {
|
|
10
10
|
constructor() {
|
|
11
11
|
super(...arguments), this.value = 0, this.min = 0, this.max = 100, this.low = null, this.high = null, this.optimum = null, this.label = "", this.variant = "linear", this.size = "md", this.showValue = !1, this.disabled = !1;
|
|
12
12
|
}
|
|
13
13
|
/** Compute color class from thresholds, mirroring <meter> semantics. */
|
|
14
14
|
_level() {
|
|
15
|
-
const { value:
|
|
16
|
-
return
|
|
15
|
+
const { value: l, min: r, max: n } = this, i = this.low ?? r, t = this.high ?? n, u = this.optimum ?? (r + n) / 2, c = (g) => g < i ? 0 : g > t ? 2 : 1, m = Math.abs(c(l) - c(u));
|
|
16
|
+
return m === 0 ? "ok" : m === 1 ? "warn" : "bad";
|
|
17
17
|
}
|
|
18
18
|
_pct() {
|
|
19
|
-
const
|
|
20
|
-
return
|
|
19
|
+
const l = this.max - this.min;
|
|
20
|
+
return l <= 0 ? 0 : (Math.max(this.min, Math.min(this.max, this.value)) - this.min) / l * 100;
|
|
21
21
|
}
|
|
22
22
|
render() {
|
|
23
|
-
const
|
|
23
|
+
const l = this._level(), r = this._pct(), n = Math.max(this.min, Math.min(this.max, this.value)), i = this.showValue ? `${Math.round(r)}%` : "", t = this.label ? "cg-meter-label" : void 0;
|
|
24
24
|
if (this.variant === "circular") {
|
|
25
|
-
const
|
|
26
|
-
return
|
|
27
|
-
${this.label ?
|
|
25
|
+
const c = 2 * Math.PI * 42, m = c - r / 100 * c;
|
|
26
|
+
return h`
|
|
27
|
+
${this.label ? h`
|
|
28
28
|
<div class="header">
|
|
29
29
|
<span class="label" id=${t}>${this.label}</span>
|
|
30
30
|
</div>
|
|
31
|
-
` :
|
|
31
|
+
` : s}
|
|
32
32
|
<div class="circular"
|
|
33
33
|
role="meter"
|
|
34
|
-
aria-valuenow=${
|
|
34
|
+
aria-valuenow=${n}
|
|
35
35
|
aria-valuemin=${this.min}
|
|
36
36
|
aria-valuemax=${this.max}
|
|
37
|
-
aria-
|
|
38
|
-
aria-
|
|
39
|
-
aria-
|
|
37
|
+
aria-valuetext=${this.showValue ? i : s}
|
|
38
|
+
aria-labelledby=${t ?? s}
|
|
39
|
+
aria-label=${t ? s : this.label || "Meter"}
|
|
40
40
|
>
|
|
41
|
-
${
|
|
41
|
+
${p`
|
|
42
42
|
<svg viewBox="0 0 100 100">
|
|
43
43
|
<circle class="bg" cx="50" cy="50" r="${42}" fill="none" stroke-width="10"></circle>
|
|
44
44
|
<circle
|
|
45
|
-
class="fg ${
|
|
45
|
+
class="fg ${l}"
|
|
46
46
|
cx="50" cy="50" r="${42}"
|
|
47
47
|
fill="none" stroke-width="10"
|
|
48
|
-
stroke-dasharray="${
|
|
49
|
-
stroke-dashoffset="${
|
|
48
|
+
stroke-dasharray="${c}"
|
|
49
|
+
stroke-dashoffset="${m}"
|
|
50
50
|
></circle>
|
|
51
51
|
</svg>
|
|
52
52
|
`}
|
|
53
|
-
${this.showValue ?
|
|
53
|
+
${this.showValue ? h`<div class="center">${i}</div>` : s}
|
|
54
54
|
</div>
|
|
55
55
|
`;
|
|
56
56
|
}
|
|
57
|
-
return
|
|
58
|
-
${this.label || this.showValue ?
|
|
57
|
+
return h`
|
|
58
|
+
${this.label || this.showValue ? h`
|
|
59
59
|
<div class="header">
|
|
60
|
-
${this.label ?
|
|
61
|
-
${this.showValue ?
|
|
60
|
+
${this.label ? h`<span class="label" id=${t}>${this.label}</span>` : s}
|
|
61
|
+
${this.showValue ? h`<span class="value-text">${i}</span>` : s}
|
|
62
62
|
</div>
|
|
63
|
-
` :
|
|
63
|
+
` : s}
|
|
64
64
|
<div class="track"
|
|
65
65
|
role="meter"
|
|
66
|
-
aria-valuenow=${
|
|
66
|
+
aria-valuenow=${n}
|
|
67
67
|
aria-valuemin=${this.min}
|
|
68
68
|
aria-valuemax=${this.max}
|
|
69
|
-
aria-
|
|
70
|
-
aria-
|
|
71
|
-
aria-
|
|
69
|
+
aria-valuetext=${this.showValue ? i : s}
|
|
70
|
+
aria-labelledby=${t ?? s}
|
|
71
|
+
aria-label=${t ? s : this.label || "Meter"}
|
|
72
72
|
>
|
|
73
|
-
<div class="fill ${
|
|
73
|
+
<div class="fill ${l}" style="width: ${r}%"></div>
|
|
74
74
|
</div>
|
|
75
75
|
`;
|
|
76
76
|
}
|
|
77
77
|
};
|
|
78
|
-
|
|
78
|
+
e.styles = [b, w, d`
|
|
79
79
|
:host { width: 100%; font-family: var(--cg-font-family-primary); }
|
|
80
80
|
:host([disabled]) { opacity: 0.5; cursor: not-allowed; }
|
|
81
81
|
:host([disabled]) .track,
|
|
@@ -104,7 +104,7 @@ r.styles = [p, f, d`
|
|
|
104
104
|
/* ── Linear ── */
|
|
105
105
|
.track {
|
|
106
106
|
width: 100%;
|
|
107
|
-
background: var(--cg-color-
|
|
107
|
+
background: var(--cg-color-loading-spinner-secondary);
|
|
108
108
|
border-radius: var(--cg-component-meter-radius);
|
|
109
109
|
overflow: hidden;
|
|
110
110
|
position: relative;
|
|
@@ -140,7 +140,7 @@ r.styles = [p, f, d`
|
|
|
140
140
|
transform: rotate(-90deg);
|
|
141
141
|
}
|
|
142
142
|
.circular .bg {
|
|
143
|
-
stroke: var(--cg-color-
|
|
143
|
+
stroke: var(--cg-color-loading-spinner-secondary);
|
|
144
144
|
}
|
|
145
145
|
.circular .fg {
|
|
146
146
|
transition: stroke-dashoffset var(--cg-transition-duration-slow) var(--cg-transition-easing-default);
|
|
@@ -162,43 +162,43 @@ r.styles = [p, f, d`
|
|
|
162
162
|
font-variant-numeric: tabular-nums;
|
|
163
163
|
}
|
|
164
164
|
`];
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
],
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
],
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
],
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
],
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
],
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
],
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
],
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
],
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
],
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
],
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
],
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
],
|
|
165
|
+
a([
|
|
166
|
+
o({ type: Number })
|
|
167
|
+
], e.prototype, "value", 2);
|
|
168
|
+
a([
|
|
169
|
+
o({ type: Number })
|
|
170
|
+
], e.prototype, "min", 2);
|
|
171
|
+
a([
|
|
172
|
+
o({ type: Number })
|
|
173
|
+
], e.prototype, "max", 2);
|
|
174
|
+
a([
|
|
175
|
+
o({ type: Number })
|
|
176
|
+
], e.prototype, "low", 2);
|
|
177
|
+
a([
|
|
178
|
+
o({ type: Number })
|
|
179
|
+
], e.prototype, "high", 2);
|
|
180
|
+
a([
|
|
181
|
+
o({ type: Number })
|
|
182
|
+
], e.prototype, "optimum", 2);
|
|
183
|
+
a([
|
|
184
|
+
o()
|
|
185
|
+
], e.prototype, "label", 2);
|
|
186
|
+
a([
|
|
187
|
+
o({ reflect: !0 })
|
|
188
|
+
], e.prototype, "variant", 2);
|
|
189
|
+
a([
|
|
190
|
+
o({ reflect: !0 })
|
|
191
|
+
], e.prototype, "size", 2);
|
|
192
|
+
a([
|
|
193
|
+
o({ type: Boolean, attribute: "show-value" })
|
|
194
|
+
], e.prototype, "showValue", 2);
|
|
195
|
+
a([
|
|
196
|
+
o({ type: Boolean, reflect: !0 })
|
|
197
|
+
], e.prototype, "disabled", 2);
|
|
198
|
+
e = a([
|
|
199
|
+
f("cg-meter")
|
|
200
|
+
], e);
|
|
201
201
|
export {
|
|
202
|
-
|
|
202
|
+
e as CgMeter
|
|
203
203
|
};
|
|
204
204
|
//# sourceMappingURL=cg-meter.js.map
|