@dfosco/storyboard-core 4.2.0-beta.3 → 4.2.0

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 (419) hide show
  1. package/commandpalette.config.json +109 -24
  2. package/dist/storyboard-ui.css +1 -1
  3. package/dist/storyboard-ui.js +16711 -27239
  4. package/dist/storyboard-ui.js.map +1 -1
  5. package/dist/tailwind.css +1 -1
  6. package/package.json +5 -2
  7. package/scaffold/agents/prompt-agent.agent.md +181 -0
  8. package/scaffold/agents/terminal-agent.agent.md +351 -0
  9. package/scaffold/codex/config.toml +246 -0
  10. package/scaffold/manifest.json +5 -10
  11. package/scaffold/skills/canvas/SKILL.md +5 -4
  12. package/scaffold/skills/ship/SKILL.md +1 -1
  13. package/scaffold/storyboard.config.json +11 -1
  14. package/src/ActionMenuButton.jsx +103 -0
  15. package/src/AutosyncMenuButton.css +67 -0
  16. package/src/AutosyncMenuButton.jsx +242 -0
  17. package/src/BranchSelect.jsx +29 -0
  18. package/src/BranchSelect.module.css +30 -0
  19. package/src/CanvasAgentsMenu.jsx +89 -0
  20. package/src/CanvasCreateMenu.jsx +611 -0
  21. package/src/CanvasSnap.css +27 -0
  22. package/src/CanvasSnap.jsx +51 -0
  23. package/src/CanvasUndoRedo.css +36 -0
  24. package/src/CanvasUndoRedo.jsx +62 -0
  25. package/src/CanvasZoomControl.css +53 -0
  26. package/src/CanvasZoomControl.jsx +49 -0
  27. package/src/CanvasZoomToFit.css +18 -0
  28. package/src/CanvasZoomToFit.jsx +26 -0
  29. package/src/CommandMenu.css +8 -0
  30. package/src/CommandMenu.jsx +287 -0
  31. package/src/CommandPalette.jsx +35 -0
  32. package/src/CommandPaletteTrigger.jsx +25 -0
  33. package/src/CommentsMenuButton.jsx +40 -0
  34. package/src/CoreUIBar.css +47 -0
  35. package/src/CoreUIBar.jsx +858 -0
  36. package/src/CreateMenuButton.jsx +117 -0
  37. package/src/HideChromeTrigger.jsx +40 -0
  38. package/src/InspectorPanel.css +109 -0
  39. package/src/InspectorPanel.jsx +632 -0
  40. package/src/PwaInstallBanner.css +42 -0
  41. package/src/PwaInstallBanner.jsx +124 -0
  42. package/src/SidePanel.jsx +261 -0
  43. package/src/ThemeMenuButton.jsx +139 -0
  44. package/src/autosync/server.js +202 -5
  45. package/src/autosync/server.test.js +111 -0
  46. package/src/canvas/__tests__/agent-integration.test.js +596 -0
  47. package/src/canvas/__tests__/helpers/browser.js +95 -0
  48. package/src/canvas/__tests__/helpers/canvas-api.js +129 -0
  49. package/src/canvas/__tests__/helpers/perf.js +118 -0
  50. package/src/canvas/__tests__/helpers/setup.js +176 -0
  51. package/src/canvas/__tests__/helpers/tmux.js +130 -0
  52. package/src/canvas/__tests__/helpers/transcript.js +132 -0
  53. package/src/canvas/__tests__/terminal-integration.test.js +177 -0
  54. package/src/canvas/hot-pool.js +756 -0
  55. package/src/canvas/materializer.js +31 -0
  56. package/src/canvas/materializer.test.js +56 -0
  57. package/src/canvas/selectedWidgets.js +65 -7
  58. package/src/canvas/server.js +1802 -22
  59. package/src/canvas/server.test.js +239 -0
  60. package/src/canvas/terminal-config.js +330 -0
  61. package/src/canvas/terminal-registry.js +41 -3
  62. package/src/canvas/terminal-server.js +1098 -37
  63. package/src/canvas/writeGuard.js +51 -3
  64. package/src/canvasConfig.js +67 -1
  65. package/src/canvasConfig.test.js +79 -1
  66. package/src/cli/agent.js +85 -0
  67. package/src/cli/branch.js +232 -0
  68. package/src/cli/canvasAdd.js +61 -14
  69. package/src/cli/canvasBatch.js +98 -0
  70. package/src/cli/canvasBounds.js +1 -1
  71. package/src/cli/canvasRead.js +1 -1
  72. package/src/cli/canvasUpdate.js +179 -0
  73. package/src/cli/compact.js +0 -2
  74. package/src/cli/create.js +40 -16
  75. package/src/cli/dev.js +158 -84
  76. package/src/cli/exit.js +23 -24
  77. package/src/cli/index.js +55 -2
  78. package/src/cli/proxy.js +96 -37
  79. package/src/cli/schemas.js +22 -4
  80. package/src/cli/server.js +149 -26
  81. package/src/cli/serverUrl.js +8 -3
  82. package/src/cli/sessions.js +133 -7
  83. package/src/cli/setup.js +138 -12
  84. package/src/cli/terminal-commands.js +20 -9
  85. package/src/cli/terminal-messaging.js +231 -0
  86. package/src/cli/terminal-welcome.js +449 -34
  87. package/src/cli/updateVersion.js +1 -1
  88. package/src/commandActions.js +1 -0
  89. package/src/commandPaletteConfig.js +9 -0
  90. package/src/comments/auth.js +2 -1
  91. package/src/comments/ui/AuthModal.jsx +114 -0
  92. package/src/comments/ui/CommentWindow.jsx +329 -0
  93. package/src/comments/ui/CommentsDrawer.jsx +102 -0
  94. package/src/comments/ui/Composer.jsx +64 -0
  95. package/src/comments/ui/authModal.test.js +1 -1
  96. package/src/comments/ui/commentWindow.js +16 -17
  97. package/src/comments/ui/commentsDrawer.js +25 -26
  98. package/src/comments/ui/composer.js +23 -24
  99. package/src/comments/ui/index.js +2 -3
  100. package/src/configSchema.js +59 -1
  101. package/src/configStore.js +161 -0
  102. package/src/core-ui-colors.css +12 -0
  103. package/src/devtools.js +17 -19
  104. package/src/devtools.test.js +18 -9
  105. package/src/featureFlags.js +12 -5
  106. package/src/fuzzySearch.test.js +10 -0
  107. package/src/index.js +15 -3
  108. package/src/lib/components/ui/alert/alert-action.jsx +11 -0
  109. package/src/lib/components/ui/alert/alert-description.jsx +11 -0
  110. package/src/lib/components/ui/alert/alert-title.jsx +11 -0
  111. package/src/lib/components/ui/alert/alert.jsx +25 -0
  112. package/src/lib/components/ui/alert/index.js +15 -15
  113. package/src/lib/components/ui/avatar/avatar-badge.jsx +22 -0
  114. package/src/lib/components/ui/avatar/avatar-fallback.jsx +18 -0
  115. package/src/lib/components/ui/avatar/avatar-group-count.jsx +19 -0
  116. package/src/lib/components/ui/avatar/avatar-group.jsx +19 -0
  117. package/src/lib/components/ui/avatar/avatar-image.jsx +15 -0
  118. package/src/lib/components/ui/avatar/avatar.jsx +19 -0
  119. package/src/lib/components/ui/avatar/index.js +20 -20
  120. package/src/lib/components/ui/badge/badge.jsx +31 -0
  121. package/src/lib/components/ui/badge/index.js +2 -2
  122. package/src/lib/components/ui/button/button.jsx +100 -0
  123. package/src/lib/components/ui/button/index.js +9 -9
  124. package/src/lib/components/ui/card/card-action.jsx +11 -0
  125. package/src/lib/components/ui/card/card-content.jsx +11 -0
  126. package/src/lib/components/ui/card/card-description.jsx +11 -0
  127. package/src/lib/components/ui/card/card-footer.jsx +11 -0
  128. package/src/lib/components/ui/card/card-header.jsx +19 -0
  129. package/src/lib/components/ui/card/card-title.jsx +11 -0
  130. package/src/lib/components/ui/card/card.jsx +17 -0
  131. package/src/lib/components/ui/card/index.js +23 -23
  132. package/src/lib/components/ui/checkbox/checkbox.jsx +29 -0
  133. package/src/lib/components/ui/checkbox/index.js +5 -5
  134. package/src/lib/components/ui/collapsible/collapsible-content.jsx +7 -0
  135. package/src/lib/components/ui/collapsible/collapsible-trigger.jsx +7 -0
  136. package/src/lib/components/ui/collapsible/collapsible.jsx +7 -0
  137. package/src/lib/components/ui/collapsible/index.js +11 -11
  138. package/src/lib/components/ui/dialog/dialog-close.jsx +7 -0
  139. package/src/lib/components/ui/dialog/dialog-content.jsx +34 -0
  140. package/src/lib/components/ui/dialog/dialog-description.jsx +15 -0
  141. package/src/lib/components/ui/dialog/dialog-footer.jsx +23 -0
  142. package/src/lib/components/ui/dialog/dialog-header.jsx +11 -0
  143. package/src/lib/components/ui/dialog/dialog-overlay.jsx +15 -0
  144. package/src/lib/components/ui/dialog/dialog-portal.jsx +4 -0
  145. package/src/lib/components/ui/dialog/dialog-title.jsx +15 -0
  146. package/src/lib/components/ui/dialog/dialog-trigger.jsx +7 -0
  147. package/src/lib/components/ui/dialog/dialog.jsx +4 -0
  148. package/src/lib/components/ui/dialog/index.js +32 -32
  149. package/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.jsx +8 -0
  150. package/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.jsx +30 -0
  151. package/src/lib/components/ui/dropdown-menu/dropdown-menu-content.jsx +22 -0
  152. package/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.jsx +16 -0
  153. package/src/lib/components/ui/dropdown-menu/dropdown-menu-group.jsx +7 -0
  154. package/src/lib/components/ui/dropdown-menu/dropdown-menu-item.jsx +20 -0
  155. package/src/lib/components/ui/dropdown-menu/dropdown-menu-label.jsx +17 -0
  156. package/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.jsx +4 -0
  157. package/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.jsx +7 -0
  158. package/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.jsx +29 -0
  159. package/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.jsx +15 -0
  160. package/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.jsx +16 -0
  161. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.jsx +15 -0
  162. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.jsx +23 -0
  163. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.jsx +4 -0
  164. package/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.jsx +7 -0
  165. package/src/lib/components/ui/dropdown-menu/dropdown-menu.jsx +4 -0
  166. package/src/lib/components/ui/dropdown-menu/index.js +52 -52
  167. package/src/lib/components/ui/input/index.js +5 -5
  168. package/src/lib/components/ui/input/input.jsx +19 -0
  169. package/src/lib/components/ui/label/index.js +5 -5
  170. package/src/lib/components/ui/label/label.jsx +19 -0
  171. package/src/lib/components/ui/panel/index.js +21 -21
  172. package/src/lib/components/ui/panel/panel-body.jsx +11 -0
  173. package/src/lib/components/ui/panel/panel-close.jsx +16 -0
  174. package/src/lib/components/ui/panel/panel-content.jsx +29 -0
  175. package/src/lib/components/ui/panel/panel-footer.jsx +11 -0
  176. package/src/lib/components/ui/panel/panel-header.jsx +11 -0
  177. package/src/lib/components/ui/panel/panel-title.jsx +12 -0
  178. package/src/lib/components/ui/panel/panel.jsx +4 -0
  179. package/src/lib/components/ui/popover/index.js +26 -26
  180. package/src/lib/components/ui/popover/popover-close.jsx +7 -0
  181. package/src/lib/components/ui/popover/popover-content.jsx +22 -0
  182. package/src/lib/components/ui/popover/popover-description.jsx +11 -0
  183. package/src/lib/components/ui/popover/popover-header.jsx +11 -0
  184. package/src/lib/components/ui/popover/popover-portal.jsx +4 -0
  185. package/src/lib/components/ui/popover/popover-title.jsx +11 -0
  186. package/src/lib/components/ui/popover/popover-trigger.jsx +8 -0
  187. package/src/lib/components/ui/popover/popover.jsx +4 -0
  188. package/src/lib/components/ui/searchable-list.jsx +160 -0
  189. package/src/lib/components/ui/select/index.js +35 -35
  190. package/src/lib/components/ui/select/select-content.jsx +30 -0
  191. package/src/lib/components/ui/select/select-group-heading.jsx +17 -0
  192. package/src/lib/components/ui/select/select-group.jsx +15 -0
  193. package/src/lib/components/ui/select/select-item.jsx +26 -0
  194. package/src/lib/components/ui/select/select-label.jsx +11 -0
  195. package/src/lib/components/ui/select/select-portal.jsx +4 -0
  196. package/src/lib/components/ui/select/select-scroll-down-button.jsx +18 -0
  197. package/src/lib/components/ui/select/select-scroll-up-button.jsx +18 -0
  198. package/src/lib/components/ui/select/select-separator.jsx +15 -0
  199. package/src/lib/components/ui/select/select-trigger.jsx +25 -0
  200. package/src/lib/components/ui/select/select.jsx +4 -0
  201. package/src/lib/components/ui/separator/index.js +5 -5
  202. package/src/lib/components/ui/separator/separator.jsx +22 -0
  203. package/src/lib/components/ui/sheet/index.js +32 -32
  204. package/src/lib/components/ui/sheet/sheet-close.jsx +7 -0
  205. package/src/lib/components/ui/sheet/sheet-content.jsx +35 -0
  206. package/src/lib/components/ui/sheet/sheet-description.jsx +15 -0
  207. package/src/lib/components/ui/sheet/sheet-footer.jsx +11 -0
  208. package/src/lib/components/ui/sheet/sheet-header.jsx +11 -0
  209. package/src/lib/components/ui/sheet/sheet-overlay.jsx +15 -0
  210. package/src/lib/components/ui/sheet/sheet-portal.jsx +4 -0
  211. package/src/lib/components/ui/sheet/sheet-title.jsx +15 -0
  212. package/src/lib/components/ui/sheet/sheet-trigger.jsx +7 -0
  213. package/src/lib/components/ui/sheet/sheet.jsx +4 -0
  214. package/src/lib/components/ui/textarea/index.js +5 -5
  215. package/src/lib/components/ui/textarea/textarea.jsx +18 -0
  216. package/src/lib/components/ui/toggle/index.js +6 -9
  217. package/src/lib/components/ui/toggle/toggle.jsx +36 -0
  218. package/src/lib/components/ui/toggle-group/index.js +8 -8
  219. package/src/lib/components/ui/toggle-group/toggle-group-item.jsx +29 -0
  220. package/src/lib/components/ui/toggle-group/toggle-group.jsx +43 -0
  221. package/src/lib/components/ui/tooltip/index.js +3 -3
  222. package/src/lib/components/ui/tooltip/tooltip-content.jsx +21 -0
  223. package/src/lib/components/ui/tooltip/tooltip-trigger.jsx +23 -0
  224. package/src/lib/components/ui/tooltip/tooltip.jsx +11 -0
  225. package/src/lib/components/ui/trigger-button/index.js +3 -3
  226. package/src/lib/components/ui/trigger-button/trigger-button.css +38 -0
  227. package/src/lib/components/ui/trigger-button/trigger-button.jsx +63 -0
  228. package/src/logger/devLogger.js +238 -0
  229. package/src/logger/devLogger.test.js +193 -0
  230. package/src/modes.test.js +4 -4
  231. package/src/mountStoryboardCore.js +133 -35
  232. package/src/paletteProviders.js +3 -0
  233. package/src/paletteProviders.test.js +2 -2
  234. package/src/server/index.js +104 -40
  235. package/src/sidepanel.css +214 -0
  236. package/src/smoothCorners.js +1 -1
  237. package/src/styles/tailwind.css +1 -1
  238. package/src/svelte-plugin-ui/__tests__/ModeSwitch.test.ts +8 -8
  239. package/src/svelte-plugin-ui/__tests__/ToolbarShell.test.ts +11 -10
  240. package/src/svelte-plugin-ui/components/Icon.css +11 -0
  241. package/src/svelte-plugin-ui/components/Icon.jsx +281 -0
  242. package/src/svelte-plugin-ui/components/ModeSwitch.css +90 -0
  243. package/src/svelte-plugin-ui/components/ModeSwitch.jsx +47 -0
  244. package/src/svelte-plugin-ui/components/ToolbarShell.css +80 -0
  245. package/src/svelte-plugin-ui/components/ToolbarShell.jsx +84 -0
  246. package/src/svelte-plugin-ui/components/Viewfinder.css +412 -0
  247. package/src/svelte-plugin-ui/components/Viewfinder.jsx +513 -0
  248. package/src/svelte-plugin-ui/mount.ts +12 -16
  249. package/src/toolRegistry.js +4 -4
  250. package/src/toolbarConfigStore.js +30 -0
  251. package/src/tools/handlers/autosync.js +1 -1
  252. package/src/tools/handlers/canvasAddWidget.js +1 -1
  253. package/src/tools/handlers/canvasAgents.js +20 -0
  254. package/src/tools/handlers/canvasToolbar.js +8 -8
  255. package/src/tools/handlers/commandPalette.js +9 -0
  256. package/src/tools/handlers/comments.js +2 -2
  257. package/src/tools/handlers/create.js +1 -1
  258. package/src/tools/handlers/devtools.js +19 -3
  259. package/src/tools/handlers/devtools.test.js +38 -0
  260. package/src/tools/handlers/featureFlags.js +1 -1
  261. package/src/tools/handlers/flows.js +3 -3
  262. package/src/tools/handlers/hideChrome.js +9 -0
  263. package/src/tools/handlers/paletteTheme.js +35 -0
  264. package/src/tools/handlers/theme.js +1 -1
  265. package/src/tools/registry.js +4 -1
  266. package/src/tools/surfaces/commandList.js +3 -3
  267. package/src/tools/surfaces/mainToolbar.js +3 -3
  268. package/src/tools/surfaces/registry.js +4 -4
  269. package/src/ui/design-modes.ts +2 -2
  270. package/src/ui/viewfinder.ts +1 -1
  271. package/src/vite/server-plugin.js +243 -61
  272. package/src/workshop/features/createCanvas/CreateCanvasForm.jsx +260 -0
  273. package/src/workshop/features/createCanvas/index.js +1 -1
  274. package/src/workshop/features/createFlow/CreateFlowForm.jsx +334 -0
  275. package/src/workshop/features/createFlow/index.js +1 -1
  276. package/src/workshop/features/createPage/CreatePageForm.jsx +304 -0
  277. package/src/workshop/features/createPage/index.js +1 -1
  278. package/src/workshop/features/createPrototype/CreatePrototypeForm.jsx +289 -0
  279. package/src/workshop/features/createPrototype/index.js +1 -1
  280. package/src/workshop/features/createPrototype/server.js +98 -0
  281. package/src/workshop/features/createStory/CreateStoryForm.jsx +208 -0
  282. package/src/workshop/features/createStory/index.js +1 -1
  283. package/src/workshop/ui/WorkshopPanel.jsx +98 -0
  284. package/src/workshop/ui/mount.ts +1 -1
  285. package/src/worktree/port.js +48 -0
  286. package/src/worktree/serverRegistry.js +120 -0
  287. package/toolbar.config.json +93 -42
  288. package/widgets.config.json +580 -12
  289. package/scaffold/commandpalette.config.json +0 -4
  290. package/scaffold/toolbar.config.json +0 -4
  291. package/src/ActionMenuButton.svelte +0 -119
  292. package/src/AutosyncMenuButton.svelte +0 -397
  293. package/src/CanvasCreateMenu.svelte +0 -295
  294. package/src/CanvasSnap.svelte +0 -87
  295. package/src/CanvasUndoRedo.svelte +0 -108
  296. package/src/CanvasZoomControl.svelte +0 -111
  297. package/src/CanvasZoomToFit.svelte +0 -52
  298. package/src/CommandMenu.svelte +0 -249
  299. package/src/CommandPalette.svelte +0 -33
  300. package/src/CommentsMenuButton.svelte +0 -53
  301. package/src/CoreUIBar.svelte +0 -847
  302. package/src/CreateMenuButton.svelte +0 -133
  303. package/src/DocPanel.svelte +0 -299
  304. package/src/InspectorPanel.svelte +0 -745
  305. package/src/PwaInstallBanner.svelte +0 -124
  306. package/src/SidePanel.svelte +0 -480
  307. package/src/ThemeMenuButton.svelte +0 -132
  308. package/src/comments/ui/AuthModal.svelte +0 -108
  309. package/src/comments/ui/CommentWindow.svelte +0 -333
  310. package/src/comments/ui/CommentsDrawer.svelte +0 -96
  311. package/src/comments/ui/Composer.svelte +0 -65
  312. package/src/lib/components/ui/alert/alert-action.svelte +0 -19
  313. package/src/lib/components/ui/alert/alert-description.svelte +0 -22
  314. package/src/lib/components/ui/alert/alert-title.svelte +0 -22
  315. package/src/lib/components/ui/alert/alert.svelte +0 -38
  316. package/src/lib/components/ui/avatar/avatar-badge.svelte +0 -25
  317. package/src/lib/components/ui/avatar/avatar-fallback.svelte +0 -20
  318. package/src/lib/components/ui/avatar/avatar-group-count.svelte +0 -22
  319. package/src/lib/components/ui/avatar/avatar-group.svelte +0 -22
  320. package/src/lib/components/ui/avatar/avatar-image.svelte +0 -17
  321. package/src/lib/components/ui/avatar/avatar.svelte +0 -24
  322. package/src/lib/components/ui/badge/badge.svelte +0 -44
  323. package/src/lib/components/ui/button/button.svelte +0 -108
  324. package/src/lib/components/ui/card/card-action.svelte +0 -21
  325. package/src/lib/components/ui/card/card-content.svelte +0 -19
  326. package/src/lib/components/ui/card/card-description.svelte +0 -19
  327. package/src/lib/components/ui/card/card-footer.svelte +0 -18
  328. package/src/lib/components/ui/card/card-header.svelte +0 -21
  329. package/src/lib/components/ui/card/card-title.svelte +0 -14
  330. package/src/lib/components/ui/card/card.svelte +0 -21
  331. package/src/lib/components/ui/checkbox/checkbox.svelte +0 -39
  332. package/src/lib/components/ui/collapsible/collapsible-content.svelte +0 -7
  333. package/src/lib/components/ui/collapsible/collapsible-trigger.svelte +0 -7
  334. package/src/lib/components/ui/collapsible/collapsible.svelte +0 -11
  335. package/src/lib/components/ui/dialog/dialog-close.svelte +0 -11
  336. package/src/lib/components/ui/dialog/dialog-content.svelte +0 -42
  337. package/src/lib/components/ui/dialog/dialog-description.svelte +0 -17
  338. package/src/lib/components/ui/dialog/dialog-footer.svelte +0 -29
  339. package/src/lib/components/ui/dialog/dialog-header.svelte +0 -19
  340. package/src/lib/components/ui/dialog/dialog-overlay.svelte +0 -17
  341. package/src/lib/components/ui/dialog/dialog-portal.svelte +0 -7
  342. package/src/lib/components/ui/dialog/dialog-title.svelte +0 -17
  343. package/src/lib/components/ui/dialog/dialog-trigger.svelte +0 -11
  344. package/src/lib/components/ui/dialog/dialog.svelte +0 -7
  345. package/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +0 -16
  346. package/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +0 -40
  347. package/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +0 -27
  348. package/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +0 -18
  349. package/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -7
  350. package/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +0 -24
  351. package/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +0 -20
  352. package/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +0 -7
  353. package/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -16
  354. package/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +0 -34
  355. package/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +0 -17
  356. package/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +0 -19
  357. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +0 -17
  358. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +0 -27
  359. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +0 -7
  360. package/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -7
  361. package/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +0 -7
  362. package/src/lib/components/ui/input/input.svelte +0 -40
  363. package/src/lib/components/ui/label/label.svelte +0 -20
  364. package/src/lib/components/ui/panel/panel-body.svelte +0 -13
  365. package/src/lib/components/ui/panel/panel-close.svelte +0 -16
  366. package/src/lib/components/ui/panel/panel-content.svelte +0 -33
  367. package/src/lib/components/ui/panel/panel-footer.svelte +0 -13
  368. package/src/lib/components/ui/panel/panel-header.svelte +0 -16
  369. package/src/lib/components/ui/panel/panel-title.svelte +0 -14
  370. package/src/lib/components/ui/panel/panel.svelte +0 -15
  371. package/src/lib/components/ui/popover/popover-close.svelte +0 -7
  372. package/src/lib/components/ui/popover/popover-content.svelte +0 -27
  373. package/src/lib/components/ui/popover/popover-description.svelte +0 -19
  374. package/src/lib/components/ui/popover/popover-header.svelte +0 -19
  375. package/src/lib/components/ui/popover/popover-portal.svelte +0 -7
  376. package/src/lib/components/ui/popover/popover-title.svelte +0 -19
  377. package/src/lib/components/ui/popover/popover-trigger.svelte +0 -17
  378. package/src/lib/components/ui/popover/popover.svelte +0 -7
  379. package/src/lib/components/ui/select/select-content.svelte +0 -40
  380. package/src/lib/components/ui/select/select-group-heading.svelte +0 -19
  381. package/src/lib/components/ui/select/select-group.svelte +0 -17
  382. package/src/lib/components/ui/select/select-item.svelte +0 -38
  383. package/src/lib/components/ui/select/select-label.svelte +0 -18
  384. package/src/lib/components/ui/select/select-portal.svelte +0 -7
  385. package/src/lib/components/ui/select/select-scroll-down-button.svelte +0 -20
  386. package/src/lib/components/ui/select/select-scroll-up-button.svelte +0 -20
  387. package/src/lib/components/ui/select/select-separator.svelte +0 -17
  388. package/src/lib/components/ui/select/select-trigger.svelte +0 -27
  389. package/src/lib/components/ui/select/select.svelte +0 -11
  390. package/src/lib/components/ui/separator/separator.svelte +0 -23
  391. package/src/lib/components/ui/sheet/sheet-close.svelte +0 -7
  392. package/src/lib/components/ui/sheet/sheet-content.svelte +0 -43
  393. package/src/lib/components/ui/sheet/sheet-description.svelte +0 -17
  394. package/src/lib/components/ui/sheet/sheet-footer.svelte +0 -18
  395. package/src/lib/components/ui/sheet/sheet-header.svelte +0 -19
  396. package/src/lib/components/ui/sheet/sheet-overlay.svelte +0 -17
  397. package/src/lib/components/ui/sheet/sheet-portal.svelte +0 -7
  398. package/src/lib/components/ui/sheet/sheet-title.svelte +0 -17
  399. package/src/lib/components/ui/sheet/sheet-trigger.svelte +0 -7
  400. package/src/lib/components/ui/sheet/sheet.svelte +0 -7
  401. package/src/lib/components/ui/textarea/textarea.svelte +0 -21
  402. package/src/lib/components/ui/toggle/toggle.svelte +0 -45
  403. package/src/lib/components/ui/toggle-group/toggle-group-item.svelte +0 -35
  404. package/src/lib/components/ui/toggle-group/toggle-group.svelte +0 -63
  405. package/src/lib/components/ui/tooltip/tooltip-content.svelte +0 -24
  406. package/src/lib/components/ui/tooltip/tooltip-trigger.svelte +0 -27
  407. package/src/lib/components/ui/tooltip/tooltip.svelte +0 -9
  408. package/src/lib/components/ui/trigger-button/trigger-button.svelte +0 -106
  409. package/src/svelte-plugin-ui/components/Icon.svelte +0 -181
  410. package/src/svelte-plugin-ui/components/ModeSwitch.svelte +0 -121
  411. package/src/svelte-plugin-ui/components/ToolbarShell.svelte +0 -150
  412. package/src/svelte-plugin-ui/components/Viewfinder.svelte +0 -1001
  413. package/src/tools/handlers/docs.js +0 -11
  414. package/src/workshop/features/createCanvas/CreateCanvasForm.svelte +0 -139
  415. package/src/workshop/features/createFlow/CreateFlowForm.svelte +0 -314
  416. package/src/workshop/features/createPage/CreatePageForm.svelte +0 -249
  417. package/src/workshop/features/createPrototype/CreatePrototypeForm.svelte +0 -287
  418. package/src/workshop/features/createStory/CreateStoryForm.svelte +0 -161
  419. package/src/workshop/ui/WorkshopPanel.svelte +0 -97
@@ -0,0 +1,98 @@
1
+ /**
2
+ * storyboard canvas batch — Execute multiple canvas operations in one call.
3
+ *
4
+ * Usage:
5
+ * storyboard canvas batch --canvas my-canvas --ops '[{"op":"create-widget","type":"sticky-note","props":{"text":"Hi"}}]'
6
+ * storyboard canvas batch --canvas my-canvas --ops-file ops.json
7
+ * cat ops.json | storyboard canvas batch --canvas my-canvas --ops-file -
8
+ *
9
+ * Always outputs JSON. Designed for scripting and agent use.
10
+ */
11
+
12
+ import fs from 'node:fs'
13
+ import { parseFlags, formatFlagHelp } from './flags.js'
14
+ import { ensureDevServer, serverPost } from './create.js'
15
+
16
+ const batchSchema = {
17
+ canvas: {
18
+ type: 'string',
19
+ required: true,
20
+ description: 'Target canvas name',
21
+ aliases: ['c'],
22
+ },
23
+ ops: {
24
+ type: 'string',
25
+ description: 'Operations as a JSON string (array)',
26
+ },
27
+ 'ops-file': {
28
+ type: 'string',
29
+ description: 'Path to JSON file with operations (use - for stdin)',
30
+ aliases: ['f'],
31
+ },
32
+ }
33
+
34
+ async function canvasBatch() {
35
+ const rest = process.argv.slice(4)
36
+
37
+ if (rest.includes('--help') || rest.includes('-h')) {
38
+ console.log(`\n canvas batch flags:\n`)
39
+ console.log(formatFlagHelp(batchSchema))
40
+ console.log(`\n Operations: create-widget, update-widget, move-widget, delete-widget, create-connector, delete-connector`)
41
+ console.log(` Refs: use $0, $1 etc. to reference IDs from earlier create ops. Named refs via "ref" field.\n`)
42
+ process.exit(0)
43
+ }
44
+
45
+ const { flags, errors } = parseFlags(rest, batchSchema)
46
+
47
+ if (errors.length) {
48
+ for (const e of errors) console.error(e)
49
+ process.exit(1)
50
+ }
51
+
52
+ if (!flags.ops && !flags['ops-file']) {
53
+ console.error(JSON.stringify({ error: 'Provide --ops (JSON string) or --ops-file (path or - for stdin)' }))
54
+ process.exit(1)
55
+ }
56
+
57
+ await ensureDevServer({ quiet: true })
58
+
59
+ let operations
60
+ try {
61
+ if (flags['ops-file']) {
62
+ let raw
63
+ if (flags['ops-file'] === '-') {
64
+ // Read from stdin
65
+ const chunks = []
66
+ for await (const chunk of process.stdin) chunks.push(chunk)
67
+ raw = Buffer.concat(chunks).toString('utf8')
68
+ } else {
69
+ raw = fs.readFileSync(flags['ops-file'], 'utf8')
70
+ }
71
+ operations = JSON.parse(raw)
72
+ } else {
73
+ operations = JSON.parse(flags.ops)
74
+ }
75
+ } catch (err) {
76
+ console.error(JSON.stringify({ error: `Failed to parse operations: ${err.message}` }))
77
+ process.exit(1)
78
+ }
79
+
80
+ if (!Array.isArray(operations)) {
81
+ console.error(JSON.stringify({ error: 'Operations must be a JSON array' }))
82
+ process.exit(1)
83
+ }
84
+
85
+ try {
86
+ const result = await serverPost('/_storyboard/canvas/batch', {
87
+ name: flags.canvas,
88
+ operations,
89
+ })
90
+ console.log(JSON.stringify(result))
91
+ if (!result.success) process.exit(1)
92
+ } catch (err) {
93
+ console.error(JSON.stringify({ error: err.message }))
94
+ process.exit(1)
95
+ }
96
+ }
97
+
98
+ canvasBatch()
@@ -22,7 +22,7 @@ const bold = (s) => `\x1b[1m${s}\x1b[0m`
22
22
 
23
23
  async function checkServer() {
24
24
  try {
25
- await fetch(getServerUrl(), { signal: AbortSignal.timeout(2000) })
25
+ await fetch(`${getServerUrl()}/_storyboard/canvas/list`, { signal: AbortSignal.timeout(2000) })
26
26
  return true
27
27
  } catch {
28
28
  return false
@@ -24,7 +24,7 @@ const cyan = (s) => `\x1b[36m${s}\x1b[0m`
24
24
 
25
25
  async function checkServer() {
26
26
  try {
27
- await fetch(getServerUrl(), { signal: AbortSignal.timeout(2000) })
27
+ await fetch(`${getServerUrl()}/_storyboard/canvas/list`, { signal: AbortSignal.timeout(2000) })
28
28
  return true
29
29
  } catch {
30
30
  return false
@@ -0,0 +1,179 @@
1
+ /**
2
+ * storyboard canvas update <widget-id> — Update a widget's props or position.
3
+ *
4
+ * Usage:
5
+ * storyboard canvas update <widget-id> --canvas my-canvas --text "New text"
6
+ * storyboard canvas update <widget-id> --canvas my-canvas --content "# Markdown"
7
+ * storyboard canvas update <widget-id> --canvas my-canvas --props '{"key":"value"}'
8
+ * storyboard canvas update <widget-id> --canvas my-canvas --x 100 --y 200
9
+ *
10
+ * Shorthand flags (merged into props):
11
+ * --text <string> Set props.text (sticky notes)
12
+ * --content <string> Set props.content (markdown blocks)
13
+ * --src <string> Set props.src (images, prototypes)
14
+ * --url <string> Set props.url (link previews, embeds)
15
+ * --color <string> Set props.color (sticky notes)
16
+ *
17
+ * Position flags:
18
+ * --x <number> Move widget to x position
19
+ * --y <number> Move widget to y position
20
+ */
21
+
22
+ import * as p from '@clack/prompts'
23
+ import { getServerUrl } from './serverUrl.js'
24
+
25
+ const dim = (s) => `\x1b[2m${s}\x1b[0m`
26
+ const bold = (s) => `\x1b[1m${s}\x1b[0m`
27
+
28
+ async function checkServer() {
29
+ try {
30
+ await fetch(`${getServerUrl()}/_storyboard/canvas/list`, { signal: AbortSignal.timeout(2000) })
31
+ return true
32
+ } catch {
33
+ return false
34
+ }
35
+ }
36
+
37
+ async function serverPatch(path, body) {
38
+ const base = getServerUrl()
39
+ const res = await fetch(`${base}${path}`, {
40
+ method: 'PATCH',
41
+ headers: { 'Content-Type': 'application/json' },
42
+ body: JSON.stringify(body),
43
+ })
44
+ if (!res.ok) {
45
+ const text = await res.text().catch(() => '')
46
+ throw new Error(`${res.status} ${res.statusText}${text ? ': ' + text : ''}`)
47
+ }
48
+ return res.json()
49
+ }
50
+
51
+ async function canvasUpdate() {
52
+ const args = process.argv.slice(4)
53
+
54
+ if (args.includes('--help') || args.includes('-h')) {
55
+ console.log(`
56
+ canvas update — Update a widget's props or position
57
+
58
+ Usage:
59
+ storyboard canvas update <widget-id> --canvas <name> [flags]
60
+
61
+ Shorthand flags (merged into props):
62
+ --text <string> Set props.text (sticky notes)
63
+ --content <string> Set props.content (markdown blocks)
64
+ --src <string> Set props.src (images, prototypes)
65
+ --url <string> Set props.url (link previews, embeds)
66
+ --color <string> Set props.color (sticky notes)
67
+ --props <json> Set arbitrary props as JSON
68
+
69
+ Position flags:
70
+ --x <number> Move widget to x position
71
+ --y <number> Move widget to y position
72
+
73
+ Options:
74
+ --canvas <name> Canvas name ${dim('(required)')}
75
+ --json Output result as JSON
76
+ `)
77
+ process.exit(0)
78
+ }
79
+
80
+ // Parse args
81
+ let widgetId = ''
82
+ let canvasName = ''
83
+ let outputJson = false
84
+ let rawProps = ''
85
+ const shorthandProps = {}
86
+ let posX = undefined
87
+ let posY = undefined
88
+
89
+ for (let i = 0; i < args.length; i++) {
90
+ const arg = args[i]
91
+ if (arg === '--canvas' && args[i + 1]) {
92
+ canvasName = args[++i]
93
+ } else if (arg === '--json') {
94
+ outputJson = true
95
+ } else if (arg === '--props' && args[i + 1]) {
96
+ rawProps = args[++i]
97
+ } else if (arg === '--text' && args[i + 1]) {
98
+ shorthandProps.text = args[++i]
99
+ } else if (arg === '--content' && args[i + 1]) {
100
+ shorthandProps.content = args[++i]
101
+ } else if (arg === '--src' && args[i + 1]) {
102
+ shorthandProps.src = args[++i]
103
+ } else if (arg === '--url' && args[i + 1]) {
104
+ shorthandProps.url = args[++i]
105
+ } else if (arg === '--color' && args[i + 1]) {
106
+ shorthandProps.color = args[++i]
107
+ } else if (arg === '--x' && args[i + 1]) {
108
+ posX = Number(args[++i])
109
+ } else if (arg === '--y' && args[i + 1]) {
110
+ posY = Number(args[++i])
111
+ } else if (!arg.startsWith('-') && !widgetId) {
112
+ widgetId = arg
113
+ }
114
+ }
115
+
116
+ if (!widgetId) {
117
+ p.log.error('Widget ID is required. Usage: storyboard canvas update <widget-id> --canvas <name>')
118
+ process.exit(1)
119
+ }
120
+
121
+ if (!canvasName) {
122
+ p.log.error('Canvas name is required. Use --canvas <name>')
123
+ process.exit(1)
124
+ }
125
+
126
+ // Build props
127
+ let props = {}
128
+ if (rawProps) {
129
+ try {
130
+ props = JSON.parse(rawProps)
131
+ } catch {
132
+ p.log.error('--props must be valid JSON')
133
+ process.exit(1)
134
+ }
135
+ }
136
+ Object.assign(props, shorthandProps)
137
+
138
+ // Build position
139
+ let position = undefined
140
+ if (posX !== undefined || posY !== undefined) {
141
+ position = {}
142
+ if (posX !== undefined) position.x = posX
143
+ if (posY !== undefined) position.y = posY
144
+ }
145
+
146
+ if (Object.keys(props).length === 0 && !position) {
147
+ p.log.error('Nothing to update. Provide --props, --text, --content, --x, --y, or other flags.')
148
+ process.exit(1)
149
+ }
150
+
151
+ // Check server
152
+ const serverUp = await checkServer()
153
+ if (!serverUp) {
154
+ p.log.error('Dev server is not running. Start it with: storyboard dev')
155
+ process.exit(1)
156
+ }
157
+
158
+ try {
159
+ const body = { name: canvasName, widgetId }
160
+ if (Object.keys(props).length > 0) body.props = props
161
+ if (position) body.position = position
162
+
163
+ const result = await serverPatch('/_storyboard/canvas/widget', body)
164
+
165
+ if (outputJson) {
166
+ console.log(JSON.stringify(result, null, 2))
167
+ } else {
168
+ const updates = []
169
+ if (Object.keys(props).length > 0) updates.push(`props: ${Object.keys(props).join(', ')}`)
170
+ if (position) updates.push(`position: ${posX ?? '·'}, ${posY ?? '·'}`)
171
+ p.log.success(`Updated ${bold(widgetId)} in ${bold(canvasName)} (${updates.join('; ')})`)
172
+ }
173
+ } catch (err) {
174
+ p.log.error(`Failed to update widget: ${err.message}`)
175
+ process.exit(1)
176
+ }
177
+ }
178
+
179
+ canvasUpdate()
@@ -8,8 +8,6 @@
8
8
  */
9
9
 
10
10
  import * as p from '@clack/prompts'
11
- import { resolve } from 'path'
12
- import { existsSync } from 'fs'
13
11
  import { compactAll, compactCanvas, findCanvasFiles } from '../canvas/compact.js'
14
12
 
15
13
  const dim = (s) => `\x1b[2m${s}\x1b[0m`
package/src/cli/create.js CHANGED
@@ -18,7 +18,7 @@ import * as p from '@clack/prompts'
18
18
  import { parseFlags, hasFlags, formatFlagHelp } from './flags.js'
19
19
  import { prototypeSchema, canvasSchema, flowSchema, pageSchema, componentSchema } from './schemas.js'
20
20
  import { getServerUrl } from './serverUrl.js'
21
- import { detectWorktreeName, getPort } from '../worktree/port.js'
21
+ import { detectWorktreeName, getPort, resolveRunningPort } from '../worktree/port.js'
22
22
 
23
23
  const dim = (s) => `\x1b[2m${s}\x1b[0m`
24
24
  const green = (s) => `\x1b[32m${s}\x1b[0m`
@@ -59,24 +59,45 @@ async function serverPost(path, body) {
59
59
  return res.json()
60
60
  }
61
61
 
62
- async function checkServer() {
62
+ async function checkServer(url, { quiet = false } = {}) {
63
+ const target = url || getServerUrl()
63
64
  try {
64
- await fetch(getServerUrl(), { signal: AbortSignal.timeout(2000) })
65
+ await fetch(`${target}/_storyboard/canvas/list`, { signal: AbortSignal.timeout(5000) })
65
66
  return true
66
- } catch {
67
+ } catch (err) {
68
+ if (!quiet) p.log.warning(`Could not reach dev server at ${target}: ${err.message}`)
67
69
  return false
68
70
  }
69
71
  }
70
72
 
71
- async function ensureDevServer() {
72
- if (await checkServer()) return
73
+ async function ensureDevServer({ quiet = false } = {}) {
74
+ // 1. If STORYBOARD_SERVER_URL is explicitly set, try it first (with retry)
75
+ if (process.env.STORYBOARD_SERVER_URL) {
76
+ const envUrl = process.env.STORYBOARD_SERVER_URL.replace(/\/$/, '')
77
+ if (await checkServer(envUrl, { quiet })) return
73
78
 
74
- const s = p.spinner()
75
- s.start('Starting dev server...')
79
+ // Retry once after a short delay (server may be mid-restart)
80
+ await new Promise((r) => setTimeout(r, 1000))
81
+ if (await checkServer(envUrl, { quiet })) return
82
+
83
+ if (!quiet) {
84
+ p.log.warning(
85
+ `STORYBOARD_SERVER_URL (${envUrl}) is not reachable — falling back to auto-discovery.`
86
+ )
87
+ }
88
+ }
89
+
90
+ // 2. Try auto-discovered URL (Caddy → ports.json)
91
+ if (await checkServer(undefined, { quiet })) return
92
+
93
+ // 3. No server found — start one
94
+ let s
95
+ if (!quiet) {
96
+ s = p.spinner()
97
+ s.start('No running dev server found — starting one...')
98
+ }
76
99
 
77
100
  const { spawn } = await import('child_process')
78
- const { readFileSync } = await import('fs')
79
- const { resolve } = await import('path')
80
101
  const { generateCaddyfile, isCaddyRunning, reloadCaddy } = await import('./proxy.js')
81
102
 
82
103
  const worktreeName = detectWorktreeName()
@@ -95,17 +116,20 @@ async function ensureDevServer() {
95
116
  const start = Date.now()
96
117
  while (Date.now() - start < 30000) {
97
118
  await new Promise((r) => setTimeout(r, 500))
98
- if (await checkServer()) {
119
+ try {
120
+ await fetch(`http://localhost:${port}`, { signal: AbortSignal.timeout(2000) })
99
121
  // Update Caddy with actual port
100
122
  try {
101
123
  const caddyfilePath = generateCaddyfile({ [worktreeName]: port })
102
124
  if (isCaddyRunning()) reloadCaddy(caddyfilePath)
103
- } catch {}
104
- s.stop('Dev server started')
125
+ } catch { /* empty */ }
126
+ if (s) s.stop('Dev server started')
105
127
  return
128
+ } catch {
129
+ // Not ready yet — keep waiting
106
130
  }
107
131
  }
108
- s.stop('Dev server may still be starting...')
132
+ if (s) s.stop('Dev server may still be starting...')
109
133
  }
110
134
 
111
135
  function getProxyUrl() {
@@ -116,7 +140,7 @@ function getProxyUrl() {
116
140
 
117
141
  function getDirectUrl() {
118
142
  const name = detectWorktreeName()
119
- const port = getPort(name)
143
+ const port = resolveRunningPort(name)
120
144
  const isMain = name === 'main'
121
145
  return isMain ? `http://localhost:${port}/` : `http://localhost:${port}/branch--${name}/`
122
146
  }
@@ -147,7 +171,7 @@ async function postCreateFlow(resultPath, type) {
147
171
  try {
148
172
  const { execSync } = await import('child_process')
149
173
  execSync(`open "${viewUrl}"`, { stdio: 'ignore' })
150
- } catch {}
174
+ } catch { /* empty */ }
151
175
 
152
176
  p.outro('')
153
177
  }