@stephen-netu/design-system 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/dist/b0-app-shell/clarification-overlay/ClarificationOverlay.svelte +10 -2
  2. package/dist/b0-app-shell/clarification-overlay/ClarificationOverlay.svelte.d.ts.map +1 -1
  3. package/dist/b0-app-shell/{command-bar/CommandBar.svelte → global-command-bar/GlobalCommandBar.svelte} +75 -75
  4. package/dist/b0-app-shell/{command-bar/CommandBar.svelte.d.ts → global-command-bar/GlobalCommandBar.svelte.d.ts} +6 -6
  5. package/dist/b0-app-shell/global-command-bar/GlobalCommandBar.svelte.d.ts.map +1 -0
  6. package/dist/b0-app-shell/index.d.ts +1 -1
  7. package/dist/b0-app-shell/index.d.ts.map +1 -1
  8. package/dist/b0-app-shell/index.js +1 -1
  9. package/dist/d0-data-viz/CheckpointPill.svelte +7 -2
  10. package/dist/d0-data-viz/CheckpointPill.svelte.d.ts.map +1 -1
  11. package/dist/d0-data-viz/theme-integration.d.ts +3 -3
  12. package/dist/d0-data-viz/theme-integration.js +3 -3
  13. package/dist/d0-data-viz/theme-integration.test.js +41 -0
  14. package/dist/demos/BspSizingInfographic.svelte +3 -32
  15. package/dist/editor/CodeEditor.test.js +38 -0
  16. package/dist/editor/FindReplaceDialog.svelte +32 -32
  17. package/dist/editor/MarkdownEditor.svelte +71 -58
  18. package/dist/editor/MarkdownEditor.svelte.d.ts.map +1 -1
  19. package/dist/editor/MarkdownEditor.test.js +38 -0
  20. package/dist/editor/components/CorrectionTooltip.svelte +0 -1
  21. package/dist/entity-graph-view/WorldView.svelte +1 -1
  22. package/dist/fabric/ai/ChatPanel.svelte +31 -31
  23. package/dist/fabric/ai/ResearchPanel.svelte +6 -3
  24. package/dist/fabric/ai/ResearchPanel.svelte.d.ts.map +1 -1
  25. package/dist/fabric/index.d.ts +4 -5
  26. package/dist/fabric/index.d.ts.map +1 -1
  27. package/dist/fabric/index.js +3 -3
  28. package/dist/fabric/input/{CommandBar.svelte → AppHeaderBar.svelte} +13 -13
  29. package/dist/fabric/input/{CommandBar.svelte.d.ts → AppHeaderBar.svelte.d.ts} +5 -5
  30. package/dist/fabric/input/AppHeaderBar.svelte.d.ts.map +1 -0
  31. package/dist/fabric/input/{CommandBar.test.js → AppHeaderBar.test.js} +9 -9
  32. package/dist/fabric/input/index.d.ts +2 -2
  33. package/dist/fabric/input/index.d.ts.map +1 -1
  34. package/dist/fabric/input/index.js +1 -1
  35. package/dist/fabric/layout/KanbanBoard.svelte +25 -155
  36. package/dist/fabric/layout/KanbanBoard.svelte.d.ts +2 -26
  37. package/dist/fabric/layout/KanbanBoard.svelte.d.ts.map +1 -1
  38. package/dist/fabric/layout/KanbanBoard.test.js +125 -10
  39. package/dist/fabric/layout/KanbanCard.svelte +27 -223
  40. package/dist/fabric/layout/KanbanCard.svelte.d.ts +2 -19
  41. package/dist/fabric/layout/KanbanCard.svelte.d.ts.map +1 -1
  42. package/dist/fabric/layout/KanbanColumn.svelte +41 -275
  43. package/dist/fabric/layout/KanbanColumn.svelte.d.ts +2 -22
  44. package/dist/fabric/layout/KanbanColumn.svelte.d.ts.map +1 -1
  45. package/dist/fabric/layout/index.d.ts +2 -5
  46. package/dist/fabric/layout/index.d.ts.map +1 -1
  47. package/dist/fabric/layout/index.js +1 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +4 -2
  50. package/dist/l0-layout/SectionSplitter.svelte +5 -5
  51. package/dist/l0-layout/block-writer/BlockItem.svelte +6 -4
  52. package/dist/l0-layout/card/CompactCard.svelte +4 -3
  53. package/dist/l0-layout/grant/GrantCard.svelte +15 -5
  54. package/dist/l0-layout/grant/GrantCard.svelte.d.ts.map +1 -1
  55. package/dist/l0-layout/index.d.ts +2 -0
  56. package/dist/l0-layout/index.d.ts.map +1 -1
  57. package/dist/l0-layout/index.js +1 -0
  58. package/dist/l0-layout/kanban/KanbanBoard.svelte +246 -29
  59. package/dist/l0-layout/kanban/KanbanBoard.svelte.d.ts +28 -2
  60. package/dist/l0-layout/kanban/KanbanBoard.svelte.d.ts.map +1 -1
  61. package/dist/l0-layout/kanban/KanbanCard.svelte +175 -150
  62. package/dist/l0-layout/kanban/KanbanCard.svelte.d.ts +16 -18
  63. package/dist/l0-layout/kanban/KanbanCard.svelte.d.ts.map +1 -1
  64. package/dist/l0-layout/kanban/KanbanColumn.svelte +152 -78
  65. package/dist/l0-layout/kanban/KanbanColumn.svelte.d.ts +28 -7
  66. package/dist/l0-layout/kanban/KanbanColumn.svelte.d.ts.map +1 -1
  67. package/dist/l0-layout/kanban/index.d.ts +6 -0
  68. package/dist/l0-layout/kanban/index.d.ts.map +1 -0
  69. package/dist/l0-layout/kanban/index.js +3 -0
  70. package/dist/n0-node-graph/Node.svelte +2 -2
  71. package/dist/n0-node-graph/NodePalette.svelte +2 -2
  72. package/dist/n1-flow-canvas/graph-state.test.js +69 -0
  73. package/dist/n1-flow-canvas/utils.test.js +116 -0
  74. package/dist/n3-force-graph/GraphTooltip.svelte +2 -2
  75. package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte +12 -11
  76. package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte.d.ts.map +1 -1
  77. package/dist/n4-adaptive-manifold/classifier.test.js +104 -0
  78. package/dist/n4-adaptive-manifold/n4-tokens.css +2 -2
  79. package/dist/p0-primitives/ThemeProvider.svelte +10 -11
  80. package/dist/p0-primitives/ThemeProvider.svelte.d.ts +1 -1
  81. package/dist/p0-primitives/ThemeProvider.svelte.d.ts.map +1 -1
  82. package/dist/p0-primitives/canvas-theme.d.ts +12 -0
  83. package/dist/p0-primitives/canvas-theme.d.ts.map +1 -1
  84. package/dist/p0-primitives/canvas-theme.js +10 -0
  85. package/dist/p0-primitives/index.d.ts +2 -1
  86. package/dist/p0-primitives/index.d.ts.map +1 -1
  87. package/dist/p0-primitives/index.js +1 -0
  88. package/dist/p0-primitives/theme-context.d.ts +9 -0
  89. package/dist/p0-primitives/theme-context.d.ts.map +1 -0
  90. package/dist/p0-primitives/theme-context.js +8 -0
  91. package/dist/p0-primitives/tokens/tokens.css +22 -11
  92. package/dist/p0-primitives/utils/index.d.ts +2 -2
  93. package/dist/p0-primitives/utils/index.d.ts.map +1 -1
  94. package/dist/s0-state/SyncStatus.svelte +1 -1
  95. package/dist/s0-state/ThemeStore.svelte.d.ts +3 -2
  96. package/dist/s0-state/ThemeStore.svelte.d.ts.map +1 -1
  97. package/dist/s0-state/ThemeStore.svelte.js +20 -1
  98. package/dist/s0-state/index.d.ts +0 -1
  99. package/dist/s0-state/index.d.ts.map +1 -1
  100. package/dist/s0-state/index.js +1 -0
  101. package/dist/s0-state/modal-stack-store.svelte.d.ts +25 -0
  102. package/dist/s0-state/modal-stack-store.svelte.d.ts.map +1 -1
  103. package/dist/s0-state/modal-stack-store.svelte.js +19 -0
  104. package/dist/showcase/Showcase.svelte +43 -34
  105. package/dist/showcase/Showcase.svelte.d.ts.map +1 -1
  106. package/dist/spatial/BspTilingCanvas.svelte +5 -5
  107. package/dist/spatial/BspTilingSimulation.test.js +88 -0
  108. package/dist/spatial/CameraController.test.js +120 -0
  109. package/dist/spatial/ForceCanvas.svelte +18 -13
  110. package/dist/spatial/ForceCanvas.svelte.d.ts.map +1 -1
  111. package/dist/spatial/ForceSimulation.svelte.d.ts.map +1 -1
  112. package/dist/spatial/ForceSimulation.svelte.js +32 -21
  113. package/dist/spatial/LodRenderer.svelte +14 -1
  114. package/dist/spatial/LodRenderer.svelte.d.ts.map +1 -1
  115. package/dist/spatial/SnapZoomCamera.svelte +23 -13
  116. package/dist/spatial/SnapZoomCamera.svelte.d.ts.map +1 -1
  117. package/dist/spatial/ZoneTiler.svelte +3 -2
  118. package/dist/spatial/d3-types.d.ts +31 -0
  119. package/dist/spatial/d3-types.d.ts.map +1 -0
  120. package/dist/spatial/d3-types.js +19 -0
  121. package/dist/ssr-import-clean.test.js +37 -0
  122. package/dist/t0-transport/fs.d.ts +12 -0
  123. package/dist/t0-transport/fs.d.ts.map +1 -0
  124. package/dist/t0-transport/fs.js +55 -0
  125. package/dist/t0-transport/index.d.ts +1 -0
  126. package/dist/t0-transport/index.d.ts.map +1 -1
  127. package/dist/t0-transport/index.js +1 -0
  128. package/dist/t0-transport/invoke.d.ts.map +1 -1
  129. package/dist/t0-transport/invoke.js +5 -2
  130. package/dist/t0-transport/quality.d.ts +12 -3
  131. package/dist/t0-transport/quality.d.ts.map +1 -1
  132. package/dist/t0-transport/quality.js +17 -4
  133. package/dist/t0-transport/substrate.svelte.d.ts +27 -0
  134. package/dist/t0-transport/substrate.svelte.d.ts.map +1 -0
  135. package/dist/t0-transport/substrate.svelte.js +49 -0
  136. package/dist/u0-primitives/LockIndicator.svelte +1 -1
  137. package/dist/u0-primitives/VerticalToolbar.svelte +1 -1
  138. package/dist/u0-primitives/accordion/Accordion.svelte +10 -9
  139. package/dist/u0-primitives/accordion/Accordion.svelte.d.ts +0 -7
  140. package/dist/u0-primitives/accordion/Accordion.svelte.d.ts.map +1 -1
  141. package/dist/u0-primitives/accordion/Accordion.test.js +5 -5
  142. package/dist/u0-primitives/badge/Badge.test.js +10 -10
  143. package/dist/u0-primitives/badge/ValidityBadge.test.js +9 -9
  144. package/dist/u0-primitives/button/Button.svelte +3 -1
  145. package/dist/u0-primitives/button/Button.svelte.d.ts +1 -0
  146. package/dist/u0-primitives/button/Button.svelte.d.ts.map +1 -1
  147. package/dist/u0-primitives/button/Button.test.js +11 -11
  148. package/dist/u0-primitives/card/Card.svelte +26 -20
  149. package/dist/u0-primitives/card/Card.svelte.d.ts.map +1 -1
  150. package/dist/u0-primitives/command-palette/CommandPalette.svelte +27 -0
  151. package/dist/u0-primitives/command-palette/CommandPalette.svelte.d.ts.map +1 -1
  152. package/dist/u0-primitives/command-palette/commandStore.svelte.d.ts.map +1 -1
  153. package/dist/u0-primitives/command-palette/commandStore.svelte.js +2 -1
  154. package/dist/u0-primitives/dropdown/Dropdown.test.js +1 -1
  155. package/dist/u0-primitives/index.d.ts +2 -0
  156. package/dist/u0-primitives/index.d.ts.map +1 -1
  157. package/dist/u0-primitives/index.js +1 -0
  158. package/dist/u0-primitives/input/Input.svelte +9 -0
  159. package/dist/u0-primitives/input/Input.svelte.d.ts.map +1 -1
  160. package/dist/u0-primitives/input/Input.test.js +1 -1
  161. package/dist/u0-primitives/modal/Modal.svelte +46 -23
  162. package/dist/u0-primitives/modal/Modal.svelte.d.ts.map +1 -1
  163. package/dist/u0-primitives/modal/Modal.test.js +63 -15
  164. package/dist/u0-primitives/rsvp/RsvpReader.svelte +8 -8
  165. package/dist/u0-primitives/rsvp/RsvpReader.svelte.d.ts.map +1 -1
  166. package/dist/u0-primitives/steps/Steps.svelte +2 -2
  167. package/dist/u0-primitives/surface-state/SurfaceState.svelte +190 -0
  168. package/dist/u0-primitives/surface-state/SurfaceState.svelte.d.ts +15 -0
  169. package/dist/u0-primitives/surface-state/SurfaceState.svelte.d.ts.map +1 -0
  170. package/dist/u0-primitives/toggle/Toggle.svelte +12 -2
  171. package/dist/u0-primitives/tooltip/Tooltip.test.js +12 -12
  172. package/dist/v0-diagrams/MarkmapDiagram.test.js +49 -0
  173. package/dist/v0-diagrams/MermaidDiagram.svelte +21 -9
  174. package/dist/v0-diagrams/MermaidDiagram.svelte.d.ts.map +1 -1
  175. package/dist/v0-diagrams/MermaidDiagram.test.js +40 -0
  176. package/package.json +50 -24
  177. package/src/n4-adaptive-manifold/n4-tokens.css +2 -2
  178. package/src/p0-primitives/tokens/tokens.css +22 -11
  179. package/src/p0-primitives/tokens/tokens.json +13 -2
  180. package/dist/b0-app-shell/command-bar/CommandBar.svelte.d.ts.map +0 -1
  181. package/dist/fabric/input/CommandBar.svelte.d.ts.map +0 -1
  182. package/dist/stores/vaultStore.svelte +0 -14
  183. package/dist/stores/vaultStore.svelte.d.ts +0 -24
  184. package/dist/stores/vaultStore.svelte.d.ts.map +0 -1
  185. package/dist/tauri/index.d.ts +0 -3
  186. package/dist/tauri/index.d.ts.map +0 -1
  187. package/dist/tauri/index.js +0 -11
@@ -4,30 +4,30 @@ import Badge from './Badge.svelte';
4
4
  describe('Badge', () => {
5
5
  afterEach(() => cleanup());
6
6
  it('renders with default variant', () => {
7
- const { container } = render(Badge, { props: { children: () => { } } });
7
+ const { container } = render(Badge, { props: { children: (() => '') } });
8
8
  expect(container.querySelector('.ds-badge')).not.toBeNull();
9
9
  expect(container.querySelector('.variant-status')).not.toBeNull();
10
10
  });
11
11
  it('renders with info variant color class', () => {
12
- const { container } = render(Badge, { props: { color: 'info', children: () => { } } });
12
+ const { container } = render(Badge, { props: { color: 'info', children: (() => '') } });
13
13
  expect(container.querySelector('.color-info')).not.toBeNull();
14
14
  });
15
15
  it('renders with success variant color class', () => {
16
- const { container } = render(Badge, { props: { color: 'success', children: () => { } } });
16
+ const { container } = render(Badge, { props: { color: 'success', children: (() => '') } });
17
17
  expect(container.querySelector('.color-success')).not.toBeNull();
18
18
  });
19
19
  it('renders with warning variant color class', () => {
20
- const { container } = render(Badge, { props: { color: 'warning', children: () => { } } });
20
+ const { container } = render(Badge, { props: { color: 'warning', children: (() => '') } });
21
21
  expect(container.querySelector('.color-warning')).not.toBeNull();
22
22
  });
23
23
  it('renders with error variant color class', () => {
24
- const { container } = render(Badge, { props: { color: 'error', children: () => { } } });
24
+ const { container } = render(Badge, { props: { color: 'error', children: (() => '') } });
25
25
  expect(container.querySelector('.color-error')).not.toBeNull();
26
26
  });
27
27
  it('applies size classes', () => {
28
- const { container: sm } = render(Badge, { props: { size: 'sm', children: () => { } } });
28
+ const { container: sm } = render(Badge, { props: { size: 'sm', children: (() => '') } });
29
29
  expect(sm.querySelector('.size-sm')).not.toBeNull();
30
- const { container: lg } = render(Badge, { props: { size: 'lg', children: () => { } } });
30
+ const { container: lg } = render(Badge, { props: { size: 'lg', children: (() => '') } });
31
31
  expect(lg.querySelector('.size-lg')).not.toBeNull();
32
32
  });
33
33
  it('renders dot variant without content span', () => {
@@ -36,15 +36,15 @@ describe('Badge', () => {
36
36
  expect(container.querySelector('.ds-badge-content')).toBeNull();
37
37
  });
38
38
  it('renders outline variant', () => {
39
- const { container } = render(Badge, { props: { variant: 'outline', children: () => { } } });
39
+ const { container } = render(Badge, { props: { variant: 'outline', children: (() => '') } });
40
40
  expect(container.querySelector('.variant-outline')).not.toBeNull();
41
41
  });
42
42
  it('renders children text', () => {
43
- const { container } = render(Badge, { props: { children: () => 'Hello' } });
43
+ const { container } = render(Badge, { props: { children: (() => '') } });
44
44
  expect(container.querySelector('.ds-badge-content')).not.toBeNull();
45
45
  });
46
46
  it('applies custom class', () => {
47
- const { container } = render(Badge, { props: { class: 'custom-badge', children: () => { } } });
47
+ const { container } = render(Badge, { props: { class: 'custom-badge', children: (() => '') } });
48
48
  expect(container.querySelector('.custom-badge')).not.toBeNull();
49
49
  });
50
50
  });
@@ -4,23 +4,23 @@ import ValidityBadge from './ValidityBadge.svelte';
4
4
  describe('ValidityBadge', () => {
5
5
  afterEach(() => cleanup());
6
6
  it('renders with default score', () => {
7
- const { container } = render(ValidityBadge, { props: { children: () => { } } });
7
+ const { container } = render(ValidityBadge, { props: { children: (() => '') } });
8
8
  expect(container.querySelector('.ds-validity-badge')).not.toBeNull();
9
9
  });
10
10
  it('applies high validity class for score >= 900', () => {
11
- const { container } = render(ValidityBadge, { props: { score: 950, children: () => { } } });
11
+ const { container } = render(ValidityBadge, { props: { score: 950, children: (() => '') } });
12
12
  expect(container.querySelector('.validity-color-high')).not.toBeNull();
13
13
  });
14
14
  it('applies medium validity class for score 700-899', () => {
15
- const { container } = render(ValidityBadge, { props: { score: 750, children: () => { } } });
15
+ const { container } = render(ValidityBadge, { props: { score: 750, children: (() => '') } });
16
16
  expect(container.querySelector('.validity-color-medium')).not.toBeNull();
17
17
  });
18
18
  it('applies low validity class for score 500-699', () => {
19
- const { container } = render(ValidityBadge, { props: { score: 600, children: () => { } } });
19
+ const { container } = render(ValidityBadge, { props: { score: 600, children: (() => '') } });
20
20
  expect(container.querySelector('.validity-color-low')).not.toBeNull();
21
21
  });
22
22
  it('applies critical validity class for score < 500', () => {
23
- const { container } = render(ValidityBadge, { props: { score: 300, children: () => { } } });
23
+ const { container } = render(ValidityBadge, { props: { score: 300, children: (() => '') } });
24
24
  expect(container.querySelector('.validity-color-critical')).not.toBeNull();
25
25
  });
26
26
  it('renders score and total text', () => {
@@ -31,9 +31,9 @@ describe('ValidityBadge', () => {
31
31
  expect(totalEl).not.toBeNull();
32
32
  });
33
33
  it('applies size classes', () => {
34
- const { container: sm } = render(ValidityBadge, { props: { size: 'sm', children: () => { } } });
34
+ const { container: sm } = render(ValidityBadge, { props: { size: 'sm', children: (() => '') } });
35
35
  expect(sm.querySelector('.size-sm')).not.toBeNull();
36
- const { container: lg } = render(ValidityBadge, { props: { size: 'lg', children: () => { } } });
36
+ const { container: lg } = render(ValidityBadge, { props: { size: 'lg', children: (() => '') } });
37
37
  expect(lg.querySelector('.size-lg')).not.toBeNull();
38
38
  });
39
39
  it('shows label when showLabel is true', () => {
@@ -45,12 +45,12 @@ describe('ValidityBadge', () => {
45
45
  expect(container.querySelector('.ds-validity-label')).toBeNull();
46
46
  });
47
47
  it('sets aria-label from validity label', () => {
48
- const { container } = render(ValidityBadge, { props: { score: 950, children: () => { } } });
48
+ const { container } = render(ValidityBadge, { props: { score: 950, children: (() => '') } });
49
49
  const badge = container.querySelector('.ds-validity-badge');
50
50
  expect(badge.getAttribute('aria-label')).toBe('High Validity');
51
51
  });
52
52
  it('renders custom children when provided', () => {
53
- const { container } = render(ValidityBadge, { props: { score: 500, children: () => 'custom' } });
53
+ const { container } = render(ValidityBadge, { props: { score: 500, children: (() => '') } });
54
54
  expect(container.querySelector('.ds-validity-content')).not.toBeNull();
55
55
  expect(container.querySelector('.ds-validity-score')).toBeNull();
56
56
  });
@@ -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}
@@ -233,7 +236,6 @@
233
236
 
234
237
  @media (prefers-reduced-motion: reduce) {
235
238
  .ds-button { transition: none; }
236
- .is-pressed:not(:disabled) { }
237
239
  @keyframes ds-button-spin {
238
240
  from { transform: translate(-50%, -50%) rotate(0deg); }
239
241
  to { transform: translate(-50%, -50%) rotate(360deg); }
@@ -7,6 +7,7 @@ export interface Props {
7
7
  loading?: boolean;
8
8
  class?: string;
9
9
  'aria-label'?: string;
10
+ 'aria-expanded'?: boolean;
10
11
  onclick?: (e: MouseEvent) => void;
11
12
  children?: Snippet;
12
13
  iconLeading?: Snippet;
@@ -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;AA0DH,QAAA,MAAM,MAAM,2CAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
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: () => 'ok' });
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: () => 'tap', onclick: handleClick });
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: () => 'tap', disabled: true });
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: () => 'tap', loading: true });
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: () => 'tap', loading: true });
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: () => 'tap', variant: 'danger' });
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: () => 'tap', size: 'lg' });
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: () => 'tap', class: 'my-btn' });
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: () => 'tap', variant: 'secondary' });
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: () => 'Go' });
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: () => 'Go', type: 'submit' });
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
- role={isInteractive ? "button" : "region"}
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: 1px solid var(--border-default);
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;
@@ -91,7 +97,7 @@
91
97
 
92
98
  .ds-card-header {
93
99
  padding: var(--space-3) var(--space-4);
94
- border-bottom: 1px solid var(--border-default);
100
+ border-bottom: var(--border-width-thin) solid var(--border-default);
95
101
  font-weight: 600;
96
102
  background: var(--color-bg-panel);
97
103
  font-size: var(--text-sm);
@@ -106,7 +112,7 @@
106
112
 
107
113
  .ds-card-footer {
108
114
  padding: var(--space-3) var(--space-4);
109
- border-top: 1px solid var(--border-default);
115
+ border-top: var(--border-width-thin) solid var(--border-default);
110
116
  background: var(--color-accent-faint);
111
117
  }
112
118
 
@@ -125,9 +131,9 @@
125
131
 
126
132
  .variant-glass {
127
133
  background: rgba(24, 28, 32, 0.6);
128
- backdrop-filter: blur(12px);
129
- -webkit-backdrop-filter: blur(12px);
130
- border: 1px solid rgba(255, 255, 255, 0.08);
134
+ backdrop-filter: blur(var(--blur-md));
135
+ -webkit-backdrop-filter: blur(var(--blur-md));
136
+ border: var(--border-width-thin) solid rgba(255, 255, 255, 0.08);
131
137
  color: var(--color-text-primary);
132
138
  }
133
139
 
@@ -136,10 +142,10 @@
136
142
  border-color: var(--color-card-border);
137
143
  background-image: repeating-linear-gradient(
138
144
  0deg,
139
- transparent 0px,
140
- transparent 1px,
141
- rgba(255, 255, 255, 0.02) 1px,
142
- rgba(255, 255, 255, 0.02) 2px
145
+ transparent 0,
146
+ transparent var(--border-width-thin),
147
+ rgba(255, 255, 255, 0.02) var(--border-width-thin),
148
+ rgba(255, 255, 255, 0.02) var(--border-width-default)
143
149
  );
144
150
  }
145
151
 
@@ -171,7 +177,7 @@
171
177
  position: absolute;
172
178
  inset: 0;
173
179
  pointer-events: none;
174
- border: 1px solid transparent;
180
+ border: var(--border-width-thin) solid transparent;
175
181
  transition: border-color var(--transition-fast);
176
182
  }
177
183
 
@@ -180,10 +186,10 @@
180
186
  border-color: var(--color-accent);
181
187
  background: repeating-linear-gradient(
182
188
  45deg,
183
- transparent 0px,
184
- transparent 2px,
185
- var(--color-accent-muted) 2px,
186
- var(--color-accent-muted) 4px
189
+ transparent 0,
190
+ transparent var(--border-width-default),
191
+ var(--color-accent-muted) var(--border-width-default),
192
+ var(--color-accent-muted) var(--blur-md)
187
193
  );
188
194
  }
189
195
 
@@ -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;AA0DH,QAAA,MAAM,IAAI,2CAAwC,CAAC;AACnD,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;AACpC,eAAe,IAAI,CAAC"}
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"}
@@ -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>
@@ -1 +1 @@
1
- {"version":3,"file":"CommandPalette.svelte.d.ts","sourceRoot":"","sources":["../../../src/u0-primitives/command-palette/CommandPalette.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAmC,MAAM,iBAAiB,CAAC;AAGpF,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,KAAK;IACb,kEAAkE;IAClE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,iDAAiD;IACjD,OAAO,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,4DAA4D;IAC5D,SAAS,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAClG,uCAAuC;IACvC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmTH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"CommandPalette.svelte.d.ts","sourceRoot":"","sources":["../../../src/u0-primitives/command-palette/CommandPalette.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAmC,MAAM,iBAAiB,CAAC;AAGpF,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,KAAK;IACb,kEAAkE;IAClE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,iDAAiD;IACjD,OAAO,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,4DAA4D;IAC5D,SAAS,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAClG,uCAAuC;IACvC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAsUH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"commandStore.svelte.d.ts","sourceRoot":"","sources":["../../../src/u0-primitives/command-palette/commandStore.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,cAAc,EAGd,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAOzB,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,kDAAkD;AAClD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAgBD,cAAM,YAAY;IAEhB,QAAQ,6BAAoD;IAC5D,aAAa,8BAA6C;IAC1D,YAAY,cAAkC;IAC9C,WAAW,UAAiB;IAC5B,UAAU,uBAAsC;IAGhD,cAAc,kBAGZ;IAGF,cAAc,iBAAoC;IAGlD,iBAAiB,kBAKf;IAGF,OAAO,CAAC,eAAe,CAAgC;IAEvD;;;OAGG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB1C;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAMrC;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;IAyBxC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAgCrC;;OAEG;IACH,YAAY,IAAI,OAAO;IAcvB;;OAEG;IACH,MAAM,IAAI,IAAI;IASd;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IA+DvC;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC,aAAa,CAAC;IAczB;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,aAAa,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;IA4BjE;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAQtC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAMzC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAYrC;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
1
+ {"version":3,"file":"commandStore.svelte.d.ts","sourceRoot":"","sources":["../../../src/u0-primitives/command-palette/commandStore.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,cAAc,EAGd,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAYzB,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,kDAAkD;AAClD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAgBD,cAAM,YAAY;IAEhB,QAAQ,6BAAoD;IAC5D,aAAa,8BAA6C;IAC1D,YAAY,cAAkC;IAC9C,WAAW,UAAiB;IAC5B,UAAU,uBAAsC;IAGhD,cAAc,kBAGZ;IAGF,cAAc,iBAAoC;IAGlD,iBAAiB,kBAKf;IAGF,OAAO,CAAC,eAAe,CAAgC;IAEvD;;;OAGG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB1C;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAMrC;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;IAyBxC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAgCrC;;OAEG;IACH,YAAY,IAAI,OAAO;IAcvB;;OAEG;IACH,MAAM,IAAI,IAAI;IASd;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IA+DvC;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC,aAAa,CAAC;IAczB;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,aAAa,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;IA4BjE;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAQtC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAMzC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAYrC;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -9,7 +9,8 @@
9
9
  * - S-05: AbortController for killable operations
10
10
  */
11
11
  async function tauriInvoke(command, payload) {
12
- const mod = await import('@tauri-apps/api/core');
12
+ const spec = '@tauri-apps/api/core';
13
+ const mod = await import(/* @vite-ignore */ spec);
13
14
  return mod.invoke(command, payload);
14
15
  }
15
16
  class CommandStore {
@@ -9,7 +9,7 @@ const sampleItems = [
9
9
  function renderDropdown(props = {}) {
10
10
  return render(Dropdown, {
11
11
  items: sampleItems,
12
- trigger: () => '<button>Open</button>',
12
+ trigger: (() => ''),
13
13
  ...props,
14
14
  });
15
15
  }
@@ -10,6 +10,8 @@ export { default as Dropdown } from './dropdown/Dropdown.svelte';
10
10
  export { default as Tabs } from './tabs/Tabs.svelte';
11
11
  export type { Tab } from './tabs/tabs-types';
12
12
  export { default as Spinner } from './spinner/Spinner.svelte';
13
+ export { default as SurfaceState } from './surface-state/SurfaceState.svelte';
14
+ export type { SurfaceStateKind, Props as SurfaceStateProps } from './surface-state/SurfaceState.svelte';
13
15
  export { default as Modal } from './modal/Modal.svelte';
14
16
  export { default as AnimatedIcon } from './animated-icon/AnimatedIcon.svelte';
15
17
  export type { AnimatedIconName, AnimationType } from './animated-icon/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/u0-primitives/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAC9E,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGhF,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGlE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/u0-primitives/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAC9E,YAAY,EAAE,gBAAgB,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxG,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAC9E,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGhF,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGlE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC"}
@@ -10,6 +10,7 @@ export { default as Tooltip } from './tooltip/Tooltip.svelte';
10
10
  export { default as Dropdown } from './dropdown/Dropdown.svelte';
11
11
  export { default as Tabs } from './tabs/Tabs.svelte';
12
12
  export { default as Spinner } from './spinner/Spinner.svelte';
13
+ export { default as SurfaceState } from './surface-state/SurfaceState.svelte';
13
14
  export { default as Modal } from './modal/Modal.svelte';
14
15
  export { default as AnimatedIcon } from './animated-icon/AnimatedIcon.svelte';
15
16
  // New from NNJAS port
@@ -67,6 +67,13 @@
67
67
  showCompletions = false;
68
68
  }
69
69
 
70
+ function handleCompletionKeydown(e: KeyboardEvent, completion: { label: string }) {
71
+ if (e.key === 'Enter' || e.key === ' ') {
72
+ e.preventDefault();
73
+ applyCompletion(completion);
74
+ }
75
+ }
76
+
70
77
  function handleInput() {
71
78
  fetchCompletions(value);
72
79
  }
@@ -182,8 +189,10 @@
182
189
  id="autocomplete-option-{i}"
183
190
  role="option"
184
191
  aria-selected={i === selectedIndex}
192
+ tabindex={i === selectedIndex ? 0 : -1}
185
193
  class:selected={i === selectedIndex}
186
194
  onclick={() => applyCompletion(completion)}
195
+ onkeydown={(e) => handleCompletionKeydown(e, completion)}
187
196
  class="ds-input-autocomplete__item"
188
197
  >
189
198
  {#if completion.type}
@@ -1 +1 @@
1
- {"version":3,"file":"Input.svelte.d.ts","sourceRoot":"","sources":["../../../src/u0-primitives/input/Input.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGpC,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE;QAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAAA;KAAE,CAAC;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AA+IH,QAAA,MAAM,KAAK,gDAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Input.svelte.d.ts","sourceRoot":"","sources":["../../../src/u0-primitives/input/Input.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGpC,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE;QAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAAA;KAAE,CAAC;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAsJH,QAAA,MAAM,KAAK,gDAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
@@ -37,7 +37,7 @@ describe('Input', () => {
37
37
  });
38
38
  it('displays leading icon element when iconLeading is provided', () => {
39
39
  const { container } = render(Input, {
40
- iconLeading: () => '<svg class="test-icon"></svg>'
40
+ iconLeading: (() => '')
41
41
  });
42
42
  expect(container.querySelector('.ds-input-icon.leading')).not.toBeNull();
43
43
  });