@stephen-netu/design-system 0.2.1 → 0.5.1
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/b0-app-shell/clarification-overlay/ClarificationOverlay.svelte +10 -2
- package/dist/b0-app-shell/clarification-overlay/ClarificationOverlay.svelte.d.ts.map +1 -1
- package/dist/b0-app-shell/{command-bar/CommandBar.svelte → global-command-bar/GlobalCommandBar.svelte} +75 -75
- package/dist/b0-app-shell/{command-bar/CommandBar.svelte.d.ts → global-command-bar/GlobalCommandBar.svelte.d.ts} +6 -6
- package/dist/b0-app-shell/global-command-bar/GlobalCommandBar.svelte.d.ts.map +1 -0
- package/dist/b0-app-shell/index.d.ts +1 -1
- package/dist/b0-app-shell/index.d.ts.map +1 -1
- package/dist/b0-app-shell/index.js +1 -1
- package/dist/d0-data-viz/BarChart.test.js +53 -0
- package/dist/d0-data-viz/CheckpointBar.test.js +83 -0
- package/dist/d0-data-viz/CheckpointPill.svelte +8 -3
- package/dist/d0-data-viz/CheckpointPill.svelte.d.ts.map +1 -1
- package/dist/d0-data-viz/CheckpointPill.test.js +78 -0
- package/dist/d0-data-viz/ConnectionHealth.test.js +70 -0
- package/dist/d0-data-viz/MetricCard.test.js +57 -0
- package/dist/d0-data-viz/SparkLine.test.js +47 -0
- package/dist/d0-data-viz/StorageMap.test.js +63 -0
- package/dist/d0-data-viz/Timeline.test.js +62 -0
- package/dist/d0-data-viz/WorldLineTimeline.test.js +99 -0
- package/dist/d0-data-viz/checkpoint-types.js +1 -1
- package/dist/d0-data-viz/storage-map-types.d.ts.map +1 -1
- package/dist/d0-data-viz/storage-map-types.js +6 -3
- package/dist/d0-data-viz/theme-integration.d.ts +3 -3
- package/dist/d0-data-viz/theme-integration.js +4 -4
- package/dist/d0-data-viz/theme-integration.test.js +41 -0
- package/dist/demos/AmbientPrimitivesDemo.svelte +103 -0
- package/dist/demos/AmbientPrimitivesDemo.svelte.d.ts +5 -0
- package/dist/demos/AmbientPrimitivesDemo.svelte.d.ts.map +1 -0
- package/dist/demos/BspSizingInfographic.svelte +3 -32
- package/dist/demos/NodepadBlocksShowcase.svelte +2 -1
- package/dist/demos/NodepadBlocksShowcase.svelte.d.ts.map +1 -1
- package/dist/demos/index.d.ts +1 -0
- package/dist/demos/index.d.ts.map +1 -1
- package/dist/demos/index.js +1 -0
- package/dist/editor/CodeEditor.svelte +83 -26
- package/dist/editor/CodeEditor.svelte.d.ts +0 -1
- package/dist/editor/CodeEditor.svelte.d.ts.map +1 -1
- package/dist/editor/CodeEditor.test.js +38 -0
- package/dist/editor/ExternalChangeDialog.svelte +117 -0
- package/dist/editor/ExternalChangeDialog.svelte.d.ts +13 -0
- package/dist/editor/ExternalChangeDialog.svelte.d.ts.map +1 -0
- package/dist/editor/FindReplaceDialog.svelte +32 -32
- package/dist/editor/MarkdownEditor.svelte +105 -605
- package/dist/editor/MarkdownEditor.svelte.d.ts +1 -1
- package/dist/editor/MarkdownEditor.svelte.d.ts.map +1 -1
- package/dist/editor/MarkdownEditor.test.js +38 -0
- package/dist/editor/codemirror-config.d.ts +36 -0
- package/dist/editor/codemirror-config.d.ts.map +1 -0
- package/dist/editor/codemirror-config.js +87 -0
- package/dist/editor/components/CorrectionTooltip.svelte +180 -160
- package/dist/editor/components/CorrectionTooltip.svelte.d.ts +7 -23
- package/dist/editor/components/CorrectionTooltip.svelte.d.ts.map +1 -1
- package/dist/editor/extensions/autocomplete.d.ts +2 -2
- package/dist/editor/extensions/autocomplete.d.ts.map +1 -1
- package/dist/editor/extensions/autocomplete.test.js +121 -0
- package/dist/editor/extensions/spellcheck.d.ts +21 -3
- package/dist/editor/extensions/spellcheck.d.ts.map +1 -1
- package/dist/editor/extensions/spellcheck.js +51 -9
- package/dist/editor/extensions/spellcheck.test.js +168 -0
- package/dist/editor/extensions/types.d.ts +2 -1
- package/dist/editor/extensions/types.d.ts.map +1 -1
- package/dist/editor/index.d.ts +2 -1
- package/dist/editor/index.d.ts.map +1 -1
- package/dist/editor/index.js +1 -0
- package/dist/editor/markdown-preview.d.ts +9 -0
- package/dist/editor/markdown-preview.d.ts.map +1 -0
- package/dist/editor/markdown-preview.js +19 -0
- package/dist/editor/markdown-preview.test.js +38 -0
- package/dist/editor/useCodeMirror.d.ts +23 -0
- package/dist/editor/useCodeMirror.d.ts.map +1 -0
- package/dist/editor/useCodeMirror.js +40 -0
- package/dist/editor/useFilePersistence.d.ts +32 -0
- package/dist/editor/useFilePersistence.d.ts.map +1 -0
- package/dist/editor/useFilePersistence.js +117 -0
- package/dist/entity-graph-view/WorldView.svelte +1 -1
- package/dist/fabric/ai/ChatPanel.svelte +84 -85
- package/dist/fabric/ai/ChatPanel.svelte.d.ts.map +1 -1
- package/dist/fabric/ai/ResearchPanel.svelte +35 -25
- package/dist/fabric/ai/ResearchPanel.svelte.d.ts.map +1 -1
- package/dist/fabric/data/FileTree.svelte +195 -0
- package/dist/fabric/data/FileTree.svelte.d.ts +19 -0
- package/dist/fabric/data/FileTree.svelte.d.ts.map +1 -0
- package/dist/fabric/data/FileTree.test.js +127 -0
- package/dist/fabric/data/index.d.ts +5 -9
- package/dist/fabric/data/index.d.ts.map +1 -1
- package/dist/fabric/data/index.js +4 -1
- package/dist/fabric/index.d.ts +5 -5
- package/dist/fabric/index.d.ts.map +1 -1
- package/dist/fabric/index.js +5 -3
- package/dist/fabric/input/{CommandBar.svelte → AppHeaderBar.svelte} +13 -13
- package/dist/fabric/input/{CommandBar.svelte.d.ts → AppHeaderBar.svelte.d.ts} +5 -5
- package/dist/fabric/input/AppHeaderBar.svelte.d.ts.map +1 -0
- package/dist/fabric/input/{CommandBar.test.js → AppHeaderBar.test.js} +9 -9
- package/dist/fabric/input/KeyboardShortcuts.svelte +23 -21
- package/dist/fabric/input/index.d.ts +2 -2
- package/dist/fabric/input/index.d.ts.map +1 -1
- package/dist/fabric/input/index.js +1 -1
- package/dist/fabric/layout/CollapsiblePanel.svelte +8 -10
- package/dist/fabric/layout/KanbanBoard.svelte +25 -155
- package/dist/fabric/layout/KanbanBoard.svelte.d.ts +2 -26
- package/dist/fabric/layout/KanbanBoard.svelte.d.ts.map +1 -1
- package/dist/fabric/layout/KanbanBoard.test.js +125 -10
- package/dist/fabric/layout/KanbanCard.svelte +27 -223
- package/dist/fabric/layout/KanbanCard.svelte.d.ts +2 -19
- package/dist/fabric/layout/KanbanCard.svelte.d.ts.map +1 -1
- package/dist/fabric/layout/KanbanColumn.svelte +41 -275
- package/dist/fabric/layout/KanbanColumn.svelte.d.ts +2 -22
- package/dist/fabric/layout/KanbanColumn.svelte.d.ts.map +1 -1
- package/dist/fabric/layout/index.d.ts +2 -5
- package/dist/fabric/layout/index.d.ts.map +1 -1
- package/dist/fabric/layout/index.js +1 -1
- package/dist/fabric/navigation/ActivityRail.svelte +3 -5
- package/dist/fabric/navigation/ActivityRail.svelte.d.ts.map +1 -1
- package/dist/g0-generative/components/Text.svelte +38 -0
- package/dist/g0-generative/components/Text.svelte.d.ts +9 -0
- package/dist/g0-generative/components/Text.svelte.d.ts.map +1 -0
- package/dist/g0-generative/index.d.ts +1 -0
- package/dist/g0-generative/index.d.ts.map +1 -1
- package/dist/g0-generative/index.js +1 -0
- package/dist/g0-generative/library/ComponentLibrary.d.ts +4 -0
- package/dist/g0-generative/library/ComponentLibrary.d.ts.map +1 -1
- package/dist/g0-generative/library/ComponentLibrary.js +10 -0
- package/dist/g0-generative/library/ComponentLibrary.test.js +135 -0
- package/dist/g0-generative/renderer/OpenUIRenderer.svelte +16 -56
- package/dist/g0-generative/renderer/OpenUIRenderer.svelte.d.ts.map +1 -1
- package/dist/g0-generative/renderer/OpenUIRenderer.test.js +143 -0
- package/dist/g0-geo/SovereignMap.svelte +13 -13
- package/dist/g0-geo/SovereignMap.svelte.d.ts.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/l0-layout/SectionSplitter.svelte +5 -5
- package/dist/l0-layout/block-writer/BlockContent.svelte +23 -22
- package/dist/l0-layout/block-writer/BlockContent.svelte.d.ts.map +1 -1
- package/dist/l0-layout/block-writer/BlockContent.test.js +47 -0
- package/dist/l0-layout/block-writer/BlockItem.svelte +6 -4
- package/dist/l0-layout/block-writer/markdown.js +11 -11
- package/dist/l0-layout/block-writer/markdown.test.js +81 -0
- package/dist/l0-layout/card/CompactCard.svelte +4 -3
- package/dist/l0-layout/card/StackedCard.svelte +87 -0
- package/dist/l0-layout/card/StackedCard.svelte.d.ts +9 -0
- package/dist/l0-layout/card/StackedCard.svelte.d.ts.map +1 -0
- package/dist/l0-layout/card/StackedCard.test.js +29 -0
- package/dist/l0-layout/grant/GrantCard.svelte +15 -5
- package/dist/l0-layout/grant/GrantCard.svelte.d.ts.map +1 -1
- package/dist/l0-layout/index.d.ts +3 -0
- package/dist/l0-layout/index.d.ts.map +1 -1
- package/dist/l0-layout/index.js +2 -0
- package/dist/l0-layout/kanban/KanbanBoard.svelte +246 -29
- package/dist/l0-layout/kanban/KanbanBoard.svelte.d.ts +28 -2
- package/dist/l0-layout/kanban/KanbanBoard.svelte.d.ts.map +1 -1
- package/dist/l0-layout/kanban/KanbanCard.svelte +175 -150
- package/dist/l0-layout/kanban/KanbanCard.svelte.d.ts +16 -18
- package/dist/l0-layout/kanban/KanbanCard.svelte.d.ts.map +1 -1
- package/dist/l0-layout/kanban/KanbanColumn.svelte +152 -78
- package/dist/l0-layout/kanban/KanbanColumn.svelte.d.ts +28 -7
- package/dist/l0-layout/kanban/KanbanColumn.svelte.d.ts.map +1 -1
- package/dist/l0-layout/kanban/index.d.ts +6 -0
- package/dist/l0-layout/kanban/index.d.ts.map +1 -0
- package/dist/l0-layout/kanban/index.js +3 -0
- package/dist/n0-node-graph/Node.svelte +2 -2
- package/dist/n0-node-graph/NodePalette.svelte +2 -2
- package/dist/n1-flow-canvas/FlowCanvas.svelte +50 -6
- package/dist/n1-flow-canvas/FlowCanvas.svelte.d.ts.map +1 -1
- package/dist/n1-flow-canvas/graph-state.test.js +69 -0
- package/dist/n1-flow-canvas/index.d.ts +2 -0
- package/dist/n1-flow-canvas/index.d.ts.map +1 -1
- package/dist/n1-flow-canvas/index.js +1 -0
- package/dist/n1-flow-canvas/pipeline-adapter.d.ts +37 -0
- package/dist/n1-flow-canvas/pipeline-adapter.d.ts.map +1 -0
- package/dist/n1-flow-canvas/pipeline-adapter.js +160 -0
- package/dist/n1-flow-canvas/utils.test.js +116 -0
- package/dist/n2-manifold-disk/ManifoldDisk.svelte +62 -35
- package/dist/n2-manifold-disk/ManifoldDisk.svelte.d.ts.map +1 -1
- package/dist/n3-force-graph/GraphTooltip.svelte +2 -2
- package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte +34 -29
- package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte.d.ts.map +1 -1
- package/dist/n4-adaptive-manifold/classifier.test.js +104 -0
- package/dist/n4-adaptive-manifold/n4-tokens.css +2 -2
- package/dist/n4-adaptive-manifold/types.d.ts +3 -0
- package/dist/n4-adaptive-manifold/types.d.ts.map +1 -1
- package/dist/p0-primitives/ThemeProvider.svelte +38 -18
- package/dist/p0-primitives/ThemeProvider.svelte.d.ts +6 -1
- package/dist/p0-primitives/ThemeProvider.svelte.d.ts.map +1 -1
- package/dist/p0-primitives/canvas-theme.d.ts +33 -1
- package/dist/p0-primitives/canvas-theme.d.ts.map +1 -1
- package/dist/p0-primitives/canvas-theme.js +82 -17
- package/dist/p0-primitives/debug.d.ts +6 -0
- package/dist/p0-primitives/debug.d.ts.map +1 -0
- package/dist/p0-primitives/debug.js +21 -0
- package/dist/p0-primitives/index.d.ts +2 -1
- package/dist/p0-primitives/index.d.ts.map +1 -1
- package/dist/p0-primitives/index.js +1 -0
- package/dist/p0-primitives/theme-context.d.ts +9 -0
- package/dist/p0-primitives/theme-context.d.ts.map +1 -0
- package/dist/p0-primitives/theme-context.js +8 -0
- package/dist/p0-primitives/theme.d.ts.map +1 -1
- package/dist/p0-primitives/theme.js +11 -31
- package/dist/p0-primitives/tokens/ambient.css +76 -0
- package/dist/p0-primitives/tokens/tokens.css +140 -34
- package/dist/p0-primitives/utils/index.d.ts +4 -2
- package/dist/p0-primitives/utils/index.d.ts.map +1 -1
- package/dist/p0-primitives/utils/index.js +1 -0
- package/dist/p0-primitives/utils/reveal.d.ts +15 -0
- package/dist/p0-primitives/utils/reveal.d.ts.map +1 -0
- package/dist/p0-primitives/utils/reveal.js +29 -0
- package/dist/p0-primitives/utils/reveal.test.js +95 -0
- package/dist/s0-state/SyncStatus.svelte +2 -2
- package/dist/s0-state/ThemeStore.svelte.d.ts +3 -2
- package/dist/s0-state/ThemeStore.svelte.d.ts.map +1 -1
- package/dist/s0-state/ThemeStore.svelte.js +20 -1
- package/dist/s0-state/index.d.ts +2 -2
- package/dist/s0-state/index.d.ts.map +1 -1
- package/dist/s0-state/index.js +3 -0
- package/dist/s0-state/modal-stack-store.svelte.d.ts +27 -2
- package/dist/s0-state/modal-stack-store.svelte.d.ts.map +1 -1
- package/dist/s0-state/modal-stack-store.svelte.js +21 -2
- package/dist/showcase/Showcase.svelte +43 -34
- package/dist/showcase/Showcase.svelte.d.ts.map +1 -1
- package/dist/spatial/BspTilingCanvas.svelte +5 -5
- package/dist/spatial/BspTilingSimulation.test.js +88 -0
- package/dist/spatial/CameraController.test.js +120 -0
- package/dist/spatial/ForceCanvas.svelte +18 -13
- package/dist/spatial/ForceCanvas.svelte.d.ts.map +1 -1
- package/dist/spatial/ForceSimulation.svelte.d.ts.map +1 -1
- package/dist/spatial/ForceSimulation.svelte.js +33 -22
- package/dist/spatial/LodRenderer.svelte +14 -1
- package/dist/spatial/LodRenderer.svelte.d.ts.map +1 -1
- package/dist/spatial/ParticleAssembleMark.svelte +285 -0
- package/dist/spatial/ParticleAssembleMark.svelte.d.ts +24 -0
- package/dist/spatial/ParticleAssembleMark.svelte.d.ts.map +1 -0
- package/dist/spatial/SnapZoomCamera.svelte +23 -13
- package/dist/spatial/SnapZoomCamera.svelte.d.ts.map +1 -1
- package/dist/spatial/ZoneTiler.svelte +3 -2
- package/dist/spatial/ZoneTiler.test.js +90 -0
- package/dist/spatial/d3-types.d.ts +31 -0
- package/dist/spatial/d3-types.d.ts.map +1 -0
- package/dist/spatial/d3-types.js +19 -0
- package/dist/spatial/index.js +1 -0
- package/dist/spatial/particle-assemble-math.d.ts +22 -0
- package/dist/spatial/particle-assemble-math.d.ts.map +1 -0
- package/dist/spatial/particle-assemble-math.js +26 -0
- package/dist/spatial/particle-assemble-math.test.js +56 -0
- package/dist/ssr-import-clean.test.js +37 -0
- package/dist/t0-transport/fs.d.ts +12 -0
- package/dist/t0-transport/fs.d.ts.map +1 -0
- package/dist/t0-transport/fs.js +55 -0
- package/dist/t0-transport/index.d.ts +1 -0
- package/dist/t0-transport/index.d.ts.map +1 -1
- package/dist/t0-transport/index.js +1 -0
- package/dist/t0-transport/invoke.d.ts.map +1 -1
- package/dist/t0-transport/invoke.js +5 -2
- package/dist/t0-transport/quality.d.ts +12 -3
- package/dist/t0-transport/quality.d.ts.map +1 -1
- package/dist/t0-transport/quality.js +17 -4
- package/dist/t0-transport/substrate.svelte.d.ts +27 -0
- package/dist/t0-transport/substrate.svelte.d.ts.map +1 -0
- package/dist/t0-transport/substrate.svelte.js +55 -0
- package/dist/u0-primitives/LockIndicator.svelte +17 -15
- package/dist/u0-primitives/VerticalToolbar.svelte +25 -22
- package/dist/u0-primitives/accordion/Accordion.svelte +14 -12
- package/dist/u0-primitives/accordion/Accordion.svelte.d.ts +0 -7
- package/dist/u0-primitives/accordion/Accordion.svelte.d.ts.map +1 -1
- package/dist/u0-primitives/accordion/Accordion.test.js +5 -5
- package/dist/u0-primitives/animated-icon/AnimatedIcon.svelte +3 -3
- package/dist/u0-primitives/animated-icon/AnimatedIcon.test.js +82 -0
- package/dist/u0-primitives/avatar/Avatar.svelte +14 -14
- package/dist/u0-primitives/avatar/Avatar.test.js +81 -0
- package/dist/u0-primitives/badge/Badge.svelte +6 -4
- package/dist/u0-primitives/badge/Badge.test.js +10 -10
- package/dist/u0-primitives/badge/ValidityBadge.svelte +4 -27
- package/dist/u0-primitives/badge/ValidityBadge.test.js +9 -9
- package/dist/u0-primitives/button/Button.svelte +18 -13
- package/dist/u0-primitives/button/Button.svelte.d.ts +1 -0
- package/dist/u0-primitives/button/Button.svelte.d.ts.map +1 -1
- package/dist/u0-primitives/button/Button.test.js +11 -11
- package/dist/u0-primitives/card/Card.svelte +60 -32
- package/dist/u0-primitives/card/Card.svelte.d.ts.map +1 -1
- package/dist/u0-primitives/card/Card.test.js +86 -0
- package/dist/u0-primitives/command-palette/CommandPalette.svelte +75 -43
- package/dist/u0-primitives/command-palette/CommandPalette.svelte.d.ts.map +1 -1
- package/dist/u0-primitives/command-palette/CommandPalette.test.js +202 -0
- package/dist/u0-primitives/command-palette/commandStore.svelte.d.ts.map +1 -1
- package/dist/u0-primitives/command-palette/commandStore.svelte.js +2 -1
- package/dist/u0-primitives/dropdown/Dropdown.svelte +20 -25
- package/dist/u0-primitives/dropdown/Dropdown.test.js +1 -1
- package/dist/u0-primitives/grant-badge/GrantStatusBadge.svelte +2 -2
- package/dist/u0-primitives/index.d.ts +8 -0
- package/dist/u0-primitives/index.d.ts.map +1 -1
- package/dist/u0-primitives/index.js +9 -0
- package/dist/u0-primitives/input/Input.svelte +85 -23
- package/dist/u0-primitives/input/Input.svelte.d.ts +2 -10
- package/dist/u0-primitives/input/Input.svelte.d.ts.map +1 -1
- package/dist/u0-primitives/input/Input.test.js +82 -2
- package/dist/u0-primitives/live-dot/LiveDot.svelte +56 -0
- package/dist/u0-primitives/live-dot/LiveDot.svelte.d.ts +11 -0
- package/dist/u0-primitives/live-dot/LiveDot.svelte.d.ts.map +1 -0
- package/dist/u0-primitives/live-dot/LiveDot.test.js +41 -0
- package/dist/u0-primitives/live-dot/index.d.ts +3 -0
- package/dist/u0-primitives/live-dot/index.d.ts.map +1 -0
- package/dist/u0-primitives/live-dot/index.js +1 -0
- package/dist/u0-primitives/modal/Modal.svelte +64 -38
- package/dist/u0-primitives/modal/Modal.svelte.d.ts.map +1 -1
- package/dist/u0-primitives/modal/Modal.test.js +63 -15
- package/dist/u0-primitives/rsvp/RsvpReader.svelte +8 -8
- package/dist/u0-primitives/rsvp/RsvpReader.svelte.d.ts.map +1 -1
- package/dist/u0-primitives/spinner/Spinner.svelte +11 -79
- package/dist/u0-primitives/spinner/Spinner.svelte.d.ts.map +1 -1
- package/dist/u0-primitives/steps/Steps.svelte +20 -21
- package/dist/u0-primitives/surface-state/SurfaceState.svelte +190 -0
- package/dist/u0-primitives/surface-state/SurfaceState.svelte.d.ts +15 -0
- package/dist/u0-primitives/surface-state/SurfaceState.svelte.d.ts.map +1 -0
- package/dist/u0-primitives/tabs/Tabs.svelte +13 -11
- package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte +94 -0
- package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte.d.ts +16 -0
- package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte.d.ts.map +1 -0
- package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.test.js +48 -0
- package/dist/u0-primitives/theme-swatch-group/index.d.ts +3 -0
- package/dist/u0-primitives/theme-swatch-group/index.d.ts.map +1 -0
- package/dist/u0-primitives/theme-swatch-group/index.js +1 -0
- package/dist/u0-primitives/toggle/Toggle.svelte +22 -13
- package/dist/u0-primitives/tooltip/Tooltip.svelte +9 -9
- package/dist/u0-primitives/tooltip/Tooltip.test.js +12 -12
- package/dist/u0-primitives/web-components/button-component.d.ts +5 -1
- package/dist/u0-primitives/web-components/button-component.d.ts.map +1 -1
- package/dist/u0-primitives/web-components/button-component.js +72 -33
- package/dist/u0-primitives/web-components/index.d.ts +3 -0
- package/dist/u0-primitives/web-components/index.d.ts.map +1 -0
- package/dist/u0-primitives/web-components/index.js +2 -0
- package/dist/u0-primitives/web-components/input-component.d.ts +5 -1
- package/dist/u0-primitives/web-components/input-component.d.ts.map +1 -1
- package/dist/u0-primitives/web-components/input-component.js +56 -39
- package/dist/u0-primitives/web-components/web-components.test.js +96 -0
- package/dist/u0-primitives/window-frame/WindowFrame.svelte +87 -0
- package/dist/u0-primitives/window-frame/WindowFrame.svelte.d.ts +10 -0
- package/dist/u0-primitives/window-frame/WindowFrame.svelte.d.ts.map +1 -0
- package/dist/u0-primitives/window-frame/WindowFrame.test.js +31 -0
- package/dist/u0-primitives/window-frame/index.d.ts +3 -0
- package/dist/u0-primitives/window-frame/index.d.ts.map +1 -0
- package/dist/u0-primitives/window-frame/index.js +1 -0
- package/dist/v0-diagrams/MarkmapDiagram.test.js +49 -0
- package/dist/v0-diagrams/MermaidDiagram.svelte +21 -9
- package/dist/v0-diagrams/MermaidDiagram.svelte.d.ts.map +1 -1
- package/dist/v0-diagrams/MermaidDiagram.test.js +40 -0
- package/dist/x0-enchanted-blocks/components/NodepadBlock.svelte +11 -2
- package/dist/x0-enchanted-blocks/components/NodepadBlock.svelte.d.ts.map +1 -1
- package/package.json +57 -15
- package/src/n4-adaptive-manifold/n4-tokens.css +2 -2
- package/src/p0-primitives/tokens/ambient.css +76 -0
- package/src/p0-primitives/tokens/tokens.css +140 -34
- package/src/p0-primitives/tokens/tokens.json +55 -26
- package/dist/b0-app-shell/command-bar/CommandBar.svelte.d.ts.map +0 -1
- package/dist/fabric/input/CommandBar.svelte.d.ts.map +0 -1
- package/dist/stores/vaultStore.svelte +0 -14
- package/dist/stores/vaultStore.svelte.d.ts +0 -24
- package/dist/stores/vaultStore.svelte.d.ts.map +0 -1
- package/dist/tauri/index.d.ts +0 -3
- package/dist/tauri/index.d.ts.map +0 -1
- package/dist/tauri/index.js +0 -11
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
loading?: boolean;
|
|
10
10
|
class?: string;
|
|
11
11
|
'aria-label'?: string;
|
|
12
|
+
'aria-expanded'?: boolean;
|
|
12
13
|
onclick?: (e: MouseEvent) => void;
|
|
13
14
|
children?: Snippet;
|
|
14
15
|
iconLeading?: Snippet;
|
|
@@ -23,6 +24,7 @@
|
|
|
23
24
|
loading = false,
|
|
24
25
|
class: className = '',
|
|
25
26
|
'aria-label': ariaLabel,
|
|
27
|
+
'aria-expanded': ariaExpanded,
|
|
26
28
|
onclick,
|
|
27
29
|
children,
|
|
28
30
|
iconLeading,
|
|
@@ -45,6 +47,7 @@
|
|
|
45
47
|
class:is-pressed={isPressed}
|
|
46
48
|
disabled={disabled || loading}
|
|
47
49
|
aria-label={ariaLabel}
|
|
50
|
+
aria-expanded={ariaExpanded}
|
|
48
51
|
onclick={onclick}
|
|
49
52
|
onpointerdown={handlePointerDown}
|
|
50
53
|
onpointerup={handlePointerUp}
|
|
@@ -91,7 +94,7 @@
|
|
|
91
94
|
transition: border-color var(--transition-fast), background-color var(--transition-fast), color var(--transition-fast);
|
|
92
95
|
background: transparent;
|
|
93
96
|
color: var(--color-text-primary);
|
|
94
|
-
padding: 0 var(--
|
|
97
|
+
padding: 0 var(--ui-pad-x);
|
|
95
98
|
line-height: 1;
|
|
96
99
|
}
|
|
97
100
|
|
|
@@ -139,20 +142,23 @@
|
|
|
139
142
|
|
|
140
143
|
/* --- Variants --- */
|
|
141
144
|
|
|
145
|
+
/* Primary = inverted neutral (high-contrast), NOT an accent fill.
|
|
146
|
+
Locked rule: accent = live edge, never a fill. Accent shows on
|
|
147
|
+
:focus-visible. Reads as primary under any theme and any user accent. */
|
|
142
148
|
.variant-primary {
|
|
143
|
-
background: var(--color-
|
|
149
|
+
background: var(--color-text-primary);
|
|
144
150
|
color: var(--color-bg-app);
|
|
145
|
-
border-color: var(--color-
|
|
151
|
+
border-color: var(--color-text-primary);
|
|
146
152
|
}
|
|
147
153
|
|
|
148
154
|
.variant-primary:hover:not(:disabled) {
|
|
149
|
-
background: var(--color-
|
|
150
|
-
border-color: var(--color-
|
|
155
|
+
background: var(--color-text-secondary);
|
|
156
|
+
border-color: var(--color-text-secondary);
|
|
151
157
|
}
|
|
152
158
|
|
|
153
159
|
.variant-primary.is-pressed:not(:disabled) {
|
|
154
|
-
background: var(--color-
|
|
155
|
-
border-color: var(--color-
|
|
160
|
+
background: var(--color-text-secondary);
|
|
161
|
+
border-color: var(--color-text-secondary);
|
|
156
162
|
}
|
|
157
163
|
|
|
158
164
|
.variant-secondary {
|
|
@@ -192,18 +198,18 @@
|
|
|
192
198
|
}
|
|
193
199
|
|
|
194
200
|
.variant-danger:hover:not(:disabled) {
|
|
195
|
-
background:
|
|
201
|
+
background: color-mix(in srgb, var(--color-error) 12%, transparent);
|
|
196
202
|
}
|
|
197
203
|
|
|
198
204
|
.variant-danger.is-pressed:not(:disabled) {
|
|
199
|
-
background:
|
|
205
|
+
background: color-mix(in srgb, var(--color-error) 22%, transparent);
|
|
200
206
|
}
|
|
201
207
|
|
|
202
208
|
/* --- Sizes --- */
|
|
203
209
|
|
|
204
|
-
.size-sm { height:
|
|
205
|
-
.size-md { height:
|
|
206
|
-
.size-lg { height:
|
|
210
|
+
.size-sm { height: calc(var(--ui-control-h) - 4px); font-size: var(--ui-font-sm); }
|
|
211
|
+
.size-md { height: var(--ui-control-h); font-size: var(--ui-font); }
|
|
212
|
+
.size-lg { height: calc(var(--ui-control-h) + 6px); font-size: var(--ui-font); }
|
|
207
213
|
|
|
208
214
|
/* --- Loading Spinner --- */
|
|
209
215
|
|
|
@@ -233,7 +239,6 @@
|
|
|
233
239
|
|
|
234
240
|
@media (prefers-reduced-motion: reduce) {
|
|
235
241
|
.ds-button { transition: none; }
|
|
236
|
-
.is-pressed:not(:disabled) { }
|
|
237
242
|
@keyframes ds-button-spin {
|
|
238
243
|
from { transform: translate(-50%, -50%) rotate(0deg); }
|
|
239
244
|
to { transform: translate(-50%, -50%) rotate(360deg); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.svelte.d.ts","sourceRoot":"","sources":["../../../src/u0-primitives/button/Button.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGpC,MAAM,WAAW,KAAK;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;IACvD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"Button.svelte.d.ts","sourceRoot":"","sources":["../../../src/u0-primitives/button/Button.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGpC,MAAM,WAAW,KAAK;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;IACvD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA2DH,QAAA,MAAM,MAAM,2CAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
|
|
@@ -4,22 +4,22 @@ import Button from './Button.svelte';
|
|
|
4
4
|
describe('Button', () => {
|
|
5
5
|
afterEach(() => cleanup());
|
|
6
6
|
it('renders a real <button> element', () => {
|
|
7
|
-
render(Button, { children: () => '
|
|
7
|
+
render(Button, { children: (() => '') });
|
|
8
8
|
expect(screen.getByRole('button')).toBeDefined();
|
|
9
9
|
});
|
|
10
10
|
it('calls onclick when clicked', async () => {
|
|
11
11
|
const handleClick = vi.fn();
|
|
12
|
-
const { container } = render(Button, { children: () => '
|
|
12
|
+
const { container } = render(Button, { children: (() => ''), onclick: handleClick });
|
|
13
13
|
const btn = container.querySelector('button');
|
|
14
14
|
await fireEvent.click(btn);
|
|
15
15
|
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
16
16
|
});
|
|
17
17
|
it('sets disabled attribute on the native button when disabled', () => {
|
|
18
|
-
const { container } = render(Button, { children: () => '
|
|
18
|
+
const { container } = render(Button, { children: (() => ''), disabled: true });
|
|
19
19
|
expect(container.querySelector('button').hasAttribute('disabled')).toBe(true);
|
|
20
20
|
});
|
|
21
21
|
it('sets disabled attribute on the native button when loading', () => {
|
|
22
|
-
const { container } = render(Button, { children: () => '
|
|
22
|
+
const { container } = render(Button, { children: (() => ''), loading: true });
|
|
23
23
|
expect(container.querySelector('button').hasAttribute('disabled')).toBe(true);
|
|
24
24
|
});
|
|
25
25
|
it('sets aria-label when provided', () => {
|
|
@@ -28,31 +28,31 @@ describe('Button', () => {
|
|
|
28
28
|
expect(btn.getAttribute('aria-label')).toBe('Submit form');
|
|
29
29
|
});
|
|
30
30
|
it('renders spinner element when loading is true', () => {
|
|
31
|
-
const { container } = render(Button, { children: () => '
|
|
31
|
+
const { container } = render(Button, { children: (() => ''), loading: true });
|
|
32
32
|
expect(container.querySelector('.ds-button-spinner')).not.toBeNull();
|
|
33
33
|
});
|
|
34
34
|
it('applies variant class', () => {
|
|
35
|
-
const { container } = render(Button, { children: () => '
|
|
35
|
+
const { container } = render(Button, { children: (() => ''), variant: 'danger' });
|
|
36
36
|
expect(container.querySelector('.variant-danger')).not.toBeNull();
|
|
37
37
|
});
|
|
38
38
|
it('applies size class', () => {
|
|
39
|
-
const { container } = render(Button, { children: () => '
|
|
39
|
+
const { container } = render(Button, { children: (() => ''), size: 'lg' });
|
|
40
40
|
expect(container.querySelector('.size-lg')).not.toBeNull();
|
|
41
41
|
});
|
|
42
42
|
it('applies custom class', () => {
|
|
43
|
-
const { container } = render(Button, { children: () => '
|
|
43
|
+
const { container } = render(Button, { children: (() => ''), class: 'my-btn' });
|
|
44
44
|
expect(container.querySelector('.my-btn')).not.toBeNull();
|
|
45
45
|
});
|
|
46
46
|
it('applies variant-secondary class', () => {
|
|
47
|
-
const { container } = render(Button, { children: () => '
|
|
47
|
+
const { container } = render(Button, { children: (() => ''), variant: 'secondary' });
|
|
48
48
|
expect(container.querySelector('.variant-secondary')).not.toBeNull();
|
|
49
49
|
});
|
|
50
50
|
it('defaults type to "button"', () => {
|
|
51
|
-
const { container } = render(Button, { children: () => '
|
|
51
|
+
const { container } = render(Button, { children: (() => '') });
|
|
52
52
|
expect(container.querySelector('button').getAttribute('type')).toBe('button');
|
|
53
53
|
});
|
|
54
54
|
it('forwards custom type to the native button', () => {
|
|
55
|
-
const { container } = render(Button, { children: () => '
|
|
55
|
+
const { container } = render(Button, { children: (() => ''), type: 'submit' });
|
|
56
56
|
expect(container.querySelector('button').getAttribute('type')).toBe('submit');
|
|
57
57
|
});
|
|
58
58
|
});
|
|
@@ -30,11 +30,21 @@
|
|
|
30
30
|
}: Props = $props();
|
|
31
31
|
|
|
32
32
|
let isInteractive = $derived(variant === 'interactive' || !!onclick);
|
|
33
|
+
let cardAttrs = $derived(isInteractive ? {
|
|
34
|
+
role: 'button',
|
|
35
|
+
tabindex: 0,
|
|
36
|
+
onclick,
|
|
37
|
+
onkeydown: handleKeydown,
|
|
38
|
+
'aria-pressed': selected
|
|
39
|
+
} : {});
|
|
33
40
|
|
|
34
41
|
function handleKeydown(e: KeyboardEvent) {
|
|
35
42
|
if (isInteractive && (e.key === 'Enter' || e.key === ' ')) {
|
|
43
|
+
onkeydown?.(e);
|
|
44
|
+
if (e.defaultPrevented) return;
|
|
36
45
|
e.preventDefault();
|
|
37
46
|
onclick?.(new MouseEvent('click'));
|
|
47
|
+
return;
|
|
38
48
|
}
|
|
39
49
|
onkeydown?.(e);
|
|
40
50
|
}
|
|
@@ -45,13 +55,9 @@
|
|
|
45
55
|
style={style || undefined}
|
|
46
56
|
class:is-interactive={isInteractive}
|
|
47
57
|
class:is-selected={selected}
|
|
48
|
-
|
|
49
|
-
tabindex={isInteractive ? 0 : undefined}
|
|
50
|
-
onclick={isInteractive ? onclick : undefined}
|
|
58
|
+
{...cardAttrs}
|
|
51
59
|
onmouseenter={onmouseenter}
|
|
52
60
|
onmouseleave={onmouseleave}
|
|
53
|
-
onkeydown={isInteractive ? handleKeydown : undefined}
|
|
54
|
-
aria-pressed={isInteractive ? selected : undefined}
|
|
55
61
|
>
|
|
56
62
|
{#if header}
|
|
57
63
|
<header class="ds-card-header">
|
|
@@ -81,7 +87,7 @@
|
|
|
81
87
|
position: relative;
|
|
82
88
|
display: flex;
|
|
83
89
|
flex-direction: column;
|
|
84
|
-
border:
|
|
90
|
+
border: var(--border-width-thin) solid var(--border-default);
|
|
85
91
|
background: var(--color-card-bg);
|
|
86
92
|
color: var(--color-card-text-primary);
|
|
87
93
|
overflow: hidden;
|
|
@@ -90,24 +96,26 @@
|
|
|
90
96
|
}
|
|
91
97
|
|
|
92
98
|
.ds-card-header {
|
|
93
|
-
padding: var(--
|
|
94
|
-
border-bottom:
|
|
99
|
+
padding: var(--ui-pad-y) var(--ui-pad-x);
|
|
100
|
+
border-bottom: var(--border-width-thin) solid var(--border-default);
|
|
101
|
+
font-family: var(--font-mono);
|
|
95
102
|
font-weight: 600;
|
|
96
103
|
background: var(--color-bg-panel);
|
|
97
|
-
font-size: var(--
|
|
104
|
+
font-size: var(--ui-label);
|
|
98
105
|
text-transform: uppercase;
|
|
99
|
-
letter-spacing: 0.
|
|
106
|
+
letter-spacing: 0.08em;
|
|
107
|
+
color: var(--color-text-secondary);
|
|
100
108
|
}
|
|
101
109
|
|
|
102
110
|
.ds-card-content {
|
|
103
|
-
padding: var(--
|
|
111
|
+
padding: var(--ui-pad-x);
|
|
104
112
|
flex: 1;
|
|
105
113
|
}
|
|
106
114
|
|
|
107
115
|
.ds-card-footer {
|
|
108
|
-
padding: var(--
|
|
109
|
-
border-top:
|
|
110
|
-
background: var(--color-
|
|
116
|
+
padding: var(--ui-pad-y) var(--ui-pad-x);
|
|
117
|
+
border-top: var(--border-width-thin) solid var(--border-default);
|
|
118
|
+
background: var(--color-bg-panel);
|
|
111
119
|
}
|
|
112
120
|
|
|
113
121
|
/* --- Variants --- */
|
|
@@ -123,11 +131,12 @@
|
|
|
123
131
|
border-color: var(--border-subtle);
|
|
124
132
|
}
|
|
125
133
|
|
|
134
|
+
/* 'glass' kept as an API alias but DE-GLASSED: opaque elevated panel,
|
|
135
|
+
no backdrop-filter. Blur = web2/Material; INSTRUMENT builds depth from
|
|
136
|
+
border + contrast, never frosted translucency. */
|
|
126
137
|
.variant-glass {
|
|
127
|
-
background:
|
|
128
|
-
|
|
129
|
-
-webkit-backdrop-filter: blur(12px);
|
|
130
|
-
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
138
|
+
background: var(--color-bg-panel-elevated);
|
|
139
|
+
border: var(--border-width-thin) solid var(--border-default);
|
|
131
140
|
color: var(--color-text-primary);
|
|
132
141
|
}
|
|
133
142
|
|
|
@@ -136,17 +145,18 @@
|
|
|
136
145
|
border-color: var(--color-card-border);
|
|
137
146
|
background-image: repeating-linear-gradient(
|
|
138
147
|
0deg,
|
|
139
|
-
transparent
|
|
140
|
-
transparent
|
|
141
|
-
rgba(255, 255, 255, 0.02)
|
|
142
|
-
rgba(255, 255, 255, 0.02)
|
|
148
|
+
transparent 0,
|
|
149
|
+
transparent var(--border-width-thin),
|
|
150
|
+
rgba(255, 255, 255, 0.02) var(--border-width-thin),
|
|
151
|
+
rgba(255, 255, 255, 0.02) var(--border-width-default)
|
|
143
152
|
);
|
|
144
153
|
}
|
|
145
154
|
|
|
155
|
+
/* Hazard = destructive semantics → FIXED error hue, never the user accent. */
|
|
146
156
|
.variant-hazard {
|
|
147
|
-
background: var(--color-
|
|
148
|
-
border-color: var(--color-
|
|
149
|
-
color: var(--color-
|
|
157
|
+
background: color-mix(in srgb, var(--color-error) 8%, transparent);
|
|
158
|
+
border-color: var(--color-error);
|
|
159
|
+
color: var(--color-error);
|
|
150
160
|
}
|
|
151
161
|
|
|
152
162
|
/* --- Interactive --- */
|
|
@@ -171,7 +181,7 @@
|
|
|
171
181
|
position: absolute;
|
|
172
182
|
inset: 0;
|
|
173
183
|
pointer-events: none;
|
|
174
|
-
border:
|
|
184
|
+
border: var(--border-width-thin) solid transparent;
|
|
175
185
|
transition: border-color var(--transition-fast);
|
|
176
186
|
}
|
|
177
187
|
|
|
@@ -180,10 +190,10 @@
|
|
|
180
190
|
border-color: var(--color-accent);
|
|
181
191
|
background: repeating-linear-gradient(
|
|
182
192
|
45deg,
|
|
183
|
-
transparent
|
|
184
|
-
transparent
|
|
185
|
-
var(--color-accent-muted)
|
|
186
|
-
var(--color-accent-muted)
|
|
193
|
+
transparent 0,
|
|
194
|
+
transparent var(--border-width-default),
|
|
195
|
+
var(--color-accent-muted) var(--border-width-default),
|
|
196
|
+
var(--color-accent-muted) var(--blur-md)
|
|
187
197
|
);
|
|
188
198
|
}
|
|
189
199
|
|
|
@@ -194,8 +204,26 @@
|
|
|
194
204
|
}
|
|
195
205
|
|
|
196
206
|
.is-selected.variant-hazard {
|
|
197
|
-
border-color: var(--color-
|
|
198
|
-
background: var(--color-
|
|
207
|
+
border-color: var(--color-error);
|
|
208
|
+
background: color-mix(in srgb, var(--color-error) 14%, transparent);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/* Hazard interactive states kept on the fixed error hue — never the user accent. */
|
|
212
|
+
.variant-hazard.is-interactive:hover {
|
|
213
|
+
border-color: var(--color-error);
|
|
214
|
+
background: color-mix(in srgb, var(--color-error) 12%, transparent);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.variant-hazard.is-interactive:focus-visible .ds-card-ring,
|
|
218
|
+
.is-selected.variant-hazard .ds-card-ring {
|
|
219
|
+
border-color: var(--color-error);
|
|
220
|
+
background: repeating-linear-gradient(
|
|
221
|
+
45deg,
|
|
222
|
+
transparent 0,
|
|
223
|
+
transparent var(--border-width-default),
|
|
224
|
+
var(--color-error) var(--border-width-default),
|
|
225
|
+
var(--color-error) var(--blur-md)
|
|
226
|
+
);
|
|
199
227
|
}
|
|
200
228
|
|
|
201
229
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.svelte.d.ts","sourceRoot":"","sources":["../../../src/u0-primitives/card/Card.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGpC,MAAM,WAAW,KAAK;IACpB,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"Card.svelte.d.ts","sourceRoot":"","sources":["../../../src/u0-primitives/card/Card.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGpC,MAAM,WAAW,KAAK;IACpB,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAoEH,QAAA,MAAM,IAAI,2CAAwC,CAAC;AACnD,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;AACpC,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { afterEach, describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { cleanup, render, fireEvent } from '@testing-library/svelte';
|
|
3
|
+
import { createRawSnippet } from 'svelte';
|
|
4
|
+
import Card from './Card.svelte';
|
|
5
|
+
const textSnippet = (text) => createRawSnippet(() => ({ render: () => `<span>${text}</span>` }));
|
|
6
|
+
describe('Card', () => {
|
|
7
|
+
afterEach(() => cleanup());
|
|
8
|
+
it('renders the ds-card root element', () => {
|
|
9
|
+
const { container } = render(Card);
|
|
10
|
+
expect(container.querySelector('.ds-card')).not.toBeNull();
|
|
11
|
+
});
|
|
12
|
+
it('defaults to the elevated variant', () => {
|
|
13
|
+
const { container } = render(Card);
|
|
14
|
+
expect(container.querySelector('.variant-elevated')).not.toBeNull();
|
|
15
|
+
});
|
|
16
|
+
it('applies the requested variant class', () => {
|
|
17
|
+
const { container } = render(Card, { variant: 'hazard' });
|
|
18
|
+
expect(container.querySelector('.variant-hazard')).not.toBeNull();
|
|
19
|
+
});
|
|
20
|
+
it('applies a custom class', () => {
|
|
21
|
+
const { container } = render(Card, { class: 'my-card' });
|
|
22
|
+
expect(container.querySelector('.my-card')).not.toBeNull();
|
|
23
|
+
});
|
|
24
|
+
it('applies an inline style', () => {
|
|
25
|
+
const { container } = render(Card, { style: 'width: 200px' });
|
|
26
|
+
expect(container.querySelector('.ds-card').getAttribute('style')).toContain('width: 200px');
|
|
27
|
+
});
|
|
28
|
+
it('renders children content', () => {
|
|
29
|
+
const { container } = render(Card, { children: textSnippet('body') });
|
|
30
|
+
const content = container.querySelector('.ds-card-content');
|
|
31
|
+
expect(content).not.toBeNull();
|
|
32
|
+
expect(content.textContent).toContain('body');
|
|
33
|
+
});
|
|
34
|
+
it('renders header and footer snippets', () => {
|
|
35
|
+
const { container } = render(Card, {
|
|
36
|
+
header: textSnippet('head'),
|
|
37
|
+
footer: textSnippet('foot')
|
|
38
|
+
});
|
|
39
|
+
expect(container.querySelector('.ds-card-header').textContent).toContain('head');
|
|
40
|
+
expect(container.querySelector('.ds-card-footer').textContent).toContain('foot');
|
|
41
|
+
});
|
|
42
|
+
it('is not interactive by default (no button role)', () => {
|
|
43
|
+
const { container } = render(Card);
|
|
44
|
+
expect(container.querySelector('[role="button"]')).toBeNull();
|
|
45
|
+
expect(container.querySelector('.is-interactive')).toBeNull();
|
|
46
|
+
});
|
|
47
|
+
it('becomes interactive when an onclick handler is provided', () => {
|
|
48
|
+
const { container } = render(Card, { onclick: vi.fn() });
|
|
49
|
+
const card = container.querySelector('.ds-card');
|
|
50
|
+
expect(card.getAttribute('role')).toBe('button');
|
|
51
|
+
expect(card.getAttribute('tabindex')).toBe('0');
|
|
52
|
+
expect(container.querySelector('.is-interactive')).not.toBeNull();
|
|
53
|
+
});
|
|
54
|
+
it('becomes interactive for the interactive variant without onclick', () => {
|
|
55
|
+
const { container } = render(Card, { variant: 'interactive' });
|
|
56
|
+
expect(container.querySelector('[role="button"]')).not.toBeNull();
|
|
57
|
+
});
|
|
58
|
+
it('calls onclick when an interactive card is clicked', async () => {
|
|
59
|
+
const handleClick = vi.fn();
|
|
60
|
+
const { container } = render(Card, { onclick: handleClick });
|
|
61
|
+
await fireEvent.click(container.querySelector('.ds-card'));
|
|
62
|
+
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
63
|
+
});
|
|
64
|
+
it('triggers onclick on Enter key when interactive', async () => {
|
|
65
|
+
const handleClick = vi.fn();
|
|
66
|
+
const { container } = render(Card, { onclick: handleClick });
|
|
67
|
+
await fireEvent.keyDown(container.querySelector('.ds-card'), { key: 'Enter' });
|
|
68
|
+
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
69
|
+
});
|
|
70
|
+
it('triggers onclick on Space key when interactive', async () => {
|
|
71
|
+
const handleClick = vi.fn();
|
|
72
|
+
const { container } = render(Card, { onclick: handleClick });
|
|
73
|
+
await fireEvent.keyDown(container.querySelector('.ds-card'), { key: ' ' });
|
|
74
|
+
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
75
|
+
});
|
|
76
|
+
it('reflects selection via the is-selected class and aria-pressed', () => {
|
|
77
|
+
const { container } = render(Card, { selected: true, onclick: vi.fn() });
|
|
78
|
+
const card = container.querySelector('.ds-card');
|
|
79
|
+
expect(card.classList.contains('is-selected')).toBe(true);
|
|
80
|
+
expect(card.getAttribute('aria-pressed')).toBe('true');
|
|
81
|
+
});
|
|
82
|
+
it('renders the selection ring when selected', () => {
|
|
83
|
+
const { container } = render(Card, { selected: true });
|
|
84
|
+
expect(container.querySelector('.ds-card-ring')).not.toBeNull();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
@@ -174,6 +174,21 @@
|
|
|
174
174
|
paramValues = {};
|
|
175
175
|
currentParamIndex = 0;
|
|
176
176
|
}
|
|
177
|
+
|
|
178
|
+
function handleOptionKeydown(e: KeyboardEvent, cmd: CommandSchema) {
|
|
179
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
180
|
+
e.preventDefault();
|
|
181
|
+
selectCommand(cmd);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function handleSuggestionKeydown(e: KeyboardEvent, suggestion: string) {
|
|
186
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
187
|
+
e.preventDefault();
|
|
188
|
+
inputValue = suggestion;
|
|
189
|
+
submitParameter();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
177
192
|
|
|
178
193
|
function submitParameter() {
|
|
179
194
|
if (!activeCommand || !currentParam) return;
|
|
@@ -269,9 +284,15 @@
|
|
|
269
284
|
? getParameterPlaceholder(currentParam)
|
|
270
285
|
: placeholder}
|
|
271
286
|
disabled={isExecuting}
|
|
287
|
+
role="combobox"
|
|
272
288
|
aria-autocomplete="list"
|
|
273
289
|
aria-controls="suggestions-list"
|
|
274
290
|
aria-expanded={filteredCommands.length > 0 || suggestions.length > 0}
|
|
291
|
+
aria-activedescendant={!activeCommand && filteredCommands.length > 0
|
|
292
|
+
? `command-opt-${selectedIndex}`
|
|
293
|
+
: activeCommand && suggestions.length > 0
|
|
294
|
+
? `suggestion-opt-${selectedIndex}`
|
|
295
|
+
: undefined}
|
|
275
296
|
/>
|
|
276
297
|
|
|
277
298
|
{#if isExecuting}
|
|
@@ -289,10 +310,13 @@
|
|
|
289
310
|
>
|
|
290
311
|
{#each filteredCommands as cmd, i (cmd.id)}
|
|
291
312
|
<li
|
|
313
|
+
id="command-opt-${i}"
|
|
292
314
|
role="option"
|
|
293
315
|
aria-selected={i === selectedIndex}
|
|
316
|
+
tabindex={i === selectedIndex ? 0 : -1}
|
|
294
317
|
class:selected={i === selectedIndex}
|
|
295
318
|
onclick={() => selectCommand(cmd)}
|
|
319
|
+
onkeydown={(e) => handleOptionKeydown(e, cmd)}
|
|
296
320
|
>
|
|
297
321
|
<span class="command-name">/{cmd.path}</span>
|
|
298
322
|
<span class="command-desc">{cmd.description}</span>
|
|
@@ -316,10 +340,13 @@
|
|
|
316
340
|
>
|
|
317
341
|
{#each suggestions as sug, i (sug)}
|
|
318
342
|
<li
|
|
343
|
+
id="suggestion-opt-${i}"
|
|
319
344
|
role="option"
|
|
320
345
|
aria-selected={i === selectedIndex}
|
|
346
|
+
tabindex={i === selectedIndex ? 0 : -1}
|
|
321
347
|
class:selected={i === selectedIndex}
|
|
322
348
|
onclick={() => { inputValue = sug; submitParameter(); }}
|
|
349
|
+
onkeydown={(e) => handleSuggestionKeydown(e, sug)}
|
|
323
350
|
>
|
|
324
351
|
{sug}
|
|
325
352
|
</li>
|
|
@@ -369,21 +396,21 @@
|
|
|
369
396
|
bottom: 100%;
|
|
370
397
|
left: 0;
|
|
371
398
|
right: 0;
|
|
372
|
-
margin-bottom:
|
|
373
|
-
background: var(--color-bg-panel-elevated
|
|
374
|
-
border:
|
|
375
|
-
border-radius:
|
|
376
|
-
box-shadow:
|
|
399
|
+
margin-bottom: 2px;
|
|
400
|
+
background: var(--color-bg-panel-elevated);
|
|
401
|
+
border: var(--border-width-default) solid var(--border-default);
|
|
402
|
+
border-radius: 0;
|
|
403
|
+
box-shadow: none;
|
|
377
404
|
overflow: hidden;
|
|
378
405
|
z-index: 100;
|
|
379
406
|
}
|
|
380
|
-
|
|
407
|
+
|
|
381
408
|
.input-bar {
|
|
382
409
|
display: flex;
|
|
383
410
|
align-items: center;
|
|
384
411
|
gap: var(--space-2);
|
|
385
|
-
padding: var(--
|
|
386
|
-
border-bottom: 1px solid var(--border-
|
|
412
|
+
padding: var(--ui-pad-y) var(--ui-pad-x);
|
|
413
|
+
border-bottom: 1px solid var(--border-default);
|
|
387
414
|
}
|
|
388
415
|
|
|
389
416
|
.input-bar.executing {
|
|
@@ -421,42 +448,48 @@
|
|
|
421
448
|
}
|
|
422
449
|
|
|
423
450
|
.spinner {
|
|
424
|
-
width:
|
|
425
|
-
height:
|
|
426
|
-
border:
|
|
427
|
-
border-top-color: var(--color-accent
|
|
451
|
+
width: 14px;
|
|
452
|
+
height: 14px;
|
|
453
|
+
border: 1.5px solid var(--border-default);
|
|
454
|
+
border-top-color: var(--color-accent);
|
|
428
455
|
border-radius: 50%;
|
|
429
456
|
animation: spin 0.8s linear infinite;
|
|
430
457
|
}
|
|
431
|
-
|
|
458
|
+
|
|
432
459
|
@keyframes spin {
|
|
433
460
|
to { transform: rotate(360deg); }
|
|
434
461
|
}
|
|
435
|
-
|
|
462
|
+
|
|
436
463
|
.command-list,
|
|
437
464
|
.suggestion-list {
|
|
438
465
|
list-style: none;
|
|
439
466
|
margin: 0;
|
|
440
|
-
padding:
|
|
441
|
-
max-height:
|
|
467
|
+
padding: 0;
|
|
468
|
+
max-height: 220px;
|
|
442
469
|
overflow-y: auto;
|
|
443
470
|
}
|
|
444
|
-
|
|
471
|
+
|
|
445
472
|
.command-list li,
|
|
446
473
|
.suggestion-list li {
|
|
447
474
|
display: flex;
|
|
448
475
|
align-items: center;
|
|
449
476
|
gap: var(--space-3);
|
|
450
|
-
|
|
477
|
+
height: var(--ui-row-h);
|
|
478
|
+
padding: 0 var(--ui-pad-x);
|
|
451
479
|
cursor: pointer;
|
|
452
|
-
|
|
480
|
+
border-bottom: 1px solid var(--border-default);
|
|
481
|
+
transition: background var(--transition-fast) linear;
|
|
453
482
|
}
|
|
454
|
-
|
|
483
|
+
|
|
484
|
+
.command-list li:last-child,
|
|
485
|
+
.suggestion-list li:last-child { border-bottom: 0; }
|
|
486
|
+
|
|
455
487
|
.command-list li:hover,
|
|
456
488
|
.command-list li.selected,
|
|
457
489
|
.suggestion-list li:hover,
|
|
458
490
|
.suggestion-list li.selected {
|
|
459
|
-
background: var(--color-accent-subtle
|
|
491
|
+
background: var(--color-accent-subtle);
|
|
492
|
+
box-shadow: inset 2px 0 0 var(--color-accent);
|
|
460
493
|
}
|
|
461
494
|
|
|
462
495
|
.command-name {
|
|
@@ -485,26 +518,25 @@
|
|
|
485
518
|
}
|
|
486
519
|
|
|
487
520
|
.param-chip {
|
|
488
|
-
font-size: var(--
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
background: var(--color-bg-panel
|
|
492
|
-
color: var(--color-text-tertiary
|
|
521
|
+
font-size: var(--ui-label);
|
|
522
|
+
font-family: var(--font-mono);
|
|
523
|
+
padding: 2px var(--ui-pad-y);
|
|
524
|
+
background: var(--color-bg-panel);
|
|
525
|
+
color: var(--color-text-tertiary);
|
|
493
526
|
border: 1px solid transparent;
|
|
494
527
|
}
|
|
495
|
-
|
|
528
|
+
|
|
496
529
|
.param-chip.required {
|
|
497
|
-
border-color: var(--color-accent-muted
|
|
530
|
+
border-color: var(--color-accent-muted);
|
|
498
531
|
}
|
|
499
|
-
|
|
532
|
+
|
|
500
533
|
.param-chip.filled {
|
|
501
|
-
background: var(--color-accent-subtle
|
|
502
|
-
color: var(--color-accent
|
|
534
|
+
background: var(--color-accent-subtle);
|
|
535
|
+
color: var(--color-accent);
|
|
503
536
|
}
|
|
504
|
-
|
|
537
|
+
|
|
505
538
|
.param-chip.current {
|
|
506
|
-
border-color: var(--color-accent
|
|
507
|
-
box-shadow: 0 0 0 1px var(--color-accent);
|
|
539
|
+
border-color: var(--color-accent);
|
|
508
540
|
}
|
|
509
541
|
|
|
510
542
|
.feedback {
|
|
@@ -514,13 +546,13 @@
|
|
|
514
546
|
}
|
|
515
547
|
|
|
516
548
|
.feedback.success {
|
|
517
|
-
color: var(--color-success
|
|
518
|
-
background:
|
|
549
|
+
color: var(--color-success);
|
|
550
|
+
background: color-mix(in srgb, var(--color-success) 10%, transparent);
|
|
519
551
|
}
|
|
520
|
-
|
|
552
|
+
|
|
521
553
|
.feedback.error {
|
|
522
|
-
color: var(--color-error
|
|
523
|
-
background:
|
|
554
|
+
color: var(--color-error);
|
|
555
|
+
background: color-mix(in srgb, var(--color-error) 10%, transparent);
|
|
524
556
|
}
|
|
525
557
|
|
|
526
558
|
.help {
|
|
@@ -533,10 +565,10 @@
|
|
|
533
565
|
}
|
|
534
566
|
|
|
535
567
|
kbd {
|
|
536
|
-
background: var(--color-bg-canvas
|
|
537
|
-
padding:
|
|
538
|
-
border
|
|
568
|
+
background: var(--color-bg-canvas);
|
|
569
|
+
padding: 1px 5px;
|
|
570
|
+
border: 1px solid var(--border-subtle);
|
|
539
571
|
font-family: var(--font-mono);
|
|
540
|
-
font-size:
|
|
572
|
+
font-size: var(--ui-label);
|
|
541
573
|
}
|
|
542
574
|
</style>
|