@dfosco/storyboard 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/dist/storyboard-ui.css +1 -1
  2. package/dist/storyboard-ui.js +13907 -10816
  3. package/dist/storyboard-ui.js.map +1 -1
  4. package/dist/tailwind.css +1 -1
  5. package/package.json +138 -128
  6. package/scaffold/AGENTS.md +9 -7
  7. package/scaffold/README.md +18 -0
  8. package/scaffold/deploy.yml +21 -0
  9. package/scaffold/gitignore +8 -14
  10. package/scaffold/preview.yml +40 -0
  11. package/scaffold/{manifest.json → scaffold.config.json} +73 -3
  12. package/scaffold/scripts/aggregate-artifacts.mjs +257 -0
  13. package/scaffold/skills/canvas/SKILL.md +1 -1
  14. package/scaffold/skills/migrate-0.5.0/SKILL.md +1 -1
  15. package/scaffold/skills/ship/SKILL.md +2 -2
  16. package/scaffold/skills/worktree/SKILL.md +1 -1
  17. package/scaffold/src/_prototype.jsx +17 -0
  18. package/scaffold/src/_story.jsx +13 -0
  19. package/scaffold/src/library/README.md +34 -0
  20. package/scaffold/src/library/_app.jsx +53 -0
  21. package/scaffold/src/library/_app.module.css +8 -0
  22. package/scaffold/src/library/create.jsx +10 -0
  23. package/scaffold/src/library/index.jsx +14 -0
  24. package/scaffold/src/library/mount.jsx +52 -0
  25. package/scaffold/src/library/prototypes-entry.jsx +57 -0
  26. package/scaffold/src/library/routes.jsx +205 -0
  27. package/scaffold/src/library/viewfinder.jsx +13 -0
  28. package/scaffold/src/library/workspace.jsx +17 -0
  29. package/scripts/aggregate-artifacts.mjs +257 -0
  30. package/src/core/artifact/operations.js +19 -13
  31. package/src/core/autosync/server.test.js +1 -1
  32. package/src/core/canvas/hot-pool.js +10 -11
  33. package/src/core/canvas/materializer.js +39 -13
  34. package/src/core/canvas/server.js +324 -69
  35. package/src/core/canvas/server.test.js +365 -2
  36. package/src/core/canvas/terminal-server.js +144 -57
  37. package/src/core/canvas/undoRedo.js +174 -0
  38. package/src/core/canvas/undoRedo.test.js +250 -0
  39. package/src/core/cli/buildManifest.js +34 -0
  40. package/src/core/cli/canvasRedo.js +44 -0
  41. package/src/core/cli/canvasUndo.js +40 -0
  42. package/src/core/cli/create.js +116 -18
  43. package/src/core/cli/dev.js +23 -35
  44. package/src/core/cli/index.js +21 -0
  45. package/src/core/cli/schemas.js +2 -3
  46. package/src/core/cli/serverUrl.js +24 -0
  47. package/src/core/cli/setup.js +14 -25
  48. package/src/core/cli/terminal-welcome.js +12 -6
  49. package/src/core/cli/updateVersion.js +42 -2
  50. package/src/core/cli/workleaf.js +140 -0
  51. package/src/core/comments/api.js +1 -1
  52. package/src/core/comments/queries.js +3 -0
  53. package/src/core/comments/ui/CommentWindow.jsx +3 -2
  54. package/src/core/data/artifactIndex.js +235 -0
  55. package/src/core/data/artifactIndex.test.js +203 -0
  56. package/src/core/data/artifactManifest.js +290 -0
  57. package/src/core/data/artifactManifest.test.js +207 -0
  58. package/src/core/data/viewfinder.js +47 -7
  59. package/src/core/index.js +6 -1
  60. package/src/core/lib/components/ui/avatar/avatar-fallback.jsx +2 -2
  61. package/src/core/lib/components/ui/avatar/avatar-image.jsx +2 -2
  62. package/src/core/lib/components/ui/avatar/avatar.jsx +2 -2
  63. package/src/core/lib/components/ui/checkbox/checkbox.jsx +12 -9
  64. package/src/core/lib/components/ui/dialog/dialog-content.jsx +45 -31
  65. package/src/core/lib/components/ui/dialog/dialog-trigger.jsx +9 -5
  66. package/src/core/lib/components/ui/dialog/dialog.jsx +12 -3
  67. package/src/core/lib/components/ui/dialog/dialog.module.css +118 -0
  68. package/src/core/lib/components/ui/dialog/index.js +4 -34
  69. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.jsx +3 -3
  70. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.jsx +19 -9
  71. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-content.jsx +8 -8
  72. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.jsx +2 -2
  73. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-group.jsx +2 -2
  74. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-item.jsx +15 -4
  75. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-portal.jsx +2 -2
  76. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.jsx +2 -2
  77. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.jsx +14 -7
  78. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-separator.jsx +2 -2
  79. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.jsx +8 -4
  80. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.jsx +4 -4
  81. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub.jsx +2 -2
  82. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-trigger.jsx +8 -2
  83. package/src/core/lib/components/ui/dropdown-menu/dropdown-menu.jsx +2 -2
  84. package/src/core/lib/components/ui/label/label.jsx +1 -2
  85. package/src/core/lib/components/ui/panel/panel-close.jsx +7 -4
  86. package/src/core/lib/components/ui/panel/panel-content.jsx +7 -9
  87. package/src/core/lib/components/ui/panel/panel-title.jsx +3 -3
  88. package/src/core/lib/components/ui/panel/panel.jsx +11 -2
  89. package/src/core/lib/components/ui/separator/separator.jsx +6 -4
  90. package/src/core/lib/components/ui/tooltip/tooltip-content.jsx +7 -6
  91. package/src/core/lib/components/ui/tooltip/tooltip-trigger.jsx +13 -6
  92. package/src/core/lib/components/ui/tooltip/tooltip.jsx +5 -5
  93. package/src/core/mountStoryboardCore.js +234 -74
  94. package/src/core/mountStoryboardCore.test.js +174 -0
  95. package/src/core/rename-watcher/watcher.js +329 -36
  96. package/src/core/rename-watcher/watcher.test.js +253 -0
  97. package/src/core/scaffold/fragments.js +287 -0
  98. package/src/core/scaffold/fragments.test.js +401 -0
  99. package/src/core/scaffold/index.js +291 -0
  100. package/src/core/scaffold/migrateLegacyGitignore.js +157 -0
  101. package/src/core/scaffold/scaffold-integration.test.js +247 -0
  102. package/src/core/scaffold.js +4 -97
  103. package/src/core/stores/configSchema.js +41 -2
  104. package/src/core/stores/recentArtifacts.js +49 -2
  105. package/src/core/stores/recentArtifacts.test.js +59 -6
  106. package/src/core/stores/themeBootstrap.js +264 -0
  107. package/src/core/stores/themeBootstrap.test.js +211 -0
  108. package/src/core/stores/themeStore.test.js +154 -0
  109. package/src/core/stores/themeStore.ts +235 -220
  110. package/src/core/styles/generateThemesCss.js +63 -0
  111. package/src/core/styles/tailwind.css +12 -4
  112. package/src/core/styles/workspace-chrome.css +30 -0
  113. package/src/core/tools/handlers/paletteTheme.js +11 -8
  114. package/src/core/ui/ActionMenuButton.jsx +2 -1
  115. package/src/core/ui/CanvasCreateMenu.jsx +1 -19
  116. package/src/core/ui/CoreUIBar.jsx +10 -7
  117. package/src/core/ui/ThemeMenuButton.jsx +45 -30
  118. package/src/core/vite/server-plugin.js +13 -0
  119. package/src/core/workleaf/cleanup.js +102 -0
  120. package/src/core/workleaf/create.js +199 -0
  121. package/src/core/workleaf/delete.js +101 -0
  122. package/src/core/workleaf/list.js +57 -0
  123. package/src/core/workleaf/merge.js +238 -0
  124. package/src/core/workleaf/paths.js +146 -0
  125. package/src/core/workleaf/paths.test.js +230 -0
  126. package/src/core/workshop/features/createCanvas/CreateCanvasForm.jsx +28 -21
  127. package/src/core/workshop/features/createFlow/server.js +5 -1
  128. package/src/core/workshop/features/createPrototype/server.js +5 -1
  129. package/src/core/workshop/features/templateIndex.js +28 -1
  130. package/src/core/worktree/port.js +48 -5
  131. package/src/core/worktree/port.test.js +42 -0
  132. package/src/internals/ArtifactForm/ArtifactForm.jsx +173 -112
  133. package/src/internals/ArtifactForm/ArtifactForm.module.css +48 -66
  134. package/src/internals/ArtifactForm/artifactSchemas.js +40 -5
  135. package/src/internals/BaseUiForm/BaseUiForm.jsx +293 -0
  136. package/src/internals/BaseUiForm/BaseUiForm.module.css +542 -0
  137. package/src/internals/BranchesDropdown/BranchesDropdown.jsx +69 -0
  138. package/src/internals/BranchesDropdown/BranchesDropdown.module.css +84 -0
  139. package/src/internals/CommandPalette/CommandPalette.jsx +25 -19
  140. package/src/internals/CommandPalette/CreateArtifactForm.jsx +150 -0
  141. package/src/internals/CommandPalette/CreateDialog.jsx +20 -110
  142. package/src/internals/CommandPalette/WidgetArtifactDialog.jsx +1 -1
  143. package/src/internals/CommandPalette/createHelpers.js +30 -0
  144. package/src/internals/CreatePage/CreatePage.jsx +57 -0
  145. package/src/internals/CreatePage/CreatePage.module.css +34 -0
  146. package/src/internals/Dialog.jsx +51 -0
  147. package/src/internals/SimpleWorkspace/SimpleWorkspace.jsx +533 -0
  148. package/src/internals/SimpleWorkspace/SimpleWorkspace.module.css +323 -0
  149. package/src/internals/Tooltip.jsx +39 -0
  150. package/src/internals/Viewfinder.jsx +196 -48
  151. package/src/internals/Viewfinder.module.css +72 -1
  152. package/src/internals/canvas/CanvasPage.jsx +267 -124
  153. package/src/internals/canvas/CanvasPage.multiselect.test.jsx +39 -26
  154. package/src/internals/canvas/PageSelector.jsx +15 -1
  155. package/src/internals/canvas/PageSelector.module.css +14 -0
  156. package/src/internals/canvas/canvasApi.js +40 -5
  157. package/src/internals/canvas/isolation/createIsolationMiddleware.js +68 -0
  158. package/src/internals/canvas/isolation/mountIsolationApp.jsx +88 -0
  159. package/src/internals/canvas/isolation/prototypeRoutes.jsx +131 -0
  160. package/src/internals/canvas/isolation/prototypesEntry.jsx +28 -0
  161. package/src/internals/canvas/isolation/storiesEntry.jsx +20 -0
  162. package/src/internals/canvas/isolation/storyRoutes.jsx +55 -0
  163. package/src/internals/canvas/useUndoRedo.js +75 -60
  164. package/src/internals/canvas/useUndoRedo.test.js +46 -178
  165. package/src/internals/canvas/widgets/ExpandedPaneTopBar.jsx +1 -1
  166. package/src/internals/canvas/widgets/FrozenTerminalOverlay.jsx +30 -21
  167. package/src/internals/canvas/widgets/ImageWidget.jsx +7 -2
  168. package/src/internals/canvas/widgets/LinkPreview.module.css +2 -2
  169. package/src/internals/canvas/widgets/PrototypeEmbed.jsx +69 -10
  170. package/src/internals/canvas/widgets/PrototypeEmbed.test.jsx +114 -0
  171. package/src/internals/canvas/widgets/StorySetWidget.jsx +8 -4
  172. package/src/internals/canvas/widgets/StoryWidget.jsx +21 -38
  173. package/src/internals/canvas/widgets/TerminalReadWidget.jsx +13 -15
  174. package/src/internals/canvas/widgets/WidgetChrome.jsx +1 -1
  175. package/src/internals/canvas/widgets/WidgetChrome.module.css +15 -0
  176. package/src/internals/canvas/widgets/embedTheme.js +2 -2
  177. package/src/internals/canvas/widgets/expandUtils.js +19 -19
  178. package/src/internals/canvas/widgets/normalizeLegacyEmbedSrc.js +74 -0
  179. package/src/internals/context.jsx +22 -1
  180. package/src/internals/context.test.jsx +47 -0
  181. package/src/internals/hooks/useArtifactIndex.js +31 -0
  182. package/src/internals/hooks/useArtifactIndex.test.js +45 -0
  183. package/src/internals/hooks/usePrototypeReloadGuard.js +14 -8
  184. package/src/internals/index.js +6 -0
  185. package/src/internals/loadConsumerWrapper.js +60 -0
  186. package/src/internals/story/ComponentSetPage.jsx +75 -34
  187. package/src/internals/story/StoryPage.jsx +16 -25
  188. package/src/internals/vite/data-plugin.js +313 -148
  189. package/src/internals/vite/data-plugin.test.js +11 -11
  190. package/{scaffold/storyboard.config.json → storyboard.config.json} +25 -0
  191. package/terminal.config.json +1 -1
  192. package/src/core/lib/components/ui/card/card-action.jsx +0 -11
  193. package/src/core/lib/components/ui/card/card-content.jsx +0 -11
  194. package/src/core/lib/components/ui/card/card-description.jsx +0 -11
  195. package/src/core/lib/components/ui/card/card-footer.jsx +0 -11
  196. package/src/core/lib/components/ui/card/card-header.jsx +0 -19
  197. package/src/core/lib/components/ui/card/card-title.jsx +0 -11
  198. package/src/core/lib/components/ui/card/card.jsx +0 -17
  199. package/src/core/lib/components/ui/card/index.js +0 -25
  200. package/src/core/lib/components/ui/collapsible/collapsible-content.jsx +0 -7
  201. package/src/core/lib/components/ui/collapsible/collapsible-trigger.jsx +0 -7
  202. package/src/core/lib/components/ui/collapsible/collapsible.jsx +0 -7
  203. package/src/core/lib/components/ui/collapsible/index.js +0 -13
  204. package/src/core/lib/components/ui/dialog/dialog-close.jsx +0 -7
  205. package/src/core/lib/components/ui/dialog/dialog-description.jsx +0 -15
  206. package/src/core/lib/components/ui/dialog/dialog-footer.jsx +0 -23
  207. package/src/core/lib/components/ui/dialog/dialog-header.jsx +0 -11
  208. package/src/core/lib/components/ui/dialog/dialog-overlay.jsx +0 -15
  209. package/src/core/lib/components/ui/dialog/dialog-portal.jsx +0 -4
  210. package/src/core/lib/components/ui/dialog/dialog-title.jsx +0 -15
  211. package/src/core/lib/components/ui/popover/index.js +0 -28
  212. package/src/core/lib/components/ui/popover/popover-close.jsx +0 -7
  213. package/src/core/lib/components/ui/popover/popover-content.jsx +0 -22
  214. package/src/core/lib/components/ui/popover/popover-description.jsx +0 -11
  215. package/src/core/lib/components/ui/popover/popover-header.jsx +0 -11
  216. package/src/core/lib/components/ui/popover/popover-portal.jsx +0 -4
  217. package/src/core/lib/components/ui/popover/popover-title.jsx +0 -11
  218. package/src/core/lib/components/ui/popover/popover-trigger.jsx +0 -8
  219. package/src/core/lib/components/ui/popover/popover.jsx +0 -4
  220. package/src/core/lib/components/ui/select/index.js +0 -37
  221. package/src/core/lib/components/ui/select/select-content.jsx +0 -30
  222. package/src/core/lib/components/ui/select/select-group-heading.jsx +0 -17
  223. package/src/core/lib/components/ui/select/select-group.jsx +0 -15
  224. package/src/core/lib/components/ui/select/select-item.jsx +0 -26
  225. package/src/core/lib/components/ui/select/select-label.jsx +0 -11
  226. package/src/core/lib/components/ui/select/select-portal.jsx +0 -4
  227. package/src/core/lib/components/ui/select/select-scroll-down-button.jsx +0 -18
  228. package/src/core/lib/components/ui/select/select-scroll-up-button.jsx +0 -18
  229. package/src/core/lib/components/ui/select/select-separator.jsx +0 -15
  230. package/src/core/lib/components/ui/select/select-trigger.jsx +0 -25
  231. package/src/core/lib/components/ui/select/select.jsx +0 -4
  232. package/src/core/lib/components/ui/sheet/index.js +0 -34
  233. package/src/core/lib/components/ui/sheet/sheet-close.jsx +0 -7
  234. package/src/core/lib/components/ui/sheet/sheet-content.jsx +0 -35
  235. package/src/core/lib/components/ui/sheet/sheet-description.jsx +0 -15
  236. package/src/core/lib/components/ui/sheet/sheet-footer.jsx +0 -11
  237. package/src/core/lib/components/ui/sheet/sheet-header.jsx +0 -11
  238. package/src/core/lib/components/ui/sheet/sheet-overlay.jsx +0 -15
  239. package/src/core/lib/components/ui/sheet/sheet-portal.jsx +0 -4
  240. package/src/core/lib/components/ui/sheet/sheet-title.jsx +0 -15
  241. package/src/core/lib/components/ui/sheet/sheet-trigger.jsx +0 -7
  242. package/src/core/lib/components/ui/sheet/sheet.jsx +0 -4
  243. package/src/core/lib/components/ui/toggle/index.js +0 -8
  244. package/src/core/lib/components/ui/toggle/toggle.jsx +0 -36
  245. package/src/core/lib/components/ui/toggle-group/index.js +0 -10
  246. package/src/core/lib/components/ui/toggle-group/toggle-group-item.jsx +0 -29
  247. package/src/core/lib/components/ui/toggle-group/toggle-group.jsx +0 -43
  248. package/src/internals/canvas/StoryErrorBoundary.jsx +0 -47
  249. package/src/internals/canvas/componentIsolate.jsx +0 -144
  250. package/src/internals/canvas/componentSetIsolate.jsx +0 -300
  251. package/src/internals/canvas/widgets/InlineStoryRenderer.jsx +0 -129
  252. package/src/internals/canvas/widgets/InlineStoryRenderer.test.jsx +0 -68
  253. package/src/primer/ThemeSync.jsx +0 -73
  254. package/src/primer/index.js +0 -1
@@ -1205,25 +1205,25 @@ describe('parseDataFile — canvas path-based IDs', () => {
1205
1205
  expect(parseDataFile('src/canvas/_hidden/public.canvas.jsonl')).toBeNull()
1206
1206
  })
1207
1207
 
1208
- it('skips ~-prefixed canvas files in prod (default)', () => {
1209
- expect(parseDataFile('src/canvas/~scratch.canvas.jsonl')).toBeNull()
1210
- expect(parseDataFile('src/canvas/~private/notes.canvas.jsonl')).toBeNull()
1208
+ it('skips canvas files inside drafts/ dirs in prod (default)', () => {
1209
+ expect(parseDataFile('src/canvas/drafts/scratch.canvas.jsonl')).toBeNull()
1210
+ expect(parseDataFile('src/canvas/drafts/private/notes.canvas.jsonl')).toBeNull()
1211
1211
  })
1212
1212
 
1213
- it('includes ~-prefixed canvas files when includeTilde:true (dev)', () => {
1214
- const file = parseDataFile('src/canvas/~scratch.canvas.jsonl', { includeTilde: true })
1213
+ it('includes canvas files inside drafts/ dirs when includeDraft:true (dev)', () => {
1214
+ const file = parseDataFile('src/canvas/drafts/scratch.canvas.jsonl', { includeDraft: true })
1215
1215
  expect(file).not.toBeNull()
1216
- expect(file.name).toBe('~scratch')
1217
- // Public route strips the `~` so locally-gitignored canvases reuse the
1216
+ expect(file.name).toBe('drafts/scratch')
1217
+ // Public route drops `drafts/` so locally-gitignored canvases reuse the
1218
1218
  // same URL as their non-prefixed counterpart.
1219
1219
  expect(file.inferredRoute).toBe('/canvas/scratch')
1220
- const inDir = parseDataFile('src/canvas/~private/notes.canvas.jsonl', { includeTilde: true })
1220
+ const inDir = parseDataFile('src/canvas/drafts/private/notes.canvas.jsonl', { includeDraft: true })
1221
1221
  expect(inDir).not.toBeNull()
1222
- expect(inDir.name).toBe('~private/notes')
1222
+ expect(inDir.name).toBe('drafts/private/notes')
1223
1223
  expect(inDir.inferredRoute).toBe('/canvas/private/notes')
1224
- const inSubdir = parseDataFile('src/canvas/dfosco-explorations/~notes.canvas.jsonl', { includeTilde: true })
1224
+ const inSubdir = parseDataFile('src/canvas/dfosco-explorations/drafts/notes.canvas.jsonl', { includeDraft: true })
1225
1225
  expect(inSubdir).not.toBeNull()
1226
- expect(inSubdir.name).toBe('dfosco-explorations/~notes')
1226
+ expect(inSubdir.name).toBe('dfosco-explorations/drafts/notes')
1227
1227
  expect(inSubdir.inferredRoute).toBe('/canvas/dfosco-explorations/notes')
1228
1228
  })
1229
1229
 
@@ -40,5 +40,30 @@
40
40
  "hideChrome": false,
41
41
  "hideHomepage": false,
42
42
  "protoHomepage": ""
43
+ },
44
+ "theming": {
45
+ "themes": {
46
+ "light": {
47
+ "label": "Light",
48
+ "attrs": {
49
+ "data-color-mode": "light",
50
+ "data-light-theme": "light"
51
+ }
52
+ },
53
+ "dark": {
54
+ "label": "Dark",
55
+ "attrs": {
56
+ "data-color-mode": "dark",
57
+ "data-dark-theme": "dark"
58
+ }
59
+ }
60
+ },
61
+ "surfaces": {
62
+ "prototype": { "label": "Prototype", "sync": true },
63
+ "canvas": { "label": "Canvas", "sync": true },
64
+ "toolbar": { "label": "Tools", "sync": false },
65
+ "codeBoxes": { "label": "Code boxes", "sync": true }
66
+ },
67
+ "default": "system"
43
68
  }
44
69
  }
@@ -20,7 +20,7 @@
20
20
  "resumeCommand": "copilot --resume={id} --agent terminal-agent",
21
21
  "resumeLastCommand": "copilot --continue --agent terminal-agent",
22
22
  "sessionIdEnv": "COPILOT_AGENT_SESSION_ID",
23
- "postStartup": "/allow-all on",
23
+ "postStartup": "/autopilot",
24
24
  "resizable": true
25
25
  },
26
26
  "claude": {
@@ -1,11 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const CardAction = forwardRef(function CardAction({ className, children, ...props }, ref) {
5
- return (
6
- <div ref={ref} data-slot="card-action" className={cn("cn-card-action col-start-2 row-span-2 row-start-1 self-start justify-self-end", className)} {...props}>
7
- {children}
8
- </div>
9
- );
10
- });
11
- export default CardAction;
@@ -1,11 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const CardContent = forwardRef(function CardContent({ className, children, ...props }, ref) {
5
- return (
6
- <div ref={ref} data-slot="card-content" className={cn("px-4 group-data-[size=sm]/card:px-3", className)} {...props}>
7
- {children}
8
- </div>
9
- );
10
- });
11
- export default CardContent;
@@ -1,11 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const CardDescription = forwardRef(function CardDescription({ className, children, ...props }, ref) {
5
- return (
6
- <p ref={ref} data-slot="card-description" className={cn("text-muted-foreground text-sm", className)} {...props}>
7
- {children}
8
- </p>
9
- );
10
- });
11
- export default CardDescription;
@@ -1,11 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const CardFooter = forwardRef(function CardFooter({ className, children, ...props }, ref) {
5
- return (
6
- <div ref={ref} data-slot="card-footer" className={cn("bg-muted/50 rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3 flex items-center", className)} {...props}>
7
- {children}
8
- </div>
9
- );
10
- });
11
- export default CardFooter;
@@ -1,19 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const CardHeader = forwardRef(function CardHeader({ className, children, ...props }, ref) {
5
- return (
6
- <div
7
- ref={ref}
8
- data-slot="card-header"
9
- className={cn(
10
- "gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]",
11
- className
12
- )}
13
- {...props}
14
- >
15
- {children}
16
- </div>
17
- );
18
- });
19
- export default CardHeader;
@@ -1,11 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const CardTitle = forwardRef(function CardTitle({ className, children, ...props }, ref) {
5
- return (
6
- <div ref={ref} data-slot="card-title" className={cn("text-base leading-snug font-medium group-data-[size=sm]/card:text-sm", className)} {...props}>
7
- {children}
8
- </div>
9
- );
10
- });
11
- export default CardTitle;
@@ -1,17 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const Card = forwardRef(function Card({ className, size = "default", children, ...props }, ref) {
5
- return (
6
- <div
7
- ref={ref}
8
- data-slot="card"
9
- data-size={size}
10
- className={cn("ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-xl py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col", className)}
11
- {...props}
12
- >
13
- {children}
14
- </div>
15
- );
16
- });
17
- export default Card;
@@ -1,25 +0,0 @@
1
- import Root from "./card.jsx";
2
- import Content from "./card-content.jsx";
3
- import Description from "./card-description.jsx";
4
- import Footer from "./card-footer.jsx";
5
- import Header from "./card-header.jsx";
6
- import Title from "./card-title.jsx";
7
- import Action from "./card-action.jsx";
8
-
9
- export {
10
- Root,
11
- Content,
12
- Description,
13
- Footer,
14
- Header,
15
- Title,
16
- Action,
17
- //
18
- Root as Card,
19
- Content as CardContent,
20
- Description as CardDescription,
21
- Footer as CardFooter,
22
- Header as CardHeader,
23
- Title as CardTitle,
24
- Action as CardAction,
25
- };
@@ -1,7 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
3
-
4
- const CollapsibleContent = forwardRef(function CollapsibleContent({ ...props }, ref) {
5
- return <CollapsiblePrimitive.Content ref={ref} data-slot="collapsible-content" {...props} />;
6
- });
7
- export default CollapsibleContent;
@@ -1,7 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
3
-
4
- const CollapsibleTrigger = forwardRef(function CollapsibleTrigger({ ...props }, ref) {
5
- return <CollapsiblePrimitive.Trigger ref={ref} data-slot="collapsible-trigger" {...props} />;
6
- });
7
- export default CollapsibleTrigger;
@@ -1,7 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
3
-
4
- const Collapsible = forwardRef(function Collapsible({ ...props }, ref) {
5
- return <CollapsiblePrimitive.Root ref={ref} data-slot="collapsible" {...props} />;
6
- });
7
- export default Collapsible;
@@ -1,13 +0,0 @@
1
- import Root from "./collapsible.jsx";
2
- import Trigger from "./collapsible-trigger.jsx";
3
- import Content from "./collapsible-content.jsx";
4
-
5
- export {
6
- Root,
7
- Content,
8
- Trigger,
9
- //
10
- Root as Collapsible,
11
- Content as CollapsibleContent,
12
- Trigger as CollapsibleTrigger,
13
- };
@@ -1,7 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as DialogPrimitive from "@radix-ui/react-dialog";
3
-
4
- const DialogClose = forwardRef(function DialogClose({ type = "button", ...props }, ref) {
5
- return <DialogPrimitive.Close ref={ref} data-slot="dialog-close" type={type} {...props} />;
6
- });
7
- export default DialogClose;
@@ -1,15 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as DialogPrimitive from "@radix-ui/react-dialog";
3
- import { cn } from "../../../utils/index.js";
4
-
5
- const DialogDescription = forwardRef(function DialogDescription({ className, ...props }, ref) {
6
- return (
7
- <DialogPrimitive.Description
8
- ref={ref}
9
- data-slot="dialog-description"
10
- className={cn("text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3", className)}
11
- {...props}
12
- />
13
- );
14
- });
15
- export default DialogDescription;
@@ -1,23 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as DialogPrimitive from "@radix-ui/react-dialog";
3
- import { cn } from "../../../utils/index.js";
4
- import { Button } from "../button/index.js";
5
-
6
- const DialogFooter = forwardRef(function DialogFooter({ className, children, showCloseButton = false, ...props }, ref) {
7
- return (
8
- <div
9
- ref={ref}
10
- data-slot="dialog-footer"
11
- className={cn("bg-muted/50 -mx-4 -mb-4 rounded-b-xl border-t p-4 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className)}
12
- {...props}
13
- >
14
- {children}
15
- {showCloseButton && (
16
- <DialogPrimitive.Close asChild>
17
- <Button variant="outline">Close</Button>
18
- </DialogPrimitive.Close>
19
- )}
20
- </div>
21
- );
22
- });
23
- export default DialogFooter;
@@ -1,11 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const DialogHeader = forwardRef(function DialogHeader({ className, children, ...props }, ref) {
5
- return (
6
- <div ref={ref} data-slot="dialog-header" className={cn("gap-2 flex flex-col", className)} {...props}>
7
- {children}
8
- </div>
9
- );
10
- });
11
- export default DialogHeader;
@@ -1,15 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as DialogPrimitive from "@radix-ui/react-dialog";
3
- import { cn } from "../../../utils/index.js";
4
-
5
- const DialogOverlay = forwardRef(function DialogOverlay({ className, ...props }, ref) {
6
- return (
7
- <DialogPrimitive.Overlay
8
- ref={ref}
9
- data-slot="dialog-overlay"
10
- className={cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 isolate z-50", className)}
11
- {...props}
12
- />
13
- );
14
- });
15
- export default DialogOverlay;
@@ -1,4 +0,0 @@
1
- import * as DialogPrimitive from "@radix-ui/react-dialog";
2
- export default function DialogPortal(props) {
3
- return <DialogPrimitive.Portal {...props} />;
4
- }
@@ -1,15 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as DialogPrimitive from "@radix-ui/react-dialog";
3
- import { cn } from "../../../utils/index.js";
4
-
5
- const DialogTitle = forwardRef(function DialogTitle({ className, ...props }, ref) {
6
- return (
7
- <DialogPrimitive.Title
8
- ref={ref}
9
- data-slot="dialog-title"
10
- className={cn("text-base leading-none font-medium", className)}
11
- {...props}
12
- />
13
- );
14
- });
15
- export default DialogTitle;
@@ -1,28 +0,0 @@
1
- import Root from "./popover.jsx";
2
- import Close from "./popover-close.jsx";
3
- import Content from "./popover-content.jsx";
4
- import Description from "./popover-description.jsx";
5
- import Header from "./popover-header.jsx";
6
- import Title from "./popover-title.jsx";
7
- import Trigger from "./popover-trigger.jsx";
8
- import Portal from "./popover-portal.jsx";
9
-
10
- export {
11
- Root,
12
- Content,
13
- Description,
14
- Header,
15
- Title,
16
- Trigger,
17
- Close,
18
- Portal,
19
- //
20
- Root as Popover,
21
- Content as PopoverContent,
22
- Description as PopoverDescription,
23
- Header as PopoverHeader,
24
- Title as PopoverTitle,
25
- Trigger as PopoverTrigger,
26
- Close as PopoverClose,
27
- Portal as PopoverPortal,
28
- };
@@ -1,7 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as PopoverPrimitive from "@radix-ui/react-popover";
3
-
4
- const PopoverClose = forwardRef(function PopoverClose(props, ref) {
5
- return <PopoverPrimitive.Close ref={ref} data-slot="popover-close" {...props} />;
6
- });
7
- export default PopoverClose;
@@ -1,22 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as PopoverPrimitive from "@radix-ui/react-popover";
3
- import { cn } from "../../../utils/index.js";
4
-
5
- const PopoverContent = forwardRef(function PopoverContent({ className, sideOffset = 4, align = "center", ...props }, ref) {
6
- return (
7
- <PopoverPrimitive.Portal>
8
- <PopoverPrimitive.Content
9
- ref={ref}
10
- data-slot="popover-content"
11
- sideOffset={sideOffset}
12
- align={align}
13
- className={cn(
14
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 flex flex-col gap-2.5 rounded-lg p-2.5 text-sm shadow-md ring-1 duration-100 z-50 w-72 origin-(--transform-origin) outline-hidden",
15
- className
16
- )}
17
- {...props}
18
- />
19
- </PopoverPrimitive.Portal>
20
- );
21
- });
22
- export default PopoverContent;
@@ -1,11 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const PopoverDescription = forwardRef(function PopoverDescription({ className, children, ...props }, ref) {
5
- return (
6
- <div ref={ref} data-slot="popover-description" className={cn("text-muted-foreground", className)} {...props}>
7
- {children}
8
- </div>
9
- );
10
- });
11
- export default PopoverDescription;
@@ -1,11 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const PopoverHeader = forwardRef(function PopoverHeader({ className, children, ...props }, ref) {
5
- return (
6
- <div ref={ref} data-slot="popover-header" className={cn("flex flex-col gap-0.5 text-sm", className)} {...props}>
7
- {children}
8
- </div>
9
- );
10
- });
11
- export default PopoverHeader;
@@ -1,4 +0,0 @@
1
- import * as PopoverPrimitive from "@radix-ui/react-popover";
2
- export default function PopoverPortal(props) {
3
- return <PopoverPrimitive.Portal {...props} />;
4
- }
@@ -1,11 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const PopoverTitle = forwardRef(function PopoverTitle({ className, children, ...props }, ref) {
5
- return (
6
- <div ref={ref} data-slot="popover-title" className={cn("font-medium", className)} {...props}>
7
- {children}
8
- </div>
9
- );
10
- });
11
- export default PopoverTitle;
@@ -1,8 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as PopoverPrimitive from "@radix-ui/react-popover";
3
- import { cn } from "../../../utils/index.js";
4
-
5
- const PopoverTrigger = forwardRef(function PopoverTrigger({ className, ...props }, ref) {
6
- return <PopoverPrimitive.Trigger ref={ref} data-slot="popover-trigger" className={cn("", className)} {...props} />;
7
- });
8
- export default PopoverTrigger;
@@ -1,4 +0,0 @@
1
- import * as PopoverPrimitive from "@radix-ui/react-popover";
2
- export default function Popover({ children, ...props }) {
3
- return <PopoverPrimitive.Root {...props}>{children}</PopoverPrimitive.Root>;
4
- }
@@ -1,37 +0,0 @@
1
- import Root from "./select.jsx";
2
- import Group from "./select-group.jsx";
3
- import Label from "./select-label.jsx";
4
- import Item from "./select-item.jsx";
5
- import Content from "./select-content.jsx";
6
- import Trigger from "./select-trigger.jsx";
7
- import Separator from "./select-separator.jsx";
8
- import ScrollDownButton from "./select-scroll-down-button.jsx";
9
- import ScrollUpButton from "./select-scroll-up-button.jsx";
10
- import GroupHeading from "./select-group-heading.jsx";
11
- import Portal from "./select-portal.jsx";
12
-
13
- export {
14
- Root,
15
- Group,
16
- Label,
17
- Item,
18
- Content,
19
- Trigger,
20
- Separator,
21
- ScrollDownButton,
22
- ScrollUpButton,
23
- GroupHeading,
24
- Portal,
25
- //
26
- Root as Select,
27
- Group as SelectGroup,
28
- Label as SelectLabel,
29
- Item as SelectItem,
30
- Content as SelectContent,
31
- Trigger as SelectTrigger,
32
- Separator as SelectSeparator,
33
- ScrollDownButton as SelectScrollDownButton,
34
- ScrollUpButton as SelectScrollUpButton,
35
- GroupHeading as SelectGroupHeading,
36
- Portal as SelectPortal,
37
- };
@@ -1,30 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as SelectPrimitive from "@radix-ui/react-select";
3
- import SelectScrollUpButton from "./select-scroll-up-button.jsx";
4
- import SelectScrollDownButton from "./select-scroll-down-button.jsx";
5
- import { cn } from "../../../utils/index.js";
6
-
7
- const SelectContent = forwardRef(function SelectContent({ className, children, sideOffset = 4, position = "popper", ...props }, ref) {
8
- return (
9
- <SelectPrimitive.Portal>
10
- <SelectPrimitive.Content
11
- ref={ref}
12
- data-slot="select-content"
13
- sideOffset={sideOffset}
14
- position={position}
15
- className={cn(
16
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100 relative isolate z-50 overflow-x-hidden overflow-y-auto",
17
- className
18
- )}
19
- {...props}
20
- >
21
- <SelectScrollUpButton />
22
- <SelectPrimitive.Viewport className="w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1">
23
- {children}
24
- </SelectPrimitive.Viewport>
25
- <SelectScrollDownButton />
26
- </SelectPrimitive.Content>
27
- </SelectPrimitive.Portal>
28
- );
29
- });
30
- export default SelectContent;
@@ -1,17 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as SelectPrimitive from "@radix-ui/react-select";
3
- import { cn } from "../../../utils/index.js";
4
-
5
- const SelectGroupHeading = forwardRef(function SelectGroupHeading({ className, children, ...props }, ref) {
6
- return (
7
- <SelectPrimitive.Label
8
- ref={ref}
9
- data-slot="select-group-heading"
10
- className={cn("text-muted-foreground px-2 py-1.5 text-xs", className)}
11
- {...props}
12
- >
13
- {children}
14
- </SelectPrimitive.Label>
15
- );
16
- });
17
- export default SelectGroupHeading;
@@ -1,15 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as SelectPrimitive from "@radix-ui/react-select";
3
- import { cn } from "../../../utils/index.js";
4
-
5
- const SelectGroup = forwardRef(function SelectGroup({ className, ...props }, ref) {
6
- return (
7
- <SelectPrimitive.Group
8
- ref={ref}
9
- data-slot="select-group"
10
- className={cn("scroll-my-1 p-1", className)}
11
- {...props}
12
- />
13
- );
14
- });
15
- export default SelectGroup;
@@ -1,26 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as SelectPrimitive from "@radix-ui/react-select";
3
- import { Check } from "lucide-react";
4
- import { cn } from "../../../utils/index.js";
5
-
6
- const SelectItem = forwardRef(function SelectItem({ className, children, ...props }, ref) {
7
- return (
8
- <SelectPrimitive.Item
9
- ref={ref}
10
- data-slot="select-item"
11
- className={cn(
12
- "focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 focus:bg-accent data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground focus:text-accent-foreground relative flex w-full cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
13
- className
14
- )}
15
- {...props}
16
- >
17
- <span className="absolute end-2 flex size-3.5 items-center justify-center">
18
- <SelectPrimitive.ItemIndicator>
19
- <Check className="cn-select-item-indicator-icon" />
20
- </SelectPrimitive.ItemIndicator>
21
- </span>
22
- <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
23
- </SelectPrimitive.Item>
24
- );
25
- });
26
- export default SelectItem;
@@ -1,11 +0,0 @@
1
- import { forwardRef } from "react";
2
- import { cn } from "../../../utils/index.js";
3
-
4
- const SelectLabel = forwardRef(function SelectLabel({ className, children, ...props }, ref) {
5
- return (
6
- <div ref={ref} data-slot="select-label" className={cn("text-muted-foreground px-1.5 py-1 text-xs", className)} {...props}>
7
- {children}
8
- </div>
9
- );
10
- });
11
- export default SelectLabel;
@@ -1,4 +0,0 @@
1
- import * as SelectPrimitive from "@radix-ui/react-select";
2
- export default function SelectPortal(props) {
3
- return <SelectPrimitive.Portal {...props} />;
4
- }
@@ -1,18 +0,0 @@
1
- import { forwardRef } from "react";
2
- import * as SelectPrimitive from "@radix-ui/react-select";
3
- import { ChevronDown } from "lucide-react";
4
- import { cn } from "../../../utils/index.js";
5
-
6
- const SelectScrollDownButton = forwardRef(function SelectScrollDownButton({ className, ...props }, ref) {
7
- return (
8
- <SelectPrimitive.ScrollDownButton
9
- ref={ref}
10
- data-slot="select-scroll-down-button"
11
- className={cn("bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 bottom-0 w-full", className)}
12
- {...props}
13
- >
14
- <ChevronDown />
15
- </SelectPrimitive.ScrollDownButton>
16
- );
17
- });
18
- export default SelectScrollDownButton;