@lostgradient/cinder 0.1.1 → 0.2.0
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/CHANGELOG.md +62 -0
- package/README.md +163 -0
- package/components.json +390 -3
- package/dist/_internal/chart/chart-focus-ring.d.ts +57 -0
- package/dist/_internal/chart/chart-utilities.d.ts +2 -0
- package/dist/_internal/chart/heatmap-utilities.d.ts +60 -0
- package/dist/components/accordion/index.js +14 -1
- package/dist/components/alert/alert.schema.js +3 -3
- package/dist/components/alert/alert.types.d.ts +3 -2
- package/dist/components/alert/index.js +3 -2
- package/dist/components/alert-dialog/index.js +11 -2
- package/dist/components/area-chart/area-chart.css +57 -7
- package/dist/components/area-chart/index.js +283 -40
- package/dist/components/avatar-group/avatar-group.css +2 -3
- package/dist/components/badge/badge.css +17 -0
- package/dist/components/badge/badge.schema.js +6 -1
- package/dist/components/badge/badge.types.d.ts +7 -0
- package/dist/components/badge/index.js +4 -2
- package/dist/components/bar-chart/bar-chart.css +57 -7
- package/dist/components/bar-chart/index.js +233 -45
- package/dist/components/button/button.css +5 -3
- package/dist/components/button/index.js +11 -2
- package/dist/components/capability-gate/capability-gate.css +131 -0
- package/dist/components/capability-gate/capability-gate.schema.d.ts +3 -0
- package/dist/components/capability-gate/capability-gate.schema.js +128 -0
- package/dist/components/capability-gate/capability-gate.svelte.d.ts +19 -0
- package/dist/components/capability-gate/capability-gate.types.d.ts +70 -0
- package/dist/components/capability-gate/capability-gate.variables.d.ts +2 -0
- package/dist/components/capability-gate/capability-gate.variables.js +61 -0
- package/dist/components/capability-gate/index.d.ts +5 -0
- package/dist/components/capability-gate/index.js +285 -0
- package/dist/components/card/card.css +4 -0
- package/dist/components/card/card.schema.js +5 -1
- package/dist/components/card/card.svelte.d.ts +1 -1
- package/dist/components/card/card.types.d.ts +4 -0
- package/dist/components/card/index.d.ts +1 -1
- package/dist/components/card/index.js +8 -4
- package/dist/components/chat/index.css +2 -2
- package/dist/components/chat/index.js +159 -81
- package/dist/components/choice-grid/choice-grid-context.d.ts +23 -0
- package/dist/components/choice-grid/choice-grid.css +27 -0
- package/dist/components/choice-grid/choice-grid.schema.d.ts +3 -0
- package/dist/components/choice-grid/choice-grid.schema.js +121 -0
- package/dist/components/choice-grid/choice-grid.svelte.d.ts +20 -0
- package/dist/components/choice-grid/choice-grid.types.d.ts +122 -0
- package/dist/components/choice-grid/choice-grid.variables.d.ts +2 -0
- package/dist/components/choice-grid/choice-grid.variables.js +61 -0
- package/dist/components/choice-grid/index.d.ts +13 -0
- package/dist/components/choice-grid/index.js +466 -0
- package/dist/components/choice-grid-item/choice-grid-item.css +139 -0
- package/dist/components/choice-grid-item/choice-grid-item.schema.d.ts +3 -0
- package/dist/components/choice-grid-item/choice-grid-item.schema.js +93 -0
- package/dist/components/choice-grid-item/choice-grid-item.svelte.d.ts +17 -0
- package/dist/components/choice-grid-item/choice-grid-item.types.d.ts +24 -0
- package/dist/components/choice-grid-item/choice-grid-item.variables.d.ts +2 -0
- package/dist/components/choice-grid-item/choice-grid-item.variables.js +61 -0
- package/dist/components/choice-grid-item/index.d.ts +5 -0
- package/dist/components/choice-grid-item/index.js +203 -0
- package/dist/components/color-field/color-field.css +6 -9
- package/dist/components/color-picker/color-picker.css +31 -24
- package/dist/components/color-swatch-picker/color-swatch-picker.css +6 -9
- package/dist/components/confirm-dialog/index.js +11 -2
- package/dist/components/context-menu/index.js +114 -43
- package/dist/components/context-menu-trigger/index.js +6 -4
- package/dist/components/data-table/data-table.css +30 -0
- package/dist/components/data-table/data-table.schema.d.ts +3 -0
- package/dist/components/data-table/data-table.schema.js +103 -0
- package/dist/components/data-table/data-table.svelte.d.ts +39 -0
- package/dist/components/data-table/data-table.types.d.ts +86 -0
- package/dist/components/data-table/data-table.variables.d.ts +2 -0
- package/dist/components/data-table/data-table.variables.js +61 -0
- package/dist/components/data-table/index.d.ts +5 -0
- package/dist/components/data-table/index.js +591 -0
- package/dist/components/diff-viewer/index.js +14 -3
- package/dist/components/dropdown/index.js +115 -46
- package/dist/components/dropdown-item/dropdown-item.schema.js +13 -1
- package/dist/components/dropdown-item/dropdown-item.svelte.d.ts +1 -1
- package/dist/components/dropdown-item/dropdown-item.types.d.ts +46 -2
- package/dist/components/dropdown-item/index.d.ts +1 -1
- package/dist/components/dropdown-item/index.js +97 -28
- package/dist/components/floating-action-button/floating-action-button.css +4 -2
- package/dist/components/json-schema-editor/index.js +29 -4
- package/dist/components/keyboard-shortcuts/index.d.ts +5 -0
- package/dist/components/keyboard-shortcuts/index.js +238 -0
- package/dist/components/keyboard-shortcuts/keyboard-shortcuts.css +84 -0
- package/dist/components/keyboard-shortcuts/keyboard-shortcuts.schema.d.ts +3 -0
- package/dist/components/keyboard-shortcuts/keyboard-shortcuts.schema.js +87 -0
- package/dist/components/keyboard-shortcuts/keyboard-shortcuts.svelte.d.ts +17 -0
- package/dist/components/keyboard-shortcuts/keyboard-shortcuts.types.d.ts +42 -0
- package/dist/components/keyboard-shortcuts/keyboard-shortcuts.variables.d.ts +2 -0
- package/dist/components/keyboard-shortcuts/keyboard-shortcuts.variables.js +61 -0
- package/dist/components/line-chart/index.js +283 -40
- package/dist/components/line-chart/line-chart.css +57 -8
- package/dist/components/markdown-editor/index.js +129 -51
- package/dist/components/matrix-chart/index.d.ts +5 -0
- package/dist/components/matrix-chart/index.js +1232 -0
- package/dist/components/matrix-chart/matrix-chart.css +50 -0
- package/dist/components/matrix-chart/matrix-chart.schema.d.ts +3 -0
- package/dist/components/matrix-chart/matrix-chart.schema.js +123 -0
- package/dist/components/matrix-chart/matrix-chart.svelte.d.ts +20 -0
- package/dist/components/matrix-chart/matrix-chart.types.d.ts +52 -0
- package/dist/components/matrix-chart/matrix-chart.variables.d.ts +2 -0
- package/dist/components/matrix-chart/matrix-chart.variables.js +61 -0
- package/dist/components/media-controls/index.d.ts +5 -0
- package/dist/components/media-controls/index.js +338 -0
- package/dist/components/media-controls/media-controls.css +112 -0
- package/dist/components/media-controls/media-controls.schema.d.ts +3 -0
- package/dist/components/media-controls/media-controls.schema.js +125 -0
- package/dist/components/media-controls/media-controls.svelte.d.ts +18 -0
- package/dist/components/media-controls/media-controls.types.d.ts +77 -0
- package/dist/components/media-controls/media-controls.variables.d.ts +2 -0
- package/dist/components/media-controls/media-controls.variables.js +61 -0
- package/dist/components/navigation-bar/navigation-bar.schema.js +5 -5
- package/dist/components/navigation-bar/navigation-bar.types.d.ts +2 -1
- package/dist/components/pricing-card/index.d.ts +5 -0
- package/dist/components/pricing-card/index.js +406 -0
- package/dist/components/pricing-card/pricing-card.css +173 -0
- package/dist/components/pricing-card/pricing-card.schema.d.ts +3 -0
- package/dist/components/pricing-card/pricing-card.schema.js +100 -0
- package/dist/components/pricing-card/pricing-card.svelte.d.ts +18 -0
- package/dist/components/pricing-card/pricing-card.types.d.ts +47 -0
- package/dist/components/pricing-card/pricing-card.variables.d.ts +2 -0
- package/dist/components/pricing-card/pricing-card.variables.js +61 -0
- package/dist/components/review-editor/index.js +212 -132
- package/dist/components/share-card/index.d.ts +5 -0
- package/dist/components/share-card/index.js +446 -0
- package/dist/components/share-card/share-card.css +115 -0
- package/dist/components/share-card/share-card.schema.d.ts +3 -0
- package/dist/components/share-card/share-card.schema.js +113 -0
- package/dist/components/share-card/share-card.svelte.d.ts +18 -0
- package/dist/components/share-card/share-card.types.d.ts +66 -0
- package/dist/components/share-card/share-card.variables.d.ts +2 -0
- package/dist/components/share-card/share-card.variables.js +61 -0
- package/dist/components/shortcut-hint/index.d.ts +5 -0
- package/dist/components/shortcut-hint/index.js +197 -0
- package/dist/components/shortcut-hint/shortcut-hint.css +26 -0
- package/dist/components/shortcut-hint/shortcut-hint.schema.d.ts +3 -0
- package/dist/components/shortcut-hint/shortcut-hint.schema.js +96 -0
- package/dist/components/shortcut-hint/shortcut-hint.svelte.d.ts +17 -0
- package/dist/components/shortcut-hint/shortcut-hint.types.d.ts +33 -0
- package/dist/components/shortcut-hint/shortcut-hint.variables.d.ts +2 -0
- package/dist/components/shortcut-hint/shortcut-hint.variables.js +61 -0
- package/dist/components/skip-link/index.d.ts +4 -0
- package/dist/components/skip-link/index.js +180 -0
- package/dist/components/skip-link/skip-link.schema.d.ts +3 -0
- package/dist/components/skip-link/skip-link.schema.js +76 -0
- package/dist/components/skip-link/skip-link.svelte.d.ts +19 -0
- package/dist/components/skip-link/skip-link.types.d.ts +38 -0
- package/dist/components/skip-link/skip-link.variables.d.ts +2 -0
- package/dist/components/skip-link/skip-link.variables.js +61 -0
- package/dist/components/spectrogram/index.d.ts +5 -0
- package/dist/components/spectrogram/index.js +1156 -0
- package/dist/components/spectrogram/spectrogram.css +43 -0
- package/dist/components/spectrogram/spectrogram.schema.d.ts +3 -0
- package/dist/components/spectrogram/spectrogram.schema.js +103 -0
- package/dist/components/spectrogram/spectrogram.svelte.d.ts +21 -0
- package/dist/components/spectrogram/spectrogram.types.d.ts +60 -0
- package/dist/components/spectrogram/spectrogram.variables.d.ts +2 -0
- package/dist/components/spectrogram/spectrogram.variables.js +61 -0
- package/dist/components/spectrum-chart/index.d.ts +5 -0
- package/dist/components/spectrum-chart/index.js +1056 -0
- package/dist/components/spectrum-chart/spectrum-chart.css +49 -0
- package/dist/components/spectrum-chart/spectrum-chart.schema.d.ts +3 -0
- package/dist/components/spectrum-chart/spectrum-chart.schema.js +97 -0
- package/dist/components/spectrum-chart/spectrum-chart.svelte.d.ts +21 -0
- package/dist/components/spectrum-chart/spectrum-chart.types.d.ts +41 -0
- package/dist/components/spectrum-chart/spectrum-chart.variables.d.ts +2 -0
- package/dist/components/spectrum-chart/spectrum-chart.variables.js +61 -0
- package/dist/components/status-dot/status-dot.css +8 -0
- package/dist/components/status-dot/status-dot.schema.js +3 -3
- package/dist/components/status-dot/status-dot.types.d.ts +5 -2
- package/dist/components/subscription-badge/index.d.ts +5 -0
- package/dist/components/subscription-badge/index.js +383 -0
- package/dist/components/subscription-badge/subscription-badge.css +18 -0
- package/dist/components/subscription-badge/subscription-badge.schema.d.ts +3 -0
- package/dist/components/subscription-badge/subscription-badge.schema.js +77 -0
- package/dist/components/subscription-badge/subscription-badge.svelte.d.ts +19 -0
- package/dist/components/subscription-badge/subscription-badge.types.d.ts +28 -0
- package/dist/components/subscription-badge/subscription-badge.variables.d.ts +2 -0
- package/dist/components/subscription-badge/subscription-badge.variables.js +61 -0
- package/dist/components/tab/index.js +14 -1
- package/dist/components/table/index.js +26 -17
- package/dist/components/table-cell/index.js +18 -9
- package/dist/components/table-cell/table-cell.schema.js +5 -1
- package/dist/components/table-cell/table-cell.types.d.ts +16 -1
- package/dist/components/tabs/index.js +14 -1
- package/dist/components/waveform/index.d.ts +5 -0
- package/dist/components/waveform/index.js +1075 -0
- package/dist/components/waveform/waveform.css +53 -0
- package/dist/components/waveform/waveform.schema.d.ts +3 -0
- package/dist/components/waveform/waveform.schema.js +98 -0
- package/dist/components/waveform/waveform.svelte.d.ts +20 -0
- package/dist/components/waveform/waveform.types.d.ts +42 -0
- package/dist/components/waveform/waveform.variables.d.ts +2 -0
- package/dist/components/waveform/waveform.variables.js +61 -0
- package/dist/index.d.ts +33 -2
- package/dist/index.js +144 -115
- package/dist/server/components/accordion/index.js +14 -1
- package/dist/server/components/alert/alert.schema.js +3 -3
- package/dist/server/components/alert/index.js +3 -2
- package/dist/server/components/alert-dialog/index.js +12 -3
- package/dist/server/components/area-chart/index.css +50 -3
- package/dist/server/components/area-chart/index.js +181 -2
- package/dist/server/components/avatar-group/index.css +1 -1
- package/dist/server/components/badge/badge.schema.js +6 -1
- package/dist/server/components/badge/index.css +4 -0
- package/dist/server/components/badge/index.js +3 -1
- package/dist/server/components/bar-chart/index.css +50 -3
- package/dist/server/components/bar-chart/index.js +166 -2
- package/dist/server/components/button/index.css +1 -1
- package/dist/server/components/button/index.js +12 -3
- package/dist/server/components/capability-gate/capability-gate.schema.js +110 -0
- package/dist/server/components/capability-gate/capability-gate.variables.js +43 -0
- package/dist/server/components/capability-gate/index.css +121 -0
- package/dist/server/components/capability-gate/index.js +168 -0
- package/dist/server/components/card/card.schema.js +5 -1
- package/dist/server/components/card/index.css +9 -1
- package/dist/server/components/card/index.js +3 -2
- package/dist/server/components/chat/index.css +2 -2
- package/dist/server/components/chat/index.js +78 -19
- package/dist/server/components/choice-grid/choice-grid.schema.js +103 -0
- package/dist/server/components/choice-grid/choice-grid.variables.js +43 -0
- package/dist/server/components/choice-grid/index.css +103 -0
- package/dist/server/components/choice-grid/index.js +383 -0
- package/dist/server/components/choice-grid-item/choice-grid-item.schema.js +75 -0
- package/dist/server/components/choice-grid-item/choice-grid-item.variables.js +43 -0
- package/dist/server/components/choice-grid-item/index.css +86 -0
- package/dist/server/components/choice-grid-item/index.js +139 -0
- package/dist/server/components/color-field/index.css +2 -4
- package/dist/server/components/color-picker/index.css +14 -10
- package/dist/server/components/color-swatch-picker/index.css +2 -4
- package/dist/server/components/confirm-dialog/index.js +12 -3
- package/dist/server/components/context-menu/index.js +72 -20
- package/dist/server/components/context-menu-trigger/index.js +6 -4
- package/dist/server/components/data-table/data-table.schema.js +85 -0
- package/dist/server/components/data-table/data-table.variables.js +43 -0
- package/dist/server/components/data-table/index.css +182 -0
- package/dist/server/components/data-table/index.js +469 -0
- package/dist/server/components/diff-viewer/index.js +14 -3
- package/dist/server/components/dropdown/index.js +67 -17
- package/dist/server/components/dropdown-item/dropdown-item.schema.js +13 -1
- package/dist/server/components/dropdown-item/index.js +67 -17
- package/dist/server/components/floating-action-button/index.css +1 -1
- package/dist/server/components/json-schema-editor/index.js +29 -4
- package/dist/server/components/keyboard-shortcuts/index.css +86 -0
- package/dist/server/components/keyboard-shortcuts/index.js +149 -0
- package/dist/server/components/keyboard-shortcuts/keyboard-shortcuts.schema.js +69 -0
- package/dist/server/components/keyboard-shortcuts/keyboard-shortcuts.variables.js +43 -0
- package/dist/server/components/line-chart/index.css +50 -3
- package/dist/server/components/line-chart/index.js +181 -2
- package/dist/server/components/markdown-editor/index.js +78 -19
- package/dist/server/components/matrix-chart/index.css +52 -0
- package/dist/server/components/matrix-chart/index.js +1026 -0
- package/dist/server/components/matrix-chart/matrix-chart.schema.js +105 -0
- package/dist/server/components/matrix-chart/matrix-chart.variables.js +43 -0
- package/dist/server/components/media-controls/index.css +109 -0
- package/dist/server/components/media-controls/index.js +192 -0
- package/dist/server/components/media-controls/media-controls.schema.js +107 -0
- package/dist/server/components/media-controls/media-controls.variables.js +43 -0
- package/dist/server/components/navigation-bar/navigation-bar.schema.js +5 -5
- package/dist/server/components/pricing-card/index.css +131 -0
- package/dist/server/components/pricing-card/index.js +258 -0
- package/dist/server/components/pricing-card/pricing-card.schema.js +82 -0
- package/dist/server/components/pricing-card/pricing-card.variables.js +43 -0
- package/dist/server/components/review-editor/index.css +2 -2
- package/dist/server/components/review-editor/index.js +80 -19
- package/dist/server/components/share-card/index.css +113 -0
- package/dist/server/components/share-card/index.js +270 -0
- package/dist/server/components/share-card/share-card.schema.js +95 -0
- package/dist/server/components/share-card/share-card.variables.js +43 -0
- package/dist/server/components/shortcut-hint/index.css +28 -0
- package/dist/server/components/shortcut-hint/index.js +134 -0
- package/dist/server/components/shortcut-hint/shortcut-hint.schema.js +78 -0
- package/dist/server/components/shortcut-hint/shortcut-hint.variables.js +43 -0
- package/dist/server/components/skip-link/index.js +141 -0
- package/dist/server/components/skip-link/skip-link.schema.js +58 -0
- package/dist/server/components/skip-link/skip-link.variables.js +43 -0
- package/dist/server/components/spectrogram/index.css +45 -0
- package/dist/server/components/spectrogram/index.js +970 -0
- package/dist/server/components/spectrogram/spectrogram.schema.js +85 -0
- package/dist/server/components/spectrogram/spectrogram.variables.js +43 -0
- package/dist/server/components/spectrum-chart/index.css +51 -0
- package/dist/server/components/spectrum-chart/index.js +871 -0
- package/dist/server/components/spectrum-chart/spectrum-chart.schema.js +79 -0
- package/dist/server/components/spectrum-chart/spectrum-chart.variables.js +43 -0
- package/dist/server/components/status-dot/index.css +8 -0
- package/dist/server/components/status-dot/status-dot.schema.js +3 -3
- package/dist/server/components/subscription-badge/index.css +2 -0
- package/dist/server/components/subscription-badge/index.js +339 -0
- package/dist/server/components/subscription-badge/subscription-badge.schema.js +59 -0
- package/dist/server/components/subscription-badge/subscription-badge.variables.js +43 -0
- package/dist/server/components/tab/index.js +14 -1
- package/dist/server/components/table/index.js +13 -8
- package/dist/server/components/table-cell/index.js +13 -8
- package/dist/server/components/table-cell/table-cell.schema.js +5 -1
- package/dist/server/components/tabs/index.js +14 -1
- package/dist/server/components/waveform/index.css +55 -0
- package/dist/server/components/waveform/index.js +907 -0
- package/dist/server/components/waveform/waveform.schema.js +80 -0
- package/dist/server/components/waveform/waveform.variables.js +43 -0
- package/dist/server/index.css +1137 -55
- package/dist/server/index.js +4225 -1750
- package/package.json +380 -2
- package/src/_internal/chart/chart-focus-ring.ts +209 -0
- package/src/_internal/chart/chart-utilities.ts +4 -0
- package/src/_internal/chart/heatmap-utilities.ts +159 -0
- package/src/components/accordion/accordion.examples.json +1 -0
- package/src/components/alert/README.md +5 -5
- package/src/components/alert/alert.schema.json +2 -2
- package/src/components/alert/alert.schema.ts +3 -2
- package/src/components/alert/alert.svelte +5 -1
- package/src/components/alert/alert.types.ts +3 -2
- package/src/components/area-chart/README.md +62 -0
- package/src/components/area-chart/area-chart.css +57 -7
- package/src/components/area-chart/area-chart.svelte +128 -10
- package/src/components/avatar-group/avatar-group.css +2 -3
- package/src/components/avatar-group/avatar-group.examples.json +1 -0
- package/src/components/backdrop/README.md +56 -0
- package/src/components/badge/README.md +6 -5
- package/src/components/badge/badge.css +17 -0
- package/src/components/badge/badge.schema.json +5 -0
- package/src/components/badge/badge.schema.ts +6 -0
- package/src/components/badge/badge.svelte +2 -0
- package/src/components/badge/badge.types.ts +7 -0
- package/src/components/bar-chart/README.md +65 -0
- package/src/components/bar-chart/bar-chart.css +57 -7
- package/src/components/bar-chart/bar-chart.svelte +94 -13
- package/src/components/button/button.css +5 -3
- package/src/components/button/button.examples.json +1 -0
- package/src/components/button/button.svelte +15 -0
- package/src/components/capability-gate/README.md +60 -0
- package/src/components/capability-gate/capability-gate.css +131 -0
- package/src/components/capability-gate/capability-gate.examples.json +19 -0
- package/src/components/capability-gate/capability-gate.schema.json +68 -0
- package/src/components/capability-gate/capability-gate.schema.ts +72 -0
- package/src/components/capability-gate/capability-gate.svelte +186 -0
- package/src/components/capability-gate/capability-gate.types.ts +83 -0
- package/src/components/capability-gate/capability-gate.variables.json +1 -0
- package/src/components/capability-gate/capability-gate.variables.ts +3 -0
- package/src/components/capability-gate/index.ts +10 -0
- package/src/components/card/README.md +1 -0
- package/src/components/card/card.css +4 -0
- package/src/components/card/card.examples.json +6 -0
- package/src/components/card/card.schema.json +4 -0
- package/src/components/card/card.schema.ts +5 -0
- package/src/components/card/card.svelte +9 -2
- package/src/components/card/card.types.ts +4 -0
- package/src/components/card/index.ts +1 -1
- package/src/components/chat/README.md +81 -0
- package/src/components/chat/container/chat-jump-controls.svelte +12 -9
- package/src/components/chat/input/chat-input.svelte +7 -8
- package/src/components/chat/message/chat-message.svelte +15 -20
- package/src/components/chat/message/tool-call-group.svelte +10 -4
- package/src/components/choice-grid/README.md +66 -0
- package/src/components/choice-grid/choice-grid-context.ts +30 -0
- package/src/components/choice-grid/choice-grid.css +27 -0
- package/src/components/choice-grid/choice-grid.examples.json +31 -0
- package/src/components/choice-grid/choice-grid.schema.json +61 -0
- package/src/components/choice-grid/choice-grid.schema.ts +70 -0
- package/src/components/choice-grid/choice-grid.svelte +272 -0
- package/src/components/choice-grid/choice-grid.types.ts +152 -0
- package/src/components/choice-grid/choice-grid.variables.json +1 -0
- package/src/components/choice-grid/choice-grid.variables.ts +3 -0
- package/src/components/choice-grid/index.ts +22 -0
- package/src/components/choice-grid-item/README.md +41 -0
- package/src/components/choice-grid-item/choice-grid-item.css +139 -0
- package/src/components/choice-grid-item/choice-grid-item.schema.json +32 -0
- package/src/components/choice-grid-item/choice-grid-item.schema.ts +38 -0
- package/src/components/choice-grid-item/choice-grid-item.svelte +139 -0
- package/src/components/choice-grid-item/choice-grid-item.types.ts +30 -0
- package/src/components/choice-grid-item/choice-grid-item.variables.json +1 -0
- package/src/components/choice-grid-item/choice-grid-item.variables.ts +3 -0
- package/src/components/choice-grid-item/index.ts +6 -0
- package/src/components/click-away-listener/README.md +50 -0
- package/src/components/color-field/color-field.css +6 -9
- package/src/components/color-picker/color-picker.css +31 -24
- package/src/components/color-swatch-picker/color-swatch-picker.css +6 -9
- package/src/components/command-menu/README.md +61 -0
- package/src/components/confirm-dialog/confirm-dialog.examples.json +6 -0
- package/src/components/context-menu/README.md +55 -0
- package/src/components/context-menu-trigger/README.md +50 -0
- package/src/components/context-menu-trigger/context-menu-trigger.svelte +5 -3
- package/src/components/data-table/README.md +67 -0
- package/src/components/data-table/data-table.css +30 -0
- package/src/components/data-table/data-table.examples.json +19 -0
- package/src/components/data-table/data-table.schema.json +43 -0
- package/src/components/data-table/data-table.schema.ts +50 -0
- package/src/components/data-table/data-table.svelte +106 -0
- package/src/components/data-table/data-table.types.ts +89 -0
- package/src/components/data-table/data-table.variables.json +1 -0
- package/src/components/data-table/data-table.variables.ts +3 -0
- package/src/components/data-table/index.ts +6 -0
- package/src/components/diff-viewer/README.md +59 -0
- package/src/components/diff-viewer/front-matter-header.svelte +20 -4
- package/src/components/dropdown-group/README.md +52 -0
- package/src/components/dropdown-item/README.md +10 -7
- package/src/components/dropdown-item/dropdown-item.schema.json +12 -0
- package/src/components/dropdown-item/dropdown-item.schema.ts +14 -0
- package/src/components/dropdown-item/dropdown-item.svelte +108 -25
- package/src/components/dropdown-item/dropdown-item.types.ts +58 -2
- package/src/components/dropdown-item/index.ts +6 -1
- package/src/components/floating-action-button/README.md +53 -0
- package/src/components/floating-action-button/floating-action-button.css +4 -2
- package/src/components/form-section/form-section.examples.json +6 -0
- package/src/components/hover-card/README.md +60 -0
- package/src/components/json-schema-editor/README.md +59 -0
- package/src/components/kanban-board/README.md +62 -0
- package/src/components/keyboard-shortcuts/README.md +51 -0
- package/src/components/keyboard-shortcuts/index.ts +10 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.css +84 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.examples.json +13 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.schema.json +27 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.schema.ts +31 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.svelte +91 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.types.ts +46 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.variables.json +1 -0
- package/src/components/keyboard-shortcuts/keyboard-shortcuts.variables.ts +3 -0
- package/src/components/line-chart/README.md +61 -0
- package/src/components/line-chart/line-chart.css +57 -8
- package/src/components/line-chart/line-chart.svelte +128 -10
- package/src/components/link/README.md +55 -0
- package/src/components/markdown-editor/README.md +70 -0
- package/src/components/markdown-editor/editor-toolbar/toolbar-button.svelte +9 -4
- package/src/components/markdown-editor/editor-toolbar/toolbar-dropdown.svelte +9 -4
- package/src/components/markdown-editor/prosemirror.css +4 -2
- package/src/components/matrix-chart/README.md +61 -0
- package/src/components/matrix-chart/index.ts +10 -0
- package/src/components/matrix-chart/matrix-chart.css +50 -0
- package/src/components/matrix-chart/matrix-chart.examples.json +19 -0
- package/src/components/matrix-chart/matrix-chart.schema.json +63 -0
- package/src/components/matrix-chart/matrix-chart.schema.ts +67 -0
- package/src/components/matrix-chart/matrix-chart.svelte +336 -0
- package/src/components/matrix-chart/matrix-chart.types.ts +56 -0
- package/src/components/matrix-chart/matrix-chart.variables.json +1 -0
- package/src/components/matrix-chart/matrix-chart.variables.ts +3 -0
- package/src/components/media-controls/README.md +60 -0
- package/src/components/media-controls/index.ts +6 -0
- package/src/components/media-controls/media-controls.css +112 -0
- package/src/components/media-controls/media-controls.examples.json +19 -0
- package/src/components/media-controls/media-controls.schema.json +65 -0
- package/src/components/media-controls/media-controls.schema.ts +69 -0
- package/src/components/media-controls/media-controls.svelte +238 -0
- package/src/components/media-controls/media-controls.types.ts +80 -0
- package/src/components/media-controls/media-controls.variables.json +1 -0
- package/src/components/media-controls/media-controls.variables.ts +3 -0
- package/src/components/menu-bar/README.md +53 -0
- package/src/components/navigation-bar/README.md +1 -1
- package/src/components/navigation-bar/navigation-bar.schema.json +4 -4
- package/src/components/navigation-bar/navigation-bar.schema.ts +4 -4
- package/src/components/navigation-bar/navigation-bar.types.ts +2 -1
- package/src/components/pricing-card/README.md +55 -0
- package/src/components/pricing-card/index.ts +6 -0
- package/src/components/pricing-card/pricing-card.css +173 -0
- package/src/components/pricing-card/pricing-card.examples.json +19 -0
- package/src/components/pricing-card/pricing-card.schema.json +40 -0
- package/src/components/pricing-card/pricing-card.schema.ts +44 -0
- package/src/components/pricing-card/pricing-card.svelte +70 -0
- package/src/components/pricing-card/pricing-card.types.ts +49 -0
- package/src/components/pricing-card/pricing-card.variables.json +1 -0
- package/src/components/pricing-card/pricing-card.variables.ts +3 -0
- package/src/components/review-editor/README.md +64 -0
- package/src/components/review-editor/comment-composer.svelte +8 -8
- package/src/components/review-editor/comment-list.svelte +10 -1
- package/src/components/search-field/search-field.examples.json +13 -0
- package/src/components/segment/README.md +55 -0
- package/src/components/share-card/README.md +58 -0
- package/src/components/share-card/index.ts +6 -0
- package/src/components/share-card/share-card.css +115 -0
- package/src/components/share-card/share-card.examples.json +19 -0
- package/src/components/share-card/share-card.schema.json +53 -0
- package/src/components/share-card/share-card.schema.ts +57 -0
- package/src/components/share-card/share-card.svelte +330 -0
- package/src/components/share-card/share-card.types.ts +69 -0
- package/src/components/share-card/share-card.variables.json +1 -0
- package/src/components/share-card/share-card.variables.ts +3 -0
- package/src/components/shortcut-hint/README.md +52 -0
- package/src/components/shortcut-hint/index.ts +6 -0
- package/src/components/shortcut-hint/shortcut-hint.css +26 -0
- package/src/components/shortcut-hint/shortcut-hint.examples.json +13 -0
- package/src/components/shortcut-hint/shortcut-hint.schema.json +36 -0
- package/src/components/shortcut-hint/shortcut-hint.schema.ts +40 -0
- package/src/components/shortcut-hint/shortcut-hint.svelte +62 -0
- package/src/components/shortcut-hint/shortcut-hint.types.ts +35 -0
- package/src/components/shortcut-hint/shortcut-hint.variables.json +1 -0
- package/src/components/shortcut-hint/shortcut-hint.variables.ts +3 -0
- package/src/components/side-navigation/side-navigation.examples.json +6 -0
- package/src/components/skip-link/README.md +50 -0
- package/src/components/skip-link/index.ts +5 -0
- package/src/components/skip-link/skip-link.examples.json +13 -0
- package/src/components/skip-link/skip-link.schema.json +16 -0
- package/src/components/skip-link/skip-link.schema.ts +20 -0
- package/src/components/skip-link/skip-link.svelte +86 -0
- package/src/components/skip-link/skip-link.types.ts +40 -0
- package/src/components/skip-link/skip-link.variables.json +1 -0
- package/src/components/skip-link/skip-link.variables.ts +3 -0
- package/src/components/spectrogram/README.md +58 -0
- package/src/components/spectrogram/index.ts +10 -0
- package/src/components/spectrogram/spectrogram.css +43 -0
- package/src/components/spectrogram/spectrogram.examples.json +13 -0
- package/src/components/spectrogram/spectrogram.schema.json +43 -0
- package/src/components/spectrogram/spectrogram.schema.ts +47 -0
- package/src/components/spectrogram/spectrogram.svelte +284 -0
- package/src/components/spectrogram/spectrogram.types.ts +63 -0
- package/src/components/spectrogram/spectrogram.variables.json +1 -0
- package/src/components/spectrogram/spectrogram.variables.ts +3 -0
- package/src/components/spectrum-chart/README.md +57 -0
- package/src/components/spectrum-chart/index.ts +10 -0
- package/src/components/spectrum-chart/spectrum-chart.css +49 -0
- package/src/components/spectrum-chart/spectrum-chart.examples.json +13 -0
- package/src/components/spectrum-chart/spectrum-chart.schema.json +37 -0
- package/src/components/spectrum-chart/spectrum-chart.schema.ts +41 -0
- package/src/components/spectrum-chart/spectrum-chart.svelte +247 -0
- package/src/components/spectrum-chart/spectrum-chart.types.ts +44 -0
- package/src/components/spectrum-chart/spectrum-chart.variables.json +1 -0
- package/src/components/spectrum-chart/spectrum-chart.variables.ts +3 -0
- package/src/components/status-dot/README.md +7 -7
- package/src/components/status-dot/status-dot.css +8 -0
- package/src/components/status-dot/status-dot.schema.json +2 -2
- package/src/components/status-dot/status-dot.schema.ts +3 -2
- package/src/components/status-dot/status-dot.types.ts +13 -2
- package/src/components/subscription-badge/README.md +50 -0
- package/src/components/subscription-badge/index.ts +6 -0
- package/src/components/subscription-badge/subscription-badge.css +18 -0
- package/src/components/subscription-badge/subscription-badge.examples.json +19 -0
- package/src/components/subscription-badge/subscription-badge.schema.json +16 -0
- package/src/components/subscription-badge/subscription-badge.schema.ts +21 -0
- package/src/components/subscription-badge/subscription-badge.svelte +69 -0
- package/src/components/subscription-badge/subscription-badge.types.ts +37 -0
- package/src/components/subscription-badge/subscription-badge.variables.json +1 -0
- package/src/components/subscription-badge/subscription-badge.variables.ts +3 -0
- package/src/components/table-cell/README.md +6 -5
- package/src/components/table-cell/table-cell.schema.json +4 -0
- package/src/components/table-cell/table-cell.schema.ts +5 -0
- package/src/components/table-cell/table-cell.svelte +9 -3
- package/src/components/table-cell/table-cell.types.ts +16 -1
- package/src/components/tag-input/README.md +75 -0
- package/src/components/typography/README.md +51 -0
- package/src/components/waveform/README.md +57 -0
- package/src/components/waveform/index.ts +6 -0
- package/src/components/waveform/waveform.css +53 -0
- package/src/components/waveform/waveform.examples.json +19 -0
- package/src/components/waveform/waveform.schema.json +38 -0
- package/src/components/waveform/waveform.schema.ts +42 -0
- package/src/components/waveform/waveform.svelte +286 -0
- package/src/components/waveform/waveform.types.ts +45 -0
- package/src/components/waveform/waveform.variables.json +1 -0
- package/src/components/waveform/waveform.variables.ts +3 -0
- package/src/index.ts +85 -2
- package/src/styles/components.css +13 -0
- package/src/styles/shell.css +3 -0
- package/src/styles/tokens-base.css +59 -22
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
/**
|
|
3
|
+
* @cinder
|
|
4
|
+
* @category feedback
|
|
5
|
+
* @status alpha
|
|
6
|
+
* @purpose Present feature availability and next action for browser permission or support states, with accessible status text and focus management.
|
|
7
|
+
* @tag feedback
|
|
8
|
+
* @tag permission
|
|
9
|
+
* @tag notice
|
|
10
|
+
* @useWhen Surfacing that a feature requires a browser permission such as microphone or notifications.
|
|
11
|
+
* @useWhen Communicating that a feature is unsupported in the current browser with a clear fallback path.
|
|
12
|
+
* @avoidWhen Performing the actual feature detection or permission request — wire that in userland.
|
|
13
|
+
* @avoidWhen Storing permission state — CapabilityGate is a pure presentation component.
|
|
14
|
+
* @related alert, banner, callout, modal
|
|
15
|
+
*/
|
|
16
|
+
export type {
|
|
17
|
+
CapabilityGateProps,
|
|
18
|
+
CapabilityGateState,
|
|
19
|
+
CapabilityGateVariant,
|
|
20
|
+
} from './capability-gate.types.ts';
|
|
21
|
+
|
|
22
|
+
/** Human-readable default status text per state. */
|
|
23
|
+
const DEFAULT_STATUS_TEXT: Record<string, string> = {
|
|
24
|
+
supported: 'Available',
|
|
25
|
+
unsupported: 'Not supported in this browser',
|
|
26
|
+
'permission-needed': 'Permission required',
|
|
27
|
+
'permission-denied': 'Permission was denied',
|
|
28
|
+
loading: 'Checking availability…',
|
|
29
|
+
unavailable: 'Not available',
|
|
30
|
+
};
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<script lang="ts">
|
|
34
|
+
import { classNames } from '../../utilities/class-names.ts';
|
|
35
|
+
import { devWarn } from '../../utilities/dev-warn.ts';
|
|
36
|
+
import type { CapabilityGateProps } from './capability-gate.types.ts';
|
|
37
|
+
|
|
38
|
+
const KNOWN_STATES = [
|
|
39
|
+
'supported',
|
|
40
|
+
'unsupported',
|
|
41
|
+
'permission-needed',
|
|
42
|
+
'permission-denied',
|
|
43
|
+
'loading',
|
|
44
|
+
'unavailable',
|
|
45
|
+
] as const;
|
|
46
|
+
|
|
47
|
+
let {
|
|
48
|
+
feature,
|
|
49
|
+
// Destructured off `state` to avoid svelte-check treating the bare identifier
|
|
50
|
+
// as the `$state` rune (the public prop name is still `state`).
|
|
51
|
+
state: stateProp,
|
|
52
|
+
variant = 'inline',
|
|
53
|
+
primaryAction,
|
|
54
|
+
onPrimaryAction,
|
|
55
|
+
fallbackAction,
|
|
56
|
+
fallbackHref,
|
|
57
|
+
onFallbackAction,
|
|
58
|
+
dismissAction,
|
|
59
|
+
onDismiss,
|
|
60
|
+
children,
|
|
61
|
+
class: customClassName,
|
|
62
|
+
...rest
|
|
63
|
+
}: CapabilityGateProps = $props();
|
|
64
|
+
|
|
65
|
+
// Guard the runtime state: a plain-JS or malformed value falls back to
|
|
66
|
+
// `unavailable` (with a dev warning) rather than rendering an unknown
|
|
67
|
+
// data-cinder-state and the raw value as status text.
|
|
68
|
+
const availabilityState = $derived(
|
|
69
|
+
(KNOWN_STATES as readonly string[]).includes(stateProp) ? stateProp : 'unavailable',
|
|
70
|
+
);
|
|
71
|
+
$effect(() => {
|
|
72
|
+
if (!(KNOWN_STATES as readonly string[]).includes(stateProp)) {
|
|
73
|
+
devWarn(
|
|
74
|
+
`CapabilityGate: unknown state "${String(stateProp)}". Expected one of ${KNOWN_STATES.join(', ')}. Falling back to "unavailable".`,
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
let visible = $state(true);
|
|
80
|
+
let dismissButton: HTMLButtonElement | undefined = $state();
|
|
81
|
+
|
|
82
|
+
// Re-show the gate when the situation changes (e.g. permission-needed →
|
|
83
|
+
// permission-denied), so a previous dismissal doesn't permanently hide a new,
|
|
84
|
+
// possibly more urgent state. Reads feature + stateProp to track them.
|
|
85
|
+
$effect(() => {
|
|
86
|
+
void feature;
|
|
87
|
+
void stateProp;
|
|
88
|
+
visible = true;
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
const statusText = $derived(DEFAULT_STATUS_TEXT[availabilityState] ?? availabilityState);
|
|
92
|
+
const isLoading = $derived(availabilityState === 'loading');
|
|
93
|
+
const isError = $derived(
|
|
94
|
+
availabilityState === 'permission-denied' || availabilityState === 'unsupported',
|
|
95
|
+
);
|
|
96
|
+
const isWarning = $derived(availabilityState === 'permission-needed');
|
|
97
|
+
const isSuccess = $derived(availabilityState === 'supported');
|
|
98
|
+
|
|
99
|
+
const resolvedVariant = $derived(
|
|
100
|
+
isError ? 'error' : isWarning ? 'warning' : isSuccess ? 'success' : 'info',
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
function handleDismiss() {
|
|
104
|
+
// Blur the dismiss button before it unmounts so focus moves to <body>
|
|
105
|
+
// predictably rather than being stranded on a detached node. The consumer
|
|
106
|
+
// owns where focus should land next (e.g. a trigger to re-open the gate) and
|
|
107
|
+
// can set it in `onDismiss` — the component cannot know the right target.
|
|
108
|
+
dismissButton?.blur();
|
|
109
|
+
visible = false;
|
|
110
|
+
onDismiss?.();
|
|
111
|
+
}
|
|
112
|
+
</script>
|
|
113
|
+
|
|
114
|
+
{#if visible}
|
|
115
|
+
<div
|
|
116
|
+
{...rest}
|
|
117
|
+
class={classNames('cinder-capability-gate', customClassName)}
|
|
118
|
+
data-cinder-state={availabilityState}
|
|
119
|
+
data-cinder-variant={resolvedVariant}
|
|
120
|
+
data-cinder-presentation={variant}
|
|
121
|
+
>
|
|
122
|
+
<!-- Status text announced to assistive technology. aria-busy lives on the
|
|
123
|
+
live region so a loading→ready transition is announced consistently. -->
|
|
124
|
+
<div
|
|
125
|
+
class="cinder-capability-gate__status"
|
|
126
|
+
role="status"
|
|
127
|
+
aria-live="polite"
|
|
128
|
+
aria-busy={isLoading ? 'true' : undefined}
|
|
129
|
+
>
|
|
130
|
+
<span class="cinder-capability-gate__feature">{feature}</span>
|
|
131
|
+
<span class="cinder-capability-gate__state-text">{statusText}</span>
|
|
132
|
+
</div>
|
|
133
|
+
|
|
134
|
+
{#if children}
|
|
135
|
+
<div class="cinder-capability-gate__content">
|
|
136
|
+
{@render children()}
|
|
137
|
+
</div>
|
|
138
|
+
{/if}
|
|
139
|
+
|
|
140
|
+
{#if primaryAction || fallbackAction || fallbackHref || dismissAction}
|
|
141
|
+
<div class="cinder-capability-gate__actions">
|
|
142
|
+
{#if primaryAction}
|
|
143
|
+
<button
|
|
144
|
+
type="button"
|
|
145
|
+
class="cinder-capability-gate__primary"
|
|
146
|
+
onclick={onPrimaryAction}
|
|
147
|
+
aria-label="{primaryAction} for {feature}"
|
|
148
|
+
>
|
|
149
|
+
{primaryAction}
|
|
150
|
+
</button>
|
|
151
|
+
{/if}
|
|
152
|
+
|
|
153
|
+
{#if fallbackHref}
|
|
154
|
+
<a
|
|
155
|
+
href={fallbackHref}
|
|
156
|
+
class="cinder-capability-gate__fallback"
|
|
157
|
+
aria-label="{fallbackAction ?? 'Alternative option'} for {feature}"
|
|
158
|
+
>
|
|
159
|
+
{fallbackAction ?? 'Alternative option'}
|
|
160
|
+
</a>
|
|
161
|
+
{:else if fallbackAction}
|
|
162
|
+
<button
|
|
163
|
+
type="button"
|
|
164
|
+
class="cinder-capability-gate__fallback"
|
|
165
|
+
onclick={onFallbackAction}
|
|
166
|
+
aria-label="{fallbackAction} for {feature}"
|
|
167
|
+
>
|
|
168
|
+
{fallbackAction}
|
|
169
|
+
</button>
|
|
170
|
+
{/if}
|
|
171
|
+
|
|
172
|
+
{#if dismissAction}
|
|
173
|
+
<button
|
|
174
|
+
bind:this={dismissButton}
|
|
175
|
+
type="button"
|
|
176
|
+
class="cinder-capability-gate__dismiss"
|
|
177
|
+
onclick={handleDismiss}
|
|
178
|
+
aria-label={dismissAction}
|
|
179
|
+
>
|
|
180
|
+
{dismissAction}
|
|
181
|
+
</button>
|
|
182
|
+
{/if}
|
|
183
|
+
</div>
|
|
184
|
+
{/if}
|
|
185
|
+
</div>
|
|
186
|
+
{/if}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
|
|
4
|
+
/** Availability state for a browser feature or permission. */
|
|
5
|
+
export type CapabilityGateState =
|
|
6
|
+
| 'supported'
|
|
7
|
+
| 'unsupported'
|
|
8
|
+
| 'permission-needed'
|
|
9
|
+
| 'permission-denied'
|
|
10
|
+
| 'loading'
|
|
11
|
+
| 'unavailable';
|
|
12
|
+
|
|
13
|
+
/** Presentation style for the gate. */
|
|
14
|
+
export type CapabilityGateVariant = 'inline' | 'banner' | 'callout';
|
|
15
|
+
|
|
16
|
+
/** Props for the CapabilityGate component. */
|
|
17
|
+
export type CapabilityGateProps = Omit<
|
|
18
|
+
HTMLAttributes<HTMLDivElement>,
|
|
19
|
+
'class' | 'children' | 'role'
|
|
20
|
+
> & {
|
|
21
|
+
/** The feature being gated (used in accessible status text). */
|
|
22
|
+
feature: string;
|
|
23
|
+
/** Current availability state. */
|
|
24
|
+
state: CapabilityGateState;
|
|
25
|
+
/** Presentation variant. @default "inline" */
|
|
26
|
+
variant?: CapabilityGateVariant;
|
|
27
|
+
/** Label for the primary action button (e.g. "Allow access", "Enable notifications"). */
|
|
28
|
+
primaryAction?: string;
|
|
29
|
+
/** Called when the user clicks the primary action button. */
|
|
30
|
+
onPrimaryAction?: () => void;
|
|
31
|
+
/** Label for the fallback action (e.g. "Use a different method"). */
|
|
32
|
+
fallbackAction?: string;
|
|
33
|
+
/** Href for a fallback link (renders an anchor instead of a button). */
|
|
34
|
+
fallbackHref?: string;
|
|
35
|
+
/** Called when the user clicks the fallback action (only when no fallbackHref). */
|
|
36
|
+
onFallbackAction?: () => void;
|
|
37
|
+
/** Label for the dismiss action. When provided a dismiss button is rendered. */
|
|
38
|
+
dismissAction?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Called when the user dismisses the gate. The gate unmounts itself on
|
|
41
|
+
* dismiss; move focus to a sensible target here (e.g. the control that
|
|
42
|
+
* re-opens the gate) — the component blurs the dismiss button first so focus
|
|
43
|
+
* is not stranded, but only the consumer knows the right next focus target.
|
|
44
|
+
*/
|
|
45
|
+
onDismiss?: () => void;
|
|
46
|
+
/** Custom content rendered below the status text and before the actions. */
|
|
47
|
+
children?: Snippet;
|
|
48
|
+
/** Additional class names merged with `.cinder-capability-gate`. */
|
|
49
|
+
class?: string;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Cinder-specific props for CapabilityGate, used by the schema generator.
|
|
54
|
+
*/
|
|
55
|
+
export interface CapabilityGateSchemaProps {
|
|
56
|
+
/** The feature being gated. */
|
|
57
|
+
feature: string;
|
|
58
|
+
/** Current availability state. */
|
|
59
|
+
state: CapabilityGateState;
|
|
60
|
+
/**
|
|
61
|
+
* Presentation variant.
|
|
62
|
+
* @default "inline"
|
|
63
|
+
*/
|
|
64
|
+
variant?: CapabilityGateVariant;
|
|
65
|
+
/** Label for the primary action button. */
|
|
66
|
+
primaryAction?: string;
|
|
67
|
+
/** Label for the fallback action. */
|
|
68
|
+
fallbackAction?: string;
|
|
69
|
+
/** Href for a fallback link. */
|
|
70
|
+
fallbackHref?: string;
|
|
71
|
+
/** Label for the dismiss action. */
|
|
72
|
+
dismissAction?: string;
|
|
73
|
+
/** Additional class names merged with `.cinder-capability-gate`. */
|
|
74
|
+
class?: string;
|
|
75
|
+
/** Called when the primary action button is activated. */
|
|
76
|
+
onPrimaryAction?: () => void;
|
|
77
|
+
/** Called when the fallback action button is activated. */
|
|
78
|
+
onFallbackAction?: () => void;
|
|
79
|
+
/** Called when the gate is dismissed. */
|
|
80
|
+
onDismiss?: () => void;
|
|
81
|
+
/** Custom content rendered below the status text and before the actions. */
|
|
82
|
+
children?: Snippet;
|
|
83
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import './capability-gate.css';
|
|
2
|
+
import CapabilityGate from './capability-gate.svelte';
|
|
3
|
+
|
|
4
|
+
export default CapabilityGate;
|
|
5
|
+
export type {
|
|
6
|
+
CapabilityGateProps,
|
|
7
|
+
CapabilityGateState,
|
|
8
|
+
CapabilityGateVariant,
|
|
9
|
+
} from './capability-gate.types.ts';
|
|
10
|
+
export { CapabilityGate };
|
|
@@ -23,6 +23,7 @@ Surface container for grouping related content and actions into a distinct visua
|
|
|
23
23
|
| `edgeToEdgeOnMobile` | `boolean` | no | — | Remove side borders/radius and bleed to the viewport edge on narrow screens. |
|
|
24
24
|
| `footerTone` | `"default"` \| `"muted"` | no | — | Footer surface treatment. `muted` renders a grey/inset footer region. |
|
|
25
25
|
| `headingLevel` | `2` \| `3` \| `4` \| `5` \| `6` | no | — | Heading level for the generated title. Defaults to `3`. Set this so the card title nests correctly within the surrounding document outline. |
|
|
26
|
+
| `padding` | `"none"` \| `"default"` | no | — | Body padding. `none` removes all padding for flush or full-bleed content (e.g. an image). |
|
|
26
27
|
| `title` | `string` | no | — | |
|
|
27
28
|
| `variant` | `"card"` \| `"well"` | no | — | Visual container style. `card` is raised; `well` is flatter and inset. |
|
|
28
29
|
| `children` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
@@ -15,6 +15,12 @@
|
|
|
15
15
|
"description": "A card that bleeds to the viewport edge below the mobile breakpoint.",
|
|
16
16
|
"code": "<script lang=\"ts\">\n import { Card } from '@lostgradient/cinder/card';\n</script>\n\n<Card edgeToEdgeOnMobile>\n <div\n style=\"min-block-size: 8rem; border: 1px dashed var(--cinder-border-muted); border-radius: var(--cinder-radius-sm); background: repeating-linear-gradient(-45deg, transparent, transparent 0.5rem, color-mix(in oklch, var(--cinder-border-muted), transparent 70%) 0.5rem, color-mix(in oklch, var(--cinder-border-muted), transparent 70%) 0.5625rem);\"\n ></div>\n</Card>\n"
|
|
17
17
|
},
|
|
18
|
+
{
|
|
19
|
+
"id": "flush-body",
|
|
20
|
+
"title": "Flush body (padding=\"none\")",
|
|
21
|
+
"description": "Pass padding=\"none\" to remove the body padding for full-bleed content such as an image or a data table.",
|
|
22
|
+
"code": "<script lang=\"ts\">\n import { Card } from '@lostgradient/cinder/card';\n</script>\n\n<Card title=\"Full-bleed image card\" padding=\"none\">\n <div\n style=\"min-block-size: 8rem; background: var(--cinder-surface-inset); border-top: 1px solid var(--cinder-border-muted); display: flex; align-items: center; justify-content: center; color: var(--cinder-text-subtle); font-size: var(--cinder-text-sm);\"\n >\n full-bleed content area\n </div>\n</Card>\n"
|
|
23
|
+
},
|
|
18
24
|
{
|
|
19
25
|
"id": "well-edge-to-edge-mobile",
|
|
20
26
|
"title": "Well, edge-to-edge on mobile",
|
|
@@ -21,6 +21,10 @@
|
|
|
21
21
|
"type": "boolean",
|
|
22
22
|
"description": "Remove side borders/radius and bleed to the viewport edge on narrow screens."
|
|
23
23
|
},
|
|
24
|
+
"padding": {
|
|
25
|
+
"enum": ["none", "default"],
|
|
26
|
+
"description": "Body padding. `none` removes all padding for flush or full-bleed content (e.g. an image)."
|
|
27
|
+
},
|
|
24
28
|
"headingLevel": {
|
|
25
29
|
"enum": [2, 3, 4, 5, 6],
|
|
26
30
|
"description": "Heading level for the generated title. Defaults to `3`. Set this so the\ncard title nests correctly within the surrounding document outline."
|
|
@@ -23,6 +23,11 @@ const schema = {
|
|
|
23
23
|
type: 'boolean',
|
|
24
24
|
description: 'Remove side borders/radius and bleed to the viewport edge on narrow screens.',
|
|
25
25
|
},
|
|
26
|
+
padding: {
|
|
27
|
+
enum: ['none', 'default'],
|
|
28
|
+
description:
|
|
29
|
+
'Body padding. `none` removes all padding for flush or full-bleed content (e.g. an image).',
|
|
30
|
+
},
|
|
26
31
|
headingLevel: {
|
|
27
32
|
enum: [2, 3, 4, 5, 6],
|
|
28
33
|
description:
|
|
@@ -12,7 +12,13 @@
|
|
|
12
12
|
* @avoidWhen Presenting a single key metric — use stat or stat-group instead.
|
|
13
13
|
* @related surface, stat, stacked-list-item, section-heading
|
|
14
14
|
*/
|
|
15
|
-
export type {
|
|
15
|
+
export type {
|
|
16
|
+
CardHeadingLevel,
|
|
17
|
+
CardPadding,
|
|
18
|
+
CardProps,
|
|
19
|
+
CardTone,
|
|
20
|
+
CardVariant,
|
|
21
|
+
} from './card.types.ts';
|
|
16
22
|
</script>
|
|
17
23
|
|
|
18
24
|
<script lang="ts">
|
|
@@ -31,6 +37,7 @@
|
|
|
31
37
|
bodyTone = 'default',
|
|
32
38
|
footerTone = 'default',
|
|
33
39
|
edgeToEdgeOnMobile = false,
|
|
40
|
+
padding = 'default',
|
|
34
41
|
...rest
|
|
35
42
|
}: CardProps = $props();
|
|
36
43
|
|
|
@@ -64,7 +71,7 @@
|
|
|
64
71
|
</div>
|
|
65
72
|
{/if}
|
|
66
73
|
|
|
67
|
-
<div class="cinder-card__body" data-cinder-tone={bodyTone}>
|
|
74
|
+
<div class="cinder-card__body" data-cinder-tone={bodyTone} data-cinder-padding={padding}>
|
|
68
75
|
{@render children()}
|
|
69
76
|
</div>
|
|
70
77
|
|
|
@@ -2,6 +2,8 @@ import type { Snippet } from 'svelte';
|
|
|
2
2
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
3
|
export type CardVariant = 'card' | 'well';
|
|
4
4
|
export type CardTone = 'default' | 'muted';
|
|
5
|
+
/** Controls body padding. `none` removes all padding for flush/full-bleed content. Future values like `compact` may be added. */
|
|
6
|
+
export type CardPadding = 'default' | 'none';
|
|
5
7
|
/** Heading level for the generated card title, so the document outline stays correct. */
|
|
6
8
|
export type CardHeadingLevel = 2 | 3 | 4 | 5 | 6;
|
|
7
9
|
type CardBase = HTMLAttributes<HTMLDivElement> & {
|
|
@@ -14,6 +16,8 @@ type CardBase = HTMLAttributes<HTMLDivElement> & {
|
|
|
14
16
|
footerTone?: CardTone;
|
|
15
17
|
/** Remove side borders/radius and bleed to the viewport edge on narrow screens. */
|
|
16
18
|
edgeToEdgeOnMobile?: boolean;
|
|
19
|
+
/** Body padding. `none` removes all padding for flush or full-bleed content (e.g. an image). */
|
|
20
|
+
padding?: CardPadding;
|
|
17
21
|
};
|
|
18
22
|
/** Basic card with no generated header. */
|
|
19
23
|
type CardPlain = CardBase & {
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Chat
|
|
2
|
+
|
|
3
|
+
Opinionated conversation surface bundling message list, composer, attachments, and scroll affordances for AI or support transcripts.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```svelte
|
|
8
|
+
<script lang="ts">
|
|
9
|
+
import { Chat } from '@lostgradient/cinder/chat';
|
|
10
|
+
</script>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Guidance
|
|
14
|
+
|
|
15
|
+
### Use When
|
|
16
|
+
|
|
17
|
+
- Shipping a full chat surface with composer, scroll-anchor, unread indicator, and attachments bundled as one heavyweight drop-in.
|
|
18
|
+
- Building an AI assistant or support thread where conversation state is modeled as a transcript of role-tagged messages.
|
|
19
|
+
|
|
20
|
+
### Avoid When
|
|
21
|
+
|
|
22
|
+
- Rendering a one-off message list — compose lighter primitives directly instead of pulling the full suite.
|
|
23
|
+
- The transcript is read-only and needs no composer — a simple list of message bubbles is a better fit.
|
|
24
|
+
|
|
25
|
+
## Props
|
|
26
|
+
|
|
27
|
+
<!-- generated:props:start -->
|
|
28
|
+
|
|
29
|
+
| Prop | Type | Required | Default | Description |
|
|
30
|
+
| ------------------------- | ------------------------------ | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
31
|
+
| `allowAttachments` | `boolean` | no | — | |
|
|
32
|
+
| `allowCopy` | `boolean` | no | — | |
|
|
33
|
+
| `allowEditing` | `boolean` | no | — | |
|
|
34
|
+
| `allowRetry` | `boolean` | no | — | |
|
|
35
|
+
| `allowSearch` | `boolean` | no | — | |
|
|
36
|
+
| `bottomThreshold` | `number` | no | — | |
|
|
37
|
+
| `class` | `string` | no | — | |
|
|
38
|
+
| `emptyPrompts` | `string`[] | no | — | |
|
|
39
|
+
| `hasNewMessageIndicator` | `boolean` | no | — | |
|
|
40
|
+
| `id` | `string` | yes | — | |
|
|
41
|
+
| `isAtBottom` | `boolean` | no | — | |
|
|
42
|
+
| `isStreaming` | `boolean` | no | — | |
|
|
43
|
+
| `jumpThreshold` | `number` | no | — | |
|
|
44
|
+
| `streamingStatus` | `string` | no | — | |
|
|
45
|
+
| `surfaceMode` | `"default"` \| `"transparent"` | no | — | |
|
|
46
|
+
| `unreadCount` | `number` | no | — | |
|
|
47
|
+
| `conversation` | `(opaque)` | no | — | A prop whose shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
48
|
+
| `empty` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
49
|
+
| `header` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
50
|
+
| `messageActions` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
51
|
+
| `messageStatus` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
52
|
+
| `onattachmentadd` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
53
|
+
| `onattachmentfailure` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
54
|
+
| `onattachmentremove` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
55
|
+
| `onedit` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
56
|
+
| `onexpandedchange` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
57
|
+
| `onjumptolatest` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
58
|
+
| `onretry` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
59
|
+
| `onscrollstatechange` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
60
|
+
| `onstopgenerating` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
61
|
+
| `onsubmit` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
62
|
+
| `onunreadindicatorchange` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
63
|
+
| `viewportAttachment` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
|
|
64
|
+
|
|
65
|
+
<!-- generated:props:end -->
|
|
66
|
+
|
|
67
|
+
## CSS Variables
|
|
68
|
+
|
|
69
|
+
<!-- generated:variables:start -->
|
|
70
|
+
|
|
71
|
+
This component does not declare any local CSS variables.
|
|
72
|
+
|
|
73
|
+
<!-- generated:variables:end -->
|
|
74
|
+
|
|
75
|
+
## Subcomponents
|
|
76
|
+
|
|
77
|
+
<!-- generated:subcomponents:start -->
|
|
78
|
+
|
|
79
|
+
None.
|
|
80
|
+
|
|
81
|
+
<!-- generated:subcomponents:end -->
|
|
@@ -121,10 +121,8 @@
|
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
.chat-jump-button:focus-visible {
|
|
124
|
-
outline:
|
|
125
|
-
box-shadow:
|
|
126
|
-
0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
|
|
127
|
-
0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
|
|
124
|
+
outline: var(--cinder-ring-width) solid transparent;
|
|
125
|
+
box-shadow: var(--_cinder-focus-ring-shadow);
|
|
128
126
|
}
|
|
129
127
|
|
|
130
128
|
/* Unread Count Badge */
|
|
@@ -180,11 +178,16 @@
|
|
|
180
178
|
}
|
|
181
179
|
|
|
182
180
|
.chat-new-indicator:focus-visible {
|
|
183
|
-
outline:
|
|
184
|
-
box-shadow:
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
181
|
+
outline: var(--cinder-ring-width) solid transparent;
|
|
182
|
+
box-shadow: var(--_cinder-focus-ring-shadow), var(--cinder-shadow-lg);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@media (forced-colors: active) {
|
|
186
|
+
.chat-jump-button:focus-visible,
|
|
187
|
+
.chat-new-indicator:focus-visible {
|
|
188
|
+
outline: var(--cinder-ring-width) solid ButtonText;
|
|
189
|
+
outline-offset: 3px;
|
|
190
|
+
}
|
|
188
191
|
}
|
|
189
192
|
|
|
190
193
|
@keyframes slide-up {
|
|
@@ -854,10 +854,8 @@
|
|
|
854
854
|
}
|
|
855
855
|
|
|
856
856
|
.chat-input-send:focus-visible {
|
|
857
|
-
outline:
|
|
858
|
-
box-shadow:
|
|
859
|
-
0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
|
|
860
|
-
0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-accent);
|
|
857
|
+
outline: var(--cinder-ring-width) solid transparent;
|
|
858
|
+
box-shadow: var(--_cinder-focus-ring-shadow);
|
|
861
859
|
}
|
|
862
860
|
|
|
863
861
|
/* Stop button variant - danger-tinted to signal urgency during streaming */
|
|
@@ -874,10 +872,11 @@
|
|
|
874
872
|
}
|
|
875
873
|
}
|
|
876
874
|
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
875
|
+
@media (forced-colors: active) {
|
|
876
|
+
.chat-input-send:focus-visible {
|
|
877
|
+
outline: var(--cinder-ring-width) solid ButtonText;
|
|
878
|
+
outline-offset: 3px;
|
|
879
|
+
}
|
|
881
880
|
}
|
|
882
881
|
|
|
883
882
|
/* Spinner */
|
|
@@ -347,9 +347,7 @@
|
|
|
347
347
|
|
|
348
348
|
.chat-message:focus-visible {
|
|
349
349
|
outline: var(--cinder-ring-width) solid transparent;
|
|
350
|
-
box-shadow:
|
|
351
|
-
0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
|
|
352
|
-
0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
|
|
350
|
+
box-shadow: var(--_cinder-focus-ring-shadow);
|
|
353
351
|
}
|
|
354
352
|
|
|
355
353
|
/* Search match highlight — subtle accent-tinted ring */
|
|
@@ -571,9 +569,7 @@
|
|
|
571
569
|
|
|
572
570
|
.chat-message-expand:focus-visible {
|
|
573
571
|
outline: var(--cinder-ring-width) solid transparent;
|
|
574
|
-
box-shadow:
|
|
575
|
-
0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
|
|
576
|
-
0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
|
|
572
|
+
box-shadow: var(--_cinder-focus-ring-shadow);
|
|
577
573
|
}
|
|
578
574
|
|
|
579
575
|
/* Failed message styling */
|
|
@@ -622,9 +618,7 @@
|
|
|
622
618
|
|
|
623
619
|
.chat-message-retry:focus-visible {
|
|
624
620
|
outline: var(--cinder-ring-width) solid transparent;
|
|
625
|
-
box-shadow:
|
|
626
|
-
0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
|
|
627
|
-
0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
|
|
621
|
+
box-shadow: var(--_cinder-focus-ring-shadow);
|
|
628
622
|
}
|
|
629
623
|
|
|
630
624
|
/* Footer — absolutely positioned outside the bubble's flow so revealing it on
|
|
@@ -757,9 +751,7 @@
|
|
|
757
751
|
|
|
758
752
|
:global(.chat-message-action-button:focus-visible) {
|
|
759
753
|
outline: var(--cinder-ring-width) solid transparent;
|
|
760
|
-
box-shadow:
|
|
761
|
-
0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
|
|
762
|
-
0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
|
|
754
|
+
box-shadow: var(--_cinder-focus-ring-shadow);
|
|
763
755
|
}
|
|
764
756
|
|
|
765
757
|
/* Touch devices: without hover discoverability, bare icons read as
|
|
@@ -818,7 +810,9 @@
|
|
|
818
810
|
}
|
|
819
811
|
|
|
820
812
|
.chat-message-edit-textarea:focus {
|
|
821
|
-
|
|
813
|
+
outline: var(--cinder-ring-width) solid transparent;
|
|
814
|
+
outline-offset: var(--cinder-ring-offset);
|
|
815
|
+
box-shadow: var(--_cinder-focus-ring-shadow);
|
|
822
816
|
}
|
|
823
817
|
|
|
824
818
|
.chat-message-edit-actions {
|
|
@@ -848,9 +842,7 @@
|
|
|
848
842
|
|
|
849
843
|
.chat-message-edit-save:focus-visible {
|
|
850
844
|
outline: var(--cinder-ring-width) solid transparent;
|
|
851
|
-
box-shadow:
|
|
852
|
-
0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
|
|
853
|
-
0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
|
|
845
|
+
box-shadow: var(--_cinder-focus-ring-shadow);
|
|
854
846
|
}
|
|
855
847
|
|
|
856
848
|
.chat-message-edit-cancel {
|
|
@@ -877,9 +869,7 @@
|
|
|
877
869
|
|
|
878
870
|
.chat-message-edit-cancel:focus-visible {
|
|
879
871
|
outline: var(--cinder-ring-width) solid transparent;
|
|
880
|
-
box-shadow:
|
|
881
|
-
0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
|
|
882
|
-
0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
|
|
872
|
+
box-shadow: var(--_cinder-focus-ring-shadow);
|
|
883
873
|
}
|
|
884
874
|
|
|
885
875
|
/* Responsive sizing for narrow viewports */
|
|
@@ -896,9 +886,14 @@
|
|
|
896
886
|
|
|
897
887
|
/* Forced-colors: box-shadow rings are suppressed in Windows High Contrast Mode,
|
|
898
888
|
so repaint the reserved transparent outline channel with a system color.
|
|
899
|
-
|
|
889
|
+
Text-entry focus uses Highlight; pressable regions use ButtonText.
|
|
900
890
|
Placed after the base rules per the focus-ring policy's cascade note. */
|
|
901
891
|
@media (forced-colors: active) {
|
|
892
|
+
.chat-message-edit-textarea:focus {
|
|
893
|
+
outline: var(--cinder-ring-width) solid Highlight;
|
|
894
|
+
outline-offset: 1px;
|
|
895
|
+
}
|
|
896
|
+
|
|
902
897
|
.chat-message:focus-visible,
|
|
903
898
|
.chat-message-expand:focus-visible,
|
|
904
899
|
.chat-message-retry:focus-visible,
|