@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.
Files changed (359) 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/BarChart.test.js +53 -0
  10. package/dist/d0-data-viz/CheckpointBar.test.js +83 -0
  11. package/dist/d0-data-viz/CheckpointPill.svelte +8 -3
  12. package/dist/d0-data-viz/CheckpointPill.svelte.d.ts.map +1 -1
  13. package/dist/d0-data-viz/CheckpointPill.test.js +78 -0
  14. package/dist/d0-data-viz/ConnectionHealth.test.js +70 -0
  15. package/dist/d0-data-viz/MetricCard.test.js +57 -0
  16. package/dist/d0-data-viz/SparkLine.test.js +47 -0
  17. package/dist/d0-data-viz/StorageMap.test.js +63 -0
  18. package/dist/d0-data-viz/Timeline.test.js +62 -0
  19. package/dist/d0-data-viz/WorldLineTimeline.test.js +99 -0
  20. package/dist/d0-data-viz/checkpoint-types.js +1 -1
  21. package/dist/d0-data-viz/storage-map-types.d.ts.map +1 -1
  22. package/dist/d0-data-viz/storage-map-types.js +6 -3
  23. package/dist/d0-data-viz/theme-integration.d.ts +3 -3
  24. package/dist/d0-data-viz/theme-integration.js +4 -4
  25. package/dist/d0-data-viz/theme-integration.test.js +41 -0
  26. package/dist/demos/AmbientPrimitivesDemo.svelte +103 -0
  27. package/dist/demos/AmbientPrimitivesDemo.svelte.d.ts +5 -0
  28. package/dist/demos/AmbientPrimitivesDemo.svelte.d.ts.map +1 -0
  29. package/dist/demos/BspSizingInfographic.svelte +3 -32
  30. package/dist/demos/NodepadBlocksShowcase.svelte +2 -1
  31. package/dist/demos/NodepadBlocksShowcase.svelte.d.ts.map +1 -1
  32. package/dist/demos/index.d.ts +1 -0
  33. package/dist/demos/index.d.ts.map +1 -1
  34. package/dist/demos/index.js +1 -0
  35. package/dist/editor/CodeEditor.svelte +83 -26
  36. package/dist/editor/CodeEditor.svelte.d.ts +0 -1
  37. package/dist/editor/CodeEditor.svelte.d.ts.map +1 -1
  38. package/dist/editor/CodeEditor.test.js +38 -0
  39. package/dist/editor/ExternalChangeDialog.svelte +117 -0
  40. package/dist/editor/ExternalChangeDialog.svelte.d.ts +13 -0
  41. package/dist/editor/ExternalChangeDialog.svelte.d.ts.map +1 -0
  42. package/dist/editor/FindReplaceDialog.svelte +32 -32
  43. package/dist/editor/MarkdownEditor.svelte +105 -605
  44. package/dist/editor/MarkdownEditor.svelte.d.ts +1 -1
  45. package/dist/editor/MarkdownEditor.svelte.d.ts.map +1 -1
  46. package/dist/editor/MarkdownEditor.test.js +38 -0
  47. package/dist/editor/codemirror-config.d.ts +36 -0
  48. package/dist/editor/codemirror-config.d.ts.map +1 -0
  49. package/dist/editor/codemirror-config.js +87 -0
  50. package/dist/editor/components/CorrectionTooltip.svelte +180 -160
  51. package/dist/editor/components/CorrectionTooltip.svelte.d.ts +7 -23
  52. package/dist/editor/components/CorrectionTooltip.svelte.d.ts.map +1 -1
  53. package/dist/editor/extensions/autocomplete.d.ts +2 -2
  54. package/dist/editor/extensions/autocomplete.d.ts.map +1 -1
  55. package/dist/editor/extensions/autocomplete.test.js +121 -0
  56. package/dist/editor/extensions/spellcheck.d.ts +21 -3
  57. package/dist/editor/extensions/spellcheck.d.ts.map +1 -1
  58. package/dist/editor/extensions/spellcheck.js +51 -9
  59. package/dist/editor/extensions/spellcheck.test.js +168 -0
  60. package/dist/editor/extensions/types.d.ts +2 -1
  61. package/dist/editor/extensions/types.d.ts.map +1 -1
  62. package/dist/editor/index.d.ts +2 -1
  63. package/dist/editor/index.d.ts.map +1 -1
  64. package/dist/editor/index.js +1 -0
  65. package/dist/editor/markdown-preview.d.ts +9 -0
  66. package/dist/editor/markdown-preview.d.ts.map +1 -0
  67. package/dist/editor/markdown-preview.js +19 -0
  68. package/dist/editor/markdown-preview.test.js +38 -0
  69. package/dist/editor/useCodeMirror.d.ts +23 -0
  70. package/dist/editor/useCodeMirror.d.ts.map +1 -0
  71. package/dist/editor/useCodeMirror.js +40 -0
  72. package/dist/editor/useFilePersistence.d.ts +32 -0
  73. package/dist/editor/useFilePersistence.d.ts.map +1 -0
  74. package/dist/editor/useFilePersistence.js +117 -0
  75. package/dist/entity-graph-view/WorldView.svelte +1 -1
  76. package/dist/fabric/ai/ChatPanel.svelte +84 -85
  77. package/dist/fabric/ai/ChatPanel.svelte.d.ts.map +1 -1
  78. package/dist/fabric/ai/ResearchPanel.svelte +35 -25
  79. package/dist/fabric/ai/ResearchPanel.svelte.d.ts.map +1 -1
  80. package/dist/fabric/data/FileTree.svelte +195 -0
  81. package/dist/fabric/data/FileTree.svelte.d.ts +19 -0
  82. package/dist/fabric/data/FileTree.svelte.d.ts.map +1 -0
  83. package/dist/fabric/data/FileTree.test.js +127 -0
  84. package/dist/fabric/data/index.d.ts +5 -9
  85. package/dist/fabric/data/index.d.ts.map +1 -1
  86. package/dist/fabric/data/index.js +4 -1
  87. package/dist/fabric/index.d.ts +5 -5
  88. package/dist/fabric/index.d.ts.map +1 -1
  89. package/dist/fabric/index.js +5 -3
  90. package/dist/fabric/input/{CommandBar.svelte → AppHeaderBar.svelte} +13 -13
  91. package/dist/fabric/input/{CommandBar.svelte.d.ts → AppHeaderBar.svelte.d.ts} +5 -5
  92. package/dist/fabric/input/AppHeaderBar.svelte.d.ts.map +1 -0
  93. package/dist/fabric/input/{CommandBar.test.js → AppHeaderBar.test.js} +9 -9
  94. package/dist/fabric/input/KeyboardShortcuts.svelte +23 -21
  95. package/dist/fabric/input/index.d.ts +2 -2
  96. package/dist/fabric/input/index.d.ts.map +1 -1
  97. package/dist/fabric/input/index.js +1 -1
  98. package/dist/fabric/layout/CollapsiblePanel.svelte +8 -10
  99. package/dist/fabric/layout/KanbanBoard.svelte +25 -155
  100. package/dist/fabric/layout/KanbanBoard.svelte.d.ts +2 -26
  101. package/dist/fabric/layout/KanbanBoard.svelte.d.ts.map +1 -1
  102. package/dist/fabric/layout/KanbanBoard.test.js +125 -10
  103. package/dist/fabric/layout/KanbanCard.svelte +27 -223
  104. package/dist/fabric/layout/KanbanCard.svelte.d.ts +2 -19
  105. package/dist/fabric/layout/KanbanCard.svelte.d.ts.map +1 -1
  106. package/dist/fabric/layout/KanbanColumn.svelte +41 -275
  107. package/dist/fabric/layout/KanbanColumn.svelte.d.ts +2 -22
  108. package/dist/fabric/layout/KanbanColumn.svelte.d.ts.map +1 -1
  109. package/dist/fabric/layout/index.d.ts +2 -5
  110. package/dist/fabric/layout/index.d.ts.map +1 -1
  111. package/dist/fabric/layout/index.js +1 -1
  112. package/dist/fabric/navigation/ActivityRail.svelte +3 -5
  113. package/dist/fabric/navigation/ActivityRail.svelte.d.ts.map +1 -1
  114. package/dist/g0-generative/components/Text.svelte +38 -0
  115. package/dist/g0-generative/components/Text.svelte.d.ts +9 -0
  116. package/dist/g0-generative/components/Text.svelte.d.ts.map +1 -0
  117. package/dist/g0-generative/index.d.ts +1 -0
  118. package/dist/g0-generative/index.d.ts.map +1 -1
  119. package/dist/g0-generative/index.js +1 -0
  120. package/dist/g0-generative/library/ComponentLibrary.d.ts +4 -0
  121. package/dist/g0-generative/library/ComponentLibrary.d.ts.map +1 -1
  122. package/dist/g0-generative/library/ComponentLibrary.js +10 -0
  123. package/dist/g0-generative/library/ComponentLibrary.test.js +135 -0
  124. package/dist/g0-generative/renderer/OpenUIRenderer.svelte +16 -56
  125. package/dist/g0-generative/renderer/OpenUIRenderer.svelte.d.ts.map +1 -1
  126. package/dist/g0-generative/renderer/OpenUIRenderer.test.js +143 -0
  127. package/dist/g0-geo/SovereignMap.svelte +13 -13
  128. package/dist/g0-geo/SovereignMap.svelte.d.ts.map +1 -1
  129. package/dist/index.d.ts +0 -1
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +7 -3
  132. package/dist/l0-layout/SectionSplitter.svelte +5 -5
  133. package/dist/l0-layout/block-writer/BlockContent.svelte +23 -22
  134. package/dist/l0-layout/block-writer/BlockContent.svelte.d.ts.map +1 -1
  135. package/dist/l0-layout/block-writer/BlockContent.test.js +47 -0
  136. package/dist/l0-layout/block-writer/BlockItem.svelte +6 -4
  137. package/dist/l0-layout/block-writer/markdown.js +11 -11
  138. package/dist/l0-layout/block-writer/markdown.test.js +81 -0
  139. package/dist/l0-layout/card/CompactCard.svelte +4 -3
  140. package/dist/l0-layout/card/StackedCard.svelte +87 -0
  141. package/dist/l0-layout/card/StackedCard.svelte.d.ts +9 -0
  142. package/dist/l0-layout/card/StackedCard.svelte.d.ts.map +1 -0
  143. package/dist/l0-layout/card/StackedCard.test.js +29 -0
  144. package/dist/l0-layout/grant/GrantCard.svelte +15 -5
  145. package/dist/l0-layout/grant/GrantCard.svelte.d.ts.map +1 -1
  146. package/dist/l0-layout/index.d.ts +3 -0
  147. package/dist/l0-layout/index.d.ts.map +1 -1
  148. package/dist/l0-layout/index.js +2 -0
  149. package/dist/l0-layout/kanban/KanbanBoard.svelte +246 -29
  150. package/dist/l0-layout/kanban/KanbanBoard.svelte.d.ts +28 -2
  151. package/dist/l0-layout/kanban/KanbanBoard.svelte.d.ts.map +1 -1
  152. package/dist/l0-layout/kanban/KanbanCard.svelte +175 -150
  153. package/dist/l0-layout/kanban/KanbanCard.svelte.d.ts +16 -18
  154. package/dist/l0-layout/kanban/KanbanCard.svelte.d.ts.map +1 -1
  155. package/dist/l0-layout/kanban/KanbanColumn.svelte +152 -78
  156. package/dist/l0-layout/kanban/KanbanColumn.svelte.d.ts +28 -7
  157. package/dist/l0-layout/kanban/KanbanColumn.svelte.d.ts.map +1 -1
  158. package/dist/l0-layout/kanban/index.d.ts +6 -0
  159. package/dist/l0-layout/kanban/index.d.ts.map +1 -0
  160. package/dist/l0-layout/kanban/index.js +3 -0
  161. package/dist/n0-node-graph/Node.svelte +2 -2
  162. package/dist/n0-node-graph/NodePalette.svelte +2 -2
  163. package/dist/n1-flow-canvas/FlowCanvas.svelte +50 -6
  164. package/dist/n1-flow-canvas/FlowCanvas.svelte.d.ts.map +1 -1
  165. package/dist/n1-flow-canvas/graph-state.test.js +69 -0
  166. package/dist/n1-flow-canvas/index.d.ts +2 -0
  167. package/dist/n1-flow-canvas/index.d.ts.map +1 -1
  168. package/dist/n1-flow-canvas/index.js +1 -0
  169. package/dist/n1-flow-canvas/pipeline-adapter.d.ts +37 -0
  170. package/dist/n1-flow-canvas/pipeline-adapter.d.ts.map +1 -0
  171. package/dist/n1-flow-canvas/pipeline-adapter.js +160 -0
  172. package/dist/n1-flow-canvas/utils.test.js +116 -0
  173. package/dist/n2-manifold-disk/ManifoldDisk.svelte +62 -35
  174. package/dist/n2-manifold-disk/ManifoldDisk.svelte.d.ts.map +1 -1
  175. package/dist/n3-force-graph/GraphTooltip.svelte +2 -2
  176. package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte +34 -29
  177. package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte.d.ts.map +1 -1
  178. package/dist/n4-adaptive-manifold/classifier.test.js +104 -0
  179. package/dist/n4-adaptive-manifold/n4-tokens.css +2 -2
  180. package/dist/n4-adaptive-manifold/types.d.ts +3 -0
  181. package/dist/n4-adaptive-manifold/types.d.ts.map +1 -1
  182. package/dist/p0-primitives/ThemeProvider.svelte +38 -18
  183. package/dist/p0-primitives/ThemeProvider.svelte.d.ts +6 -1
  184. package/dist/p0-primitives/ThemeProvider.svelte.d.ts.map +1 -1
  185. package/dist/p0-primitives/canvas-theme.d.ts +33 -1
  186. package/dist/p0-primitives/canvas-theme.d.ts.map +1 -1
  187. package/dist/p0-primitives/canvas-theme.js +82 -17
  188. package/dist/p0-primitives/debug.d.ts +6 -0
  189. package/dist/p0-primitives/debug.d.ts.map +1 -0
  190. package/dist/p0-primitives/debug.js +21 -0
  191. package/dist/p0-primitives/index.d.ts +2 -1
  192. package/dist/p0-primitives/index.d.ts.map +1 -1
  193. package/dist/p0-primitives/index.js +1 -0
  194. package/dist/p0-primitives/theme-context.d.ts +9 -0
  195. package/dist/p0-primitives/theme-context.d.ts.map +1 -0
  196. package/dist/p0-primitives/theme-context.js +8 -0
  197. package/dist/p0-primitives/theme.d.ts.map +1 -1
  198. package/dist/p0-primitives/theme.js +11 -31
  199. package/dist/p0-primitives/tokens/ambient.css +76 -0
  200. package/dist/p0-primitives/tokens/tokens.css +140 -34
  201. package/dist/p0-primitives/utils/index.d.ts +4 -2
  202. package/dist/p0-primitives/utils/index.d.ts.map +1 -1
  203. package/dist/p0-primitives/utils/index.js +1 -0
  204. package/dist/p0-primitives/utils/reveal.d.ts +15 -0
  205. package/dist/p0-primitives/utils/reveal.d.ts.map +1 -0
  206. package/dist/p0-primitives/utils/reveal.js +29 -0
  207. package/dist/p0-primitives/utils/reveal.test.js +95 -0
  208. package/dist/s0-state/SyncStatus.svelte +2 -2
  209. package/dist/s0-state/ThemeStore.svelte.d.ts +3 -2
  210. package/dist/s0-state/ThemeStore.svelte.d.ts.map +1 -1
  211. package/dist/s0-state/ThemeStore.svelte.js +20 -1
  212. package/dist/s0-state/index.d.ts +2 -2
  213. package/dist/s0-state/index.d.ts.map +1 -1
  214. package/dist/s0-state/index.js +3 -0
  215. package/dist/s0-state/modal-stack-store.svelte.d.ts +27 -2
  216. package/dist/s0-state/modal-stack-store.svelte.d.ts.map +1 -1
  217. package/dist/s0-state/modal-stack-store.svelte.js +21 -2
  218. package/dist/showcase/Showcase.svelte +43 -34
  219. package/dist/showcase/Showcase.svelte.d.ts.map +1 -1
  220. package/dist/spatial/BspTilingCanvas.svelte +5 -5
  221. package/dist/spatial/BspTilingSimulation.test.js +88 -0
  222. package/dist/spatial/CameraController.test.js +120 -0
  223. package/dist/spatial/ForceCanvas.svelte +18 -13
  224. package/dist/spatial/ForceCanvas.svelte.d.ts.map +1 -1
  225. package/dist/spatial/ForceSimulation.svelte.d.ts.map +1 -1
  226. package/dist/spatial/ForceSimulation.svelte.js +33 -22
  227. package/dist/spatial/LodRenderer.svelte +14 -1
  228. package/dist/spatial/LodRenderer.svelte.d.ts.map +1 -1
  229. package/dist/spatial/ParticleAssembleMark.svelte +285 -0
  230. package/dist/spatial/ParticleAssembleMark.svelte.d.ts +24 -0
  231. package/dist/spatial/ParticleAssembleMark.svelte.d.ts.map +1 -0
  232. package/dist/spatial/SnapZoomCamera.svelte +23 -13
  233. package/dist/spatial/SnapZoomCamera.svelte.d.ts.map +1 -1
  234. package/dist/spatial/ZoneTiler.svelte +3 -2
  235. package/dist/spatial/ZoneTiler.test.js +90 -0
  236. package/dist/spatial/d3-types.d.ts +31 -0
  237. package/dist/spatial/d3-types.d.ts.map +1 -0
  238. package/dist/spatial/d3-types.js +19 -0
  239. package/dist/spatial/index.js +1 -0
  240. package/dist/spatial/particle-assemble-math.d.ts +22 -0
  241. package/dist/spatial/particle-assemble-math.d.ts.map +1 -0
  242. package/dist/spatial/particle-assemble-math.js +26 -0
  243. package/dist/spatial/particle-assemble-math.test.js +56 -0
  244. package/dist/ssr-import-clean.test.js +37 -0
  245. package/dist/t0-transport/fs.d.ts +12 -0
  246. package/dist/t0-transport/fs.d.ts.map +1 -0
  247. package/dist/t0-transport/fs.js +55 -0
  248. package/dist/t0-transport/index.d.ts +1 -0
  249. package/dist/t0-transport/index.d.ts.map +1 -1
  250. package/dist/t0-transport/index.js +1 -0
  251. package/dist/t0-transport/invoke.d.ts.map +1 -1
  252. package/dist/t0-transport/invoke.js +5 -2
  253. package/dist/t0-transport/quality.d.ts +12 -3
  254. package/dist/t0-transport/quality.d.ts.map +1 -1
  255. package/dist/t0-transport/quality.js +17 -4
  256. package/dist/t0-transport/substrate.svelte.d.ts +27 -0
  257. package/dist/t0-transport/substrate.svelte.d.ts.map +1 -0
  258. package/dist/t0-transport/substrate.svelte.js +55 -0
  259. package/dist/u0-primitives/LockIndicator.svelte +17 -15
  260. package/dist/u0-primitives/VerticalToolbar.svelte +25 -22
  261. package/dist/u0-primitives/accordion/Accordion.svelte +14 -12
  262. package/dist/u0-primitives/accordion/Accordion.svelte.d.ts +0 -7
  263. package/dist/u0-primitives/accordion/Accordion.svelte.d.ts.map +1 -1
  264. package/dist/u0-primitives/accordion/Accordion.test.js +5 -5
  265. package/dist/u0-primitives/animated-icon/AnimatedIcon.svelte +3 -3
  266. package/dist/u0-primitives/animated-icon/AnimatedIcon.test.js +82 -0
  267. package/dist/u0-primitives/avatar/Avatar.svelte +14 -14
  268. package/dist/u0-primitives/avatar/Avatar.test.js +81 -0
  269. package/dist/u0-primitives/badge/Badge.svelte +6 -4
  270. package/dist/u0-primitives/badge/Badge.test.js +10 -10
  271. package/dist/u0-primitives/badge/ValidityBadge.svelte +4 -27
  272. package/dist/u0-primitives/badge/ValidityBadge.test.js +9 -9
  273. package/dist/u0-primitives/button/Button.svelte +18 -13
  274. package/dist/u0-primitives/button/Button.svelte.d.ts +1 -0
  275. package/dist/u0-primitives/button/Button.svelte.d.ts.map +1 -1
  276. package/dist/u0-primitives/button/Button.test.js +11 -11
  277. package/dist/u0-primitives/card/Card.svelte +60 -32
  278. package/dist/u0-primitives/card/Card.svelte.d.ts.map +1 -1
  279. package/dist/u0-primitives/card/Card.test.js +86 -0
  280. package/dist/u0-primitives/command-palette/CommandPalette.svelte +75 -43
  281. package/dist/u0-primitives/command-palette/CommandPalette.svelte.d.ts.map +1 -1
  282. package/dist/u0-primitives/command-palette/CommandPalette.test.js +202 -0
  283. package/dist/u0-primitives/command-palette/commandStore.svelte.d.ts.map +1 -1
  284. package/dist/u0-primitives/command-palette/commandStore.svelte.js +2 -1
  285. package/dist/u0-primitives/dropdown/Dropdown.svelte +20 -25
  286. package/dist/u0-primitives/dropdown/Dropdown.test.js +1 -1
  287. package/dist/u0-primitives/grant-badge/GrantStatusBadge.svelte +2 -2
  288. package/dist/u0-primitives/index.d.ts +8 -0
  289. package/dist/u0-primitives/index.d.ts.map +1 -1
  290. package/dist/u0-primitives/index.js +9 -0
  291. package/dist/u0-primitives/input/Input.svelte +85 -23
  292. package/dist/u0-primitives/input/Input.svelte.d.ts +2 -10
  293. package/dist/u0-primitives/input/Input.svelte.d.ts.map +1 -1
  294. package/dist/u0-primitives/input/Input.test.js +82 -2
  295. package/dist/u0-primitives/live-dot/LiveDot.svelte +56 -0
  296. package/dist/u0-primitives/live-dot/LiveDot.svelte.d.ts +11 -0
  297. package/dist/u0-primitives/live-dot/LiveDot.svelte.d.ts.map +1 -0
  298. package/dist/u0-primitives/live-dot/LiveDot.test.js +41 -0
  299. package/dist/u0-primitives/live-dot/index.d.ts +3 -0
  300. package/dist/u0-primitives/live-dot/index.d.ts.map +1 -0
  301. package/dist/u0-primitives/live-dot/index.js +1 -0
  302. package/dist/u0-primitives/modal/Modal.svelte +64 -38
  303. package/dist/u0-primitives/modal/Modal.svelte.d.ts.map +1 -1
  304. package/dist/u0-primitives/modal/Modal.test.js +63 -15
  305. package/dist/u0-primitives/rsvp/RsvpReader.svelte +8 -8
  306. package/dist/u0-primitives/rsvp/RsvpReader.svelte.d.ts.map +1 -1
  307. package/dist/u0-primitives/spinner/Spinner.svelte +11 -79
  308. package/dist/u0-primitives/spinner/Spinner.svelte.d.ts.map +1 -1
  309. package/dist/u0-primitives/steps/Steps.svelte +20 -21
  310. package/dist/u0-primitives/surface-state/SurfaceState.svelte +190 -0
  311. package/dist/u0-primitives/surface-state/SurfaceState.svelte.d.ts +15 -0
  312. package/dist/u0-primitives/surface-state/SurfaceState.svelte.d.ts.map +1 -0
  313. package/dist/u0-primitives/tabs/Tabs.svelte +13 -11
  314. package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte +94 -0
  315. package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte.d.ts +16 -0
  316. package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte.d.ts.map +1 -0
  317. package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.test.js +48 -0
  318. package/dist/u0-primitives/theme-swatch-group/index.d.ts +3 -0
  319. package/dist/u0-primitives/theme-swatch-group/index.d.ts.map +1 -0
  320. package/dist/u0-primitives/theme-swatch-group/index.js +1 -0
  321. package/dist/u0-primitives/toggle/Toggle.svelte +22 -13
  322. package/dist/u0-primitives/tooltip/Tooltip.svelte +9 -9
  323. package/dist/u0-primitives/tooltip/Tooltip.test.js +12 -12
  324. package/dist/u0-primitives/web-components/button-component.d.ts +5 -1
  325. package/dist/u0-primitives/web-components/button-component.d.ts.map +1 -1
  326. package/dist/u0-primitives/web-components/button-component.js +72 -33
  327. package/dist/u0-primitives/web-components/index.d.ts +3 -0
  328. package/dist/u0-primitives/web-components/index.d.ts.map +1 -0
  329. package/dist/u0-primitives/web-components/index.js +2 -0
  330. package/dist/u0-primitives/web-components/input-component.d.ts +5 -1
  331. package/dist/u0-primitives/web-components/input-component.d.ts.map +1 -1
  332. package/dist/u0-primitives/web-components/input-component.js +56 -39
  333. package/dist/u0-primitives/web-components/web-components.test.js +96 -0
  334. package/dist/u0-primitives/window-frame/WindowFrame.svelte +87 -0
  335. package/dist/u0-primitives/window-frame/WindowFrame.svelte.d.ts +10 -0
  336. package/dist/u0-primitives/window-frame/WindowFrame.svelte.d.ts.map +1 -0
  337. package/dist/u0-primitives/window-frame/WindowFrame.test.js +31 -0
  338. package/dist/u0-primitives/window-frame/index.d.ts +3 -0
  339. package/dist/u0-primitives/window-frame/index.d.ts.map +1 -0
  340. package/dist/u0-primitives/window-frame/index.js +1 -0
  341. package/dist/v0-diagrams/MarkmapDiagram.test.js +49 -0
  342. package/dist/v0-diagrams/MermaidDiagram.svelte +21 -9
  343. package/dist/v0-diagrams/MermaidDiagram.svelte.d.ts.map +1 -1
  344. package/dist/v0-diagrams/MermaidDiagram.test.js +40 -0
  345. package/dist/x0-enchanted-blocks/components/NodepadBlock.svelte +11 -2
  346. package/dist/x0-enchanted-blocks/components/NodepadBlock.svelte.d.ts.map +1 -1
  347. package/package.json +57 -15
  348. package/src/n4-adaptive-manifold/n4-tokens.css +2 -2
  349. package/src/p0-primitives/tokens/ambient.css +76 -0
  350. package/src/p0-primitives/tokens/tokens.css +140 -34
  351. package/src/p0-primitives/tokens/tokens.json +55 -26
  352. package/dist/b0-app-shell/command-bar/CommandBar.svelte.d.ts.map +0 -1
  353. package/dist/fabric/input/CommandBar.svelte.d.ts.map +0 -1
  354. package/dist/stores/vaultStore.svelte +0 -14
  355. package/dist/stores/vaultStore.svelte.d.ts +0 -24
  356. package/dist/stores/vaultStore.svelte.d.ts.map +0 -1
  357. package/dist/tauri/index.d.ts +0 -3
  358. package/dist/tauri/index.d.ts.map +0 -1
  359. package/dist/tauri/index.js +0 -11
@@ -162,20 +162,20 @@
162
162
  .shortcuts-overlay {
163
163
  position: fixed;
164
164
  inset: 0;
165
- background: rgba(0, 0, 0, 0.8);
165
+ background: rgba(0, 0, 0, 0.75);
166
166
  display: flex;
167
167
  align-items: center;
168
168
  justify-content: center;
169
169
  z-index: 10000;
170
- backdrop-filter: blur(4px);
170
+ /* No backdrop-filter: depth via border + contrast only */
171
171
  }
172
172
 
173
173
  .shortcuts-panel {
174
174
  width: min(560px, 90vw);
175
175
  max-height: 80vh;
176
176
  background: var(--color-bg-panel, #222222);
177
- border: 1px solid var(--border-default, #333333);
178
- border-radius: var(--radius-xl, 0.75rem);
177
+ border: var(--border-width-default, 2px) solid var(--border-default, #333333);
178
+ border-radius: 0;
179
179
  display: flex;
180
180
  flex-direction: column;
181
181
  overflow: hidden;
@@ -185,33 +185,35 @@
185
185
  display: flex;
186
186
  align-items: center;
187
187
  justify-content: space-between;
188
- padding: 16px 20px;
189
- border-bottom: 1px solid var(--border-subtle, rgba(255,255,255,0.06));
188
+ padding: var(--ui-pad-y, 5px) var(--ui-pad-x, 8px);
189
+ border-bottom: 1px solid var(--border-default, #333333);
190
190
  }
191
191
 
192
192
  .panel-title {
193
- font-size: 16px;
193
+ font-family: var(--font-mono);
194
+ font-size: var(--ui-label, 10px);
194
195
  font-weight: 600;
195
- color: var(--color-text-primary, #f2efe9);
196
+ letter-spacing: 0.1em;
197
+ text-transform: uppercase;
198
+ color: var(--color-text-secondary, #a09880);
196
199
  margin: 0;
197
200
  }
198
201
 
199
202
  .close-btn {
200
203
  background: none;
201
- border: none;
204
+ border: 1px solid transparent;
202
205
  color: var(--color-text-tertiary, #706858);
203
206
  cursor: pointer;
204
- padding: 4px;
205
- border-radius: var(--radius-sm, 0.25rem);
207
+ padding: 3px;
206
208
  display: flex;
207
209
  align-items: center;
208
210
  justify-content: center;
209
- transition: color 0.15s, background 0.15s;
211
+ transition: color var(--transition-fast, 110ms) linear, border-color var(--transition-fast, 110ms) linear;
210
212
  }
211
213
 
212
214
  .close-btn:hover {
213
- color: var(--color-text-primary, #f2efe9);
214
- background: rgba(255, 255, 255, 0.05);
215
+ color: var(--color-text-primary, #e7e9eb);
216
+ border-color: var(--border-default, #333333);
215
217
  }
216
218
 
217
219
  .search-box {
@@ -242,7 +244,7 @@
242
244
  color: var(--color-text-tertiary, #706858);
243
245
  cursor: pointer;
244
246
  padding: 2px;
245
- border-radius: var(--radius-sm, 0.25rem);
247
+ border-radius: 0;
246
248
  display: flex;
247
249
  align-items: center;
248
250
  justify-content: center;
@@ -292,15 +294,15 @@
292
294
  padding: 10px 12px;
293
295
  background: none;
294
296
  border: 1px solid transparent;
295
- border-radius: var(--radius-md, 0.375rem);
297
+ border-radius: 0;
296
298
  cursor: pointer;
297
299
  text-align: left;
298
300
  transition: background 0.15s, border-color 0.15s;
299
301
  }
300
302
 
301
303
  .shortcut-btn:hover {
302
- background: var(--color-bg-canvas, #1a1a1a);
303
- border-color: var(--border-subtle, rgba(255,255,255,0.06));
304
+ background: var(--color-bg-canvas, #0f1113);
305
+ border-color: var(--border-default, #333333);
304
306
  }
305
307
 
306
308
  .shortcut-keys {
@@ -319,7 +321,7 @@
319
321
  padding: 0 6px;
320
322
  background: var(--color-bg-canvas, #1a1a1a);
321
323
  border: 1px solid var(--border-default, #333333);
322
- border-radius: var(--radius-sm, 0.25rem);
324
+ border-radius: 0;
323
325
  font-family: var(--font-mono, 'JetBrains Mono', monospace);
324
326
  font-size: 11px;
325
327
  font-weight: 500;
@@ -340,7 +342,7 @@
340
342
  font-size: 10px;
341
343
  padding: 2px 6px;
342
344
  background: var(--color-bg-canvas, #1a1a1a);
343
- border-radius: var(--radius-sm, 0.25rem);
345
+ border-radius: 0;
344
346
  color: var(--color-text-tertiary, #706858);
345
347
  }
346
348
 
@@ -380,7 +382,7 @@
380
382
  margin: 0 2px;
381
383
  background: var(--color-bg-panel, #222222);
382
384
  border: 1px solid var(--border-default, #333333);
383
- border-radius: var(--radius-sm, 0.25rem);
385
+ border-radius: 0;
384
386
  font-family: var(--font-mono, 'JetBrains Mono', monospace);
385
387
  font-size: 10px;
386
388
  }
@@ -6,8 +6,8 @@
6
6
  * @package @kos/design-system/fabric/input
7
7
  * @adr 2026-04-12-leap-substrate-refactor-001
8
8
  */
9
- export { default as CommandBar } from './CommandBar.svelte';
10
- export type { Props as CommandBarProps } from './CommandBar.svelte';
9
+ export { default as AppHeaderBar } from './AppHeaderBar.svelte';
10
+ export type { Props as AppHeaderBarProps } from './AppHeaderBar.svelte';
11
11
  export { default as KeyboardShortcuts } from './KeyboardShortcuts.svelte';
12
12
  export type { ShortcutBinding, ShortcutGroup } from './KeyboardShortcuts.svelte';
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fabric/input/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fabric/input/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,YAAY,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
@@ -6,5 +6,5 @@
6
6
  * @package @kos/design-system/fabric/input
7
7
  * @adr 2026-04-12-leap-substrate-refactor-001
8
8
  */
9
- export { default as CommandBar } from './CommandBar.svelte';
9
+ export { default as AppHeaderBar } from './AppHeaderBar.svelte';
10
10
  export { default as KeyboardShortcuts } from './KeyboardShortcuts.svelte';
@@ -238,7 +238,7 @@
238
238
  --panel-border: var(--border-subtle, 1px solid rgba(255, 255, 255, 0.06));
239
239
  --handle-bg: var(--color-bg-inset, #0f0f0f);
240
240
  --handle-hover-bg: var(--color-bg-canvas, #141414);
241
- --accent-color: var(--color-accent, #00ff41);
241
+ --accent-color: var(--color-accent);
242
242
  --transition-duration: 300ms;
243
243
 
244
244
  display: flex;
@@ -290,7 +290,7 @@
290
290
  border-right: var(--panel-border);
291
291
  border-left: var(--panel-border);
292
292
  overflow: hidden;
293
- transition: width var(--transition-duration) cubic-bezier(0.34, 1.56, 0.64, 1);
293
+ transition: width var(--transition-duration) linear;
294
294
  flex-shrink: 0;
295
295
  }
296
296
 
@@ -316,7 +316,7 @@
316
316
  cursor: pointer;
317
317
  user-select: none;
318
318
  position: relative;
319
- transition: background 0.15s ease;
319
+ transition: background var(--transition-fast, 110ms) linear;
320
320
  min-height: 100%;
321
321
  }
322
322
 
@@ -341,25 +341,23 @@
341
341
  width: 2px;
342
342
  height: 64px;
343
343
  background: var(--color-text-muted, #555);
344
- border-radius: var(--shape-border-radius, 1px);
345
- transition: all 0.15s ease;
344
+ transition: background var(--transition-fast, 110ms) linear;
346
345
  flex-shrink: 0;
347
346
  }
348
347
 
349
348
  .panel-handle:hover .panel-handle__bar {
350
- background: var(--color-text-primary, #ccc);
351
- box-shadow: 0 0 4px rgba(255, 255, 255, 0.3);
349
+ background: var(--color-text-secondary, #9aa1a8);
352
350
  }
353
351
 
352
+ /* Expanded/dragging: accent fill on the drag handle bar — functional
353
+ state indicator (open/dragging vs closed), same logic as toggle thumb */
354
354
  .panel-handle--expanded .panel-handle__bar {
355
355
  background: var(--accent-color);
356
- box-shadow: 0 0 6px var(--accent-color);
357
- opacity: 0.6;
356
+ opacity: 0.7;
358
357
  }
359
358
 
360
359
  .collapsible-panel--dragging .panel-handle__bar {
361
360
  background: var(--accent-color);
362
- box-shadow: 0 0 8px var(--accent-color);
363
361
  opacity: 1;
364
362
  }
365
363
 
@@ -1,158 +1,28 @@
1
1
  <script lang="ts">
2
- /**
3
- * KanbanBoard - Fabric Component
4
- *
5
- * Multi-column kanban board with drag-drop support.
6
- * Decoupled from shell stores - uses props/callbacks for all state.
7
- *
8
- * @package @kos/design-system/fabric/layout
9
- * @adr 2026-04-12-leap-substrate-refactor-001
10
- */
11
- import type { ColumnData } from './KanbanColumn.svelte';
12
- import type { CardData } from './KanbanCard.svelte';
13
-
14
- interface ColumnState {
15
- column: ColumnData;
16
- cards: CardData[];
17
- isDropTarget?: boolean;
18
- isCollapsed?: boolean;
19
- }
20
-
21
- export interface Props {
22
- columns: ColumnState[];
23
- onCardMove?: (cardId: string, sourceColumnId: string, targetColumnId: string) => void;
24
- onCardClick?: (card: CardData) => void;
25
- onAddCard?: (columnId: string) => void;
26
- onAddColumn?: () => void;
27
- onColumnMenuClick?: (columnId: string) => void;
28
- title?: string;
29
- }
30
-
31
- let { columns, onCardMove, onCardClick, onAddCard, onAddColumn, onColumnMenuClick, title }: Props = $props();
32
-
33
- let draggedCardId = $state<string | null>(null);
34
- let activeDropColumn = $state<string | null>(null);
35
-
36
- function handleCardDragStart(card: CardData) {
37
- draggedCardId = card.id;
38
- }
39
-
40
- function handleCardDragEnd() {
41
- draggedCardId = null;
42
- activeDropColumn = null;
43
- }
44
-
45
- function handleDragOver(columnId: string) {
46
- if (draggedCardId && columnId !== activeDropColumn) {
47
- activeDropColumn = columnId;
48
- }
49
- }
50
-
51
- function handleDragLeave(columnId: string) {
52
- if (activeDropColumn === columnId) {
53
- activeDropColumn = null;
54
- }
55
- }
56
-
57
- function handleDrop(targetColumnId: string, cardId: string) {
58
- if (!draggedCardId) return;
59
-
60
- const sourceColumn = columns.find(c =>
61
- c.cards.some(card => card.id === cardId)
62
- );
63
-
64
- if (sourceColumn && sourceColumn.column.id !== targetColumnId) {
65
- onCardMove?.(cardId, sourceColumn.column.id, targetColumnId);
66
- }
67
-
68
- draggedCardId = null;
69
- activeDropColumn = null;
70
- }
2
+ import KanbanBoard from '../../l0-layout/kanban/KanbanBoard.svelte';
3
+ import type { Props } from '../../l0-layout/kanban/KanbanBoard.svelte';
4
+
5
+ let {
6
+ columns,
7
+ onCardMove,
8
+ onCardClick,
9
+ onAddCard,
10
+ onAddColumn,
11
+ onColumnMenuClick,
12
+ title,
13
+ header,
14
+ class: className = '',
15
+ }: Props = $props();
71
16
  </script>
72
17
 
73
- {#await import('./KanbanColumn.svelte') then { default: KanbanColumn }}
74
- <div class="kanban-board" role="region" aria-label="{title || 'Kanban board'}">
75
- {#if title}
76
- <header class="board-header">
77
- <h2 class="board-title">{title}</h2>
78
- <button
79
- class="add-column-btn"
80
- onclick={() => onAddColumn?.()}
81
- >
82
- + Add Column
83
- </button>
84
- </header>
85
- {/if}
86
-
87
- <div class="board-content" role="list">
88
- {#each columns as columnState (columnState.column.id)}
89
- <KanbanColumn
90
- column={columnState.column}
91
- cards={columnState.cards}
92
- isDropTarget={activeDropColumn === columnState.column.id}
93
- isCollapsed={columnState.isCollapsed}
94
- onCardClick={onCardClick}
95
- onCardDragStart={handleCardDragStart}
96
- onCardDragEnd={handleCardDragEnd}
97
- onDrop={handleDrop}
98
- onDragOver={handleDragOver}
99
- onDragLeave={handleDragLeave}
100
- onAddCard={onAddCard}
101
- onMenuClick={onColumnMenuClick}
102
- />
103
- {/each}
104
- </div>
105
- </div>
106
- {/await}
107
-
108
- <style>
109
- .kanban-board {
110
- display: flex;
111
- flex-direction: column;
112
- height: 100%;
113
- overflow: hidden;
114
- background: var(--color-bg-root, #111111);
115
- }
116
-
117
- .board-header {
118
- display: flex;
119
- align-items: center;
120
- justify-content: space-between;
121
- padding: 16px 20px;
122
- border-bottom: 1px solid var(--border-subtle, rgba(255,255,255,0.06));
123
- flex-shrink: 0;
124
- }
125
-
126
- .board-title {
127
- font-size: 18px;
128
- font-weight: 600;
129
- color: var(--color-text-primary, #f2efe9);
130
- margin: 0;
131
- }
132
-
133
- .add-column-btn {
134
- padding: 8px 16px;
135
- background: transparent;
136
- border: 1px solid var(--border-default, #333333);
137
- border-radius: var(--radius-md, 0.375rem);
138
- color: var(--color-text-secondary, #a09880);
139
- font-size: 13px;
140
- cursor: pointer;
141
- transition: border-color 0.15s, color 0.15s;
142
- }
143
-
144
- .add-column-btn:hover {
145
- border-color: var(--color-accent, var(--color-accent));
146
- color: var(--color-accent, var(--color-accent));
147
- }
148
-
149
- .board-content {
150
- display: flex;
151
- gap: var(--space-4);
152
- padding: 16px 20px;
153
- overflow-x: auto;
154
- overflow-y: hidden;
155
- flex: 1;
156
- align-items: flex-start;
157
- }
158
- </style>
18
+ <KanbanBoard
19
+ {columns}
20
+ {onCardMove}
21
+ {onCardClick}
22
+ {onAddCard}
23
+ {onAddColumn}
24
+ {onColumnMenuClick}
25
+ {title}
26
+ {header}
27
+ class={className}
28
+ />
@@ -1,29 +1,5 @@
1
- /**
2
- * KanbanBoard - Fabric Component
3
- *
4
- * Multi-column kanban board with drag-drop support.
5
- * Decoupled from shell stores - uses props/callbacks for all state.
6
- *
7
- * @package @kos/design-system/fabric/layout
8
- * @adr 2026-04-12-leap-substrate-refactor-001
9
- */
10
- import type { ColumnData } from './KanbanColumn.svelte';
11
- import type { CardData } from './KanbanCard.svelte';
12
- interface ColumnState {
13
- column: ColumnData;
14
- cards: CardData[];
15
- isDropTarget?: boolean;
16
- isCollapsed?: boolean;
17
- }
18
- export interface Props {
19
- columns: ColumnState[];
20
- onCardMove?: (cardId: string, sourceColumnId: string, targetColumnId: string) => void;
21
- onCardClick?: (card: CardData) => void;
22
- onAddCard?: (columnId: string) => void;
23
- onAddColumn?: () => void;
24
- onColumnMenuClick?: (columnId: string) => void;
25
- title?: string;
26
- }
1
+ import KanbanBoard from '../../l0-layout/kanban/KanbanBoard.svelte';
2
+ import type { Props } from '../../l0-layout/kanban/KanbanBoard.svelte';
27
3
  declare const KanbanBoard: import("svelte").Component<Props, {}, "">;
28
4
  type KanbanBoard = ReturnType<typeof KanbanBoard>;
29
5
  export default KanbanBoard;
@@ -1 +1 @@
1
- {"version":3,"file":"KanbanBoard.svelte.d.ts","sourceRoot":"","sources":["../../../src/fabric/layout/KanbanBoard.svelte.ts"],"names":[],"mappings":"AAGA;;;;;;;;KAQK;AACL,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGlD,UAAU,WAAW;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACtF,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAyEH,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"KanbanBoard.svelte.d.ts","sourceRoot":"","sources":["../../../src/fabric/layout/KanbanBoard.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,WAAW,MAAM,2CAA2C,CAAC;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAC;AAuBvE,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -1,25 +1,140 @@
1
- import { afterEach, describe, it, expect } from 'vitest';
2
- import { cleanup, render } from '@testing-library/svelte';
1
+ import { cleanup, fireEvent, render } from '@testing-library/svelte';
2
+ import { afterEach, describe, it, expect, vi } from 'vitest';
3
3
  import KanbanBoard from './KanbanBoard.svelte';
4
- // This component uses `{#await import('./KanbanColumn.svelte')}` for lazy loading.
5
- // In tests the dynamic import doesn't resolve in jsdom, so we test what renders
6
- // synchronously: an error boundary slot. When that's absent the component renders
7
- // nothing until the promise resolves.
8
4
  describe('KanbanBoard', () => {
9
5
  afterEach(() => cleanup());
10
6
  it('exports a valid Svelte component', () => {
11
7
  expect(KanbanBoard).toBeDefined();
12
8
  expect(typeof KanbanBoard).toBe('function');
13
9
  });
14
- it('initializes draggedCardId and activeDropColumn state', async () => {
15
- const { component } = render(KanbanBoard, {
10
+ it('renders columns with title', async () => {
11
+ const { container } = render(KanbanBoard, {
16
12
  props: {
17
13
  columns: [
18
14
  { column: { id: 'c1', title: 'Backlog' }, cards: [{ id: 'card1', title: 'Task 1' }] },
15
+ { column: { id: 'c2', title: 'In Progress' }, cards: [] },
19
16
  ],
20
17
  },
21
18
  });
22
- // Component mounted without crashing — even if {#await} hasn't resolved yet
23
- expect(component).toBeDefined();
19
+ expect(container.querySelector('.ds-kanban-board')).not.toBeNull();
20
+ expect(container.querySelectorAll('.ds-kanban-column').length).toBe(2);
21
+ expect(container.querySelector('.ds-kanban-column-title')?.textContent).toBe('Backlog');
22
+ });
23
+ it('renders board title when provided', () => {
24
+ const { container } = render(KanbanBoard, {
25
+ props: {
26
+ title: 'My Board',
27
+ columns: [],
28
+ },
29
+ });
30
+ expect(container.querySelector('.ds-kanban-board-title')?.textContent).toBe('My Board');
31
+ });
32
+ it('renders cards within columns', () => {
33
+ const { container } = render(KanbanBoard, {
34
+ props: {
35
+ columns: [
36
+ {
37
+ column: { id: 'c1', title: 'Todo' },
38
+ cards: [
39
+ { id: 'card1', title: 'First Task', priority: 'high' },
40
+ { id: 'card2', title: 'Second Task', priority: 'low' },
41
+ ],
42
+ },
43
+ ],
44
+ },
45
+ });
46
+ const titles = container.querySelectorAll('.ds-kanban-card-title');
47
+ expect(titles.length).toBe(2);
48
+ expect(titles[0]?.textContent).toBe('First Task');
49
+ expect(titles[1]?.textContent).toBe('Second Task');
50
+ });
51
+ it('renders priority indicator bars', () => {
52
+ const { container } = render(KanbanBoard, {
53
+ props: {
54
+ columns: [
55
+ {
56
+ column: { id: 'c1', title: 'Todo' },
57
+ cards: [{ id: 'card1', title: 'Urgent Task', priority: 'urgent' }],
58
+ },
59
+ ],
60
+ },
61
+ });
62
+ expect(container.querySelector('.ds-kanban-priority-bar')).not.toBeNull();
63
+ });
64
+ it('renders tags when provided', () => {
65
+ const { container } = render(KanbanBoard, {
66
+ props: {
67
+ columns: [
68
+ {
69
+ column: { id: 'c1', title: 'Todo' },
70
+ cards: [{ id: 'card1', title: 'Tagged', tags: ['alpha', 'beta', 'gamma', 'delta'] }],
71
+ },
72
+ ],
73
+ },
74
+ });
75
+ const tags = container.querySelectorAll('.ds-kanban-card-tag');
76
+ expect(tags.length).toBe(3); // max 3 shown
77
+ expect(container.querySelector('.ds-kanban-card-tag-more')?.textContent).toBe('+1');
78
+ });
79
+ it('moves a card with keyboard move mode', async () => {
80
+ const onCardMove = vi.fn();
81
+ const onCardClick = vi.fn();
82
+ const { container } = render(KanbanBoard, {
83
+ props: {
84
+ columns: [
85
+ { column: { id: 'todo', title: 'Todo' }, cards: [{ id: 'task-1', title: 'Task 1' }] },
86
+ { column: { id: 'doing', title: 'In Progress' }, cards: [] },
87
+ ],
88
+ onCardMove,
89
+ onCardClick,
90
+ },
91
+ });
92
+ const card = container.querySelector('.ds-kanban-card');
93
+ const interactiveCard = container.querySelector('.ds-card');
94
+ expect(card).not.toBeNull();
95
+ expect(interactiveCard).not.toBeNull();
96
+ await fireEvent.keyDown(interactiveCard, { key: ' ' });
97
+ expect(container.querySelector('.ds-kanban-move-toast')).not.toBeNull();
98
+ expect(card.classList.contains('is-selected')).toBe(true);
99
+ await fireEvent.keyDown(interactiveCard, { key: 'ArrowRight' });
100
+ expect(container.querySelector('.ds-kanban-move-target')?.textContent).toBe('→ In Progress');
101
+ await fireEvent.keyDown(interactiveCard, { key: 'Enter' });
102
+ expect(onCardMove).toHaveBeenCalledWith('task-1', 'todo', 'doing');
103
+ expect(onCardClick).not.toHaveBeenCalled();
104
+ expect(container.querySelector('.ds-kanban-move-toast')).toBeNull();
105
+ });
106
+ it('cancels keyboard move mode with Escape', async () => {
107
+ const onCardMove = vi.fn();
108
+ const { container } = render(KanbanBoard, {
109
+ props: {
110
+ columns: [
111
+ { column: { id: 'todo', title: 'Todo' }, cards: [{ id: 'task-1', title: 'Task 1' }] },
112
+ { column: { id: 'doing', title: 'In Progress' }, cards: [] },
113
+ ],
114
+ onCardMove,
115
+ },
116
+ });
117
+ const card = container.querySelector('.ds-kanban-card');
118
+ const interactiveCard = container.querySelector('.ds-card');
119
+ expect(card).not.toBeNull();
120
+ expect(interactiveCard).not.toBeNull();
121
+ await fireEvent.keyDown(interactiveCard, { key: ' ' });
122
+ await fireEvent.keyDown(interactiveCard, { key: 'ArrowRight' });
123
+ await fireEvent.keyDown(interactiveCard, { key: 'Escape' });
124
+ expect(onCardMove).not.toHaveBeenCalled();
125
+ expect(container.querySelector('.ds-kanban-move-toast')).toBeNull();
126
+ });
127
+ it('renders move-toast in keyboard move mode', () => {
128
+ // Move mode is internal state — verify the toast element exists in DOM when triggered
129
+ // This is tested via the board's reactive rendering; we verify the CSS class exists
130
+ const { container } = render(KanbanBoard, {
131
+ props: {
132
+ columns: [
133
+ { column: { id: 'c1', title: 'Todo' }, cards: [{ id: 'card1', title: 'Task' }] },
134
+ ],
135
+ },
136
+ });
137
+ // Toast should not be visible initially
138
+ expect(container.querySelector('.ds-kanban-move-toast')).toBeNull();
24
139
  });
25
140
  });