@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
@@ -1,122 +1,169 @@
1
1
  <script lang="ts">
2
+ /**
3
+ * KanbanColumn — Merged canonical component.
4
+ *
5
+ * Combines fabric's ColumnState props pattern with l0's Snippet children,
6
+ * Badge composition, WIP limit, and ds-kanban-* CSS classes.
7
+ *
8
+ * @package @kos/design-system/fabric/layout
9
+ */
2
10
  import type { Snippet } from 'svelte';
3
- import Badge from '../../u0-primitives/badge/Badge.svelte';
11
+ import type { CardData } from './KanbanCard.svelte';
4
12
 
5
- interface Props {
13
+ export interface ColumnData {
6
14
  id: string;
7
15
  title: string;
8
- count?: number;
16
+ color?: string;
9
17
  wipLimit?: number;
10
- isOverLimit?: boolean;
18
+ }
19
+
20
+ export interface Props {
21
+ column: ColumnData;
22
+ isDropTarget?: boolean;
23
+ isCollapsed?: boolean;
24
+ isMoveTarget?: boolean;
25
+ onCardClick?: (card: CardData) => void;
26
+ onCardDragStart?: (card: CardData) => void;
27
+ onCardDragEnd?: () => void;
28
+ onDrop?: (targetColumnId: string, cardId: string) => void;
29
+ onDragOver?: (columnId: string) => void;
30
+ onDragLeave?: (columnId: string) => void;
31
+ onAddCard?: (columnId: string) => void;
32
+ onMenuClick?: (columnId: string) => void;
33
+ onCardKeyDown?: (e: KeyboardEvent, cardId: string, sourceColumnId: string) => void;
34
+ moveMode?: boolean;
35
+ children?: Snippet;
36
+ actions?: Snippet;
11
37
  class?: string;
12
- ondragover?: (e: DragEvent) => void;
13
- ondragleave?: (e: DragEvent) => void;
14
- ondrop?: (e: DragEvent) => void;
15
- children?: Snippet; // The KanbanCards go here
16
- actions?: Snippet; // Additional header actions (e.g. + button)
17
38
  }
18
39
 
19
40
  let {
20
- id,
21
- title,
22
- count = 0,
23
- wipLimit,
24
- isOverLimit = false,
25
- class: className = '',
26
- ondragover,
27
- ondragleave,
28
- ondrop,
41
+ column,
42
+ isDropTarget = false,
43
+ isCollapsed = false,
44
+ isMoveTarget = false,
45
+ onCardClick,
46
+ onCardDragStart,
47
+ onCardDragEnd,
48
+ onDrop,
49
+ onDragOver,
50
+ onDragLeave,
51
+ onAddCard,
52
+ onMenuClick,
53
+ onCardKeyDown,
54
+ moveMode = false,
29
55
  children,
30
- actions
56
+ actions,
57
+ class: className = '',
31
58
  }: Props = $props();
32
59
 
33
60
  let isDragTarget = $state(false);
34
61
 
35
- // Derived state for WIP limit
36
- let overLimit = $derived(isOverLimit || (wipLimit !== undefined && count > wipLimit));
37
-
38
62
  function handleDragOver(e: DragEvent) {
39
- e.preventDefault(); // Necessary to allow dropping
63
+ e.preventDefault();
40
64
  if (e.dataTransfer) {
41
65
  e.dataTransfer.dropEffect = 'move';
42
66
  }
43
67
  isDragTarget = true;
44
- ondragover?.(e);
68
+ onDragOver?.(column.id);
45
69
  }
46
70
 
47
71
  function handleDragLeave(e: DragEvent) {
48
72
  isDragTarget = false;
49
- ondragleave?.(e);
73
+ onDragLeave?.(column.id);
50
74
  }
51
75
 
52
76
  function handleDrop(e: DragEvent) {
53
77
  e.preventDefault();
54
78
  isDragTarget = false;
55
- ondrop?.(e);
79
+ const cardId = e.dataTransfer?.getData('text/plain');
80
+ if (cardId) {
81
+ onDrop?.(column.id, cardId);
82
+ }
56
83
  }
57
84
  </script>
58
85
 
59
- <div
86
+ <div
60
87
  class="ds-kanban-column {className}"
61
- class:is-over-limit={overLimit}
62
- data-column-id={id}
88
+ class:is-move-target={isMoveTarget}
89
+ data-column-id={column.id}
63
90
  >
64
91
  <header class="ds-kanban-column-header">
65
92
  <div class="ds-kanban-column-title-group">
66
- <h3 class="ds-kanban-column-title">{title}</h3>
67
- <Badge
68
- variant={overLimit ? 'status' : 'outline'}
69
- color={overLimit ? 'error' : 'neutral'}
70
- size="sm"
71
- >
72
- {count} {#if wipLimit}/ {wipLimit}{/if}
73
- </Badge>
93
+ {#if column.color}
94
+ <span
95
+ class="ds-kanban-column-color"
96
+ style="background: {column.color}"
97
+ ></span>
98
+ {/if}
99
+ <h3 class="ds-kanban-column-title">{column.title}</h3>
74
100
  </div>
75
101
 
76
- {#if actions}
77
- <div class="ds-kanban-column-actions">
102
+ <div class="ds-kanban-column-actions">
103
+ {#if actions}
78
104
  {@render actions()}
79
- </div>
80
- {/if}
81
- </header>
82
-
83
- <div
84
- class="ds-kanban-column-content"
85
- class:is-drag-target={isDragTarget}
86
- role="region"
87
- aria-label={`${title} column`}
88
- ondragover={handleDragOver}
89
- ondragleave={handleDragLeave}
90
- ondrop={handleDrop}
91
- >
92
- <div class="ds-kanban-column-scroll-area">
93
- {#if children}
94
- {@render children()}
105
+ {/if}
106
+ {#if onAddCard}
107
+ <button
108
+ class="ds-kanban-column-add-btn"
109
+ onclick={() => onAddCard?.(column.id)}
110
+ title="Add card"
111
+ aria-label={`Add card to ${column.title}`}
112
+ >
113
+ +
114
+ </button>
115
+ {/if}
116
+ {#if onMenuClick}
117
+ <button
118
+ class="ds-kanban-column-menu-btn"
119
+ onclick={() => onMenuClick?.(column.id)}
120
+ title="Column menu"
121
+ aria-label={`Menu for ${column.title}`}
122
+ >
123
+
124
+ </button>
95
125
  {/if}
96
126
  </div>
127
+ </header>
128
+
129
+ {#if !isCollapsed}
130
+ <div
131
+ class="ds-kanban-column-content"
132
+ class:is-drag-target={isDropTarget || isDragTarget}
133
+ role="region"
134
+ aria-label={`${column.title} column`}
135
+ ondragover={handleDragOver}
136
+ ondragleave={handleDragLeave}
137
+ ondrop={handleDrop}
138
+ >
139
+ <div class="ds-kanban-column-scroll-area">
140
+ {#if children}
141
+ {@render children()}
142
+ {/if}
143
+ </div>
97
144
 
98
- <!-- Drop indicator overlay -->
99
- <div class="ds-kanban-drop-indicator"></div>
100
- </div>
145
+ <div class="ds-kanban-drop-indicator"></div>
146
+ </div>
147
+ {/if}
101
148
  </div>
102
149
 
103
150
  <style>
104
151
  .ds-kanban-column {
105
152
  display: flex;
106
153
  flex-direction: column;
107
- min-width: 320px;
108
- max-width: 360px;
154
+ min-width: 18.75rem;
155
+ max-width: 22.5rem;
109
156
  height: 100%;
110
157
  background: var(--color-bg-panel);
111
- border-radius: var(--radius-lg);
112
- border: 1px solid var(--border-default);
158
+ border-radius: var(--radius-lg, 0.5rem);
159
+ border: var(--border-width-thin) solid var(--border-default);
113
160
  flex-shrink: 0;
114
- transition: border-color var(--transition-normal);
161
+ transition: border-color var(--transition-normal, 0.2s);
115
162
  }
116
163
 
117
- .ds-kanban-column.is-over-limit {
118
- border-color: rgba(166, 94, 94, 0.4);
119
- box-shadow: 0 0 0 1px rgba(166, 94, 94, 0.1) inset;
164
+ .ds-kanban-column.is-move-target {
165
+ border-color: var(--color-accent);
166
+ box-shadow: 0 0 0 var(--border-width-thin) var(--color-accent);
120
167
  }
121
168
 
122
169
  .ds-kanban-column-header {
@@ -124,13 +171,21 @@
124
171
  align-items: center;
125
172
  justify-content: space-between;
126
173
  padding: var(--space-4);
127
- border-bottom: 1px solid var(--border-subtle);
174
+ border-bottom: var(--border-width-thin) solid var(--border-subtle);
175
+ flex-shrink: 0;
128
176
  }
129
177
 
130
178
  .ds-kanban-column-title-group {
131
179
  display: flex;
132
180
  align-items: center;
133
- gap: var(--space-3);
181
+ gap: var(--space-2);
182
+ }
183
+
184
+ .ds-kanban-column-color {
185
+ width: var(--space-2);
186
+ height: var(--space-2);
187
+ border-radius: 50%;
188
+ flex-shrink: 0;
134
189
  }
135
190
 
136
191
  .ds-kanban-column-title {
@@ -143,7 +198,29 @@
143
198
  .ds-kanban-column-actions {
144
199
  display: flex;
145
200
  align-items: center;
146
- gap: var(--space-2);
201
+ gap: var(--space-1);
202
+ }
203
+
204
+ .ds-kanban-column-add-btn,
205
+ .ds-kanban-column-menu-btn {
206
+ display: flex;
207
+ align-items: center;
208
+ justify-content: center;
209
+ background: transparent;
210
+ border: none;
211
+ color: var(--color-text-tertiary);
212
+ padding: var(--space-1);
213
+ border-radius: var(--radius-sm, 0.25rem);
214
+ cursor: pointer;
215
+ font-size: var(--text-base);
216
+ line-height: 1;
217
+ transition: color 0.15s, background 0.15s;
218
+ }
219
+
220
+ .ds-kanban-column-add-btn:hover,
221
+ .ds-kanban-column-menu-btn:hover {
222
+ color: var(--color-text-secondary);
223
+ background: var(--color-bg-canvas);
147
224
  }
148
225
 
149
226
  .ds-kanban-column-content {
@@ -151,9 +228,8 @@
151
228
  flex: 1;
152
229
  display: flex;
153
230
  flex-direction: column;
154
- min-height: 100px;
155
- background: transparent;
156
- transition: background var(--transition-fast);
231
+ min-height: 5rem;
232
+ transition: background var(--transition-fast, 0.15s);
157
233
  }
158
234
 
159
235
  .ds-kanban-column-scroll-area {
@@ -165,9 +241,8 @@
165
241
  height: 100%;
166
242
  }
167
243
 
168
- /* Custom scrollbar for column */
169
244
  .ds-kanban-column-scroll-area::-webkit-scrollbar {
170
- width: 6px;
245
+ width: var(--size-divider);
171
246
  }
172
247
  .ds-kanban-column-scroll-area::-webkit-scrollbar-thumb {
173
248
  background: rgba(255, 255, 255, 0.1);
@@ -177,19 +252,18 @@
177
252
  background: transparent;
178
253
  }
179
254
 
180
- /* Drag Target State */
181
255
  .ds-kanban-column-content.is-drag-target {
182
- background: var(--color-accent-faint); /* Very subtle brass tint */
256
+ background: var(--color-accent-faint, rgba(128,128,128,0.05));
183
257
  }
184
258
 
185
259
  .ds-kanban-drop-indicator {
186
260
  position: absolute;
187
261
  inset: var(--space-3);
188
- border: 2px dashed var(--color-accent);
262
+ border: var(--border-width-default) dashed var(--color-accent);
189
263
  border-radius: var(--radius-md);
190
264
  opacity: 0;
191
265
  pointer-events: none;
192
- transition: opacity var(--transition-fast);
266
+ transition: opacity var(--transition-fast, 0.15s);
193
267
  }
194
268
 
195
269
  .ds-kanban-column-content.is-drag-target .ds-kanban-drop-indicator {
@@ -1,16 +1,37 @@
1
+ /**
2
+ * KanbanColumn — Merged canonical component.
3
+ *
4
+ * Combines fabric's ColumnState props pattern with l0's Snippet children,
5
+ * Badge composition, WIP limit, and ds-kanban-* CSS classes.
6
+ *
7
+ * @package @kos/design-system/fabric/layout
8
+ */
1
9
  import type { Snippet } from 'svelte';
2
- interface Props {
10
+ import type { CardData } from './KanbanCard.svelte';
11
+ export interface ColumnData {
3
12
  id: string;
4
13
  title: string;
5
- count?: number;
14
+ color?: string;
6
15
  wipLimit?: number;
7
- isOverLimit?: boolean;
8
- class?: string;
9
- ondragover?: (e: DragEvent) => void;
10
- ondragleave?: (e: DragEvent) => void;
11
- ondrop?: (e: DragEvent) => void;
16
+ }
17
+ export interface Props {
18
+ column: ColumnData;
19
+ isDropTarget?: boolean;
20
+ isCollapsed?: boolean;
21
+ isMoveTarget?: boolean;
22
+ onCardClick?: (card: CardData) => void;
23
+ onCardDragStart?: (card: CardData) => void;
24
+ onCardDragEnd?: () => void;
25
+ onDrop?: (targetColumnId: string, cardId: string) => void;
26
+ onDragOver?: (columnId: string) => void;
27
+ onDragLeave?: (columnId: string) => void;
28
+ onAddCard?: (columnId: string) => void;
29
+ onMenuClick?: (columnId: string) => void;
30
+ onCardKeyDown?: (e: KeyboardEvent, cardId: string, sourceColumnId: string) => void;
31
+ moveMode?: boolean;
12
32
  children?: Snippet;
13
33
  actions?: Snippet;
34
+ class?: string;
14
35
  }
15
36
  declare const KanbanColumn: import("svelte").Component<Props, {}, "">;
16
37
  type KanbanColumn = ReturnType<typeof KanbanColumn>;
@@ -1 +1 @@
1
- {"version":3,"file":"KanbanColumn.svelte.d.ts","sourceRoot":"","sources":["../../../src/l0-layout/kanban/KanbanColumn.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIpC,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA8EH,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"KanbanColumn.svelte.d.ts","sourceRoot":"","sources":["../../../src/l0-layout/kanban/KanbanColumn.svelte.ts"],"names":[],"mappings":"AAGA;;;;;;;KAOK;AACL,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACvC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAiGH,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { default as KanbanBoard } from './KanbanBoard.svelte';
2
+ export { default as KanbanColumn } from './KanbanColumn.svelte';
3
+ export { default as KanbanCard } from './KanbanCard.svelte';
4
+ export type { ColumnData } from './KanbanColumn.svelte';
5
+ export type { CardData } from './KanbanCard.svelte';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/l0-layout/kanban/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { default as KanbanBoard } from './KanbanBoard.svelte';
2
+ export { default as KanbanColumn } from './KanbanColumn.svelte';
3
+ export { default as KanbanCard } from './KanbanCard.svelte';
@@ -243,7 +243,7 @@
243
243
  }
244
244
 
245
245
  .n0-node-label {
246
- fill: var(--color-text, #e8e0d0);
246
+ fill: var(--color-text-primary, #e8e0d0);
247
247
  font-family: system-ui, sans-serif;
248
248
  font-size: 13px;
249
249
  font-weight: 500;
@@ -262,7 +262,7 @@
262
262
  .n0-node-body {
263
263
  overflow: hidden;
264
264
  padding: 8px;
265
- color: var(--color-text, #e8e0d0);
265
+ color: var(--color-text-primary, #e8e0d0);
266
266
  font-family: system-ui, sans-serif;
267
267
  font-size: 13px;
268
268
  }
@@ -156,7 +156,7 @@
156
156
  border-right: 1px solid var(--n0-node-border);
157
157
  overflow: hidden;
158
158
  font-family: var(--font-mono, monospace);
159
- color: var(--color-text, #e8e0d0);
159
+ color: var(--color-text-primary, #e8e0d0);
160
160
  }
161
161
 
162
162
  .n0-palette-search {
@@ -172,7 +172,7 @@
172
172
  background: var(--n0-canvas-bg);
173
173
  border: 1px solid var(--n0-node-border);
174
174
  border-radius: var(--radius-sm, 4px);
175
- color: var(--color-text, #e8e0d0);
175
+ color: var(--color-text-primary, #e8e0d0);
176
176
  font-family: inherit;
177
177
  font-size: 0.8rem;
178
178
  outline: none;
@@ -7,10 +7,11 @@
7
7
  import { Canvas, Layer } from 'svelte-canvas';
8
8
  import { getArrow } from 'perfect-arrows';
9
9
  import type { GraphSnapshot, GraphStateApi } from './types.js';
10
+ import type { CanvasTheme } from '../p0-primitives/canvas-theme';
10
11
  import { GraphState } from './graph-state.svelte.js';
11
12
  import { runLayout } from './layout.js';
12
13
  import { EDGE_REVEAL_STAGGER_MS } from './types.js';
13
- import { getCanvasTheme } from '../p0-primitives/canvas-theme';
14
+ import { getCanvasTheme } from '../p0-primitives/canvas-theme';
14
15
 
15
16
  // ── Props ────────────────────────────────────────────────────────────────────
16
17
 
@@ -89,6 +90,18 @@
89
90
 
90
91
  const NODE_RADIUS = 4;
91
92
  const FONT = '12px var(--font-mono, monospace)';
93
+ const BADGE_FONT = '10px var(--font-mono, monospace)';
94
+
95
+ function statusColors(status: unknown, theme: CanvasTheme) {
96
+ switch (status) {
97
+ case 'Running': return { fill: theme.quaternion.j + '22', stroke: theme.quaternion.j, label: theme.quaternion.j };
98
+ case 'Passed': return { fill: theme.quaternion.j + '18', stroke: theme.quaternion.j, label: theme.quaternion.j };
99
+ case 'Failed': return { fill: theme.severity.critical + '22', stroke: theme.severity.critical, label: theme.severity.critical };
100
+ case 'Crashed': return { fill: theme.severity.critical + '22', stroke: theme.severity.critical, label: theme.severity.critical };
101
+ case 'Skipped': return { fill: theme.node, stroke: theme.severity.minor, label: theme.severity.minor };
102
+ default: return { fill: theme.node, stroke: theme.nodeBorder, label: theme.nodeText };
103
+ }
104
+ }
92
105
 
93
106
  // ── Render ──────────────────────────────────────────────────────────────────
94
107
 
@@ -165,10 +178,12 @@
165
178
 
166
179
  const isFocus = node.id === focusId;
167
180
  const { x, y, width: w, height: h } = pos;
181
+ const status = node.data?.['status'];
182
+ const { fill, stroke, label: labelColor } = statusColors(status, COLORS);
168
183
 
169
184
  // Node body
170
- context.fillStyle = isFocus ? COLORS.focus : COLORS.node;
171
- context.strokeStyle = COLORS.nodeBorder;
185
+ context.fillStyle = isFocus ? COLORS.focus : fill;
186
+ context.strokeStyle = isFocus ? COLORS.focus : stroke;
172
187
  context.lineWidth = isFocus ? 2 : 1;
173
188
 
174
189
  context.beginPath();
@@ -177,14 +192,43 @@
177
192
  context.stroke();
178
193
 
179
194
  // Label
180
- context.fillStyle = COLORS.nodeText;
195
+ context.fillStyle = isFocus ? '#000' : labelColor;
181
196
  context.font = FONT;
182
197
  context.textAlign = 'center';
183
198
  context.textBaseline = 'middle';
184
- // Truncate if needed
185
199
  const maxWidth = w - 16;
186
- const label = node.label.length > 18 ? node.label.slice(0, 16) + '…' : node.label;
200
+ const label = node.label.length > 20 ? node.label.slice(0, 18) + '…' : node.label;
187
201
  context.fillText(label, x + w / 2, y + h / 2, maxWidth);
202
+
203
+ // Error indicator
204
+ if (node.data?.['error']) {
205
+ context.fillStyle = COLORS.severity.critical;
206
+ context.font = '11px var(--font-mono, monospace)';
207
+ context.textAlign = 'right';
208
+ context.textBaseline = 'top';
209
+ context.fillText('⚠', x + w - 4, y + 4);
210
+ }
211
+
212
+ // Attempt badge (when > 1)
213
+ const attempt = node.data?.['attempt'];
214
+ if (typeof attempt === 'number' && attempt > 1) {
215
+ const badge = `#${attempt}`;
216
+ context.font = BADGE_FONT;
217
+ const bw = context.measureText(badge).width + 8;
218
+ const bh = 14;
219
+ const bx = x + w - bw - 4;
220
+ const by = y + h - bh - 4;
221
+
222
+ context.fillStyle = COLORS.accentRamp.solid;
223
+ context.beginPath();
224
+ context.roundRect(bx, by, bw, bh, 3);
225
+ context.fill();
226
+
227
+ context.fillStyle = '#000';
228
+ context.textAlign = 'center';
229
+ context.textBaseline = 'middle';
230
+ context.fillText(badge, bx + bw / 2, by + bh / 2);
231
+ }
188
232
  }
189
233
  }
190
234
  </script>
@@ -1 +1 @@
1
- {"version":3,"file":"FlowCanvas.svelte.d.ts","sourceRoot":"","sources":["../../src/n1-flow-canvas/FlowCanvas.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAS7D,UAAU,KAAK;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8LH,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"FlowCanvas.svelte.d.ts","sourceRoot":"","sources":["../../src/n1-flow-canvas/FlowCanvas.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAU7D,UAAU,KAAK;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA0OH,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { GraphState } from './graph-state.svelte';
3
+ beforeEach(() => {
4
+ vi.useFakeTimers();
5
+ });
6
+ afterEach(() => {
7
+ vi.useRealTimers();
8
+ });
9
+ describe('n1-flow-canvas/GraphState', () => {
10
+ it('initializes with empty positions', () => {
11
+ const gs = new GraphState();
12
+ expect(gs.positions.size).toBe(0);
13
+ expect(gs.bfsOrder).toEqual([]);
14
+ });
15
+ it('applyLayout sets positions and bfsOrder', () => {
16
+ const gs = new GraphState();
17
+ const positions = new Map([
18
+ ['n1', { id: 'n1', x: 10, y: 20, width: 100, height: 50 }],
19
+ ['n2', { id: 'n2', x: 200, y: 300, width: 80, height: 40 }],
20
+ ]);
21
+ gs.applyLayout({ positions, bfsOrder: ['n1', 'n2'] });
22
+ vi.advanceTimersByTime(5000);
23
+ expect(gs.positions.size).toBe(2);
24
+ expect(gs.bfsOrder).toEqual(['n1', 'n2']);
25
+ });
26
+ it('setFocusCenter updates focusCenterId', () => {
27
+ const gs = new GraphState();
28
+ gs.setFocusCenter('n1');
29
+ expect(gs.focusCenterId).toBe('n1');
30
+ });
31
+ it('setLayoutRoot updates layoutRootId', () => {
32
+ const gs = new GraphState();
33
+ gs.setLayoutRoot('n1');
34
+ expect(gs.layoutRootId).toBe('n1');
35
+ });
36
+ it('setLayoutRoot calls onLayoutRootChange callback', () => {
37
+ const gs = new GraphState();
38
+ const callback = vi.fn();
39
+ gs.onLayoutRootChange = callback;
40
+ gs.setLayoutRoot('n1');
41
+ expect(callback).toHaveBeenCalledWith('n1');
42
+ });
43
+ it('destroy cancels animation', () => {
44
+ const gs = new GraphState();
45
+ const positions = new Map([
46
+ ['n1', { id: 'n1', x: 10, y: 20, width: 100, height: 50 }],
47
+ ]);
48
+ gs.applyLayout({ positions, bfsOrder: ['n1'] });
49
+ gs.destroy();
50
+ // Should not throw
51
+ vi.advanceTimersByTime(5000);
52
+ });
53
+ it('new applyLayout replaces previous positions', () => {
54
+ const gs = new GraphState();
55
+ const positions1 = new Map([
56
+ ['n1', { id: 'n1', x: 10, y: 20, width: 100, height: 50 }],
57
+ ]);
58
+ gs.applyLayout({ positions: positions1, bfsOrder: ['n1'] });
59
+ vi.advanceTimersByTime(5000);
60
+ const positions2 = new Map([
61
+ ['n2', { id: 'n2', x: 50, y: 60, width: 80, height: 40 }],
62
+ ]);
63
+ gs.applyLayout({ positions: positions2, bfsOrder: ['n2'] });
64
+ vi.advanceTimersByTime(5000);
65
+ expect(gs.positions.size).toBe(1);
66
+ expect(gs.positions.has('n2')).toBe(true);
67
+ expect(gs.positions.has('n1')).toBe(false);
68
+ });
69
+ });
@@ -3,4 +3,6 @@ export { EDGE_REVEAL_STAGGER_MS } from './types.js';
3
3
  export { default as FlowCanvas } from './FlowCanvas.svelte';
4
4
  export { GraphState } from './graph-state.svelte';
5
5
  export { nodeHitTest, domEventToCanvasCoords, parseMentionEdges, parseGroupedSequenceEdges } from './utils.js';
6
+ export { pipelineStateToSnapshot, createEmptyPipelineSnapshot, PIPELINE_STAGE_NAMES, } from './pipeline-adapter.js';
7
+ export type { PipelineState, PipelineStageData, PipelineStatus, PipelineTermination, } from './pipeline-adapter.js';
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/n1-flow-canvas/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/n1-flow-canvas/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAC/G,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
@@ -4,3 +4,4 @@ export { EDGE_REVEAL_STAGGER_MS } from './types.js';
4
4
  export { default as FlowCanvas } from './FlowCanvas.svelte';
5
5
  export { GraphState } from './graph-state.svelte';
6
6
  export { nodeHitTest, domEventToCanvasCoords, parseMentionEdges, parseGroupedSequenceEdges } from './utils.js';
7
+ export { pipelineStateToSnapshot, createEmptyPipelineSnapshot, PIPELINE_STAGE_NAMES, } from './pipeline-adapter.js';
@@ -0,0 +1,37 @@
1
+ import type { GraphSnapshot } from './types.js';
2
+ export interface PipelineTermination {
3
+ reason: string;
4
+ final_tokens: number;
5
+ }
6
+ export interface PipelineStageData {
7
+ id: string;
8
+ name: string;
9
+ status: PipelineStatus;
10
+ attempt: number;
11
+ selected_model: string | null;
12
+ termination: PipelineTermination | null;
13
+ artifact_path: string | null;
14
+ error: string | null;
15
+ locked_by: string | null;
16
+ started_at: string | null;
17
+ completed_at: string | null;
18
+ }
19
+ export type PipelineStatus = 'Pending' | 'Running' | 'Passed' | 'Failed' | 'Skipped' | 'Crashed';
20
+ export interface PipelineState {
21
+ run_id: string;
22
+ task_id: string;
23
+ requested_id: string;
24
+ base_main_sha: string | null;
25
+ prior_tos_status: string | null;
26
+ worktree_path: string | null;
27
+ stages: PipelineStageData[];
28
+ remediation_count: number;
29
+ max_remediation: number;
30
+ locked_by: string;
31
+ created_at: string;
32
+ updated_at: string;
33
+ }
34
+ export declare const PIPELINE_STAGE_NAMES: string[];
35
+ export declare function pipelineStateToSnapshot(state: PipelineState): GraphSnapshot;
36
+ export declare function createEmptyPipelineSnapshot(): GraphSnapshot;
37
+ //# sourceMappingURL=pipeline-adapter.d.ts.map