@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cg-otp-input.js","sources":["../../../src/components/cg-otp-input/cg-otp-input.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBase, reducedMotion } from '../../styles/index.js';\n\n/**\n * <cg-otp-input> — One-time password input with individual digit boxes.\n *\n * @example\n * ```html\n * <cg-otp-input length=\"6\"></cg-otp-input>\n * <cg-otp-input length=\"4\" mask></cg-otp-input>\n * ```\n *\n * @fires {CustomEvent<{value: string}>} cg-otp-change - On each digit change\n * @fires {CustomEvent<{value: string}>} cg-otp-complete - When all digits filled\n *\n * @cssprop --cg-component-otp-box-width - Box width (48px)\n * @cssprop --cg-component-otp-box-height - Box height (56px)\n * @cssprop --cg-color-input-border-default - Default border color\n */\n@customElement('cg-otp-input')\nexport class CgOtpInput extends LitElement {\n static override styles = [hostBase, reducedMotion, css`\n .container {\n display: flex;\n gap: var(--cg-spacing-8);\n }\n\n .box {\n width: var(--cg-component-otp-box-width);\n height: var(--cg-component-otp-box-height);\n border: var(--cg-border-width-50) solid var(--cg-color-input-border-default);\n border-radius: var(--cg-border-radius-100);\n background: var(--cg-color-input-background-default);\n color: var(--cg-color-input-text-default);\n font-family: inherit;\n font-size: var(--cg-font-size-lg);\n font-weight: var(--cg-font-weight-semibold);\n text-align: center;\n caret-color: var(--cg-color-action-primary-background-default);\n outline: none;\n transition:\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n box-shadow var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n animation: otpCellIn var(--cg-transition-duration-slow) var(--cg-transition-easing-default) both;\n }\n\n @keyframes otpCellIn {\n from { opacity: 0; transform: translateY(var(--cg-spacing-4)) scale(0.95); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n\n .box:hover:not(:disabled) {\n border-color: var(--cg-color-input-border-hover);\n }\n\n .box:focus {\n border-color: var(--cg-color-input-border-focus);\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n transform: scale(1.05);\n }\n\n .box:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n background: var(--cg-color-input-background-disabled);\n border-color: var(--cg-color-input-border-disabled);\n }\n\n :host([error]) .box {\n border-color: var(--cg-color-input-border-error);\n }\n :host([error]) .box:focus {\n border-color: var(--cg-color-status-error-text-default);\n box-shadow: 0 0 0 3px var(--cg-shadow-focus-error);\n }\n\n /* ── Success state ── */\n :host([success]) .box {\n border-color: var(--cg-color-status-success-text-default);\n }\n :host([success]) .box:focus {\n border-color: var(--cg-color-status-success-text-default);\n box-shadow: 0 0 0 3px var(--cg-shadow-focus-success);\n }\n\n .box.filled {\n border-color: var(--cg-color-surface-container-border);\n }\n\n /* Rounded variants */\n :host([rounded=\"none\"]) .box { border-radius: 0; }\n :host([rounded=\"sm\"]) .box { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .box { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .box { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) .box { border-radius: var(--cg-border-radius-full); }\n\n /* Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n .box {\n animation: none !important;\n transform: none !important;\n }\n }\n `];\n\n @property({ type: Number }) length = 6;\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n @property() value = '';\n @property({ type: Boolean, reflect: true }) disabled = false;\n @property({ type: Boolean, reflect: true }) error = false;\n @property({ type: Boolean, reflect: true }) success = false;\n @property({ type: Boolean }) mask = false;\n\n @state() private _digits: string[] = [];\n\n override connectedCallback() {\n super.connectedCallback();\n this._syncDigits();\n }\n\n override updated(changed: Map<string, unknown>) {\n if (changed.has('value') || changed.has('length')) this._syncDigits();\n }\n\n private _syncDigits() {\n this._digits = Array.from({ length: this.length }, (_, i) => this.value[i] || '');\n }\n\n private _getBoxes(): HTMLInputElement[] {\n return Array.from(this.shadowRoot?.querySelectorAll<HTMLInputElement>('.box') ?? []);\n }\n\n private _focusBox(index: number) {\n const boxes = this._getBoxes();\n const target = boxes[Math.min(Math.max(0, index), this.length - 1)];\n target?.focus();\n target?.select();\n }\n\n private _emitValue() {\n const val = this._digits.join('');\n this.value = val;\n this.dispatchEvent(new CustomEvent('cg-otp-change', { detail: { value: val }, bubbles: true, composed: true }));\n if (val.length === this.length && val.split('').every(c => c !== '')) {\n this.dispatchEvent(new CustomEvent('cg-otp-complete', { detail: { value: val }, bubbles: true, composed: true }));\n }\n }\n\n private _onInput(index: number, e: Event) {\n const input = e.target as HTMLInputElement;\n const char = input.value.replace(/[^0-9]/g, '').slice(-1);\n this._digits = [...this._digits];\n this._digits[index] = char;\n input.value = this.mask && char ? '\\u2022' : char;\n this._emitValue();\n if (char && index < this.length - 1) this._focusBox(index + 1);\n }\n\n private _onKeyDown(index: number, e: KeyboardEvent) {\n if (e.key === 'Backspace') {\n e.preventDefault();\n if (this._digits[index]) {\n this._digits = [...this._digits];\n this._digits[index] = '';\n (e.target as HTMLInputElement).value = '';\n this._emitValue();\n } else if (index > 0) {\n this._focusBox(index - 1);\n this._digits = [...this._digits];\n this._digits[index - 1] = '';\n this._emitValue();\n }\n } else if (e.key === 'ArrowLeft' && index > 0) {\n e.preventDefault(); this._focusBox(index - 1);\n } else if (e.key === 'ArrowRight' && index < this.length - 1) {\n e.preventDefault(); this._focusBox(index + 1);\n }\n }\n\n private _onPaste(e: ClipboardEvent) {\n e.preventDefault();\n const data = (e.clipboardData?.getData('text') || '').replace(/[^0-9]/g, '').slice(0, this.length);\n this._digits = Array.from({ length: this.length }, (_, i) => data[i] || '');\n this._emitValue();\n this.requestUpdate();\n this.updateComplete.then(() => {\n this._focusBox(Math.min(data.length, this.length - 1));\n const boxes = this._getBoxes();\n this._digits.forEach((d, i) => { if (boxes[i]) boxes[i].value = this.mask && d ? '\\u2022' : d; });\n });\n }\n\n override render() {\n return html`\n <div class=\"container\" role=\"group\" aria-label=\"One-time password input\">\n ${Array.from({ length: this.length }, (_, i) => {\n const digit = this._digits[i] || '';\n const display = this.mask && digit ? '\\u2022' : digit;\n return html`\n <input class=\"box ${digit ? 'filled' : ''}\"\n type=\"text\" inputmode=\"numeric\" maxlength=\"1\"\n style=\"animation-delay: ${i * 40}ms\"\n .value=${display}\n ?disabled=${this.disabled}\n autocomplete=\"one-time-code\"\n aria-label=${`Digit ${i + 1} of ${this.length}`}\n @input=${(e: Event) => this._onInput(i, e)}\n @keydown=${(e: KeyboardEvent) => this._onKeyDown(i, e)}\n @paste=${this._onPaste}\n @focus=${(e: Event) => (e.target as HTMLInputElement).select()} />\n `;\n })}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-otp-input': CgOtpInput;\n }\n}\n"],"names":["CgOtpInput","LitElement","changed","_","i","index","target","val","c","input","char","e","data","boxes","d","html","digit","display","hostBase","reducedMotion","css","__decorateClass","property","state","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cg-otp-input.js","sources":["../../../src/components/cg-otp-input/cg-otp-input.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBase, reducedMotion } from '../../styles/index.js';\n\n/**\n * <cg-otp-input> — One-time password input with individual digit boxes.\n *\n * @example\n * ```html\n * <cg-otp-input length=\"6\"></cg-otp-input>\n * <cg-otp-input length=\"4\" mask></cg-otp-input>\n * ```\n *\n * @fires {CustomEvent<{value: string}>} cg-otp-change - On each digit change\n * @fires {CustomEvent<{value: string}>} cg-otp-complete - When all digits filled\n *\n * @cssprop --cg-component-otp-box-width - Box width (48px)\n * @cssprop --cg-component-otp-box-height - Box height (56px)\n * @cssprop --cg-color-input-border-default - Default border color\n */\n@customElement('cg-otp-input')\nexport class CgOtpInput extends LitElement {\n static override styles = [hostBase, reducedMotion, css`\n .container {\n display: flex;\n gap: var(--cg-spacing-8);\n }\n\n .box {\n width: var(--cg-component-otp-box-width);\n height: var(--cg-component-otp-box-height);\n border: var(--cg-border-width-50) solid var(--cg-color-input-border-default);\n border-radius: var(--cg-border-radius-100);\n background: var(--cg-color-input-background-default);\n color: var(--cg-color-input-text-default);\n font-family: inherit;\n font-size: var(--cg-font-size-lg);\n font-weight: var(--cg-font-weight-semibold);\n text-align: center;\n caret-color: var(--cg-color-accent-text);\n outline: none;\n transition:\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n box-shadow var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n animation: otpCellIn var(--cg-transition-duration-slow) var(--cg-transition-easing-default) both;\n }\n\n @keyframes otpCellIn {\n from { opacity: 0; transform: translateY(var(--cg-spacing-4)) scale(0.95); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n\n .box:hover:not(:disabled) {\n border-color: var(--cg-color-input-border-hover);\n }\n\n .box:focus {\n border-color: var(--cg-color-input-border-focus);\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n }\n\n .box:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n background: var(--cg-color-input-background-disabled);\n border-color: var(--cg-color-input-border-disabled);\n }\n\n :host([error]) .box {\n border-color: var(--cg-color-input-border-error);\n }\n :host([error]) .box:focus {\n border-color: var(--cg-color-status-error-text-default);\n box-shadow: 0 0 0 3px var(--cg-shadow-focus-error);\n }\n\n /* ── Success state ── */\n :host([success]) .box {\n border-color: var(--cg-color-status-success-text-default);\n }\n :host([success]) .box:focus {\n border-color: var(--cg-color-status-success-text-default);\n box-shadow: 0 0 0 3px var(--cg-shadow-focus-success);\n }\n\n .box.filled {\n border-color: var(--cg-color-surface-cards-border-strong);\n }\n\n /* Rounded variants */\n :host([rounded=\"none\"]) .box { border-radius: 0; }\n :host([rounded=\"sm\"]) .box { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .box { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .box { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) .box { border-radius: var(--cg-border-radius-full); }\n\n /* Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n .box {\n animation: none !important;\n transform: none !important;\n }\n }\n `];\n\n @property({ type: Number }) length = 6;\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n @property() value = '';\n @property({ type: Boolean, reflect: true }) disabled = false;\n @property({ type: Boolean, reflect: true }) error = false;\n @property({ type: Boolean, reflect: true }) success = false;\n @property({ type: Boolean }) mask = false;\n\n @state() private _digits: string[] = [];\n\n override connectedCallback() {\n super.connectedCallback();\n this._syncDigits();\n }\n\n override updated(changed: Map<string, unknown>) {\n if ((changed.has('value') && this.value !== this._digits.join('')) || changed.has('length')) this._syncDigits();\n }\n\n private _syncDigits() {\n this._digits = Array.from({ length: this.length }, (_, i) => this.value[i] || '');\n }\n\n private _getBoxes(): HTMLInputElement[] {\n return Array.from(this.shadowRoot?.querySelectorAll<HTMLInputElement>('.box') ?? []);\n }\n\n private _focusBox(index: number) {\n const boxes = this._getBoxes();\n const target = boxes[Math.min(Math.max(0, index), this.length - 1)];\n target?.focus();\n target?.select();\n }\n\n private _emitValue() {\n const val = this._digits.join('');\n this.value = val;\n this.dispatchEvent(new CustomEvent('cg-otp-change', { detail: { value: val }, bubbles: true, composed: true }));\n if (val.length === this.length && val.split('').every(c => c !== '')) {\n this.dispatchEvent(new CustomEvent('cg-otp-complete', { detail: { value: val }, bubbles: true, composed: true }));\n }\n }\n\n private _onInput(index: number, e: Event) {\n const input = e.target as HTMLInputElement;\n const chars = input.value.replace(/[^0-9]/g, '');\n if (chars.length > 1) {\n // OS one-time-code autofill inserts the whole code as one input event —\n // distribute across boxes like paste instead of keeping only one digit.\n this._digits = Array.from({ length: this.length }, (_, i) => chars[i] || '');\n this._emitValue();\n this.updateComplete.then(() => {\n const boxes = this._getBoxes();\n this._digits.forEach((d, i) => {\n const box = boxes[i];\n if (box) box.value = this.mask && d ? '\\u2022' : d;\n });\n this._focusBox(Math.min(chars.length, this.length - 1));\n });\n return;\n }\n const char = chars;\n this._digits = [...this._digits];\n this._digits[index] = char;\n input.value = this.mask && char ? '\\u2022' : char;\n this._emitValue();\n if (char && index < this.length - 1) this._focusBox(index + 1);\n }\n\n private _onKeyDown(index: number, e: KeyboardEvent) {\n if (e.key === 'Backspace') {\n e.preventDefault();\n if (this._digits[index]) {\n this._digits = [...this._digits];\n this._digits[index] = '';\n (e.target as HTMLInputElement).value = '';\n this._emitValue();\n } else if (index > 0) {\n this._focusBox(index - 1);\n this._digits = [...this._digits];\n this._digits[index - 1] = '';\n this._emitValue();\n }\n } else if (e.key === 'ArrowLeft' && index > 0) {\n e.preventDefault(); this._focusBox(index - 1);\n } else if (e.key === 'ArrowRight' && index < this.length - 1) {\n e.preventDefault(); this._focusBox(index + 1);\n }\n }\n\n private _onPaste(e: ClipboardEvent) {\n e.preventDefault();\n const data = (e.clipboardData?.getData('text') || '').replace(/[^0-9]/g, '').slice(0, this.length);\n this._digits = Array.from({ length: this.length }, (_, i) => data[i] || '');\n this._emitValue();\n this.requestUpdate();\n this.updateComplete.then(() => {\n this._focusBox(Math.min(data.length, this.length - 1));\n const boxes = this._getBoxes();\n this._digits.forEach((d, i) => { if (boxes[i]) boxes[i].value = this.mask && d ? '\\u2022' : d; });\n });\n }\n\n override render() {\n return html`\n <div class=\"container\" role=\"group\" aria-label=\"One-time password input\">\n ${Array.from({ length: this.length }, (_, i) => {\n const digit = this._digits[i] || '';\n const display = this.mask && digit ? '\\u2022' : digit;\n return html`\n <input class=\"box ${digit ? 'filled' : ''}\"\n type=\"text\" inputmode=\"numeric\" maxlength=\"1\"\n style=\"animation-delay: calc(${i} * var(--cg-transition-duration-fast) / 2)\"\n .value=${display}\n ?disabled=${this.disabled}\n aria-invalid=${this.error ? 'true' : 'false'}\n autocomplete=\"one-time-code\"\n aria-label=${`Digit ${i + 1} of ${this.length}`}\n @input=${(e: Event) => this._onInput(i, e)}\n @keydown=${(e: KeyboardEvent) => this._onKeyDown(i, e)}\n @paste=${this._onPaste}\n @focus=${(e: Event) => (e.target as HTMLInputElement).select()} />\n `;\n })}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-otp-input': CgOtpInput;\n }\n}\n"],"names":["CgOtpInput","LitElement","changed","_","i","index","target","val","c","input","chars","boxes","d","box","char","e","data","html","digit","display","hostBase","reducedMotion","css","__decorateClass","property","state","customElement"],"mappings":"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"}
|
|
@@ -20,6 +20,8 @@ export declare class CgPagination extends LitElement {
|
|
|
20
20
|
total: number;
|
|
21
21
|
current: number;
|
|
22
22
|
siblings: number;
|
|
23
|
+
/** Accepts attribute "false" — plain Lit Booleans can never be turned off from markup. */
|
|
24
|
+
private static _boolConverter;
|
|
23
25
|
showFirst: boolean;
|
|
24
26
|
showLast: boolean;
|
|
25
27
|
private _goToPage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cg-pagination.d.ts","sourceRoot":"","sources":["../../../src/components/cg-pagination/cg-pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD;;;;;;;;;;;;;GAaG;AACH,qBACa,YAAa,SAAQ,UAAU;IAC1C,OAAgB,MAAM,4BA2HnB;IAE0B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAQ;IACtD,KAAK,SAAK;IACV,OAAO,SAAK;IACZ,QAAQ,SAAK;
|
|
1
|
+
{"version":3,"file":"cg-pagination.d.ts","sourceRoot":"","sources":["../../../src/components/cg-pagination/cg-pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD;;;;;;;;;;;;;GAaG;AACH,qBACa,YAAa,SAAQ,UAAU;IAC1C,OAAgB,MAAM,4BA2HnB;IAE0B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAQ;IACtD,KAAK,SAAK;IACV,OAAO,SAAK;IACZ,QAAQ,SAAK;IACzC,0FAA0F;IAC1F,OAAO,CAAC,MAAM,CAAC,cAAc,CAA0D;IACjC,SAAS,UAAQ;IACjB,QAAQ,UAAQ;IAEtE,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,SAAS;IAqCR,MAAM;CAoDhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,YAAY,CAAC;KAC/B;CACF"}
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
import { css as d, LitElement as
|
|
1
|
+
import { css as d, LitElement as p, html as l, nothing as h } from "lit";
|
|
2
2
|
import { property as c, customElement as b } from "lit/decorators.js";
|
|
3
|
-
import { h as v, r as f } from "../../chunks/premium.css-
|
|
4
|
-
var m = Object.defineProperty, w = Object.getOwnPropertyDescriptor, o = (
|
|
5
|
-
for (var i =
|
|
6
|
-
(s =
|
|
7
|
-
return
|
|
3
|
+
import { h as v, r as f } from "../../chunks/premium.css-DHekUEUt.js";
|
|
4
|
+
var m = Object.defineProperty, w = Object.getOwnPropertyDescriptor, o = (t, a, n, r) => {
|
|
5
|
+
for (var i = r > 1 ? void 0 : r ? w(a, n) : a, g = t.length - 1, s; g >= 0; g--)
|
|
6
|
+
(s = t[g]) && (i = (r ? s(a, n, i) : s(i)) || i);
|
|
7
|
+
return r && i && m(a, n, i), i;
|
|
8
8
|
};
|
|
9
|
-
let
|
|
9
|
+
let e = class extends p {
|
|
10
10
|
constructor() {
|
|
11
11
|
super(...arguments), this.size = "md", this.rounded = "md", this.total = 1, this.current = 1, this.siblings = 1, this.showFirst = !0, this.showLast = !0;
|
|
12
12
|
}
|
|
13
|
-
_goToPage(
|
|
14
|
-
|
|
13
|
+
_goToPage(t) {
|
|
14
|
+
t < 1 || t > this.total || t === this.current || this.dispatchEvent(new CustomEvent("cg-page-change", {
|
|
15
15
|
bubbles: !0,
|
|
16
16
|
composed: !0,
|
|
17
|
-
detail: { page:
|
|
17
|
+
detail: { page: t }
|
|
18
18
|
}));
|
|
19
19
|
}
|
|
20
20
|
_getPages() {
|
|
21
|
-
const
|
|
22
|
-
if (
|
|
23
|
-
return Array.from({ length:
|
|
24
|
-
const
|
|
25
|
-
this.showFirst &&
|
|
26
|
-
const i = Math.max(2, a - n), g = Math.min(
|
|
27
|
-
i > 2 &&
|
|
21
|
+
const t = this.total, a = this.current, n = this.siblings;
|
|
22
|
+
if (t <= 7)
|
|
23
|
+
return Array.from({ length: t }, (s, u) => u + 1);
|
|
24
|
+
const r = [];
|
|
25
|
+
this.showFirst && r.push(1);
|
|
26
|
+
const i = Math.max(2, a - n), g = Math.min(t - 1, a + n);
|
|
27
|
+
i > 2 && r.push("ellipsis");
|
|
28
28
|
for (let s = i; s <= g; s++)
|
|
29
|
-
|
|
30
|
-
return g <
|
|
29
|
+
r.push(s);
|
|
30
|
+
return g < t - 1 && r.push("ellipsis"), this.showLast && r.push(t), r;
|
|
31
31
|
}
|
|
32
32
|
render() {
|
|
33
|
-
const
|
|
33
|
+
const t = this._getPages(), a = this.current <= 1, n = this.current >= this.total;
|
|
34
34
|
return l`
|
|
35
35
|
<nav aria-label="Pagination">
|
|
36
36
|
<ul class="pagination">
|
|
37
37
|
<li>
|
|
38
38
|
<button
|
|
39
39
|
class="page-btn"
|
|
40
|
-
|
|
40
|
+
aria-disabled="${a ? "true" : "false"}"
|
|
41
41
|
aria-label="Previous page"
|
|
42
42
|
@click="${() => this._goToPage(this.current - 1)}"
|
|
43
43
|
>
|
|
@@ -45,19 +45,19 @@ let r = class extends u {
|
|
|
45
45
|
</button>
|
|
46
46
|
</li>
|
|
47
47
|
|
|
48
|
-
${
|
|
49
|
-
if (
|
|
50
|
-
return l`<li><span class="ellipsis" aria-hidden="true"
|
|
51
|
-
const i =
|
|
48
|
+
${t.map((r) => {
|
|
49
|
+
if (r === "ellipsis")
|
|
50
|
+
return l`<li><span class="ellipsis" aria-hidden="true">…</span></li>`;
|
|
51
|
+
const i = r === this.current;
|
|
52
52
|
return l`
|
|
53
53
|
<li>
|
|
54
54
|
<button
|
|
55
55
|
class="page-btn ${i ? "active" : ""}"
|
|
56
|
-
aria-label="Page ${
|
|
56
|
+
aria-label="Page ${r}"
|
|
57
57
|
aria-current="${i ? "page" : h}"
|
|
58
|
-
@click="${() => this._goToPage(
|
|
58
|
+
@click="${() => this._goToPage(r)}"
|
|
59
59
|
>
|
|
60
|
-
${
|
|
60
|
+
${r}
|
|
61
61
|
</button>
|
|
62
62
|
</li>
|
|
63
63
|
`;
|
|
@@ -66,7 +66,7 @@ let r = class extends u {
|
|
|
66
66
|
<li>
|
|
67
67
|
<button
|
|
68
68
|
class="page-btn"
|
|
69
|
-
|
|
69
|
+
aria-disabled="${n ? "true" : "false"}"
|
|
70
70
|
aria-label="Next page"
|
|
71
71
|
@click="${() => this._goToPage(this.current + 1)}"
|
|
72
72
|
>
|
|
@@ -78,7 +78,7 @@ let r = class extends u {
|
|
|
78
78
|
`;
|
|
79
79
|
}
|
|
80
80
|
};
|
|
81
|
-
|
|
81
|
+
e.styles = [v, f, d`
|
|
82
82
|
:host {
|
|
83
83
|
display: flex;
|
|
84
84
|
}
|
|
@@ -118,28 +118,29 @@ r.styles = [v, f, d`
|
|
|
118
118
|
-webkit-font-smoothing: antialiased;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
.page-btn:hover:not(
|
|
121
|
+
.page-btn:hover:not([aria-disabled="true"]):not(.active) {
|
|
122
122
|
background: var(--cg-overlay-accent-subtle);
|
|
123
|
-
color: var(--cg-color-surface-container-text);
|
|
124
|
-
border-color: var(--cg-color-surface-base-border);
|
|
125
123
|
}
|
|
126
124
|
|
|
127
|
-
.page-btn:active:not(
|
|
125
|
+
.page-btn:active:not([aria-disabled="true"]) {
|
|
128
126
|
transform: scale(var(--cg-interaction-press-scale));
|
|
129
127
|
}
|
|
130
128
|
|
|
131
129
|
.page-btn:focus-visible {
|
|
132
|
-
box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);
|
|
133
130
|
outline: none;
|
|
131
|
+
box-shadow:
|
|
132
|
+
0 0 0 var(--cg-border-width-100) var(--cg-color-focus-ring-offset),
|
|
133
|
+
0 0 0 calc(var(--cg-border-width-100) * 2) var(--cg-color-focus-ring);
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
.page-btn
|
|
136
|
+
.page-btn[aria-disabled="true"] {
|
|
137
137
|
opacity: 0.5;
|
|
138
138
|
cursor: not-allowed;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
/* ── Active page ── */
|
|
142
142
|
.page-btn.active {
|
|
143
|
+
cursor: default;
|
|
143
144
|
background: var(--cg-color-action-primary-background-default);
|
|
144
145
|
color: var(--cg-color-action-primary-text-default);
|
|
145
146
|
border-color: var(--cg-color-action-primary-border-default);
|
|
@@ -156,7 +157,6 @@ r.styles = [v, f, d`
|
|
|
156
157
|
color: var(--cg-color-surface-container-outlined);
|
|
157
158
|
font-size: var(--cg-font-size-sm);
|
|
158
159
|
user-select: none;
|
|
159
|
-
letter-spacing: var(--cg-letter-spacing-widest);
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
/* Size variants */
|
|
@@ -202,31 +202,32 @@ r.styles = [v, f, d`
|
|
|
202
202
|
:host([rounded="lg"]) .page-btn { border-radius: var(--cg-border-radius-150); }
|
|
203
203
|
:host([rounded="full"]) .page-btn { border-radius: var(--cg-border-radius-full); }
|
|
204
204
|
`];
|
|
205
|
+
e._boolConverter = { fromAttribute: (t) => t !== "false" };
|
|
205
206
|
o([
|
|
206
207
|
c({ reflect: !0 })
|
|
207
|
-
],
|
|
208
|
+
], e.prototype, "size", 2);
|
|
208
209
|
o([
|
|
209
210
|
c({ reflect: !0 })
|
|
210
|
-
],
|
|
211
|
+
], e.prototype, "rounded", 2);
|
|
211
212
|
o([
|
|
212
213
|
c({ type: Number })
|
|
213
|
-
],
|
|
214
|
+
], e.prototype, "total", 2);
|
|
214
215
|
o([
|
|
215
216
|
c({ type: Number })
|
|
216
|
-
],
|
|
217
|
+
], e.prototype, "current", 2);
|
|
217
218
|
o([
|
|
218
219
|
c({ type: Number })
|
|
219
|
-
],
|
|
220
|
+
], e.prototype, "siblings", 2);
|
|
220
221
|
o([
|
|
221
|
-
c({
|
|
222
|
-
],
|
|
222
|
+
c({ converter: e._boolConverter })
|
|
223
|
+
], e.prototype, "showFirst", 2);
|
|
223
224
|
o([
|
|
224
|
-
c({
|
|
225
|
-
],
|
|
226
|
-
|
|
225
|
+
c({ converter: e._boolConverter })
|
|
226
|
+
], e.prototype, "showLast", 2);
|
|
227
|
+
e = o([
|
|
227
228
|
b("cg-pagination")
|
|
228
|
-
],
|
|
229
|
+
], e);
|
|
229
230
|
export {
|
|
230
|
-
|
|
231
|
+
e as CgPagination
|
|
231
232
|
};
|
|
232
233
|
//# sourceMappingURL=cg-pagination.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cg-pagination.js","sources":["../../../src/components/cg-pagination/cg-pagination.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\n/**\n * @element cg-pagination\n * Page navigation with prev/next arrows, ellipsis gaps, and configurable siblings.\n *\n * @example\n * ```html\n * <cg-pagination total=\"20\" current=\"5\"></cg-pagination>\n * ```\n *\n * @fires {CustomEvent<{page: number}>} cg-page-change - When a page button is clicked\n *\n * @cssprop --cg-component-pagination-button-size - Button size (36px)\n * @cssprop --cg-color-action-primary-background-default - Active page background\n */\n@customElement('cg-pagination')\nexport class CgPagination extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host {\n display: flex;\n }\n\n .pagination {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-4);\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n .page-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--cg-component-pagination-button-size);\n height: var(--cg-component-pagination-button-size);\n padding: 0 var(--cg-spacing-8);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-base-border);\n border-radius: var(--cg-border-radius-100);\n background: transparent;\n color: var(--cg-color-surface-container-text);\n font-family: inherit;\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n font-variant-numeric: tabular-nums;\n cursor: pointer;\n line-height: 1;\n white-space: nowrap;\n transition:\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\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 -webkit-font-smoothing: antialiased;\n }\n\n .page-btn:hover:not(:disabled):not(.active) {\n background: var(--cg-overlay-accent-subtle);\n color: var(--cg-color-surface-container-text);\n border-color: var(--cg-color-surface-base-border);\n }\n\n .page-btn:active:not(:disabled) {\n transform: scale(var(--cg-interaction-press-scale));\n }\n\n .page-btn:focus-visible {\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n outline: none;\n }\n\n .page-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* ── Active page ── */\n .page-btn.active {\n background: var(--cg-color-action-primary-background-default);\n color: var(--cg-color-action-primary-text-default);\n border-color: var(--cg-color-action-primary-border-default);\n font-weight: var(--cg-font-weight-semibold);\n }\n\n /* ── Ellipsis ── */\n .ellipsis {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--cg-component-pagination-button-size);\n height: var(--cg-component-pagination-button-size);\n color: var(--cg-color-surface-container-outlined);\n font-size: var(--cg-font-size-sm);\n user-select: none;\n letter-spacing: var(--cg-letter-spacing-widest);\n }\n\n /* Size variants */\n :host([size=\"sm\"]) .page-btn {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n }\n :host([size=\"sm\"]) .ellipsis {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n }\n\n :host([size=\"lg\"]) .page-btn {\n min-width: var(--cg-spacing-48);\n height: var(--cg-spacing-48);\n font-size: var(--cg-font-size-base);\n }\n :host([size=\"lg\"]) .ellipsis {\n min-width: var(--cg-spacing-48);\n height: var(--cg-spacing-48);\n font-size: var(--cg-font-size-base);\n }\n\n @media (max-width: 480px) {\n .page-btn {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n padding: 0 var(--cg-spacing-4);\n }\n .ellipsis {\n min-width: var(--cg-spacing-24);\n height: var(--cg-spacing-32);\n }\n }\n\n /* Rounded variants */\n :host([rounded=\"none\"]) .page-btn { border-radius: 0; }\n :host([rounded=\"sm\"]) .page-btn { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .page-btn { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .page-btn { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) .page-btn { border-radius: var(--cg-border-radius-full); }\n `];\n\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n @property({ type: Number }) total = 1;\n @property({ type: Number }) current = 1;\n @property({ type: Number }) siblings = 1;\n @property({ type: Boolean }) showFirst = true;\n @property({ type: Boolean }) showLast = true;\n\n private _goToPage(page: number) {\n if (page < 1 || page > this.total || page === this.current) return;\n this.dispatchEvent(new CustomEvent('cg-page-change', {\n bubbles: true,\n composed: true,\n detail: { page },\n }));\n }\n\n private _getPages(): (number | 'ellipsis')[] {\n const total = this.total;\n const current = this.current;\n const siblings = this.siblings;\n\n if (total <= 7) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const pages: (number | 'ellipsis')[] = [];\n\n if (this.showFirst) {\n pages.push(1);\n }\n\n const rangeStart = Math.max(2, current - siblings);\n const rangeEnd = Math.min(total - 1, current + siblings);\n\n if (rangeStart > 2) {\n pages.push('ellipsis');\n }\n\n for (let i = rangeStart; i <= rangeEnd; i++) {\n pages.push(i);\n }\n\n if (rangeEnd < total - 1) {\n pages.push('ellipsis');\n }\n\n if (this.showLast) {\n pages.push(total);\n }\n\n return pages;\n }\n\n override render() {\n const pages = this._getPages();\n const isFirstPage = this.current <= 1;\n const isLastPage = this.current >= this.total;\n\n return html`\n <nav aria-label=\"Pagination\">\n <ul class=\"pagination\">\n <li>\n <button\n class=\"page-btn\"\n ?disabled=\"${isFirstPage}\"\n aria-label=\"Previous page\"\n @click=\"${() => this._goToPage(this.current - 1)}\"\n >\n <cg-icon name=\"chevron-left\" size=\"sm\"></cg-icon>\n </button>\n </li>\n\n ${pages.map(page => {\n if (page === 'ellipsis') {\n return html`<li><span class=\"ellipsis\" aria-hidden=\"true\">...</span></li>`;\n }\n const isActive = page === this.current;\n return html`\n <li>\n <button\n class=\"page-btn ${isActive ? 'active' : ''}\"\n aria-label=\"Page ${page}\"\n aria-current=\"${isActive ? 'page' : nothing}\"\n @click=\"${() => this._goToPage(page)}\"\n >\n ${page}\n </button>\n </li>\n `;\n })}\n\n <li>\n <button\n class=\"page-btn\"\n ?disabled=\"${isLastPage}\"\n aria-label=\"Next page\"\n @click=\"${() => this._goToPage(this.current + 1)}\"\n >\n <cg-icon name=\"chevron-right\" size=\"sm\"></cg-icon>\n </button>\n </li>\n </ul>\n </nav>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-pagination': CgPagination;\n }\n}\n"],"names":["CgPagination","LitElement","page","total","current","siblings","_","i","pages","rangeStart","rangeEnd","isFirstPage","isLastPage","html","isActive","nothing","hostBlock","reducedMotion","css","__decorateClass","property","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cg-pagination.js","sources":["../../../src/components/cg-pagination/cg-pagination.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\n/**\n * @element cg-pagination\n * Page navigation with prev/next arrows, ellipsis gaps, and configurable siblings.\n *\n * @example\n * ```html\n * <cg-pagination total=\"20\" current=\"5\"></cg-pagination>\n * ```\n *\n * @fires {CustomEvent<{page: number}>} cg-page-change - When a page button is clicked\n *\n * @cssprop --cg-component-pagination-button-size - Button size (36px)\n * @cssprop --cg-color-action-primary-background-default - Active page background\n */\n@customElement('cg-pagination')\nexport class CgPagination extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host {\n display: flex;\n }\n\n .pagination {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-4);\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n .page-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--cg-component-pagination-button-size);\n height: var(--cg-component-pagination-button-size);\n padding: 0 var(--cg-spacing-8);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-base-border);\n border-radius: var(--cg-border-radius-100);\n background: transparent;\n color: var(--cg-color-surface-container-text);\n font-family: inherit;\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n font-variant-numeric: tabular-nums;\n cursor: pointer;\n line-height: 1;\n white-space: nowrap;\n transition:\n transform var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\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 -webkit-font-smoothing: antialiased;\n }\n\n .page-btn:hover:not([aria-disabled=\"true\"]):not(.active) {\n background: var(--cg-overlay-accent-subtle);\n }\n\n .page-btn:active:not([aria-disabled=\"true\"]) {\n transform: scale(var(--cg-interaction-press-scale));\n }\n\n .page-btn:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 var(--cg-border-width-100) var(--cg-color-focus-ring-offset),\n 0 0 0 calc(var(--cg-border-width-100) * 2) var(--cg-color-focus-ring);\n }\n\n .page-btn[aria-disabled=\"true\"] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* ── Active page ── */\n .page-btn.active {\n cursor: default;\n background: var(--cg-color-action-primary-background-default);\n color: var(--cg-color-action-primary-text-default);\n border-color: var(--cg-color-action-primary-border-default);\n font-weight: var(--cg-font-weight-semibold);\n }\n\n /* ── Ellipsis ── */\n .ellipsis {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--cg-component-pagination-button-size);\n height: var(--cg-component-pagination-button-size);\n color: var(--cg-color-surface-container-outlined);\n font-size: var(--cg-font-size-sm);\n user-select: none;\n }\n\n /* Size variants */\n :host([size=\"sm\"]) .page-btn {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n }\n :host([size=\"sm\"]) .ellipsis {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n }\n\n :host([size=\"lg\"]) .page-btn {\n min-width: var(--cg-spacing-48);\n height: var(--cg-spacing-48);\n font-size: var(--cg-font-size-base);\n }\n :host([size=\"lg\"]) .ellipsis {\n min-width: var(--cg-spacing-48);\n height: var(--cg-spacing-48);\n font-size: var(--cg-font-size-base);\n }\n\n @media (max-width: 480px) {\n .page-btn {\n min-width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n font-size: var(--cg-font-size-xs);\n padding: 0 var(--cg-spacing-4);\n }\n .ellipsis {\n min-width: var(--cg-spacing-24);\n height: var(--cg-spacing-32);\n }\n }\n\n /* Rounded variants */\n :host([rounded=\"none\"]) .page-btn { border-radius: 0; }\n :host([rounded=\"sm\"]) .page-btn { border-radius: var(--cg-border-radius-50); }\n :host([rounded=\"md\"]) .page-btn { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"lg\"]) .page-btn { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"full\"]) .page-btn { border-radius: var(--cg-border-radius-full); }\n `];\n\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md';\n @property({ type: Number }) total = 1;\n @property({ type: Number }) current = 1;\n @property({ type: Number }) siblings = 1;\n /** Accepts attribute \"false\" — plain Lit Booleans can never be turned off from markup. */\n private static _boolConverter = { fromAttribute: (v: string | null) => v !== 'false' };\n @property({ converter: CgPagination._boolConverter }) showFirst = true;\n @property({ converter: CgPagination._boolConverter }) showLast = true;\n\n private _goToPage(page: number) {\n if (page < 1 || page > this.total || page === this.current) return;\n this.dispatchEvent(new CustomEvent('cg-page-change', {\n bubbles: true,\n composed: true,\n detail: { page },\n }));\n }\n\n private _getPages(): (number | 'ellipsis')[] {\n const total = this.total;\n const current = this.current;\n const siblings = this.siblings;\n\n if (total <= 7) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const pages: (number | 'ellipsis')[] = [];\n\n if (this.showFirst) {\n pages.push(1);\n }\n\n const rangeStart = Math.max(2, current - siblings);\n const rangeEnd = Math.min(total - 1, current + siblings);\n\n if (rangeStart > 2) {\n pages.push('ellipsis');\n }\n\n for (let i = rangeStart; i <= rangeEnd; i++) {\n pages.push(i);\n }\n\n if (rangeEnd < total - 1) {\n pages.push('ellipsis');\n }\n\n if (this.showLast) {\n pages.push(total);\n }\n\n return pages;\n }\n\n override render() {\n const pages = this._getPages();\n const isFirstPage = this.current <= 1;\n const isLastPage = this.current >= this.total;\n\n return html`\n <nav aria-label=\"Pagination\">\n <ul class=\"pagination\">\n <li>\n <button\n class=\"page-btn\"\n aria-disabled=\"${isFirstPage ? 'true' : 'false'}\"\n aria-label=\"Previous page\"\n @click=\"${() => this._goToPage(this.current - 1)}\"\n >\n <cg-icon name=\"chevron-left\" size=\"sm\"></cg-icon>\n </button>\n </li>\n\n ${pages.map(page => {\n if (page === 'ellipsis') {\n return html`<li><span class=\"ellipsis\" aria-hidden=\"true\">…</span></li>`;\n }\n const isActive = page === this.current;\n return html`\n <li>\n <button\n class=\"page-btn ${isActive ? 'active' : ''}\"\n aria-label=\"Page ${page}\"\n aria-current=\"${isActive ? 'page' : nothing}\"\n @click=\"${() => this._goToPage(page)}\"\n >\n ${page}\n </button>\n </li>\n `;\n })}\n\n <li>\n <button\n class=\"page-btn\"\n aria-disabled=\"${isLastPage ? 'true' : 'false'}\"\n aria-label=\"Next page\"\n @click=\"${() => this._goToPage(this.current + 1)}\"\n >\n <cg-icon name=\"chevron-right\" size=\"sm\"></cg-icon>\n </button>\n </li>\n </ul>\n </nav>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-pagination': CgPagination;\n }\n}\n"],"names":["CgPagination","LitElement","page","total","current","siblings","_","i","pages","rangeStart","rangeEnd","isFirstPage","isLastPage","html","isActive","nothing","hostBlock","reducedMotion","css","v","__decorateClass","property","customElement"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cg-password-input.d.ts","sourceRoot":"","sources":["../../../src/components/cg-password-input/cg-password-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD;;;;;;;;;;;GAWG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAC7C,OAAgB,MAAM,
|
|
1
|
+
{"version":3,"file":"cg-password-input.d.ts","sourceRoot":"","sources":["../../../src/components/cg-password-input/cg-password-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD;;;;;;;;;;;GAWG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAC7C,OAAgB,MAAM,4BAoInB;IAEH,MAAM,CAAC,cAAc,UAAQ;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAmB;;IAS1B,KAAK,SAAM;IACX,KAAK,SAAM;IACX,WAAW,SAAM;IACjB,MAAM,SAAM;IACZ,IAAI,SAAM;IACsB,QAAQ,UAAS;IACjB,QAAQ,UAAS;IACjB,KAAK,UAAS;IACd,OAAO,UAAS;IACH,YAAY,UAAS;IACzB,SAAS,SAAK;IAE1D,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAarD,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,iBAAiB;IAShB,MAAM;CAoDhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { css as
|
|
2
|
-
import { property as
|
|
3
|
-
import { h as f, r as b } from "../../chunks/premium.css-
|
|
4
|
-
var m = Object.defineProperty, y = Object.getOwnPropertyDescriptor, r = (t, a, c,
|
|
5
|
-
for (var i =
|
|
6
|
-
(
|
|
7
|
-
return
|
|
1
|
+
import { css as g, LitElement as h, nothing as n, html as o } from "lit";
|
|
2
|
+
import { property as s, state as p, customElement as v } from "lit/decorators.js";
|
|
3
|
+
import { h as f, r as b } from "../../chunks/premium.css-DHekUEUt.js";
|
|
4
|
+
var m = Object.defineProperty, y = Object.getOwnPropertyDescriptor, r = (t, a, c, l) => {
|
|
5
|
+
for (var i = l > 1 ? void 0 : l ? y(a, c) : a, u = t.length - 1, d; u >= 0; u--)
|
|
6
|
+
(d = t[u]) && (i = (l ? d(a, c, i) : d(i)) || i);
|
|
7
|
+
return l && i && m(a, c, i), i;
|
|
8
8
|
};
|
|
9
9
|
let e = class extends h {
|
|
10
10
|
constructor() {
|
|
11
11
|
super(), this.value = "", this.label = "", this.placeholder = "", this.helper = "", this.name = "", this.required = !1, this.disabled = !1, this.error = !1, this.success = !1, this.showStrength = !1, this.minLength = 0, this._visible = !1, typeof this.attachInternals == "function" && (this._internals = this.attachInternals());
|
|
12
12
|
}
|
|
13
13
|
updated(t) {
|
|
14
|
-
t.has("value") && (this._internals?.setFormValue(this.value), this.required && !this.value ? this._internals?.setValidity({ valueMissing: !0 }, "Password is required") : this.minLength > 0 && this.value.length < this.minLength ? this._internals?.setValidity({ tooShort: !0 }, `Minimum length is ${this.minLength}`) : this._internals?.setValidity({}));
|
|
14
|
+
(t.has("value") || t.has("required") || t.has("minLength")) && (this._internals?.setFormValue(this.value), this.required && !this.value ? this._internals?.setValidity({ valueMissing: !0 }, "Password is required") : this.minLength > 0 && this.value.length < this.minLength ? this._internals?.setValidity({ tooShort: !0 }, `Minimum length is ${this.minLength}`) : this._internals?.setValidity({}));
|
|
15
15
|
}
|
|
16
16
|
_strengthScore() {
|
|
17
17
|
const t = this.value;
|
|
@@ -39,17 +39,20 @@ let e = class extends h {
|
|
|
39
39
|
}
|
|
40
40
|
render() {
|
|
41
41
|
const t = this._strengthScore();
|
|
42
|
-
return
|
|
42
|
+
return o`
|
|
43
43
|
<div class="wrap">
|
|
44
|
-
${this.label ?
|
|
44
|
+
${this.label ? o`<label for="input">${this.label}${this.required ? o` <span class="required-marker">*</span>` : n}</label>` : n}
|
|
45
45
|
<div class="input-wrap">
|
|
46
46
|
<input
|
|
47
|
+
id="input"
|
|
47
48
|
type=${this._visible ? "text" : "password"}
|
|
48
49
|
.value=${this.value}
|
|
49
50
|
placeholder=${this.placeholder}
|
|
50
51
|
name=${this.name}
|
|
51
52
|
?disabled=${this.disabled}
|
|
52
53
|
?required=${this.required}
|
|
54
|
+
aria-label=${this.label ? n : this.placeholder || "Password"}
|
|
55
|
+
aria-describedby=${this.helper ? "helper" : n}
|
|
53
56
|
aria-invalid=${this.error ? "true" : "false"}
|
|
54
57
|
aria-required=${this.required ? "true" : "false"}
|
|
55
58
|
@input=${this._handleInput}
|
|
@@ -57,16 +60,16 @@ let e = class extends h {
|
|
|
57
60
|
<button
|
|
58
61
|
type="button"
|
|
59
62
|
class="toggle"
|
|
63
|
+
?disabled=${this.disabled}
|
|
60
64
|
aria-label=${this._visible ? "Hide password" : "Show password"}
|
|
61
|
-
aria-pressed=${this._visible ? "true" : "false"}
|
|
62
65
|
@click=${this._toggleVisibility}
|
|
63
66
|
>
|
|
64
|
-
${this._visible ?
|
|
67
|
+
${this._visible ? o`
|
|
65
68
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
66
69
|
<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"/>
|
|
67
70
|
<line x1="1" y1="1" x2="23" y2="23"/>
|
|
68
71
|
</svg>
|
|
69
|
-
` :
|
|
72
|
+
` : o`
|
|
70
73
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
71
74
|
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/>
|
|
72
75
|
<circle cx="12" cy="12" r="3"/>
|
|
@@ -74,20 +77,20 @@ let e = class extends h {
|
|
|
74
77
|
`}
|
|
75
78
|
</button>
|
|
76
79
|
</div>
|
|
77
|
-
${this.showStrength && this.value ?
|
|
80
|
+
${this.showStrength && this.value ? o`
|
|
78
81
|
<div class="strength" aria-hidden="true">
|
|
79
|
-
${[1, 2, 3, 4].map((a) =>
|
|
82
|
+
${[1, 2, 3, 4].map((a) => o`
|
|
80
83
|
<div class="strength-bar ${a <= t ? "active" : ""}" data-level=${t}></div>
|
|
81
84
|
`)}
|
|
82
85
|
</div>
|
|
83
|
-
<div class="strength-label">${this._strengthLabel()}</div>
|
|
84
|
-
` :
|
|
85
|
-
${this.helper ?
|
|
86
|
+
<div class="strength-label" role="status" aria-live="polite">${this._strengthLabel()}</div>
|
|
87
|
+
` : n}
|
|
88
|
+
${this.helper ? o`<div class="helper" id="helper">${this.helper}</div>` : n}
|
|
86
89
|
</div>
|
|
87
90
|
`;
|
|
88
91
|
}
|
|
89
92
|
};
|
|
90
|
-
e.styles = [f, b,
|
|
93
|
+
e.styles = [f, b, g`
|
|
91
94
|
:host { display: block; }
|
|
92
95
|
|
|
93
96
|
.wrap {
|
|
@@ -140,9 +143,11 @@ e.styles = [f, b, d`
|
|
|
140
143
|
:host([error]) input {
|
|
141
144
|
border-color: var(--cg-color-status-error-border-default);
|
|
142
145
|
}
|
|
146
|
+
:host([error]) input:focus { box-shadow: 0 0 0 3px var(--cg-shadow-focus-error); }
|
|
143
147
|
:host([success]) input {
|
|
144
148
|
border-color: var(--cg-color-status-success-border-default);
|
|
145
149
|
}
|
|
150
|
+
:host([success]) input:focus { box-shadow: 0 0 0 3px var(--cg-shadow-focus-success); }
|
|
146
151
|
|
|
147
152
|
.toggle {
|
|
148
153
|
position: absolute;
|
|
@@ -161,16 +166,18 @@ e.styles = [f, b, d`
|
|
|
161
166
|
border-radius: var(--cg-border-radius-50);
|
|
162
167
|
transition: color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
|
|
163
168
|
}
|
|
164
|
-
.toggle:hover {
|
|
169
|
+
.toggle:hover:not(:disabled) {
|
|
165
170
|
color: var(--cg-color-surface-base-text);
|
|
166
171
|
background: var(--cg-color-action-tertiary-background-hover);
|
|
167
172
|
}
|
|
173
|
+
.toggle:disabled { opacity: 0.6; cursor: not-allowed; }
|
|
168
174
|
.toggle:focus-visible {
|
|
169
175
|
outline: none;
|
|
170
176
|
box-shadow:
|
|
171
|
-
0 0 0
|
|
172
|
-
0 0 0
|
|
177
|
+
0 0 0 var(--cg-focus-ring-offset) var(--cg-color-focus-ring-offset),
|
|
178
|
+
0 0 0 calc(var(--cg-focus-ring-offset) + var(--cg-focus-ring-width)) var(--cg-color-focus-ring);
|
|
173
179
|
}
|
|
180
|
+
.toggle:active { transform: translateY(-50%) scale(var(--cg-interaction-press-scale)); }
|
|
174
181
|
|
|
175
182
|
.helper {
|
|
176
183
|
margin-top: var(--cg-spacing-6);
|
|
@@ -203,7 +210,6 @@ e.styles = [f, b, d`
|
|
|
203
210
|
from { transform: scaleX(0); }
|
|
204
211
|
to { transform: scaleX(1); }
|
|
205
212
|
}
|
|
206
|
-
.toggle:active { transform: translateY(-50%) scale(0.9); }
|
|
207
213
|
.strength-bar.active[data-level="1"] { background: var(--cg-color-status-error-text-default); }
|
|
208
214
|
.strength-bar.active[data-level="2"] { background: var(--cg-color-status-warning-text-default); }
|
|
209
215
|
.strength-bar.active[data-level="3"] { background: var(--cg-color-status-warning-text-default); }
|
|
@@ -214,40 +220,42 @@ e.styles = [f, b, d`
|
|
|
214
220
|
font-size: var(--cg-font-size-xs);
|
|
215
221
|
color: var(--cg-color-surface-container-outlined);
|
|
216
222
|
}
|
|
223
|
+
|
|
224
|
+
.required-marker { color: var(--cg-color-status-error-text-default); }
|
|
217
225
|
`];
|
|
218
226
|
e.formAssociated = !0;
|
|
219
227
|
r([
|
|
220
|
-
|
|
228
|
+
s()
|
|
221
229
|
], e.prototype, "value", 2);
|
|
222
230
|
r([
|
|
223
|
-
|
|
231
|
+
s()
|
|
224
232
|
], e.prototype, "label", 2);
|
|
225
233
|
r([
|
|
226
|
-
|
|
234
|
+
s()
|
|
227
235
|
], e.prototype, "placeholder", 2);
|
|
228
236
|
r([
|
|
229
|
-
|
|
237
|
+
s()
|
|
230
238
|
], e.prototype, "helper", 2);
|
|
231
239
|
r([
|
|
232
|
-
|
|
240
|
+
s()
|
|
233
241
|
], e.prototype, "name", 2);
|
|
234
242
|
r([
|
|
235
|
-
|
|
243
|
+
s({ type: Boolean, reflect: !0 })
|
|
236
244
|
], e.prototype, "required", 2);
|
|
237
245
|
r([
|
|
238
|
-
|
|
246
|
+
s({ type: Boolean, reflect: !0 })
|
|
239
247
|
], e.prototype, "disabled", 2);
|
|
240
248
|
r([
|
|
241
|
-
|
|
249
|
+
s({ type: Boolean, reflect: !0 })
|
|
242
250
|
], e.prototype, "error", 2);
|
|
243
251
|
r([
|
|
244
|
-
|
|
252
|
+
s({ type: Boolean, reflect: !0 })
|
|
245
253
|
], e.prototype, "success", 2);
|
|
246
254
|
r([
|
|
247
|
-
|
|
255
|
+
s({ type: Boolean, attribute: "show-strength" })
|
|
248
256
|
], e.prototype, "showStrength", 2);
|
|
249
257
|
r([
|
|
250
|
-
|
|
258
|
+
s({ type: Number, attribute: "min-length" })
|
|
251
259
|
], e.prototype, "minLength", 2);
|
|
252
260
|
r([
|
|
253
261
|
p()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cg-password-input.js","sources":["../../../src/components/cg-password-input/cg-password-input.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\n/**\n * @element cg-password-input\n * Password input with visibility toggle and optional strength meter.\n *\n * @example\n * ```html\n * <cg-password-input label=\"Password\" show-strength></cg-password-input>\n * ```\n *\n * @fires {CustomEvent<{value: string, strength?: number}>} cg-password-change\n * @fires {CustomEvent<{visible: boolean}>} cg-password-toggle\n */\n@customElement('cg-password-input')\nexport class CgPasswordInput extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host { display: block; }\n\n .wrap {\n position: relative;\n display: block;\n }\n\n label {\n display: block;\n margin-bottom: var(--cg-spacing-6);\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n color: var(--cg-color-surface-base-text);\n }\n\n .input-wrap {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n input {\n flex: 1;\n height: var(--cg-component-input-height-md);\n padding: 0 var(--cg-spacing-40) 0 var(--cg-spacing-12);\n background: var(--cg-color-input-background-default);\n border: var(--cg-border-width-50) solid var(--cg-color-input-border-default);\n border-radius: var(--cg-component-input-radius);\n color: var(--cg-color-input-text-default);\n font-family: inherit;\n font-size: var(--cg-font-size-base);\n outline: none;\n transition:\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n background var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n input::placeholder { color: var(--cg-color-input-text-placeholder); }\n input:hover:not(:disabled) {\n border-color: var(--cg-color-input-border-hover);\n }\n input:focus {\n border-color: var(--cg-color-input-border-focus);\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n }\n input:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n :host([error]) input {\n border-color: var(--cg-color-status-error-border-default);\n }\n :host([success]) input {\n border-color: var(--cg-color-status-success-border-default);\n }\n\n .toggle {\n position: absolute;\n right: var(--cg-spacing-8);\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n border: none;\n background: none;\n color: var(--cg-color-input-text-placeholder);\n cursor: pointer;\n border-radius: var(--cg-border-radius-50);\n transition: color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .toggle:hover {\n color: var(--cg-color-surface-base-text);\n background: var(--cg-color-action-tertiary-background-hover);\n }\n .toggle:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 2px var(--cg-color-focus-ring-offset),\n 0 0 0 4px var(--cg-color-focus-ring);\n }\n\n .helper {\n margin-top: var(--cg-spacing-6);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-container-outlined);\n }\n :host([error]) .helper { color: var(--cg-color-status-error-text-default); }\n :host([success]) .helper { color: var(--cg-color-status-success-text-default); }\n\n /* Strength meter */\n .strength {\n display: flex;\n gap: var(--cg-spacing-4);\n margin-top: var(--cg-spacing-12);\n }\n .strength-bar {\n flex: 1;\n height: var(--cg-spacing-4);\n background: var(--cg-color-surface-container-border);\n border-radius: var(--cg-border-radius-full);\n transition:\n background var(--cg-transition-duration-default) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n transform-origin: left;\n }\n .strength-bar.active {\n animation: barIn var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n }\n @keyframes barIn {\n from { transform: scaleX(0); }\n to { transform: scaleX(1); }\n }\n .toggle:active { transform: translateY(-50%) scale(0.9); }\n .strength-bar.active[data-level=\"1\"] { background: var(--cg-color-status-error-text-default); }\n .strength-bar.active[data-level=\"2\"] { background: var(--cg-color-status-warning-text-default); }\n .strength-bar.active[data-level=\"3\"] { background: var(--cg-color-status-warning-text-default); }\n .strength-bar.active[data-level=\"4\"] { background: var(--cg-color-status-success-text-default); }\n\n .strength-label {\n margin-top: var(--cg-spacing-6);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-container-outlined);\n }\n `];\n\n static formAssociated = true;\n private _internals?: ElementInternals;\n\n constructor() {\n super();\n if (typeof this.attachInternals === 'function') {\n this._internals = this.attachInternals();\n }\n }\n\n @property() value = '';\n @property() label = '';\n @property() placeholder = '';\n @property() helper = '';\n @property() name = '';\n @property({ type: Boolean, reflect: true }) required = false;\n @property({ type: Boolean, reflect: true }) disabled = false;\n @property({ type: Boolean, reflect: true }) error = false;\n @property({ type: Boolean, reflect: true }) success = false;\n @property({ type: Boolean, attribute: 'show-strength' }) showStrength = false;\n @property({ type: Number, attribute: 'min-length' }) minLength = 0;\n\n @state() private _visible = false;\n\n override updated(changed: Map<string, unknown>): void {\n if (changed.has('value')) {\n this._internals?.setFormValue(this.value);\n if (this.required && !this.value) {\n this._internals?.setValidity({ valueMissing: true }, 'Password is required');\n } else if (this.minLength > 0 && this.value.length < this.minLength) {\n this._internals?.setValidity({ tooShort: true }, `Minimum length is ${this.minLength}`);\n } else {\n this._internals?.setValidity({});\n }\n }\n }\n\n private _strengthScore(): number {\n const v = this.value;\n if (!v) return 0;\n let score = 0;\n if (v.length >= 8) score++;\n if (v.length >= 12) score++;\n if (/[a-z]/.test(v) && /[A-Z]/.test(v)) score++;\n if (/\\d/.test(v) && /[^a-zA-Z0-9]/.test(v)) score++;\n return Math.min(4, score);\n }\n\n private _strengthLabel(): string {\n const score = this._strengthScore();\n if (score === 0) return '';\n if (score === 1) return 'Weak';\n if (score === 2) return 'Fair';\n if (score === 3) return 'Good';\n return 'Strong';\n }\n\n private _handleInput(e: Event): void {\n this.value = (e.target as HTMLInputElement).value;\n this.dispatchEvent(new CustomEvent('cg-password-change', {\n detail: { value: this.value, strength: this._strengthScore() },\n bubbles: true,\n composed: true,\n }));\n }\n\n private _toggleVisibility(): void {\n this._visible = !this._visible;\n this.dispatchEvent(new CustomEvent('cg-password-toggle', {\n detail: { visible: this._visible },\n bubbles: true,\n composed: true,\n }));\n }\n\n override render() {\n const score = this._strengthScore();\n return html`\n <div class=\"wrap\">\n ${this.label ? html`<label>${this.label}${this.required ? html` <span style=\"color:var(--cg-color-status-error-text-default);\">*</span>` : nothing}</label>` : nothing}\n <div class=\"input-wrap\">\n <input\n type=${this._visible ? 'text' : 'password'}\n .value=${this.value}\n placeholder=${this.placeholder}\n name=${this.name}\n ?disabled=${this.disabled}\n ?required=${this.required}\n aria-invalid=${this.error ? 'true' : 'false'}\n aria-required=${this.required ? 'true' : 'false'}\n @input=${this._handleInput}\n />\n <button\n type=\"button\"\n class=\"toggle\"\n aria-label=${this._visible ? 'Hide password' : 'Show password'}\n aria-pressed=${this._visible ? 'true' : 'false'}\n @click=${this._toggleVisibility}\n >\n ${this._visible ? html`\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"/>\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/>\n </svg>\n ` : html`\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"/>\n <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n </svg>\n `}\n </button>\n </div>\n ${this.showStrength && this.value ? html`\n <div class=\"strength\" aria-hidden=\"true\">\n ${[1, 2, 3, 4].map(i => html`\n <div class=\"strength-bar ${i <= score ? 'active' : ''}\" data-level=${score}></div>\n `)}\n </div>\n <div class=\"strength-label\">${this._strengthLabel()}</div>\n ` : nothing}\n ${this.helper ? html`<div class=\"helper\">${this.helper}</div>` : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-password-input': CgPasswordInput;\n }\n}\n"],"names":["CgPasswordInput","LitElement","changed","v","score","e","html","nothing","i","hostBlock","reducedMotion","css","__decorateClass","property","state","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cg-password-input.js","sources":["../../../src/components/cg-password-input/cg-password-input.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\n/**\n * @element cg-password-input\n * Password input with visibility toggle and optional strength meter.\n *\n * @example\n * ```html\n * <cg-password-input label=\"Password\" show-strength></cg-password-input>\n * ```\n *\n * @fires {CustomEvent<{value: string, strength?: number}>} cg-password-change\n * @fires {CustomEvent<{visible: boolean}>} cg-password-toggle\n */\n@customElement('cg-password-input')\nexport class CgPasswordInput extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n :host { display: block; }\n\n .wrap {\n position: relative;\n display: block;\n }\n\n label {\n display: block;\n margin-bottom: var(--cg-spacing-6);\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n color: var(--cg-color-surface-base-text);\n }\n\n .input-wrap {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n input {\n flex: 1;\n height: var(--cg-component-input-height-md);\n padding: 0 var(--cg-spacing-40) 0 var(--cg-spacing-12);\n background: var(--cg-color-input-background-default);\n border: var(--cg-border-width-50) solid var(--cg-color-input-border-default);\n border-radius: var(--cg-component-input-radius);\n color: var(--cg-color-input-text-default);\n font-family: inherit;\n font-size: var(--cg-font-size-base);\n outline: none;\n transition:\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n background var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n input::placeholder { color: var(--cg-color-input-text-placeholder); }\n input:hover:not(:disabled) {\n border-color: var(--cg-color-input-border-hover);\n }\n input:focus {\n border-color: var(--cg-color-input-border-focus);\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n }\n input:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n :host([error]) input {\n border-color: var(--cg-color-status-error-border-default);\n }\n :host([error]) input:focus { box-shadow: 0 0 0 3px var(--cg-shadow-focus-error); }\n :host([success]) input {\n border-color: var(--cg-color-status-success-border-default);\n }\n :host([success]) input:focus { box-shadow: 0 0 0 3px var(--cg-shadow-focus-success); }\n\n .toggle {\n position: absolute;\n right: var(--cg-spacing-8);\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n border: none;\n background: none;\n color: var(--cg-color-input-text-placeholder);\n cursor: pointer;\n border-radius: var(--cg-border-radius-50);\n transition: color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .toggle:hover:not(:disabled) {\n color: var(--cg-color-surface-base-text);\n background: var(--cg-color-action-tertiary-background-hover);\n }\n .toggle:disabled { opacity: 0.6; cursor: not-allowed; }\n .toggle: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 .toggle:active { transform: translateY(-50%) scale(var(--cg-interaction-press-scale)); }\n\n .helper {\n margin-top: var(--cg-spacing-6);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-container-outlined);\n }\n :host([error]) .helper { color: var(--cg-color-status-error-text-default); }\n :host([success]) .helper { color: var(--cg-color-status-success-text-default); }\n\n /* Strength meter */\n .strength {\n display: flex;\n gap: var(--cg-spacing-4);\n margin-top: var(--cg-spacing-12);\n }\n .strength-bar {\n flex: 1;\n height: var(--cg-spacing-4);\n background: var(--cg-color-surface-container-border);\n border-radius: var(--cg-border-radius-full);\n transition:\n background var(--cg-transition-duration-default) var(--cg-transition-easing-default),\n transform var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n transform-origin: left;\n }\n .strength-bar.active {\n animation: barIn var(--cg-transition-duration-default) var(--cg-transition-easing-default);\n }\n @keyframes barIn {\n from { transform: scaleX(0); }\n to { transform: scaleX(1); }\n }\n .strength-bar.active[data-level=\"1\"] { background: var(--cg-color-status-error-text-default); }\n .strength-bar.active[data-level=\"2\"] { background: var(--cg-color-status-warning-text-default); }\n .strength-bar.active[data-level=\"3\"] { background: var(--cg-color-status-warning-text-default); }\n .strength-bar.active[data-level=\"4\"] { background: var(--cg-color-status-success-text-default); }\n\n .strength-label {\n margin-top: var(--cg-spacing-6);\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-container-outlined);\n }\n\n .required-marker { color: var(--cg-color-status-error-text-default); }\n `];\n\n static formAssociated = true;\n private _internals?: ElementInternals;\n\n constructor() {\n super();\n if (typeof this.attachInternals === 'function') {\n this._internals = this.attachInternals();\n }\n }\n\n @property() value = '';\n @property() label = '';\n @property() placeholder = '';\n @property() helper = '';\n @property() name = '';\n @property({ type: Boolean, reflect: true }) required = false;\n @property({ type: Boolean, reflect: true }) disabled = false;\n @property({ type: Boolean, reflect: true }) error = false;\n @property({ type: Boolean, reflect: true }) success = false;\n @property({ type: Boolean, attribute: 'show-strength' }) showStrength = false;\n @property({ type: Number, attribute: 'min-length' }) minLength = 0;\n\n @state() private _visible = false;\n\n override updated(changed: Map<string, unknown>): void {\n if (changed.has('value') || changed.has('required') || changed.has('minLength')) {\n this._internals?.setFormValue(this.value);\n if (this.required && !this.value) {\n this._internals?.setValidity({ valueMissing: true }, 'Password is required');\n } else if (this.minLength > 0 && this.value.length < this.minLength) {\n this._internals?.setValidity({ tooShort: true }, `Minimum length is ${this.minLength}`);\n } else {\n this._internals?.setValidity({});\n }\n }\n }\n\n private _strengthScore(): number {\n const v = this.value;\n if (!v) return 0;\n let score = 0;\n if (v.length >= 8) score++;\n if (v.length >= 12) score++;\n if (/[a-z]/.test(v) && /[A-Z]/.test(v)) score++;\n if (/\\d/.test(v) && /[^a-zA-Z0-9]/.test(v)) score++;\n return Math.min(4, score);\n }\n\n private _strengthLabel(): string {\n const score = this._strengthScore();\n if (score === 0) return '';\n if (score === 1) return 'Weak';\n if (score === 2) return 'Fair';\n if (score === 3) return 'Good';\n return 'Strong';\n }\n\n private _handleInput(e: Event): void {\n this.value = (e.target as HTMLInputElement).value;\n this.dispatchEvent(new CustomEvent('cg-password-change', {\n detail: { value: this.value, strength: this._strengthScore() },\n bubbles: true,\n composed: true,\n }));\n }\n\n private _toggleVisibility(): void {\n this._visible = !this._visible;\n this.dispatchEvent(new CustomEvent('cg-password-toggle', {\n detail: { visible: this._visible },\n bubbles: true,\n composed: true,\n }));\n }\n\n override render() {\n const score = this._strengthScore();\n return html`\n <div class=\"wrap\">\n ${this.label ? html`<label for=\"input\">${this.label}${this.required ? html` <span class=\"required-marker\">*</span>` : nothing}</label>` : nothing}\n <div class=\"input-wrap\">\n <input\n id=\"input\"\n type=${this._visible ? 'text' : 'password'}\n .value=${this.value}\n placeholder=${this.placeholder}\n name=${this.name}\n ?disabled=${this.disabled}\n ?required=${this.required}\n aria-label=${this.label ? nothing : (this.placeholder || 'Password')}\n aria-describedby=${this.helper ? 'helper' : nothing}\n aria-invalid=${this.error ? 'true' : 'false'}\n aria-required=${this.required ? 'true' : 'false'}\n @input=${this._handleInput}\n />\n <button\n type=\"button\"\n class=\"toggle\"\n ?disabled=${this.disabled}\n aria-label=${this._visible ? 'Hide password' : 'Show password'}\n @click=${this._toggleVisibility}\n >\n ${this._visible ? html`\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"/>\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/>\n </svg>\n ` : html`\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"/>\n <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n </svg>\n `}\n </button>\n </div>\n ${this.showStrength && this.value ? html`\n <div class=\"strength\" aria-hidden=\"true\">\n ${[1, 2, 3, 4].map(i => html`\n <div class=\"strength-bar ${i <= score ? 'active' : ''}\" data-level=${score}></div>\n `)}\n </div>\n <div class=\"strength-label\" role=\"status\" aria-live=\"polite\">${this._strengthLabel()}</div>\n ` : nothing}\n ${this.helper ? html`<div class=\"helper\" id=\"helper\">${this.helper}</div>` : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'cg-password-input': CgPasswordInput;\n }\n}\n"],"names":["CgPasswordInput","LitElement","changed","v","score","e","html","nothing","i","hostBlock","reducedMotion","css","__decorateClass","property","state","customElement"],"mappings":"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"}
|