@dfosco/storyboard-core 4.2.0-beta.2 → 4.2.0-beta.21

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 (414) hide show
  1. package/commandpalette.config.json +109 -24
  2. package/dist/storyboard-ui.css +1 -1
  3. package/dist/storyboard-ui.js +17379 -28568
  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 -0
  11. package/scaffold/skills/canvas/SKILL.md +5 -4
  12. package/scaffold/skills/ship/SKILL.md +1 -1
  13. package/scaffold/storyboard.config.json +14 -1
  14. package/scaffold/toolbar.config.json +1 -1
  15. package/src/ActionMenuButton.jsx +100 -0
  16. package/src/AutosyncMenuButton.css +67 -0
  17. package/src/AutosyncMenuButton.jsx +241 -0
  18. package/src/BranchSelect.jsx +29 -0
  19. package/src/BranchSelect.module.css +30 -0
  20. package/src/CanvasAgentsMenu.jsx +87 -0
  21. package/src/CanvasCreateMenu.jsx +609 -0
  22. package/src/CanvasSnap.css +27 -0
  23. package/src/CanvasSnap.jsx +51 -0
  24. package/src/CanvasUndoRedo.css +36 -0
  25. package/src/CanvasUndoRedo.jsx +62 -0
  26. package/src/CanvasZoomControl.css +53 -0
  27. package/src/CanvasZoomControl.jsx +49 -0
  28. package/src/CanvasZoomToFit.css +18 -0
  29. package/src/CanvasZoomToFit.jsx +26 -0
  30. package/src/CommandMenu.css +8 -0
  31. package/src/CommandMenu.jsx +286 -0
  32. package/src/CommandPalette.jsx +35 -0
  33. package/src/CommandPaletteTrigger.jsx +25 -0
  34. package/src/CommentsMenuButton.jsx +38 -0
  35. package/src/CoreUIBar.css +47 -0
  36. package/src/CoreUIBar.jsx +855 -0
  37. package/src/CreateMenuButton.jsx +116 -0
  38. package/src/HideChromeTrigger.jsx +40 -0
  39. package/src/InspectorPanel.css +109 -0
  40. package/src/InspectorPanel.jsx +629 -0
  41. package/src/PwaInstallBanner.css +42 -0
  42. package/src/PwaInstallBanner.jsx +124 -0
  43. package/src/SidePanel.jsx +260 -0
  44. package/src/ThemeMenuButton.jsx +136 -0
  45. package/src/autosync/server.js +202 -5
  46. package/src/autosync/server.test.js +112 -0
  47. package/src/canvas/__tests__/agent-integration.test.js +593 -0
  48. package/src/canvas/__tests__/helpers/browser.js +95 -0
  49. package/src/canvas/__tests__/helpers/canvas-api.js +129 -0
  50. package/src/canvas/__tests__/helpers/perf.js +118 -0
  51. package/src/canvas/__tests__/helpers/setup.js +176 -0
  52. package/src/canvas/__tests__/helpers/tmux.js +130 -0
  53. package/src/canvas/__tests__/helpers/transcript.js +129 -0
  54. package/src/canvas/__tests__/terminal-integration.test.js +175 -0
  55. package/src/canvas/hot-pool.js +757 -0
  56. package/src/canvas/materializer.js +31 -0
  57. package/src/canvas/materializer.test.js +56 -0
  58. package/src/canvas/selectedWidgets.js +65 -7
  59. package/src/canvas/server.js +1801 -22
  60. package/src/canvas/server.test.js +239 -0
  61. package/src/canvas/terminal-config.js +331 -0
  62. package/src/canvas/terminal-registry.js +38 -0
  63. package/src/canvas/terminal-server.js +1037 -29
  64. package/src/canvas/writeGuard.js +51 -3
  65. package/src/canvasConfig.js +67 -1
  66. package/src/canvasConfig.test.js +79 -1
  67. package/src/cli/agent.js +85 -0
  68. package/src/cli/branch.js +232 -0
  69. package/src/cli/canvasAdd.js +59 -12
  70. package/src/cli/canvasBatch.js +98 -0
  71. package/src/cli/canvasBounds.js +1 -1
  72. package/src/cli/canvasRead.js +1 -1
  73. package/src/cli/canvasUpdate.js +179 -0
  74. package/src/cli/create.js +38 -14
  75. package/src/cli/dev.js +157 -83
  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 +148 -25
  81. package/src/cli/serverUrl.js +8 -3
  82. package/src/cli/sessions.js +131 -5
  83. package/src/cli/setup.js +109 -11
  84. package/src/cli/terminal-commands.js +16 -8
  85. package/src/cli/terminal-messaging.js +231 -0
  86. package/src/cli/terminal-welcome.js +365 -33
  87. package/src/commandActions.js +1 -0
  88. package/src/commandPaletteConfig.js +9 -0
  89. package/src/comments/auth.js +2 -1
  90. package/src/comments/ui/AuthModal.jsx +114 -0
  91. package/src/comments/ui/CommentWindow.jsx +329 -0
  92. package/src/comments/ui/CommentsDrawer.jsx +102 -0
  93. package/src/comments/ui/Composer.jsx +64 -0
  94. package/src/comments/ui/authModal.test.js +1 -1
  95. package/src/comments/ui/commentWindow.js +16 -17
  96. package/src/comments/ui/commentsDrawer.js +25 -26
  97. package/src/comments/ui/composer.js +23 -24
  98. package/src/comments/ui/index.js +2 -3
  99. package/src/configSchema.js +59 -1
  100. package/src/configStore.js +161 -0
  101. package/src/core-ui-colors.css +12 -0
  102. package/src/devtools.js +17 -19
  103. package/src/devtools.test.js +18 -9
  104. package/src/featureFlags.js +12 -5
  105. package/src/fuzzySearch.test.js +10 -0
  106. package/src/index.js +14 -2
  107. package/src/lib/components/ui/alert/alert-action.jsx +11 -0
  108. package/src/lib/components/ui/alert/alert-description.jsx +11 -0
  109. package/src/lib/components/ui/alert/alert-title.jsx +11 -0
  110. package/src/lib/components/ui/alert/alert.jsx +25 -0
  111. package/src/lib/components/ui/alert/index.js +15 -15
  112. package/src/lib/components/ui/avatar/avatar-badge.jsx +22 -0
  113. package/src/lib/components/ui/avatar/avatar-fallback.jsx +18 -0
  114. package/src/lib/components/ui/avatar/avatar-group-count.jsx +19 -0
  115. package/src/lib/components/ui/avatar/avatar-group.jsx +19 -0
  116. package/src/lib/components/ui/avatar/avatar-image.jsx +15 -0
  117. package/src/lib/components/ui/avatar/avatar.jsx +19 -0
  118. package/src/lib/components/ui/avatar/index.js +20 -20
  119. package/src/lib/components/ui/badge/badge.jsx +31 -0
  120. package/src/lib/components/ui/badge/index.js +2 -2
  121. package/src/lib/components/ui/button/button.jsx +100 -0
  122. package/src/lib/components/ui/button/index.js +9 -9
  123. package/src/lib/components/ui/card/card-action.jsx +11 -0
  124. package/src/lib/components/ui/card/card-content.jsx +11 -0
  125. package/src/lib/components/ui/card/card-description.jsx +11 -0
  126. package/src/lib/components/ui/card/card-footer.jsx +11 -0
  127. package/src/lib/components/ui/card/card-header.jsx +19 -0
  128. package/src/lib/components/ui/card/card-title.jsx +11 -0
  129. package/src/lib/components/ui/card/card.jsx +17 -0
  130. package/src/lib/components/ui/card/index.js +23 -23
  131. package/src/lib/components/ui/checkbox/checkbox.jsx +29 -0
  132. package/src/lib/components/ui/checkbox/index.js +5 -5
  133. package/src/lib/components/ui/collapsible/collapsible-content.jsx +7 -0
  134. package/src/lib/components/ui/collapsible/collapsible-trigger.jsx +7 -0
  135. package/src/lib/components/ui/collapsible/collapsible.jsx +7 -0
  136. package/src/lib/components/ui/collapsible/index.js +11 -11
  137. package/src/lib/components/ui/dialog/dialog-close.jsx +7 -0
  138. package/src/lib/components/ui/dialog/dialog-content.jsx +34 -0
  139. package/src/lib/components/ui/dialog/dialog-description.jsx +15 -0
  140. package/src/lib/components/ui/dialog/dialog-footer.jsx +23 -0
  141. package/src/lib/components/ui/dialog/dialog-header.jsx +11 -0
  142. package/src/lib/components/ui/dialog/dialog-overlay.jsx +15 -0
  143. package/src/lib/components/ui/dialog/dialog-portal.jsx +4 -0
  144. package/src/lib/components/ui/dialog/dialog-title.jsx +15 -0
  145. package/src/lib/components/ui/dialog/dialog-trigger.jsx +7 -0
  146. package/src/lib/components/ui/dialog/dialog.jsx +4 -0
  147. package/src/lib/components/ui/dialog/index.js +32 -32
  148. package/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.jsx +8 -0
  149. package/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.jsx +30 -0
  150. package/src/lib/components/ui/dropdown-menu/dropdown-menu-content.jsx +22 -0
  151. package/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.jsx +16 -0
  152. package/src/lib/components/ui/dropdown-menu/dropdown-menu-group.jsx +7 -0
  153. package/src/lib/components/ui/dropdown-menu/dropdown-menu-item.jsx +20 -0
  154. package/src/lib/components/ui/dropdown-menu/dropdown-menu-label.jsx +17 -0
  155. package/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.jsx +4 -0
  156. package/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.jsx +7 -0
  157. package/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.jsx +29 -0
  158. package/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.jsx +15 -0
  159. package/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.jsx +16 -0
  160. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.jsx +15 -0
  161. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.jsx +23 -0
  162. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.jsx +4 -0
  163. package/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.jsx +7 -0
  164. package/src/lib/components/ui/dropdown-menu/dropdown-menu.jsx +4 -0
  165. package/src/lib/components/ui/dropdown-menu/index.js +52 -52
  166. package/src/lib/components/ui/input/index.js +5 -5
  167. package/src/lib/components/ui/input/input.jsx +19 -0
  168. package/src/lib/components/ui/label/index.js +5 -5
  169. package/src/lib/components/ui/label/label.jsx +19 -0
  170. package/src/lib/components/ui/panel/index.js +21 -21
  171. package/src/lib/components/ui/panel/panel-body.jsx +11 -0
  172. package/src/lib/components/ui/panel/panel-close.jsx +16 -0
  173. package/src/lib/components/ui/panel/panel-content.jsx +29 -0
  174. package/src/lib/components/ui/panel/panel-footer.jsx +11 -0
  175. package/src/lib/components/ui/panel/panel-header.jsx +11 -0
  176. package/src/lib/components/ui/panel/panel-title.jsx +12 -0
  177. package/src/lib/components/ui/panel/panel.jsx +4 -0
  178. package/src/lib/components/ui/popover/index.js +26 -26
  179. package/src/lib/components/ui/popover/popover-close.jsx +7 -0
  180. package/src/lib/components/ui/popover/popover-content.jsx +22 -0
  181. package/src/lib/components/ui/popover/popover-description.jsx +11 -0
  182. package/src/lib/components/ui/popover/popover-header.jsx +11 -0
  183. package/src/lib/components/ui/popover/popover-portal.jsx +4 -0
  184. package/src/lib/components/ui/popover/popover-title.jsx +11 -0
  185. package/src/lib/components/ui/popover/popover-trigger.jsx +8 -0
  186. package/src/lib/components/ui/popover/popover.jsx +4 -0
  187. package/src/lib/components/ui/searchable-list.jsx +159 -0
  188. package/src/lib/components/ui/select/index.js +35 -35
  189. package/src/lib/components/ui/select/select-content.jsx +30 -0
  190. package/src/lib/components/ui/select/select-group-heading.jsx +17 -0
  191. package/src/lib/components/ui/select/select-group.jsx +15 -0
  192. package/src/lib/components/ui/select/select-item.jsx +26 -0
  193. package/src/lib/components/ui/select/select-label.jsx +11 -0
  194. package/src/lib/components/ui/select/select-portal.jsx +4 -0
  195. package/src/lib/components/ui/select/select-scroll-down-button.jsx +18 -0
  196. package/src/lib/components/ui/select/select-scroll-up-button.jsx +18 -0
  197. package/src/lib/components/ui/select/select-separator.jsx +15 -0
  198. package/src/lib/components/ui/select/select-trigger.jsx +25 -0
  199. package/src/lib/components/ui/select/select.jsx +4 -0
  200. package/src/lib/components/ui/separator/index.js +5 -5
  201. package/src/lib/components/ui/separator/separator.jsx +22 -0
  202. package/src/lib/components/ui/sheet/index.js +32 -32
  203. package/src/lib/components/ui/sheet/sheet-close.jsx +7 -0
  204. package/src/lib/components/ui/sheet/sheet-content.jsx +35 -0
  205. package/src/lib/components/ui/sheet/sheet-description.jsx +15 -0
  206. package/src/lib/components/ui/sheet/sheet-footer.jsx +11 -0
  207. package/src/lib/components/ui/sheet/sheet-header.jsx +11 -0
  208. package/src/lib/components/ui/sheet/sheet-overlay.jsx +15 -0
  209. package/src/lib/components/ui/sheet/sheet-portal.jsx +4 -0
  210. package/src/lib/components/ui/sheet/sheet-title.jsx +15 -0
  211. package/src/lib/components/ui/sheet/sheet-trigger.jsx +7 -0
  212. package/src/lib/components/ui/sheet/sheet.jsx +4 -0
  213. package/src/lib/components/ui/textarea/index.js +5 -5
  214. package/src/lib/components/ui/textarea/textarea.jsx +18 -0
  215. package/src/lib/components/ui/toggle/index.js +6 -9
  216. package/src/lib/components/ui/toggle/toggle.jsx +36 -0
  217. package/src/lib/components/ui/toggle-group/index.js +8 -8
  218. package/src/lib/components/ui/toggle-group/toggle-group-item.jsx +29 -0
  219. package/src/lib/components/ui/toggle-group/toggle-group.jsx +43 -0
  220. package/src/lib/components/ui/tooltip/index.js +3 -3
  221. package/src/lib/components/ui/tooltip/tooltip-content.jsx +21 -0
  222. package/src/lib/components/ui/tooltip/tooltip-trigger.jsx +23 -0
  223. package/src/lib/components/ui/tooltip/tooltip.jsx +11 -0
  224. package/src/lib/components/ui/trigger-button/index.js +3 -3
  225. package/src/lib/components/ui/trigger-button/trigger-button.css +38 -0
  226. package/src/lib/components/ui/trigger-button/trigger-button.jsx +63 -0
  227. package/src/logger/devLogger.js +238 -0
  228. package/src/logger/devLogger.test.js +193 -0
  229. package/src/modes.test.js +4 -4
  230. package/src/mountStoryboardCore.js +123 -27
  231. package/src/paletteProviders.js +3 -0
  232. package/src/paletteProviders.test.js +2 -2
  233. package/src/server/index.js +98 -36
  234. package/src/sidepanel.css +214 -0
  235. package/src/styles/tailwind.css +1 -1
  236. package/src/svelte-plugin-ui/__tests__/ModeSwitch.test.ts +8 -8
  237. package/src/svelte-plugin-ui/__tests__/ToolbarShell.test.ts +11 -10
  238. package/src/svelte-plugin-ui/components/Icon.css +11 -0
  239. package/src/svelte-plugin-ui/components/Icon.jsx +281 -0
  240. package/src/svelte-plugin-ui/components/ModeSwitch.css +90 -0
  241. package/src/svelte-plugin-ui/components/ModeSwitch.jsx +47 -0
  242. package/src/svelte-plugin-ui/components/ToolbarShell.css +80 -0
  243. package/src/svelte-plugin-ui/components/ToolbarShell.jsx +84 -0
  244. package/src/svelte-plugin-ui/components/Viewfinder.css +412 -0
  245. package/src/svelte-plugin-ui/components/Viewfinder.jsx +512 -0
  246. package/src/svelte-plugin-ui/mount.ts +12 -16
  247. package/src/toolRegistry.js +4 -4
  248. package/src/toolbarConfigStore.js +30 -0
  249. package/src/tools/handlers/autosync.js +1 -1
  250. package/src/tools/handlers/canvasAddWidget.js +1 -1
  251. package/src/tools/handlers/canvasAgents.js +19 -0
  252. package/src/tools/handlers/canvasToolbar.js +8 -8
  253. package/src/tools/handlers/commandPalette.js +9 -0
  254. package/src/tools/handlers/comments.js +1 -1
  255. package/src/tools/handlers/create.js +1 -1
  256. package/src/tools/handlers/devtools.js +16 -0
  257. package/src/tools/handlers/devtools.test.js +38 -0
  258. package/src/tools/handlers/flows.js +1 -1
  259. package/src/tools/handlers/hideChrome.js +9 -0
  260. package/src/tools/handlers/paletteTheme.js +35 -0
  261. package/src/tools/handlers/theme.js +1 -1
  262. package/src/tools/registry.js +4 -1
  263. package/src/tools/surfaces/commandList.js +3 -3
  264. package/src/tools/surfaces/mainToolbar.js +3 -3
  265. package/src/tools/surfaces/registry.js +4 -4
  266. package/src/ui/design-modes.ts +2 -2
  267. package/src/ui/viewfinder.ts +1 -1
  268. package/src/vite/server-plugin.js +242 -60
  269. package/src/workshop/features/createCanvas/CreateCanvasForm.jsx +260 -0
  270. package/src/workshop/features/createCanvas/index.js +1 -1
  271. package/src/workshop/features/createFlow/CreateFlowForm.jsx +334 -0
  272. package/src/workshop/features/createFlow/index.js +1 -1
  273. package/src/workshop/features/createPage/CreatePageForm.jsx +304 -0
  274. package/src/workshop/features/createPage/index.js +1 -1
  275. package/src/workshop/features/createPrototype/CreatePrototypeForm.jsx +289 -0
  276. package/src/workshop/features/createPrototype/index.js +1 -1
  277. package/src/workshop/features/createPrototype/server.js +98 -0
  278. package/src/workshop/features/createStory/CreateStoryForm.jsx +208 -0
  279. package/src/workshop/features/createStory/index.js +1 -1
  280. package/src/workshop/ui/WorkshopPanel.jsx +98 -0
  281. package/src/workshop/ui/mount.ts +1 -1
  282. package/src/worktree/port.js +48 -0
  283. package/src/worktree/serverRegistry.js +120 -0
  284. package/toolbar.config.json +93 -42
  285. package/widgets.config.json +580 -12
  286. package/src/ActionMenuButton.svelte +0 -119
  287. package/src/AutosyncMenuButton.svelte +0 -397
  288. package/src/CanvasCreateMenu.svelte +0 -295
  289. package/src/CanvasSnap.svelte +0 -87
  290. package/src/CanvasUndoRedo.svelte +0 -108
  291. package/src/CanvasZoomControl.svelte +0 -111
  292. package/src/CanvasZoomToFit.svelte +0 -52
  293. package/src/CommandMenu.svelte +0 -249
  294. package/src/CommandPalette.svelte +0 -33
  295. package/src/CommentsMenuButton.svelte +0 -53
  296. package/src/CoreUIBar.svelte +0 -847
  297. package/src/CreateMenuButton.svelte +0 -133
  298. package/src/DocPanel.svelte +0 -299
  299. package/src/InspectorPanel.svelte +0 -745
  300. package/src/PwaInstallBanner.svelte +0 -124
  301. package/src/SidePanel.svelte +0 -480
  302. package/src/ThemeMenuButton.svelte +0 -132
  303. package/src/comments/ui/AuthModal.svelte +0 -108
  304. package/src/comments/ui/CommentWindow.svelte +0 -333
  305. package/src/comments/ui/CommentsDrawer.svelte +0 -96
  306. package/src/comments/ui/Composer.svelte +0 -65
  307. package/src/lib/components/ui/alert/alert-action.svelte +0 -19
  308. package/src/lib/components/ui/alert/alert-description.svelte +0 -22
  309. package/src/lib/components/ui/alert/alert-title.svelte +0 -22
  310. package/src/lib/components/ui/alert/alert.svelte +0 -38
  311. package/src/lib/components/ui/avatar/avatar-badge.svelte +0 -25
  312. package/src/lib/components/ui/avatar/avatar-fallback.svelte +0 -20
  313. package/src/lib/components/ui/avatar/avatar-group-count.svelte +0 -22
  314. package/src/lib/components/ui/avatar/avatar-group.svelte +0 -22
  315. package/src/lib/components/ui/avatar/avatar-image.svelte +0 -17
  316. package/src/lib/components/ui/avatar/avatar.svelte +0 -24
  317. package/src/lib/components/ui/badge/badge.svelte +0 -44
  318. package/src/lib/components/ui/button/button.svelte +0 -108
  319. package/src/lib/components/ui/card/card-action.svelte +0 -21
  320. package/src/lib/components/ui/card/card-content.svelte +0 -19
  321. package/src/lib/components/ui/card/card-description.svelte +0 -19
  322. package/src/lib/components/ui/card/card-footer.svelte +0 -18
  323. package/src/lib/components/ui/card/card-header.svelte +0 -21
  324. package/src/lib/components/ui/card/card-title.svelte +0 -14
  325. package/src/lib/components/ui/card/card.svelte +0 -21
  326. package/src/lib/components/ui/checkbox/checkbox.svelte +0 -39
  327. package/src/lib/components/ui/collapsible/collapsible-content.svelte +0 -7
  328. package/src/lib/components/ui/collapsible/collapsible-trigger.svelte +0 -7
  329. package/src/lib/components/ui/collapsible/collapsible.svelte +0 -11
  330. package/src/lib/components/ui/dialog/dialog-close.svelte +0 -11
  331. package/src/lib/components/ui/dialog/dialog-content.svelte +0 -42
  332. package/src/lib/components/ui/dialog/dialog-description.svelte +0 -17
  333. package/src/lib/components/ui/dialog/dialog-footer.svelte +0 -29
  334. package/src/lib/components/ui/dialog/dialog-header.svelte +0 -19
  335. package/src/lib/components/ui/dialog/dialog-overlay.svelte +0 -17
  336. package/src/lib/components/ui/dialog/dialog-portal.svelte +0 -7
  337. package/src/lib/components/ui/dialog/dialog-title.svelte +0 -17
  338. package/src/lib/components/ui/dialog/dialog-trigger.svelte +0 -11
  339. package/src/lib/components/ui/dialog/dialog.svelte +0 -7
  340. package/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +0 -16
  341. package/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +0 -40
  342. package/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +0 -27
  343. package/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +0 -18
  344. package/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -7
  345. package/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +0 -24
  346. package/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +0 -20
  347. package/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +0 -7
  348. package/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -16
  349. package/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +0 -34
  350. package/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +0 -17
  351. package/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +0 -19
  352. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +0 -17
  353. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +0 -27
  354. package/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +0 -7
  355. package/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -7
  356. package/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +0 -7
  357. package/src/lib/components/ui/input/input.svelte +0 -40
  358. package/src/lib/components/ui/label/label.svelte +0 -20
  359. package/src/lib/components/ui/panel/panel-body.svelte +0 -13
  360. package/src/lib/components/ui/panel/panel-close.svelte +0 -16
  361. package/src/lib/components/ui/panel/panel-content.svelte +0 -33
  362. package/src/lib/components/ui/panel/panel-footer.svelte +0 -13
  363. package/src/lib/components/ui/panel/panel-header.svelte +0 -16
  364. package/src/lib/components/ui/panel/panel-title.svelte +0 -14
  365. package/src/lib/components/ui/panel/panel.svelte +0 -15
  366. package/src/lib/components/ui/popover/popover-close.svelte +0 -7
  367. package/src/lib/components/ui/popover/popover-content.svelte +0 -27
  368. package/src/lib/components/ui/popover/popover-description.svelte +0 -19
  369. package/src/lib/components/ui/popover/popover-header.svelte +0 -19
  370. package/src/lib/components/ui/popover/popover-portal.svelte +0 -7
  371. package/src/lib/components/ui/popover/popover-title.svelte +0 -19
  372. package/src/lib/components/ui/popover/popover-trigger.svelte +0 -17
  373. package/src/lib/components/ui/popover/popover.svelte +0 -7
  374. package/src/lib/components/ui/select/select-content.svelte +0 -40
  375. package/src/lib/components/ui/select/select-group-heading.svelte +0 -19
  376. package/src/lib/components/ui/select/select-group.svelte +0 -17
  377. package/src/lib/components/ui/select/select-item.svelte +0 -38
  378. package/src/lib/components/ui/select/select-label.svelte +0 -18
  379. package/src/lib/components/ui/select/select-portal.svelte +0 -7
  380. package/src/lib/components/ui/select/select-scroll-down-button.svelte +0 -20
  381. package/src/lib/components/ui/select/select-scroll-up-button.svelte +0 -20
  382. package/src/lib/components/ui/select/select-separator.svelte +0 -17
  383. package/src/lib/components/ui/select/select-trigger.svelte +0 -27
  384. package/src/lib/components/ui/select/select.svelte +0 -11
  385. package/src/lib/components/ui/separator/separator.svelte +0 -23
  386. package/src/lib/components/ui/sheet/sheet-close.svelte +0 -7
  387. package/src/lib/components/ui/sheet/sheet-content.svelte +0 -43
  388. package/src/lib/components/ui/sheet/sheet-description.svelte +0 -17
  389. package/src/lib/components/ui/sheet/sheet-footer.svelte +0 -18
  390. package/src/lib/components/ui/sheet/sheet-header.svelte +0 -19
  391. package/src/lib/components/ui/sheet/sheet-overlay.svelte +0 -17
  392. package/src/lib/components/ui/sheet/sheet-portal.svelte +0 -7
  393. package/src/lib/components/ui/sheet/sheet-title.svelte +0 -17
  394. package/src/lib/components/ui/sheet/sheet-trigger.svelte +0 -7
  395. package/src/lib/components/ui/sheet/sheet.svelte +0 -7
  396. package/src/lib/components/ui/textarea/textarea.svelte +0 -21
  397. package/src/lib/components/ui/toggle/toggle.svelte +0 -45
  398. package/src/lib/components/ui/toggle-group/toggle-group-item.svelte +0 -35
  399. package/src/lib/components/ui/toggle-group/toggle-group.svelte +0 -63
  400. package/src/lib/components/ui/tooltip/tooltip-content.svelte +0 -24
  401. package/src/lib/components/ui/tooltip/tooltip-trigger.svelte +0 -27
  402. package/src/lib/components/ui/tooltip/tooltip.svelte +0 -9
  403. package/src/lib/components/ui/trigger-button/trigger-button.svelte +0 -106
  404. package/src/svelte-plugin-ui/components/Icon.svelte +0 -181
  405. package/src/svelte-plugin-ui/components/ModeSwitch.svelte +0 -121
  406. package/src/svelte-plugin-ui/components/ToolbarShell.svelte +0 -150
  407. package/src/svelte-plugin-ui/components/Viewfinder.svelte +0 -1001
  408. package/src/tools/handlers/docs.js +0 -11
  409. package/src/workshop/features/createCanvas/CreateCanvasForm.svelte +0 -139
  410. package/src/workshop/features/createFlow/CreateFlowForm.svelte +0 -314
  411. package/src/workshop/features/createPage/CreatePageForm.svelte +0 -249
  412. package/src/workshop/features/createPrototype/CreatePrototypeForm.svelte +0 -287
  413. package/src/workshop/features/createStory/CreateStoryForm.svelte +0 -161
  414. 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, hasFlags, 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()
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
125
  } catch {}
104
- s.stop('Dev server started')
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
  }