@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
package/dist/index.d.ts CHANGED
@@ -7,7 +7,6 @@ export * from './p0-primitives';
7
7
  export * from './u0-primitives';
8
8
  export * from './l0-layout';
9
9
  export * from './s0-lifecycle';
10
- export * from './s0-state';
11
10
  export * from './t0-transport';
12
11
  export * from './f0-forms';
13
12
  export * from './d0-data-viz';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,YAAY,CAAC;AAEpB,OAAO,4CAA4C,CAAC;AACpD,OAAO,+BAA+B,CAAC;AACvC,OAAO,6BAA6B,CAAC;AAGrC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,aAAa,CAAC;AAE5B,cAAc,gBAAgB,CAAC;AAE/B,cAAc,YAAY,CAAC;AAE3B,cAAc,gBAAgB,CAAC;AAE/B,cAAc,YAAY,CAAC;AAE3B,cAAc,eAAe,CAAC;AAE9B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,aAAa,CAAC;AAE5B,cAAc,YAAY,CAAC;AAG3B,YAAY,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,YAAY,CAAC;AAGpB,OAAO,4CAA4C,CAAC;AACpD,OAAO,+BAA+B,CAAC;AACvC,OAAO,6BAA6B,CAAC;AAGrC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,aAAa,CAAC;AAE5B,cAAc,gBAAgB,CAAC;AAK/B,cAAc,gBAAgB,CAAC;AAE/B,cAAc,YAAY,CAAC;AAE3B,cAAc,eAAe,CAAC;AAE9B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,YAAY,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@
6
6
  // CSS imports
7
7
  import './base.css';
8
8
  /* NOTE: control-room.css is opt-in via data-theme="control-room" — import it explicitly if needed */
9
+ /* NOTE: ambient.css is opt-in decorative tokens/utilities for marketing/docs surfaces — import it explicitly if needed */
9
10
  import './p0-primitives/tokens/validity-tokens.css';
10
11
  import './n0-node-graph/n0-tokens.css';
11
12
  import './d0-data-viz/d0-tokens.css';
@@ -20,7 +21,8 @@ export * from './l0-layout';
20
21
  // S0 Lifecycle — Component lifecycle phases (constrain → layout → interact → render)
21
22
  export * from './s0-lifecycle';
22
23
  // S0 State — Store primitives (Svelte 5 runes)
23
- export * from './s0-state';
24
+ // Subpath only: consumers must import via @stephen-netu/design-system/s0-state
25
+ // to avoid module-scope singleton side effects from the root barrel.
24
26
  // T0 Transport — Tauri IPC
25
27
  export * from './t0-transport';
26
28
  // F0 Forms — Form primitives
@@ -29,9 +31,11 @@ export * from './f0-forms';
29
31
  export * from './d0-data-viz';
30
32
  // N0 Node Graph — Visual composition primitives (SVG DAG, <100 nodes)
31
33
  export * from './n0-node-graph';
32
- // Epistemic types — Assay, Allay, Expert, Provenance
34
+ // Epistemic types — public LEAP plugin contracts for assay, allay,
35
+ // expert identity, and provenance metadata.
33
36
  export * from './epistemic';
34
- // Platform — cross-boundary protocols (HUD, etc.)
37
+ // Platform protocols public LEAP shell/plugin boundary metadata,
38
+ // including HUD contribution and indicator contracts.
35
39
  export * from './platform';
36
40
  export { EDGE_REVEAL_STAGGER_MS } from './n1-flow-canvas/types.js';
37
41
  export { nodeHitTest, domEventToCanvasCoords, parseMentionEdges, parseGroupedSequenceEdges } from './n1-flow-canvas/utils.js';
@@ -52,7 +52,7 @@
52
52
  justify-content: center;
53
53
  cursor: ns-resize;
54
54
  background: var(--color-bg-panel, #222);
55
- border-top: 1px solid var(--border-color, #333);
55
+ border-top: 1px solid var(--color-border, #333);
56
56
  flex-shrink: 0;
57
57
  user-select: none;
58
58
  transition: background 0.1s, border-top-color 0.1s;
@@ -60,8 +60,8 @@
60
60
 
61
61
  .section-splitter:hover,
62
62
  .section-splitter--active {
63
- background: color-mix(in srgb, var(--accent-primary, var(--color-accent)) 10%, var(--color-bg-panel, #222));
64
- border-top-color: var(--accent-primary, var(--color-accent));
63
+ background: color-mix(in srgb, var(--color-accent) 10%, var(--color-bg-panel, #222));
64
+ border-top-color: var(--color-accent);
65
65
  }
66
66
 
67
67
  /* Three-line grip — center line via element, top/bottom via box-shadow */
@@ -77,7 +77,7 @@
77
77
 
78
78
  .section-splitter:hover .section-splitter__grip,
79
79
  .section-splitter--active .section-splitter__grip {
80
- background: var(--accent-primary, var(--color-accent));
81
- box-shadow: 0 -4px 0 var(--accent-primary, var(--color-accent)), 0 4px 0 var(--accent-primary, var(--color-accent));
80
+ background: var(--color-accent);
81
+ box-shadow: 0 -4px 0 var(--color-accent), 0 4px 0 var(--color-accent);
82
82
  }
83
83
  </style>
@@ -95,7 +95,8 @@
95
95
  {/if}
96
96
  </div>
97
97
 
98
- <style>
98
+ <!-- svelte-ignore css_unused_selector -->
99
+ <style>
99
100
  .ds-block-content {
100
101
  flex: 1;
101
102
  min-height: 0;
@@ -125,40 +126,40 @@
125
126
  min-height: 2em;
126
127
  }
127
128
 
128
- /* Markdown rendered styles — scoped under :global for {@html} content */
129
- .ds-block-rendered :global(.md-h) {
129
+ /* Markdown rendered styles — scoped descendants for {@html} content */
130
+ .ds-block-rendered .md-h {
130
131
  margin: 12px 0 6px 0;
131
132
  font-weight: 600;
132
133
  color: var(--color-text-primary, #e8e0d0);
133
134
  }
134
135
 
135
- .ds-block-rendered :global(.md-h1) { font-size: 1.4em; }
136
- .ds-block-rendered :global(.md-h2) { font-size: 1.2em; }
137
- .ds-block-rendered :global(.md-h3) { font-size: 1.1em; }
138
- .ds-block-rendered :global(.md-h4),
139
- .ds-block-rendered :global(.md-h5),
140
- .ds-block-rendered :global(.md-h6) { font-size: 1em; }
136
+ .ds-block-rendered .md-h1 { font-size: 1.4em; }
137
+ .ds-block-rendered .md-h2 { font-size: 1.2em; }
138
+ .ds-block-rendered .md-h3 { font-size: 1.1em; }
139
+ .ds-block-rendered .md-h4,
140
+ .ds-block-rendered .md-h5,
141
+ .ds-block-rendered .md-h6 { font-size: 1em; }
141
142
 
142
- .ds-block-rendered :global(.md-p) {
143
+ .ds-block-rendered .md-p {
143
144
  margin: 6px 0;
144
145
  }
145
146
 
146
- .ds-block-rendered :global(.md-ul) {
147
+ .ds-block-rendered .md-ul {
147
148
  margin: 6px 0;
148
149
  padding-left: 20px;
149
150
  list-style: none;
150
151
  }
151
152
 
152
- .ds-block-rendered :global(.md-li) {
153
+ .ds-block-rendered .md-li {
153
154
  margin: 3px 0;
154
155
  }
155
156
 
156
- .ds-block-rendered :global(.md-li)::before {
157
+ .ds-block-rendered .md-li::before {
157
158
  content: '• ';
158
159
  color: var(--color-accent, var(--color-accent));
159
160
  }
160
161
 
161
- .ds-block-rendered :global(.md-bq) {
162
+ .ds-block-rendered .md-bq {
162
163
  margin: 6px 0;
163
164
  padding: 6px 10px;
164
165
  border-left: 3px solid var(--color-accent, var(--color-accent));
@@ -166,17 +167,17 @@
166
167
  font-style: italic;
167
168
  }
168
169
 
169
- .ds-block-rendered :global(.md-hr) {
170
+ .ds-block-rendered .md-hr {
170
171
  border: none;
171
172
  border-top: 1px solid var(--color-border, #333);
172
173
  margin: 12px 0;
173
174
  }
174
175
 
175
- .ds-block-rendered :global(.md-gap) {
176
+ .ds-block-rendered .md-gap {
176
177
  height: 6px;
177
178
  }
178
179
 
179
- .ds-block-rendered :global(.md-code) {
180
+ .ds-block-rendered .md-code {
180
181
  padding: 1px 5px;
181
182
  background: rgba(0, 0, 0, 0.3);
182
183
  border-radius: var(--radius-sm, 3px);
@@ -185,29 +186,29 @@
185
186
  color: var(--color-accent, var(--color-accent));
186
187
  }
187
188
 
188
- .ds-block-rendered :global(strong) {
189
+ .ds-block-rendered strong {
189
190
  font-weight: 600;
190
191
  color: var(--color-text-primary, #e8e0d0);
191
192
  }
192
193
 
193
- .ds-block-rendered :global(em) {
194
+ .ds-block-rendered em {
194
195
  font-style: italic;
195
196
  color: var(--color-text-muted, #a09880);
196
197
  }
197
198
 
198
- .ds-block-rendered :global(del) {
199
+ .ds-block-rendered del {
199
200
  text-decoration: line-through;
200
201
  color: var(--color-text-muted, #a09880);
201
202
  }
202
203
 
203
- .ds-block-rendered :global(.md-wiki) {
204
+ .ds-block-rendered .md-wiki {
204
205
  color: var(--color-accent, var(--color-accent));
205
206
  text-decoration: underline;
206
207
  text-decoration-style: dotted;
207
208
  cursor: pointer;
208
209
  }
209
210
 
210
- .ds-block-rendered :global(.md-wiki:hover) {
211
+ .ds-block-rendered .md-wiki:hover {
211
212
  text-decoration-style: solid;
212
213
  }
213
214
  </style>
@@ -1 +1 @@
1
- {"version":3,"file":"BlockContent.svelte.d.ts","sourceRoot":"","sources":["../../../src/l0-layout/block-writer/BlockContent.svelte.ts"],"names":[],"mappings":"AAME,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAoFH,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"BlockContent.svelte.d.ts","sourceRoot":"","sources":["../../../src/l0-layout/block-writer/BlockContent.svelte.ts"],"names":[],"mappings":"AAME,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAqFH,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { afterEach, describe, expect, it, vi } from 'vitest';
2
+ import { cleanup, fireEvent, render } from '@testing-library/svelte';
3
+ import BlockContent from './BlockContent.svelte';
4
+ const markdown = [
5
+ '# Heading',
6
+ '',
7
+ '> quote',
8
+ '',
9
+ '- alpha',
10
+ '- beta',
11
+ '',
12
+ '---',
13
+ '',
14
+ 'Use `code` and [[wiki|label]].'
15
+ ].join('\n');
16
+ describe('BlockContent', () => {
17
+ afterEach(() => cleanup());
18
+ it('renders the contenteditable editor when editing', () => {
19
+ const { container } = render(BlockContent, { isEditing: true, content: '' });
20
+ expect(container.querySelector('.ds-block-editable')).not.toBeNull();
21
+ expect(container.querySelector('.ds-block-editable')?.getAttribute('contenteditable')).toBe('true');
22
+ });
23
+ it('renders markdown as scoped rendered content when not editing', () => {
24
+ const { container } = render(BlockContent, { content: markdown });
25
+ expect(container.querySelector('.ds-block-rendered')).not.toBeNull();
26
+ expect(container.querySelector('.md-h1')?.textContent).toBe('Heading');
27
+ expect(Array.from(container.querySelectorAll('.md-li')).map(node => node.textContent)).toEqual(['alpha', 'beta']);
28
+ expect(container.querySelector('.md-bq')?.textContent).toBe('quote');
29
+ expect(container.querySelector('.md-hr')).not.toBeNull();
30
+ expect(container.querySelector('.md-code')?.textContent).toBe('code');
31
+ expect(container.querySelector('.md-wiki')?.textContent).toBe('label');
32
+ });
33
+ it('emits content changes from the editor', async () => {
34
+ const handleChange = vi.fn();
35
+ const { container } = render(BlockContent, { isEditing: true, onContentChange: handleChange });
36
+ const editor = container.querySelector('.ds-block-editable');
37
+ await fireEvent.input(editor, { target: { innerText: 'new content' } });
38
+ expect(handleChange).toHaveBeenCalledWith('new content');
39
+ });
40
+ it('blurs the editor when Escape is pressed', async () => {
41
+ const { container } = render(BlockContent, { isEditing: true });
42
+ const editor = container.querySelector('.ds-block-editable');
43
+ editor.focus();
44
+ await fireEvent.keyDown(editor, { key: 'Escape' });
45
+ expect(document.activeElement).not.toBe(editor);
46
+ });
47
+ });
@@ -128,10 +128,12 @@
128
128
  overflow: hidden;
129
129
  }
130
130
 
131
- .ds-tiny-indicator.ds-phase-seed { border-left: 3px solid var(--color-phase-seed, #8fbc8f); }
132
- .ds-tiny-indicator.ds-phase-sprout { border-left: 3px solid var(--color-phase-sprout, #90ee90); }
133
- .ds-tiny-indicator.ds-phase-flower { border-left: 3px solid var(--color-phase-flower, #ffa500); }
134
- .ds-tiny-indicator.ds-phase-scelle { border-left: 3px solid var(--color-phase-scelle, #ff4500); }
131
+ /* Phase colors follow PHASE_CONFIG (block-writer-types.ts) */
132
+ .ds-tiny-indicator.ds-phase-seed { border-left: 3px solid var(--color-warning); }
133
+ .ds-tiny-indicator.ds-phase-sprout { border-left: 3px solid var(--color-info); }
134
+ .ds-tiny-indicator.ds-phase-go { border-left: 3px solid var(--color-success); }
135
+ .ds-tiny-indicator.ds-phase-freeze { border-left: 3px solid var(--color-accent); }
136
+ .ds-tiny-indicator.ds-phase-compost { border-left: 3px solid var(--color-neutral); }
135
137
 
136
138
  .ds-tiny-id {
137
139
  font-family: var(--font-mono, monospace);
@@ -41,6 +41,17 @@ export function renderMarkdown(md) {
41
41
  const lines = md.split('\n');
42
42
  const processed = [];
43
43
  for (const line of lines) {
44
+ // Blockquotes — match raw line before escaping
45
+ const bq = line.match(/^> (.+)$/);
46
+ if (bq) {
47
+ processed.push(`<blockquote class="md-bq">${renderInline(escapeHtml(bq[1]))}</blockquote>`);
48
+ continue;
49
+ }
50
+ // Horizontal rule — match raw line before escaping
51
+ if (/^[-*]{3,}$/.test(line.trim())) {
52
+ processed.push('<hr class="md-hr">');
53
+ continue;
54
+ }
44
55
  const escaped = escapeHtml(line);
45
56
  // Headings
46
57
  const hm = escaped.match(/^(#{1,6}) (.+)$/);
@@ -60,17 +71,6 @@ export function renderMarkdown(md) {
60
71
  processed.push(`<li class="md-li">${renderInline(ol[2])}</li>`);
61
72
  continue;
62
73
  }
63
- // Blockquotes
64
- const bq = escaped.match(/^> (.+)$/);
65
- if (bq) {
66
- processed.push(`<blockquote class="md-bq">${renderInline(bq[1])}</blockquote>`);
67
- continue;
68
- }
69
- // Horizontal rule
70
- if (/^[-*]{3,}$/.test(escaped.trim())) {
71
- processed.push('<hr class="md-hr">');
72
- continue;
73
- }
74
74
  // Empty line
75
75
  if (escaped.trim() === '') {
76
76
  processed.push('<div class="md-gap"></div>');
@@ -0,0 +1,81 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { renderMarkdown, renderInlineMarkdown } from './markdown';
3
+ describe('block-writer/renderMarkdown', () => {
4
+ it('returns empty string for empty input', () => {
5
+ expect(renderMarkdown('')).toBe('');
6
+ });
7
+ it('renders headings h1–h6', () => {
8
+ expect(renderMarkdown('# H1')).toContain('<h1 class="md-h md-h1">H1</h1>');
9
+ expect(renderMarkdown('## H2')).toContain('<h2 class="md-h md-h2">H2</h2>');
10
+ expect(renderMarkdown('###### H6')).toContain('<h6 class="md-h md-h6">H6</h6>');
11
+ });
12
+ it('renders blockquotes', () => {
13
+ const html = renderMarkdown('> important quote');
14
+ expect(html).toContain('<blockquote class="md-bq">important quote</blockquote>');
15
+ });
16
+ it('escapes HTML entities inside blockquotes', () => {
17
+ const html = renderMarkdown('<script>alert(1)</script>');
18
+ expect(html).not.toContain('<script>');
19
+ expect(html).toContain('&lt;script&gt;');
20
+ });
21
+ it('renders unordered list items grouped in ul', () => {
22
+ const html = renderMarkdown('- a\n- b\n- c');
23
+ expect(html).toContain('<ul class="md-ul">');
24
+ expect(html).toContain('<li class="md-li">a</li>');
25
+ expect(html).toContain('<li class="md-li">b</li>');
26
+ expect(html).toContain('<li class="md-li">c</li>');
27
+ });
28
+ it('renders ordered list items grouped in ul', () => {
29
+ const html = renderMarkdown('1. first\n2. second');
30
+ expect(html).toContain('<ul class="md-ul">');
31
+ expect(html).toContain('<li class="md-li">first</li>');
32
+ expect(html).toContain('<li class="md-li">second</li>');
33
+ });
34
+ it('renders horizontal rules', () => {
35
+ expect(renderMarkdown('---')).toContain('<hr class="md-hr">');
36
+ expect(renderMarkdown('***')).toContain('<hr class="md-hr">');
37
+ });
38
+ it('renders paragraphs for plain text', () => {
39
+ const html = renderMarkdown('just some text');
40
+ expect(html).toContain('<p class="md-p">just some text</p>');
41
+ });
42
+ it('renders inline code', () => {
43
+ const html = renderMarkdown('Use `console.log` for debugging');
44
+ expect(html).toContain('<code class="md-code">console.log</code>');
45
+ });
46
+ it('renders wikilinks', () => {
47
+ const html = renderMarkdown('See [[Target Page]]');
48
+ expect(html).toContain('<span class="md-wiki">Target Page</span>');
49
+ });
50
+ it('renders labeled wikilinks', () => {
51
+ const html = renderMarkdown('See [[Target Page|display text]]');
52
+ expect(html).toContain('<span class="md-wiki">display text</span>');
53
+ });
54
+ it('renders bold and italic', () => {
55
+ expect(renderMarkdown('**bold**')).toContain('<strong>bold</strong>');
56
+ expect(renderMarkdown('*italic*')).toContain('<em>italic</em>');
57
+ });
58
+ it('renders strikethrough', () => {
59
+ expect(renderMarkdown('~~deleted~~')).toContain('<del>deleted</del>');
60
+ });
61
+ it('renders empty lines as gap divs', () => {
62
+ expect(renderMarkdown('')).toBe('');
63
+ const html = renderMarkdown('before\n\nafter');
64
+ expect(html).toContain('<div class="md-gap"></div>');
65
+ });
66
+ });
67
+ describe('block-writer/renderInlineMarkdown', () => {
68
+ it('returns empty string for empty input', () => {
69
+ expect(renderInlineMarkdown('')).toBe('');
70
+ });
71
+ it('renders inline markdown without block elements', () => {
72
+ const html = renderInlineMarkdown('**bold** and `code`');
73
+ expect(html).toContain('<strong>bold</strong>');
74
+ expect(html).toContain('<code class="md-code">code</code>');
75
+ });
76
+ it('escapes HTML entities', () => {
77
+ const html = renderInlineMarkdown('<em>tag</em>');
78
+ expect(html).not.toContain('<em>tag</em>');
79
+ expect(html).toContain('&lt;em&gt;tag&lt;/em&gt;');
80
+ });
81
+ });
@@ -78,11 +78,11 @@
78
78
  </Card>
79
79
 
80
80
  <style>
81
- .ds-compact-card {
81
+ :global(.ds-compact-card) {
82
82
  transition: box-shadow var(--transition-normal);
83
83
  }
84
84
 
85
- .ds-compact-card:hover {
85
+ :global(.ds-compact-card:hover) {
86
86
  box-shadow: var(--shadow-card-hover);
87
87
  }
88
88
 
@@ -104,11 +104,12 @@
104
104
  }
105
105
 
106
106
  /* Hide overflow preview text when not hovered */
107
- .ds-compact-card:hover .ds-card-preview {
107
+ :global(.ds-compact-card:hover) .ds-card-preview {
108
108
  max-height: 4.5rem; /* ~3 lines */
109
109
  overflow: hidden;
110
110
  text-overflow: ellipsis;
111
111
  display: -webkit-box;
112
112
  -webkit-line-clamp: 3;
113
+ line-clamp: 3;
113
114
  }
114
115
  </style>
@@ -0,0 +1,87 @@
1
+ <script lang="ts">
2
+ import Card from '../../u0-primitives/card/Card.svelte';
3
+ import type { Snippet } from 'svelte';
4
+
5
+ export interface Props {
6
+ class?: string;
7
+ children?: Snippet;
8
+ }
9
+
10
+ let {
11
+ class: className = '',
12
+ children
13
+ }: Props = $props();
14
+ </script>
15
+
16
+ <div class="ds-stacked-card {className}">
17
+ <div class="ds-stacked-card-sheet sheet-back-2" aria-hidden="true"></div>
18
+ <div class="ds-stacked-card-sheet sheet-back-1" aria-hidden="true"></div>
19
+ <div class="ds-stacked-card-sheet sheet-front">
20
+ <Card variant="elevated">
21
+ {#if children}
22
+ {@render children()}
23
+ {/if}
24
+ </Card>
25
+ </div>
26
+ </div>
27
+
28
+ <style>
29
+ .ds-stacked-card {
30
+ position: relative;
31
+ /* The rotated back sheets are calibrated for a compact card, not a
32
+ full-bleed block — at very wide containers the rotation angle
33
+ translates to a large vertical skew. Cap width by default; override
34
+ via the class prop if a different size is genuinely wanted. */
35
+ max-width: 30rem;
36
+ }
37
+
38
+ .ds-stacked-card-sheet {
39
+ border: var(--border-width-thin) solid var(--border-default);
40
+ }
41
+
42
+ .sheet-back-1,
43
+ .sheet-back-2 {
44
+ position: absolute;
45
+ inset: 0;
46
+ z-index: 0;
47
+ transition: transform var(--transition-normal);
48
+ }
49
+
50
+ .sheet-back-1 {
51
+ background: var(--color-accent-subtle);
52
+ border-color: var(--color-accent-muted);
53
+ transform: rotate(-2deg) translate(10px, 12px);
54
+ }
55
+
56
+ .sheet-back-2 {
57
+ background: var(--overlay-white-04);
58
+ transform: rotate(2deg) translate(-8px, 10px);
59
+ }
60
+
61
+ .sheet-front {
62
+ position: relative;
63
+ z-index: 1;
64
+ box-shadow: var(--shadow-sm);
65
+ transition: transform var(--transition-normal), box-shadow var(--transition-normal);
66
+ }
67
+
68
+ .ds-stacked-card:hover .sheet-back-1 {
69
+ transform: rotate(-3deg) translate(14px, 16px);
70
+ }
71
+
72
+ .ds-stacked-card:hover .sheet-back-2 {
73
+ transform: rotate(3deg) translate(-11px, 14px);
74
+ }
75
+
76
+ .ds-stacked-card:hover .sheet-front {
77
+ transform: translateY(-3px);
78
+ }
79
+
80
+ @media (prefers-reduced-motion: reduce) {
81
+ .sheet-back-1,
82
+ .sheet-back-2,
83
+ .sheet-front {
84
+ transition: none;
85
+ }
86
+ }
87
+ </style>
@@ -0,0 +1,9 @@
1
+ import type { Snippet } from 'svelte';
2
+ export interface Props {
3
+ class?: string;
4
+ children?: Snippet;
5
+ }
6
+ declare const StackedCard: import("svelte").Component<Props, {}, "">;
7
+ type StackedCard = ReturnType<typeof StackedCard>;
8
+ export default StackedCard;
9
+ //# sourceMappingURL=StackedCard.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackedCard.svelte.d.ts","sourceRoot":"","sources":["../../../src/l0-layout/card/StackedCard.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGpC,MAAM,WAAW,KAAK;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA4BH,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { afterEach, describe, it, expect } from 'vitest';
2
+ import { cleanup, render } from '@testing-library/svelte';
3
+ import { createRawSnippet } from 'svelte';
4
+ import StackedCard from './StackedCard.svelte';
5
+ const textSnippet = (text) => createRawSnippet(() => ({ render: () => `<span>${text}</span>` }));
6
+ describe('StackedCard', () => {
7
+ afterEach(() => cleanup());
8
+ it('renders three stacked sheets', () => {
9
+ const { container } = render(StackedCard);
10
+ expect(container.querySelectorAll('.ds-stacked-card-sheet')).toHaveLength(3);
11
+ });
12
+ it('hides the decorative back sheets from assistive tech', () => {
13
+ const { container } = render(StackedCard);
14
+ expect(container.querySelector('.sheet-back-1')?.getAttribute('aria-hidden')).toBe('true');
15
+ expect(container.querySelector('.sheet-back-2')?.getAttribute('aria-hidden')).toBe('true');
16
+ });
17
+ it('renders children inside the front sheet', () => {
18
+ const { container, getByText } = render(StackedCard, {
19
+ children: textSnippet('Evidence panel')
20
+ });
21
+ const front = container.querySelector('.sheet-front');
22
+ expect(front).not.toBeNull();
23
+ expect(getByText('Evidence panel')).toBeDefined();
24
+ });
25
+ it('renders an underlying Card in the front sheet', () => {
26
+ const { container } = render(StackedCard);
27
+ expect(container.querySelector('.sheet-front .ds-card')).not.toBeNull();
28
+ });
29
+ });
@@ -47,15 +47,23 @@
47
47
  let cardClasses = $derived(
48
48
  `ds-grant-card ${className}${isInteractive ? ' is-interactive' : ''}${selected ? ' is-selected' : ''}`
49
49
  );
50
+ let cardAttrs = $derived(isInteractive ? {
51
+ role: 'button',
52
+ tabindex: 0,
53
+ onclick,
54
+ onkeydown: (e: KeyboardEvent) => {
55
+ if (e.key === 'Enter' || e.key === ' ') {
56
+ e.preventDefault();
57
+ onclick?.(new MouseEvent('click'));
58
+ }
59
+ },
60
+ 'aria-pressed': selected
61
+ } : {});
50
62
  </script>
51
63
 
52
64
  <div
53
65
  class={cardClasses}
54
- role={isInteractive ? 'button' : 'region'}
55
- tabindex={isInteractive ? 0 : undefined}
56
- onclick={onclick}
57
- onkeydown={isInteractive ? (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onclick?.(new MouseEvent('click')); } } : undefined}
58
- aria-pressed={isInteractive ? selected : undefined}
66
+ {...cardAttrs}
59
67
  >
60
68
  <div class="ds-grant-card-header">
61
69
  <h3 class="ds-grant-card-title" title={title}>{title}</h3>
@@ -129,6 +137,7 @@
129
137
  flex: 1;
130
138
  display: -webkit-box;
131
139
  -webkit-line-clamp: 2;
140
+ line-clamp: 2;
132
141
  -webkit-box-orient: vertical;
133
142
  overflow: hidden;
134
143
  }
@@ -156,6 +165,7 @@
156
165
  margin: 0;
157
166
  display: -webkit-box;
158
167
  -webkit-line-clamp: 3;
168
+ line-clamp: 3;
159
169
  -webkit-box-orient: vertical;
160
170
  overflow: hidden;
161
171
  line-height: 1.4;
@@ -1 +1 @@
1
- {"version":3,"file":"GrantCard.svelte.d.ts","sourceRoot":"","sources":["../../../src/l0-layout/grant/GrantCard.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIpC,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuEH,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"GrantCard.svelte.d.ts","sourceRoot":"","sources":["../../../src/l0-layout/grant/GrantCard.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIpC,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAmFH,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -1,9 +1,12 @@
1
+ export { default as StackedCard } from './card/StackedCard.svelte';
1
2
  export { default as WorkspaceLayout } from './workspace/WorkspaceLayout.svelte';
2
3
  export { default as ChatViewLayout } from './chat-view/ChatViewLayout.svelte';
3
4
  export { default as KanbanViewLayout } from './kanban/KanbanViewLayout.svelte';
4
5
  export { default as KanbanBoard } from './kanban/KanbanBoard.svelte';
5
6
  export { default as KanbanColumn } from './kanban/KanbanColumn.svelte';
6
7
  export { default as KanbanCard } from './kanban/KanbanCard.svelte';
8
+ export type { ColumnData } from './kanban/KanbanColumn.svelte';
9
+ export type { CardData } from './kanban/KanbanCard.svelte';
7
10
  export { default as SnapPanel } from './SnapPanel.svelte';
8
11
  export { default as VirtualGrid } from './VirtualGrid.svelte';
9
12
  export type { PanelPosition, PanelMode, PanelSnap } from './SnapPanel.svelte';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/l0-layout/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGnE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9E,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,SAAS,EACT,UAAU,GACX,MAAM,qBAAqB,CAAC;AAG7B,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGhF,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGtE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/l0-layout/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAE/E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9E,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,SAAS,EACT,UAAU,GACX,MAAM,qBAAqB,CAAC;AAG7B,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGhF,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGtE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,iCAAiC,CAAC"}
@@ -1,7 +1,9 @@
1
1
  // L0 Layout — Layout composition templates
2
+ export { default as StackedCard } from './card/StackedCard.svelte';
2
3
  export { default as WorkspaceLayout } from './workspace/WorkspaceLayout.svelte';
3
4
  export { default as ChatViewLayout } from './chat-view/ChatViewLayout.svelte';
4
5
  export { default as KanbanViewLayout } from './kanban/KanbanViewLayout.svelte';
6
+ // Kanban — canonical l0-layout surface (F-24)
5
7
  export { default as KanbanBoard } from './kanban/KanbanBoard.svelte';
6
8
  export { default as KanbanColumn } from './kanban/KanbanColumn.svelte';
7
9
  export { default as KanbanCard } from './kanban/KanbanCard.svelte';