@dfosco/storyboard 0.7.1 → 0.9.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 (323) hide show
  1. package/dist/storyboard-ui.css +1 -1
  2. package/dist/storyboard-ui.js +14128 -10953
  3. package/dist/storyboard-ui.js.map +1 -1
  4. package/dist/tailwind.css +1 -1
  5. package/dist/tiny-canvas.css +1 -1
  6. package/package.json +138 -128
  7. package/scaffold/AGENTS.md +9 -7
  8. package/scaffold/README.md +18 -0
  9. package/scaffold/deploy.yml +21 -0
  10. package/scaffold/gitignore +8 -14
  11. package/scaffold/preview.yml +40 -0
  12. package/scaffold/{manifest.json → scaffold.config.json} +73 -3
  13. package/scaffold/scripts/aggregate-artifacts.mjs +257 -0
  14. package/scaffold/skills/canvas/SKILL.md +1 -1
  15. package/scaffold/skills/migrate-0.5.0/SKILL.md +1 -1
  16. package/scaffold/skills/ship/SKILL.md +2 -2
  17. package/scaffold/skills/worktree/SKILL.md +1 -1
  18. package/scaffold/src/_prototype.jsx +17 -0
  19. package/scaffold/src/_story.jsx +13 -0
  20. package/scaffold/src/library/README.md +34 -0
  21. package/scaffold/src/library/_app.jsx +41 -0
  22. package/scaffold/src/library/_app.module.css +2 -0
  23. package/scaffold/src/library/create.jsx +10 -0
  24. package/scaffold/src/library/index.jsx +14 -0
  25. package/scaffold/src/library/mount.jsx +51 -0
  26. package/scaffold/src/library/prototypes-entry.jsx +57 -0
  27. package/scaffold/src/library/routes.jsx +205 -0
  28. package/scaffold/src/library/viewfinder.jsx +13 -0
  29. package/scaffold/src/library/workspace.jsx +17 -0
  30. package/scripts/aggregate-artifacts.mjs +257 -0
  31. package/src/canvas/style.css +16 -16
  32. package/src/core/artifact/operations.js +54 -15
  33. package/src/core/artifact/schemas/canvas.schema.json +7 -1
  34. package/src/core/autosync/server.test.js +1 -1
  35. package/src/core/canvas/hot-pool.js +21 -33
  36. package/src/core/canvas/materializer.js +39 -13
  37. package/src/core/canvas/selectedWidgets.js +1 -1
  38. package/src/core/canvas/server.js +376 -100
  39. package/src/core/canvas/server.test.js +472 -2
  40. package/src/core/canvas/terminal-server.js +144 -57
  41. package/src/core/canvas/undoRedo.js +174 -0
  42. package/src/core/canvas/undoRedo.test.js +250 -0
  43. package/src/core/cli/artifact.js +2 -0
  44. package/src/core/cli/buildManifest.js +34 -0
  45. package/src/core/cli/canvasRedo.js +44 -0
  46. package/src/core/cli/canvasUndo.js +40 -0
  47. package/src/core/cli/create.js +151 -23
  48. package/src/core/cli/dev.js +23 -35
  49. package/src/core/cli/index.js +21 -0
  50. package/src/core/cli/schemas.js +8 -4
  51. package/src/core/cli/serverUrl.js +24 -0
  52. package/src/core/cli/setup.js +14 -25
  53. package/src/core/cli/terminal-welcome.js +12 -6
  54. package/src/core/cli/updateVersion.js +42 -2
  55. package/src/core/cli/workleaf.js +140 -0
  56. package/src/core/comments/api.js +1 -1
  57. package/src/core/comments/queries.js +3 -0
  58. package/src/core/comments/ui/CommentWindow.jsx +3 -2
  59. package/src/core/comments/ui/comment-layout.css +14 -14
  60. package/src/core/data/artifactIndex.js +235 -0
  61. package/src/core/data/artifactIndex.test.js +203 -0
  62. package/src/core/data/artifactManifest.js +290 -0
  63. package/src/core/data/artifactManifest.test.js +207 -0
  64. package/src/core/data/viewfinder.js +47 -7
  65. package/src/core/index.js +24 -1
  66. package/src/core/inspector/highlighter.js +1 -1
  67. package/src/core/inspector/mouseMode.js +2 -2
  68. package/src/core/lib/components/ui/avatar/avatar-fallback.jsx +2 -2
  69. package/src/core/lib/components/ui/avatar/avatar-image.jsx +2 -2
  70. package/src/core/lib/components/ui/avatar/avatar.jsx +2 -2
  71. package/src/core/lib/components/ui/checkbox/checkbox.jsx +12 -9
  72. package/src/core/lib/components/ui/dialog/dialog-content.jsx +45 -31
  73. package/src/core/lib/components/ui/dialog/dialog-trigger.jsx +9 -5
  74. package/src/core/lib/components/ui/dialog/dialog.jsx +12 -3
  75. package/src/core/lib/components/ui/dialog/dialog.module.css +118 -0
  76. package/src/core/lib/components/ui/dialog/index.js +4 -34
  77. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.jsx +3 -3
  78. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.jsx +19 -9
  79. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-content.jsx +8 -8
  80. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.jsx +2 -2
  81. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-group.jsx +2 -2
  82. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-item.jsx +15 -4
  83. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-portal.jsx +2 -2
  84. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.jsx +2 -2
  85. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.jsx +14 -7
  86. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-separator.jsx +2 -2
  87. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.jsx +8 -4
  88. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.jsx +4 -4
  89. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub.jsx +2 -2
  90. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-trigger.jsx +8 -2
  91. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu.jsx +2 -2
  92. package/src/core/lib/components/ui/label/label.jsx +1 -2
  93. package/src/core/lib/components/ui/panel/panel-close.jsx +7 -4
  94. package/src/core/lib/components/ui/panel/panel-content.jsx +7 -9
  95. package/src/core/lib/components/ui/panel/panel-title.jsx +3 -3
  96. package/src/core/lib/components/ui/panel/panel.jsx +11 -2
  97. package/src/core/lib/components/ui/separator/separator.jsx +6 -4
  98. package/src/core/lib/components/ui/tooltip/tooltip-content.jsx +7 -6
  99. package/src/core/lib/components/ui/tooltip/tooltip-trigger.jsx +13 -6
  100. package/src/core/lib/components/ui/tooltip/tooltip.jsx +5 -5
  101. package/src/core/modes/modes.css +4 -4
  102. package/src/core/mountStoryboardCore.js +287 -83
  103. package/src/core/mountStoryboardCore.test.js +198 -0
  104. package/src/core/rename-watcher/config.json +1 -1
  105. package/src/core/rename-watcher/watcher.js +330 -37
  106. package/src/core/rename-watcher/watcher.test.js +253 -0
  107. package/src/core/scaffold/fragments.js +287 -0
  108. package/src/core/scaffold/fragments.test.js +401 -0
  109. package/src/core/scaffold/index.js +291 -0
  110. package/src/core/scaffold/migrateLegacyGitignore.js +157 -0
  111. package/src/core/scaffold/scaffold-integration.test.js +247 -0
  112. package/src/core/scaffold.js +4 -97
  113. package/src/core/stores/canvasInteractionStore.js +120 -0
  114. package/src/core/stores/canvasInteractionStore.test.js +126 -0
  115. package/src/core/stores/configSchema.js +64 -8
  116. package/src/core/stores/configSchema.test.js +3 -0
  117. package/src/core/stores/customerModeConfig.js +24 -3
  118. package/src/core/stores/customerModeConfig.test.js +46 -0
  119. package/src/core/stores/presentationStore.js +118 -0
  120. package/src/core/stores/presentationStore.test.js +114 -0
  121. package/src/core/stores/recentArtifacts.js +49 -2
  122. package/src/core/stores/recentArtifacts.test.js +59 -6
  123. package/src/core/stores/themeBootstrap.js +264 -0
  124. package/src/core/stores/themeBootstrap.test.js +211 -0
  125. package/src/core/stores/themeStore.test.js +154 -0
  126. package/src/core/stores/themeStore.ts +235 -220
  127. package/src/core/stores/uiConfig.js +10 -2
  128. package/src/core/styles/generateThemesCss.js +63 -0
  129. package/src/core/styles/tailwind.css +150 -94
  130. package/src/core/styles/workspace-chrome.css +13 -0
  131. package/src/core/tools/handlers/paletteTheme.js +11 -8
  132. package/src/core/ui/ActionMenuButton.jsx +2 -1
  133. package/src/core/ui/AutosyncMenuButton.css +7 -7
  134. package/src/core/ui/BranchSelect.module.css +5 -5
  135. package/src/core/ui/CanvasCreateMenu.jsx +1 -19
  136. package/src/core/ui/ChromeSlot.jsx +92 -0
  137. package/src/core/ui/ChromeSlot.test.jsx +140 -0
  138. package/src/core/ui/CoreUIBar.css +5 -5
  139. package/src/core/ui/CoreUIBar.jsx +170 -142
  140. package/src/core/ui/InspectorPanel.css +5 -5
  141. package/src/core/ui/InspectorPanel.jsx +9 -9
  142. package/src/core/ui/PwaInstallBanner.css +5 -5
  143. package/src/core/ui/PwaInstallBanner.jsx +5 -5
  144. package/src/core/ui/ThemeMenuButton.jsx +45 -30
  145. package/src/core/ui/core-ui-colors.css +28 -66
  146. package/src/core/ui/sidepanel.css +12 -12
  147. package/src/core/vite/server-plugin.js +13 -0
  148. package/src/core/workleaf/cleanup.js +102 -0
  149. package/src/core/workleaf/create.js +199 -0
  150. package/src/core/workleaf/delete.js +101 -0
  151. package/src/core/workleaf/list.js +57 -0
  152. package/src/core/workleaf/merge.js +238 -0
  153. package/src/core/workleaf/paths.js +146 -0
  154. package/src/core/workleaf/paths.test.js +230 -0
  155. package/src/core/workshop/features/createCanvas/CreateCanvasForm.jsx +130 -34
  156. package/src/core/workshop/features/createFlow/server.js +5 -1
  157. package/src/core/workshop/features/createPrototype/server.js +5 -1
  158. package/src/core/workshop/features/templateIndex.js +28 -1
  159. package/src/core/worktree/port.js +48 -5
  160. package/src/core/worktree/port.test.js +42 -0
  161. package/src/internals/ArtifactForm/ArtifactForm.jsx +173 -112
  162. package/src/internals/ArtifactForm/ArtifactForm.module.css +51 -69
  163. package/src/internals/ArtifactForm/artifactSchemas.js +40 -5
  164. package/src/internals/AuthModal/AuthModal.module.css +34 -34
  165. package/src/internals/BaseUiForm/BaseUiForm.jsx +293 -0
  166. package/src/internals/BaseUiForm/BaseUiForm.module.css +542 -0
  167. package/src/internals/BranchBar/BranchBar.module.css +4 -4
  168. package/src/internals/BranchesDropdown/BranchesDropdown.jsx +69 -0
  169. package/src/internals/BranchesDropdown/BranchesDropdown.module.css +84 -0
  170. package/src/internals/CommandPalette/CommandPalette.jsx +41 -29
  171. package/src/internals/CommandPalette/CreateArtifactForm.jsx +150 -0
  172. package/src/internals/CommandPalette/CreateDialog.jsx +20 -110
  173. package/src/internals/CommandPalette/WidgetArtifactDialog.css +16 -16
  174. package/src/internals/CommandPalette/WidgetArtifactDialog.jsx +1 -1
  175. package/src/internals/CommandPalette/command-palette.css +14 -14
  176. package/src/internals/CommandPalette/createHelpers.js +30 -0
  177. package/src/internals/CreatePage/CreatePage.jsx +57 -0
  178. package/src/internals/CreatePage/CreatePage.module.css +34 -0
  179. package/src/internals/Dialog.jsx +51 -0
  180. package/src/internals/FlowError.module.css +5 -5
  181. package/src/internals/PrototypeErrorBoundary.module.css +15 -15
  182. package/src/internals/SimpleWorkspace/SimpleWorkspace.jsx +534 -0
  183. package/src/internals/SimpleWorkspace/SimpleWorkspace.module.css +323 -0
  184. package/src/internals/Tooltip.jsx +39 -0
  185. package/src/internals/Viewfinder.jsx +229 -64
  186. package/src/internals/Viewfinder.module.css +253 -182
  187. package/src/internals/canvas/CanvasControls.module.css +11 -11
  188. package/src/internals/canvas/CanvasPage.bridge.test.jsx +11 -37
  189. package/src/internals/canvas/CanvasPage.jsx +358 -217
  190. package/src/internals/canvas/CanvasPage.module.css +20 -19
  191. package/src/internals/canvas/CanvasPage.multiselect.test.jsx +39 -26
  192. package/src/internals/canvas/CanvasToolbar.module.css +11 -11
  193. package/src/internals/canvas/ConnectorLayer.jsx +39 -2
  194. package/src/internals/canvas/ConnectorLayer.module.css +10 -10
  195. package/src/internals/canvas/PageSelector.jsx +15 -1
  196. package/src/internals/canvas/PageSelector.module.css +41 -27
  197. package/src/internals/canvas/canvasApi.js +40 -5
  198. package/src/internals/canvas/canvasTheme.js +22 -111
  199. package/src/internals/canvas/isolation/createIsolationMiddleware.js +68 -0
  200. package/src/internals/canvas/isolation/mountIsolationApp.jsx +88 -0
  201. package/src/internals/canvas/isolation/prototypeRoutes.jsx +140 -0
  202. package/src/internals/canvas/isolation/prototypesEntry.jsx +28 -0
  203. package/src/internals/canvas/isolation/storiesEntry.jsx +20 -0
  204. package/src/internals/canvas/isolation/storyRoutes.jsx +55 -0
  205. package/src/internals/canvas/useUndoRedo.js +75 -60
  206. package/src/internals/canvas/useUndoRedo.test.js +46 -178
  207. package/src/internals/canvas/widgets/CodePenEmbed.jsx +16 -36
  208. package/src/internals/canvas/widgets/CodePenEmbed.module.css +12 -12
  209. package/src/internals/canvas/widgets/CropOverlay.module.css +23 -23
  210. package/src/internals/canvas/widgets/ExpandedPane.module.css +8 -8
  211. package/src/internals/canvas/widgets/ExpandedPaneTopBar.jsx +1 -1
  212. package/src/internals/canvas/widgets/FigmaEmbed.jsx +15 -36
  213. package/src/internals/canvas/widgets/FigmaEmbed.module.css +15 -15
  214. package/src/internals/canvas/widgets/FrozenTerminalOverlay.jsx +30 -21
  215. package/src/internals/canvas/widgets/FrozenTerminalOverlay.module.css +5 -5
  216. package/src/internals/canvas/widgets/ImageWidget.jsx +7 -2
  217. package/src/internals/canvas/widgets/ImageWidget.module.css +3 -3
  218. package/src/internals/canvas/widgets/LinkPreview.module.css +79 -80
  219. package/src/internals/canvas/widgets/MarkdownBlock.module.css +31 -31
  220. package/src/internals/canvas/widgets/PromptWidget.jsx +2 -16
  221. package/src/internals/canvas/widgets/PromptWidget.module.css +33 -33
  222. package/src/internals/canvas/widgets/PrototypeEmbed.jsx +92 -17
  223. package/src/internals/canvas/widgets/PrototypeEmbed.module.css +58 -56
  224. package/src/internals/canvas/widgets/PrototypeEmbed.test.jsx +118 -4
  225. package/src/internals/canvas/widgets/ResizeHandle.module.css +4 -4
  226. package/src/internals/canvas/widgets/StorySetWidget.jsx +53 -25
  227. package/src/internals/canvas/widgets/StoryWidget.jsx +71 -56
  228. package/src/internals/canvas/widgets/StoryWidget.module.css +22 -20
  229. package/src/internals/canvas/widgets/TerminalReadWidget.jsx +13 -15
  230. package/src/internals/canvas/widgets/TerminalReadWidget.module.css +4 -4
  231. package/src/internals/canvas/widgets/TerminalWidget.jsx +56 -45
  232. package/src/internals/canvas/widgets/TerminalWidget.module.css +10 -10
  233. package/src/internals/canvas/widgets/TilesWidget.module.css +17 -17
  234. package/src/internals/canvas/widgets/WidgetChrome.jsx +1 -1
  235. package/src/internals/canvas/widgets/WidgetChrome.module.css +76 -61
  236. package/src/internals/canvas/widgets/WidgetWrapper.module.css +2 -2
  237. package/src/internals/canvas/widgets/embedOverlay.module.css +14 -4
  238. package/src/internals/canvas/widgets/embedTheme.js +12 -104
  239. package/src/internals/canvas/widgets/expandUtils.js +19 -19
  240. package/src/internals/canvas/widgets/normalizeLegacyEmbedSrc.js +74 -0
  241. package/src/internals/canvas/widgets/widgetConfig.js +5 -5
  242. package/src/internals/context.jsx +22 -1
  243. package/src/internals/context.test.jsx +47 -0
  244. package/src/internals/hooks/useArtifactIndex.js +31 -0
  245. package/src/internals/hooks/useArtifactIndex.test.js +45 -0
  246. package/src/internals/hooks/usePrototypeReloadGuard.js +14 -8
  247. package/src/internals/index.js +6 -0
  248. package/src/internals/loadConsumerWrapper.js +60 -0
  249. package/src/internals/story/ComponentSetPage.jsx +75 -34
  250. package/src/internals/story/ComponentSetPage.module.css +14 -14
  251. package/src/internals/story/StoryPage.jsx +16 -25
  252. package/src/internals/story/StoryPage.module.css +2 -2
  253. package/src/internals/vite/data-plugin.js +317 -149
  254. package/src/internals/vite/data-plugin.test.js +11 -11
  255. package/{scaffold/storyboard.config.json → storyboard.config.json} +25 -0
  256. package/terminal.config.json +1 -1
  257. package/src/core/lib/components/ui/card/card-action.jsx +0 -11
  258. package/src/core/lib/components/ui/card/card-content.jsx +0 -11
  259. package/src/core/lib/components/ui/card/card-description.jsx +0 -11
  260. package/src/core/lib/components/ui/card/card-footer.jsx +0 -11
  261. package/src/core/lib/components/ui/card/card-header.jsx +0 -19
  262. package/src/core/lib/components/ui/card/card-title.jsx +0 -11
  263. package/src/core/lib/components/ui/card/card.jsx +0 -17
  264. package/src/core/lib/components/ui/card/index.js +0 -25
  265. package/src/core/lib/components/ui/collapsible/collapsible-content.jsx +0 -7
  266. package/src/core/lib/components/ui/collapsible/collapsible-trigger.jsx +0 -7
  267. package/src/core/lib/components/ui/collapsible/collapsible.jsx +0 -7
  268. package/src/core/lib/components/ui/collapsible/index.js +0 -13
  269. package/src/core/lib/components/ui/dialog/dialog-close.jsx +0 -7
  270. package/src/core/lib/components/ui/dialog/dialog-description.jsx +0 -15
  271. package/src/core/lib/components/ui/dialog/dialog-footer.jsx +0 -23
  272. package/src/core/lib/components/ui/dialog/dialog-header.jsx +0 -11
  273. package/src/core/lib/components/ui/dialog/dialog-overlay.jsx +0 -15
  274. package/src/core/lib/components/ui/dialog/dialog-portal.jsx +0 -4
  275. package/src/core/lib/components/ui/dialog/dialog-title.jsx +0 -15
  276. package/src/core/lib/components/ui/popover/index.js +0 -28
  277. package/src/core/lib/components/ui/popover/popover-close.jsx +0 -7
  278. package/src/core/lib/components/ui/popover/popover-content.jsx +0 -22
  279. package/src/core/lib/components/ui/popover/popover-description.jsx +0 -11
  280. package/src/core/lib/components/ui/popover/popover-header.jsx +0 -11
  281. package/src/core/lib/components/ui/popover/popover-portal.jsx +0 -4
  282. package/src/core/lib/components/ui/popover/popover-title.jsx +0 -11
  283. package/src/core/lib/components/ui/popover/popover-trigger.jsx +0 -8
  284. package/src/core/lib/components/ui/popover/popover.jsx +0 -4
  285. package/src/core/lib/components/ui/select/index.js +0 -37
  286. package/src/core/lib/components/ui/select/select-content.jsx +0 -30
  287. package/src/core/lib/components/ui/select/select-group-heading.jsx +0 -17
  288. package/src/core/lib/components/ui/select/select-group.jsx +0 -15
  289. package/src/core/lib/components/ui/select/select-item.jsx +0 -26
  290. package/src/core/lib/components/ui/select/select-label.jsx +0 -11
  291. package/src/core/lib/components/ui/select/select-portal.jsx +0 -4
  292. package/src/core/lib/components/ui/select/select-scroll-down-button.jsx +0 -18
  293. package/src/core/lib/components/ui/select/select-scroll-up-button.jsx +0 -18
  294. package/src/core/lib/components/ui/select/select-separator.jsx +0 -15
  295. package/src/core/lib/components/ui/select/select-trigger.jsx +0 -25
  296. package/src/core/lib/components/ui/select/select.jsx +0 -4
  297. package/src/core/lib/components/ui/sheet/index.js +0 -34
  298. package/src/core/lib/components/ui/sheet/sheet-close.jsx +0 -7
  299. package/src/core/lib/components/ui/sheet/sheet-content.jsx +0 -35
  300. package/src/core/lib/components/ui/sheet/sheet-description.jsx +0 -15
  301. package/src/core/lib/components/ui/sheet/sheet-footer.jsx +0 -11
  302. package/src/core/lib/components/ui/sheet/sheet-header.jsx +0 -11
  303. package/src/core/lib/components/ui/sheet/sheet-overlay.jsx +0 -15
  304. package/src/core/lib/components/ui/sheet/sheet-portal.jsx +0 -4
  305. package/src/core/lib/components/ui/sheet/sheet-title.jsx +0 -15
  306. package/src/core/lib/components/ui/sheet/sheet-trigger.jsx +0 -7
  307. package/src/core/lib/components/ui/sheet/sheet.jsx +0 -4
  308. package/src/core/lib/components/ui/toggle/index.js +0 -8
  309. package/src/core/lib/components/ui/toggle/toggle.jsx +0 -36
  310. package/src/core/lib/components/ui/toggle-group/index.js +0 -10
  311. package/src/core/lib/components/ui/toggle-group/toggle-group-item.jsx +0 -29
  312. package/src/core/lib/components/ui/toggle-group/toggle-group.jsx +0 -43
  313. package/src/internals/canvas/StoryErrorBoundary.jsx +0 -47
  314. package/src/internals/canvas/WebGLContextPool.jsx +0 -291
  315. package/src/internals/canvas/WebGLContextPool.test.jsx +0 -165
  316. package/src/internals/canvas/componentIsolate.jsx +0 -144
  317. package/src/internals/canvas/componentSetIsolate.jsx +0 -300
  318. package/src/internals/canvas/widgets/ComponentSetWidget.module.css +0 -89
  319. package/src/internals/canvas/widgets/InlineStoryRenderer.jsx +0 -129
  320. package/src/internals/canvas/widgets/InlineStoryRenderer.test.jsx +0 -68
  321. package/src/internals/canvas/widgets/StorySetWidget.module.css +0 -89
  322. package/src/primer/ThemeSync.jsx +0 -73
  323. package/src/primer/index.js +0 -1
@@ -0,0 +1,323 @@
1
+ /* SimpleWorkspace — minimal "old index" layout: title + tabs + cards */
2
+
3
+ .page {
4
+ min-height: calc(100vh - var(--sb-branch-bar-height, 0px));
5
+ background: var(--color-background, #fff);
6
+ font-family: 'Mona Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
7
+ color: var(--color-foreground, #1a1a1a);
8
+ padding: 48px 24px 80px;
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ .inner {
13
+ max-width: 880px;
14
+ margin: 0 auto;
15
+ }
16
+
17
+ /* ─── Header ─── */
18
+
19
+ .header {
20
+ margin-bottom: 24px;
21
+ }
22
+
23
+ .headerTop {
24
+ display: flex;
25
+ align-items: flex-start;
26
+ justify-content: space-between;
27
+ gap: 16px;
28
+ margin-bottom: 32px;
29
+ }
30
+
31
+ .title {
32
+ font-size: 40px;
33
+ font-weight: 800;
34
+ line-height: 1.1;
35
+ margin: 0;
36
+ color: var(--color-foreground, #1a1a1a);
37
+ }
38
+
39
+ .subtitle {
40
+ font-size: 15px;
41
+ color: var(--color-foreground-muted, #656d76);
42
+ margin: 6px 0 0;
43
+ }
44
+
45
+ /* ─── Create button ─── */
46
+
47
+ .createBtn {
48
+ display: flex;
49
+ align-items: center;
50
+ gap: 6px;
51
+ padding: 8px 20px;
52
+ background: var(--color-background-emphasis, #1a1a1a);
53
+ color: var(--color-foreground-on-emphasis, #fff);
54
+ border: none;
55
+ border-radius: 8px;
56
+ font-size: 16px;
57
+ font-weight: 500;
58
+ font-family: inherit;
59
+ cursor: pointer;
60
+ transition: background 0.15s;
61
+ flex-shrink: 0;
62
+ }
63
+
64
+ .createBtn:hover {
65
+ background: var(--color-background-emphasis, #333);
66
+ }
67
+
68
+ .createDropdownPositioner {
69
+ z-index: 200;
70
+ }
71
+
72
+ .createDropdown {
73
+ background: var(--color-background, #fff);
74
+ border: 1px solid var(--color-border, #e5e5e5);
75
+ border-radius: 12px;
76
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.12);
77
+ padding: 16px;
78
+ width: 380px;
79
+ max-width: 90vw;
80
+ font-family: 'Mona Sans', -apple-system, BlinkMacSystemFont, sans-serif;
81
+ }
82
+
83
+ /* ─── Tabs ─── */
84
+
85
+ .tabs {
86
+ display: inline-flex;
87
+ background: var(--color-background-inset, #f6f8fa);
88
+ border-radius: 999px;
89
+ padding: 4px;
90
+ gap: 2px;
91
+ }
92
+
93
+ .tab {
94
+ appearance: none;
95
+ border: none;
96
+ background: transparent;
97
+ color: var(--color-foreground-muted, #656d76);
98
+ padding: 6px 18px;
99
+ font-size: 14px;
100
+ font-weight: 500;
101
+ border-radius: 999px;
102
+ cursor: pointer;
103
+ font-family: inherit;
104
+ }
105
+
106
+ .tab:hover {
107
+ color: var(--color-foreground, #1a1a1a);
108
+ }
109
+
110
+ .tabActive {
111
+ composes: tab;
112
+ background: var(--color-background, #fff);
113
+ color: var(--color-foreground, #1a1a1a);
114
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
115
+ }
116
+
117
+ /* ─── List ─── */
118
+
119
+ .list {
120
+ display: flex;
121
+ flex-direction: column;
122
+ gap: 12px;
123
+ }
124
+
125
+ /* ─── Folder card (compact strip, non-interactive section header) ─── */
126
+
127
+ .folderSection {
128
+ display: flex;
129
+ flex-direction: column;
130
+ gap: 8px;
131
+ padding: 8px;
132
+ background: var(--color-background-inset, #f6f8fa);
133
+ border-radius: 12px;
134
+ }
135
+
136
+ .folderItems {
137
+ display: flex;
138
+ flex-direction: column;
139
+ gap: 8px;
140
+ }
141
+
142
+ .folderCard {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 12px;
146
+ padding: 10px 14px;
147
+ color: inherit;
148
+ }
149
+
150
+ .folderIcon {
151
+ display: inline-flex;
152
+ align-items: center;
153
+ justify-content: center;
154
+ color: var(--color-foreground-accent, #0969da);
155
+ flex-shrink: 0;
156
+ }
157
+
158
+ .folderName {
159
+ font-size: 13px;
160
+ font-weight: 700;
161
+ letter-spacing: 0.4px;
162
+ color: var(--color-foreground, #1a1a1a);
163
+ }
164
+
165
+ .folderDesc {
166
+ font-size: 14px;
167
+ color: var(--color-foreground-muted, #656d76);
168
+ }
169
+
170
+ /* ─── Artifact card ─── */
171
+
172
+ .card {
173
+ display: block;
174
+ padding: 18px 20px;
175
+ border: 1px solid var(--color-border, #d0d7de);
176
+ border-radius: 10px;
177
+ background: var(--color-background, #fff);
178
+ text-decoration: none;
179
+ color: inherit;
180
+ transition: border-color 0.12s, box-shadow 0.12s;
181
+ }
182
+
183
+ .card,
184
+ .card * {
185
+ text-decoration: none;
186
+ }
187
+
188
+ .card:hover {
189
+ border-color: var(--color-foreground-muted, #8c959f);
190
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
191
+ text-decoration: none;
192
+ }
193
+
194
+ .cardBody {
195
+ display: flex;
196
+ flex-direction: column;
197
+ gap: 6px;
198
+ }
199
+
200
+ .cardTitleRow {
201
+ display: flex;
202
+ align-items: center;
203
+ gap: 6px;
204
+ }
205
+
206
+ /* ─── Private/draft badge (eye-off) ─── */
207
+
208
+ .privateBadge {
209
+ display: inline-flex;
210
+ align-items: center;
211
+ justify-content: center;
212
+ width: 18px;
213
+ height: 18px;
214
+ border-radius: 999px;
215
+ background: var(--color-background-inset, #f6f8fa);
216
+ color: var(--color-foreground-muted, #656d76);
217
+ flex-shrink: 0;
218
+ }
219
+
220
+ .cardPrivate {
221
+ background: var(--color-background-inset, #fbfbfb);
222
+ }
223
+
224
+ .folderCardPrivate {
225
+ opacity: 0.85;
226
+ }
227
+
228
+ .cardTitle {
229
+ font-size: 18px;
230
+ font-weight: 600;
231
+ color: var(--color-foreground, #1a1a1a);
232
+ line-height: 1.2;
233
+ }
234
+
235
+ .cardChevron {
236
+ color: var(--color-foreground-muted, #656d76);
237
+ flex-shrink: 0;
238
+ }
239
+
240
+ .cardDescription {
241
+ font-size: 14px;
242
+ color: var(--color-foreground-muted, #656d76);
243
+ line-height: 1.4;
244
+ }
245
+
246
+ .cardFooter {
247
+ display: flex;
248
+ align-items: center;
249
+ gap: 10px;
250
+ margin-top: 6px;
251
+ }
252
+
253
+ .cardAuthorList {
254
+ font-size: 13px;
255
+ color: var(--color-foreground-muted, #656d76);
256
+ }
257
+
258
+ /* ─── Avatars ─── */
259
+
260
+ .avatarStack {
261
+ display: inline-flex;
262
+ align-items: center;
263
+ }
264
+
265
+ .avatarStack > * + * {
266
+ margin-left: -6px;
267
+ }
268
+
269
+ .avatarImg {
270
+ width: 20px;
271
+ height: 20px;
272
+ border-radius: 50%;
273
+ background: var(--color-background-muted, #eaeef2);
274
+ border: 2px solid var(--color-background, #fff);
275
+ object-fit: cover;
276
+ display: block;
277
+ }
278
+
279
+ /* ─── Footer "Show all" ─── */
280
+
281
+ .footer {
282
+ display: flex;
283
+ flex-wrap: wrap;
284
+ justify-content: center;
285
+ gap: 8px;
286
+ margin-top: 32px;
287
+ }
288
+
289
+ .expandBtn {
290
+ appearance: none;
291
+ border: 1px solid var(--color-border, #d0d7de);
292
+ background: var(--color-background, #fff);
293
+ color: var(--color-foreground-muted, #555);
294
+ padding: 8px 18px;
295
+ border-radius: 999px;
296
+ font-size: 13px;
297
+ font-weight: 500;
298
+ cursor: pointer;
299
+ font-family: inherit;
300
+ text-decoration: none;
301
+ display: inline-flex;
302
+ align-items: center;
303
+ line-height: 1.2;
304
+ transition: background 0.12s, color 0.12s, border-color 0.12s;
305
+ }
306
+
307
+ .expandBtn:hover {
308
+ background: var(--color-background-inset, #f6f8fa);
309
+ color: var(--color-foreground, #1a1a1a);
310
+ border-color: var(--color-foreground-muted, #8c959f);
311
+ text-decoration: none;
312
+ }
313
+
314
+ /* ─── Empty state ─── */
315
+
316
+ .empty {
317
+ padding: 48px 24px;
318
+ text-align: center;
319
+ color: var(--color-foreground-muted, #656d76);
320
+ font-size: 15px;
321
+ border: 1px dashed var(--color-border, #d0d7de);
322
+ border-radius: 10px;
323
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Tooltip — internal adapter that exposes the Primer-style
3
+ * `<Tooltip text direction>{trigger}</Tooltip>` API on top of the
4
+ * framework-neutral core Tooltip primitive (`core/lib/components/ui/tooltip`).
5
+ *
6
+ * Lets canvas chrome and the viewfinder use a tooltip without pulling in
7
+ * `@primer/react` — see plan `.github/plans/style-separation.md` (Layer A).
8
+ *
9
+ * Direction mapping (Primer → base-ui):
10
+ * n → top ne → top + align=end
11
+ * s → bottom nw → top + align=start
12
+ * e → right se → bottom + align=end
13
+ * w → left sw → bottom + align=start
14
+ *
15
+ * The trigger child renders via `asChild`, preserving its original element
16
+ * (typically a `<button>`) so click semantics and accessibility are unchanged.
17
+ */
18
+ import * as Tooltip from '../core/lib/components/ui/tooltip/index.js'
19
+
20
+ const DIRECTION_MAP = {
21
+ n: { side: 'top', align: 'center' },
22
+ s: { side: 'bottom', align: 'center' },
23
+ e: { side: 'right', align: 'center' },
24
+ w: { side: 'left', align: 'center' },
25
+ ne: { side: 'top', align: 'end' },
26
+ nw: { side: 'top', align: 'start' },
27
+ se: { side: 'bottom', align: 'end' },
28
+ sw: { side: 'bottom', align: 'start' },
29
+ }
30
+
31
+ export default function TooltipAdapter({ text, direction = 'n', children, ...rest }) {
32
+ const { side, align } = DIRECTION_MAP[direction] || DIRECTION_MAP.n
33
+ return (
34
+ <Tooltip.Root {...rest}>
35
+ <Tooltip.Trigger asChild>{children}</Tooltip.Trigger>
36
+ <Tooltip.Content side={side} align={align}>{text}</Tooltip.Content>
37
+ </Tooltip.Root>
38
+ )
39
+ }