@dfosco/storyboard 0.7.0 → 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.
- package/assets/favicon.svg +12 -0
- package/dist/storyboard-ui.css +1 -1
- package/dist/storyboard-ui.js +13907 -10816
- package/dist/storyboard-ui.js.map +1 -1
- package/dist/tailwind.css +1 -1
- package/package.json +138 -127
- package/scaffold/AGENTS.md +9 -7
- package/scaffold/README.md +18 -0
- package/scaffold/deploy.yml +21 -0
- package/scaffold/gitignore +8 -14
- package/scaffold/preview.yml +40 -0
- package/scaffold/{manifest.json → scaffold.config.json} +73 -3
- package/scaffold/scripts/aggregate-artifacts.mjs +257 -0
- package/scaffold/skills/canvas/SKILL.md +1 -1
- package/scaffold/skills/migrate-0.5.0/SKILL.md +1 -1
- package/scaffold/skills/ship/SKILL.md +2 -2
- package/scaffold/skills/worktree/SKILL.md +1 -1
- package/scaffold/src/_prototype.jsx +17 -0
- package/scaffold/src/_story.jsx +13 -0
- package/scaffold/src/library/README.md +34 -0
- package/scaffold/src/library/_app.jsx +53 -0
- package/scaffold/src/library/_app.module.css +8 -0
- package/scaffold/src/library/create.jsx +10 -0
- package/scaffold/src/library/index.jsx +14 -0
- package/scaffold/src/library/mount.jsx +52 -0
- package/scaffold/src/library/prototypes-entry.jsx +57 -0
- package/scaffold/src/library/routes.jsx +205 -0
- package/scaffold/src/library/viewfinder.jsx +13 -0
- package/scaffold/src/library/workspace.jsx +17 -0
- package/scripts/aggregate-artifacts.mjs +257 -0
- package/src/core/artifact/operations.js +19 -13
- package/src/core/autosync/server.test.js +1 -1
- package/src/core/canvas/githubEmbeds.js +12 -0
- package/src/core/canvas/githubEmbeds.test.js +71 -2
- package/src/core/canvas/hot-pool.js +10 -11
- package/src/core/canvas/materializer.js +39 -13
- package/src/core/canvas/server.js +324 -69
- package/src/core/canvas/server.test.js +365 -2
- package/src/core/canvas/terminal-server.js +144 -57
- package/src/core/canvas/undoRedo.js +174 -0
- package/src/core/canvas/undoRedo.test.js +250 -0
- package/src/core/cli/buildManifest.js +34 -0
- package/src/core/cli/canvasRedo.js +44 -0
- package/src/core/cli/canvasUndo.js +40 -0
- package/src/core/cli/create.js +116 -18
- package/src/core/cli/dev.js +23 -35
- package/src/core/cli/index.js +21 -0
- package/src/core/cli/schemas.js +2 -3
- package/src/core/cli/serverUrl.js +24 -0
- package/src/core/cli/setup.js +14 -25
- package/src/core/cli/terminal-welcome.js +12 -6
- package/src/core/cli/updateVersion.js +42 -2
- package/src/core/cli/workleaf.js +140 -0
- package/src/core/comments/api.js +1 -1
- package/src/core/comments/queries.js +3 -0
- package/src/core/comments/ui/CommentWindow.jsx +3 -2
- package/src/core/data/artifactIndex.js +235 -0
- package/src/core/data/artifactIndex.test.js +203 -0
- package/src/core/data/artifactManifest.js +290 -0
- package/src/core/data/artifactManifest.test.js +207 -0
- package/src/core/data/viewfinder.js +47 -7
- package/src/core/index.js +6 -1
- package/src/core/lib/components/ui/avatar/avatar-fallback.jsx +2 -2
- package/src/core/lib/components/ui/avatar/avatar-image.jsx +2 -2
- package/src/core/lib/components/ui/avatar/avatar.jsx +2 -2
- package/src/core/lib/components/ui/checkbox/checkbox.jsx +12 -9
- package/src/core/lib/components/ui/dialog/dialog-content.jsx +45 -31
- package/src/core/lib/components/ui/dialog/dialog-trigger.jsx +9 -5
- package/src/core/lib/components/ui/dialog/dialog.jsx +12 -3
- package/src/core/lib/components/ui/dialog/dialog.module.css +118 -0
- package/src/core/lib/components/ui/dialog/index.js +4 -34
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.jsx +3 -3
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.jsx +19 -9
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-content.jsx +8 -8
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.jsx +2 -2
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-group.jsx +2 -2
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-item.jsx +15 -4
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-portal.jsx +2 -2
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.jsx +2 -2
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.jsx +14 -7
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-separator.jsx +2 -2
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.jsx +8 -4
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.jsx +4 -4
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub.jsx +2 -2
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-trigger.jsx +8 -2
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu.jsx +2 -2
- package/src/core/lib/components/ui/label/label.jsx +1 -2
- package/src/core/lib/components/ui/panel/panel-close.jsx +7 -4
- package/src/core/lib/components/ui/panel/panel-content.jsx +7 -9
- package/src/core/lib/components/ui/panel/panel-title.jsx +3 -3
- package/src/core/lib/components/ui/panel/panel.jsx +11 -2
- package/src/core/lib/components/ui/separator/separator.jsx +6 -4
- package/src/core/lib/components/ui/tooltip/tooltip-content.jsx +7 -6
- package/src/core/lib/components/ui/tooltip/tooltip-trigger.jsx +13 -6
- package/src/core/lib/components/ui/tooltip/tooltip.jsx +5 -5
- package/src/core/mountStoryboardCore.js +234 -74
- package/src/core/mountStoryboardCore.test.js +174 -0
- package/src/core/rename-watcher/watcher.js +329 -36
- package/src/core/rename-watcher/watcher.test.js +253 -0
- package/src/core/scaffold/fragments.js +287 -0
- package/src/core/scaffold/fragments.test.js +401 -0
- package/src/core/scaffold/index.js +291 -0
- package/src/core/scaffold/migrateLegacyGitignore.js +157 -0
- package/src/core/scaffold/scaffold-integration.test.js +247 -0
- package/src/core/scaffold.js +4 -97
- package/src/core/stores/configSchema.js +41 -2
- package/src/core/stores/recentArtifacts.js +49 -2
- package/src/core/stores/recentArtifacts.test.js +59 -6
- package/src/core/stores/themeBootstrap.js +264 -0
- package/src/core/stores/themeBootstrap.test.js +211 -0
- package/src/core/stores/themeStore.test.js +154 -0
- package/src/core/stores/themeStore.ts +235 -220
- package/src/core/styles/generateThemesCss.js +63 -0
- package/src/core/styles/tailwind.css +12 -4
- package/src/core/styles/workspace-chrome.css +30 -0
- package/src/core/tools/handlers/paletteTheme.js +11 -8
- package/src/core/ui/ActionMenuButton.jsx +2 -1
- package/src/core/ui/CanvasCreateMenu.jsx +1 -19
- package/src/core/ui/CoreUIBar.jsx +10 -7
- package/src/core/ui/ThemeMenuButton.jsx +45 -30
- package/src/core/vite/server-plugin.js +36 -0
- package/src/core/workleaf/cleanup.js +102 -0
- package/src/core/workleaf/create.js +199 -0
- package/src/core/workleaf/delete.js +101 -0
- package/src/core/workleaf/list.js +57 -0
- package/src/core/workleaf/merge.js +238 -0
- package/src/core/workleaf/paths.js +146 -0
- package/src/core/workleaf/paths.test.js +230 -0
- package/src/core/workshop/features/createCanvas/CreateCanvasForm.jsx +28 -21
- package/src/core/workshop/features/createFlow/server.js +5 -1
- package/src/core/workshop/features/createPrototype/server.js +5 -1
- package/src/core/workshop/features/templateIndex.js +28 -1
- package/src/core/worktree/port.js +48 -5
- package/src/core/worktree/port.test.js +42 -0
- package/src/internals/ArtifactForm/ArtifactForm.jsx +173 -112
- package/src/internals/ArtifactForm/ArtifactForm.module.css +48 -66
- package/src/internals/ArtifactForm/artifactSchemas.js +40 -5
- package/src/internals/BaseUiForm/BaseUiForm.jsx +293 -0
- package/src/internals/BaseUiForm/BaseUiForm.module.css +542 -0
- package/src/internals/BranchesDropdown/BranchesDropdown.jsx +69 -0
- package/src/internals/BranchesDropdown/BranchesDropdown.module.css +84 -0
- package/src/internals/CommandPalette/CommandPalette.jsx +25 -19
- package/src/internals/CommandPalette/CreateArtifactForm.jsx +150 -0
- package/src/internals/CommandPalette/CreateDialog.jsx +20 -110
- package/src/internals/CommandPalette/WidgetArtifactDialog.jsx +1 -1
- package/src/internals/CommandPalette/createHelpers.js +30 -0
- package/src/internals/CreatePage/CreatePage.jsx +57 -0
- package/src/internals/CreatePage/CreatePage.module.css +34 -0
- package/src/internals/Dialog.jsx +51 -0
- package/src/internals/SimpleWorkspace/SimpleWorkspace.jsx +533 -0
- package/src/internals/SimpleWorkspace/SimpleWorkspace.module.css +323 -0
- package/src/internals/Tooltip.jsx +39 -0
- package/src/internals/Viewfinder.jsx +196 -48
- package/src/internals/Viewfinder.module.css +72 -1
- package/src/internals/canvas/CanvasPage.jsx +267 -124
- package/src/internals/canvas/CanvasPage.multiselect.test.jsx +39 -26
- package/src/internals/canvas/PageSelector.jsx +15 -1
- package/src/internals/canvas/PageSelector.module.css +14 -0
- package/src/internals/canvas/canvasApi.js +40 -5
- package/src/internals/canvas/isolation/createIsolationMiddleware.js +68 -0
- package/src/internals/canvas/isolation/mountIsolationApp.jsx +88 -0
- package/src/internals/canvas/isolation/prototypeRoutes.jsx +131 -0
- package/src/internals/canvas/isolation/prototypesEntry.jsx +28 -0
- package/src/internals/canvas/isolation/storiesEntry.jsx +20 -0
- package/src/internals/canvas/isolation/storyRoutes.jsx +55 -0
- package/src/internals/canvas/useUndoRedo.js +75 -60
- package/src/internals/canvas/useUndoRedo.test.js +46 -178
- package/src/internals/canvas/widgets/ExpandedPaneTopBar.jsx +1 -1
- package/src/internals/canvas/widgets/FrozenTerminalOverlay.jsx +30 -21
- package/src/internals/canvas/widgets/ImageWidget.jsx +7 -2
- package/src/internals/canvas/widgets/LinkPreview.jsx +45 -1
- package/src/internals/canvas/widgets/LinkPreview.module.css +71 -0
- package/src/internals/canvas/widgets/PrototypeEmbed.jsx +69 -10
- package/src/internals/canvas/widgets/PrototypeEmbed.test.jsx +114 -0
- package/src/internals/canvas/widgets/StorySetWidget.jsx +8 -4
- package/src/internals/canvas/widgets/StoryWidget.jsx +21 -38
- package/src/internals/canvas/widgets/TerminalReadWidget.jsx +13 -15
- package/src/internals/canvas/widgets/WidgetChrome.jsx +1 -1
- package/src/internals/canvas/widgets/WidgetChrome.module.css +15 -0
- package/src/internals/canvas/widgets/embedTheme.js +2 -2
- package/src/internals/canvas/widgets/expandUtils.js +19 -19
- package/src/internals/canvas/widgets/normalizeLegacyEmbedSrc.js +74 -0
- package/src/internals/context.jsx +22 -1
- package/src/internals/context.test.jsx +47 -0
- package/src/internals/hooks/useArtifactIndex.js +31 -0
- package/src/internals/hooks/useArtifactIndex.test.js +45 -0
- package/src/internals/hooks/usePrototypeReloadGuard.js +14 -8
- package/src/internals/index.js +6 -0
- package/src/internals/loadConsumerWrapper.js +60 -0
- package/src/internals/story/ComponentSetPage.jsx +75 -34
- package/src/internals/story/StoryPage.jsx +16 -25
- package/src/internals/vite/data-plugin.js +313 -148
- package/src/internals/vite/data-plugin.test.js +11 -11
- package/{scaffold/storyboard.config.json → storyboard.config.json} +25 -0
- package/terminal.config.json +1 -1
- package/src/core/lib/components/ui/card/card-action.jsx +0 -11
- package/src/core/lib/components/ui/card/card-content.jsx +0 -11
- package/src/core/lib/components/ui/card/card-description.jsx +0 -11
- package/src/core/lib/components/ui/card/card-footer.jsx +0 -11
- package/src/core/lib/components/ui/card/card-header.jsx +0 -19
- package/src/core/lib/components/ui/card/card-title.jsx +0 -11
- package/src/core/lib/components/ui/card/card.jsx +0 -17
- package/src/core/lib/components/ui/card/index.js +0 -25
- package/src/core/lib/components/ui/collapsible/collapsible-content.jsx +0 -7
- package/src/core/lib/components/ui/collapsible/collapsible-trigger.jsx +0 -7
- package/src/core/lib/components/ui/collapsible/collapsible.jsx +0 -7
- package/src/core/lib/components/ui/collapsible/index.js +0 -13
- package/src/core/lib/components/ui/dialog/dialog-close.jsx +0 -7
- package/src/core/lib/components/ui/dialog/dialog-description.jsx +0 -15
- package/src/core/lib/components/ui/dialog/dialog-footer.jsx +0 -23
- package/src/core/lib/components/ui/dialog/dialog-header.jsx +0 -11
- package/src/core/lib/components/ui/dialog/dialog-overlay.jsx +0 -15
- package/src/core/lib/components/ui/dialog/dialog-portal.jsx +0 -4
- package/src/core/lib/components/ui/dialog/dialog-title.jsx +0 -15
- package/src/core/lib/components/ui/popover/index.js +0 -28
- package/src/core/lib/components/ui/popover/popover-close.jsx +0 -7
- package/src/core/lib/components/ui/popover/popover-content.jsx +0 -22
- package/src/core/lib/components/ui/popover/popover-description.jsx +0 -11
- package/src/core/lib/components/ui/popover/popover-header.jsx +0 -11
- package/src/core/lib/components/ui/popover/popover-portal.jsx +0 -4
- package/src/core/lib/components/ui/popover/popover-title.jsx +0 -11
- package/src/core/lib/components/ui/popover/popover-trigger.jsx +0 -8
- package/src/core/lib/components/ui/popover/popover.jsx +0 -4
- package/src/core/lib/components/ui/select/index.js +0 -37
- package/src/core/lib/components/ui/select/select-content.jsx +0 -30
- package/src/core/lib/components/ui/select/select-group-heading.jsx +0 -17
- package/src/core/lib/components/ui/select/select-group.jsx +0 -15
- package/src/core/lib/components/ui/select/select-item.jsx +0 -26
- package/src/core/lib/components/ui/select/select-label.jsx +0 -11
- package/src/core/lib/components/ui/select/select-portal.jsx +0 -4
- package/src/core/lib/components/ui/select/select-scroll-down-button.jsx +0 -18
- package/src/core/lib/components/ui/select/select-scroll-up-button.jsx +0 -18
- package/src/core/lib/components/ui/select/select-separator.jsx +0 -15
- package/src/core/lib/components/ui/select/select-trigger.jsx +0 -25
- package/src/core/lib/components/ui/select/select.jsx +0 -4
- package/src/core/lib/components/ui/sheet/index.js +0 -34
- package/src/core/lib/components/ui/sheet/sheet-close.jsx +0 -7
- package/src/core/lib/components/ui/sheet/sheet-content.jsx +0 -35
- package/src/core/lib/components/ui/sheet/sheet-description.jsx +0 -15
- package/src/core/lib/components/ui/sheet/sheet-footer.jsx +0 -11
- package/src/core/lib/components/ui/sheet/sheet-header.jsx +0 -11
- package/src/core/lib/components/ui/sheet/sheet-overlay.jsx +0 -15
- package/src/core/lib/components/ui/sheet/sheet-portal.jsx +0 -4
- package/src/core/lib/components/ui/sheet/sheet-title.jsx +0 -15
- package/src/core/lib/components/ui/sheet/sheet-trigger.jsx +0 -7
- package/src/core/lib/components/ui/sheet/sheet.jsx +0 -4
- package/src/core/lib/components/ui/toggle/index.js +0 -8
- package/src/core/lib/components/ui/toggle/toggle.jsx +0 -36
- package/src/core/lib/components/ui/toggle-group/index.js +0 -10
- package/src/core/lib/components/ui/toggle-group/toggle-group-item.jsx +0 -29
- package/src/core/lib/components/ui/toggle-group/toggle-group.jsx +0 -43
- package/src/internals/canvas/StoryErrorBoundary.jsx +0 -47
- package/src/internals/canvas/componentIsolate.jsx +0 -144
- package/src/internals/canvas/componentSetIsolate.jsx +0 -300
- package/src/internals/canvas/widgets/InlineStoryRenderer.jsx +0 -129
- package/src/internals/canvas/widgets/InlineStoryRenderer.test.jsx +0 -68
- package/src/primer/ThemeSync.jsx +0 -73
- package/src/primer/index.js +0 -1
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { forwardRef } from "react";
|
|
2
|
-
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
3
|
-
import { ChevronUp } from "lucide-react";
|
|
4
|
-
import { cn } from "../../../utils/index.js";
|
|
5
|
-
|
|
6
|
-
const SelectScrollUpButton = forwardRef(function SelectScrollUpButton({ className, ...props }, ref) {
|
|
7
|
-
return (
|
|
8
|
-
<SelectPrimitive.ScrollUpButton
|
|
9
|
-
ref={ref}
|
|
10
|
-
data-slot="select-scroll-up-button"
|
|
11
|
-
className={cn("bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 top-0 w-full", className)}
|
|
12
|
-
{...props}
|
|
13
|
-
>
|
|
14
|
-
<ChevronUp />
|
|
15
|
-
</SelectPrimitive.ScrollUpButton>
|
|
16
|
-
);
|
|
17
|
-
});
|
|
18
|
-
export default SelectScrollUpButton;
|
|
@@ -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 SelectSeparator = forwardRef(function SelectSeparator({ className, ...props }, ref) {
|
|
6
|
-
return (
|
|
7
|
-
<SelectPrimitive.Separator
|
|
8
|
-
ref={ref}
|
|
9
|
-
data-slot="select-separator"
|
|
10
|
-
className={cn("bg-border -mx-1 my-1 h-px pointer-events-none", className)}
|
|
11
|
-
{...props}
|
|
12
|
-
/>
|
|
13
|
-
);
|
|
14
|
-
});
|
|
15
|
-
export default SelectSeparator;
|
|
@@ -1,25 +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 SelectTrigger = forwardRef(function SelectTrigger({ className, children, size = "default", ...props }, ref) {
|
|
7
|
-
return (
|
|
8
|
-
<SelectPrimitive.Trigger
|
|
9
|
-
ref={ref}
|
|
10
|
-
data-slot="select-trigger"
|
|
11
|
-
data-size={size}
|
|
12
|
-
className={cn(
|
|
13
|
-
"border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm transition-colors select-none focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--sb--radius-md),10px)] *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
14
|
-
className
|
|
15
|
-
)}
|
|
16
|
-
{...props}
|
|
17
|
-
>
|
|
18
|
-
{children}
|
|
19
|
-
<SelectPrimitive.Icon asChild>
|
|
20
|
-
<ChevronDown className="text-muted-foreground size-4 pointer-events-none" />
|
|
21
|
-
</SelectPrimitive.Icon>
|
|
22
|
-
</SelectPrimitive.Trigger>
|
|
23
|
-
);
|
|
24
|
-
});
|
|
25
|
-
export default SelectTrigger;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import Root from "./sheet.jsx";
|
|
2
|
-
import Portal from "./sheet-portal.jsx";
|
|
3
|
-
import Trigger from "./sheet-trigger.jsx";
|
|
4
|
-
import Close from "./sheet-close.jsx";
|
|
5
|
-
import Overlay from "./sheet-overlay.jsx";
|
|
6
|
-
import Content from "./sheet-content.jsx";
|
|
7
|
-
import Header from "./sheet-header.jsx";
|
|
8
|
-
import Footer from "./sheet-footer.jsx";
|
|
9
|
-
import Title from "./sheet-title.jsx";
|
|
10
|
-
import Description from "./sheet-description.jsx";
|
|
11
|
-
|
|
12
|
-
export {
|
|
13
|
-
Root,
|
|
14
|
-
Close,
|
|
15
|
-
Trigger,
|
|
16
|
-
Portal,
|
|
17
|
-
Overlay,
|
|
18
|
-
Content,
|
|
19
|
-
Header,
|
|
20
|
-
Footer,
|
|
21
|
-
Title,
|
|
22
|
-
Description,
|
|
23
|
-
//
|
|
24
|
-
Root as Sheet,
|
|
25
|
-
Close as SheetClose,
|
|
26
|
-
Trigger as SheetTrigger,
|
|
27
|
-
Portal as SheetPortal,
|
|
28
|
-
Overlay as SheetOverlay,
|
|
29
|
-
Content as SheetContent,
|
|
30
|
-
Header as SheetHeader,
|
|
31
|
-
Footer as SheetFooter,
|
|
32
|
-
Title as SheetTitle,
|
|
33
|
-
Description as SheetDescription,
|
|
34
|
-
};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { forwardRef } from "react";
|
|
2
|
-
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
3
|
-
|
|
4
|
-
const SheetClose = forwardRef(function SheetClose(props, ref) {
|
|
5
|
-
return <DialogPrimitive.Close ref={ref} data-slot="sheet-close" {...props} />;
|
|
6
|
-
});
|
|
7
|
-
export default SheetClose;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { forwardRef } from "react";
|
|
2
|
-
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
3
|
-
import SheetOverlay from "./sheet-overlay.jsx";
|
|
4
|
-
import { cn } from "../../../utils/index.js";
|
|
5
|
-
import { Button } from "../button/index.js";
|
|
6
|
-
import { X } from "lucide-react";
|
|
7
|
-
|
|
8
|
-
const SheetContent = forwardRef(function SheetContent({ className, side = "right", showCloseButton = true, children, ...props }, ref) {
|
|
9
|
-
return (
|
|
10
|
-
<DialogPrimitive.Portal>
|
|
11
|
-
<SheetOverlay />
|
|
12
|
-
<DialogPrimitive.Content
|
|
13
|
-
ref={ref}
|
|
14
|
-
data-slot="sheet-content"
|
|
15
|
-
data-side={side}
|
|
16
|
-
className={cn(
|
|
17
|
-
"bg-background fixed z-50 flex flex-col gap-4 bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[side=bottom]:data-[state=open]:slide-in-from-bottom-10 data-[side=left]:data-[state=open]:slide-in-from-left-10 data-[side=right]:data-[state=open]:slide-in-from-right-10 data-[side=top]:data-[state=open]:slide-in-from-top-10 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[side=bottom]:data-[state=closed]:slide-out-to-bottom-10 data-[side=left]:data-[state=closed]:slide-out-to-left-10 data-[side=right]:data-[state=closed]:slide-out-to-right-10 data-[side=top]:data-[state=closed]:slide-out-to-top-10",
|
|
18
|
-
className
|
|
19
|
-
)}
|
|
20
|
-
{...props}
|
|
21
|
-
>
|
|
22
|
-
{children}
|
|
23
|
-
{showCloseButton && (
|
|
24
|
-
<DialogPrimitive.Close asChild data-slot="sheet-close">
|
|
25
|
-
<Button variant="ghost" className="absolute top-3 right-3" size="icon-sm">
|
|
26
|
-
<X />
|
|
27
|
-
<span className="sr-only">Close</span>
|
|
28
|
-
</Button>
|
|
29
|
-
</DialogPrimitive.Close>
|
|
30
|
-
)}
|
|
31
|
-
</DialogPrimitive.Content>
|
|
32
|
-
</DialogPrimitive.Portal>
|
|
33
|
-
);
|
|
34
|
-
});
|
|
35
|
-
export default SheetContent;
|
|
@@ -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 SheetDescription = forwardRef(function SheetDescription({ className, ...props }, ref) {
|
|
6
|
-
return (
|
|
7
|
-
<DialogPrimitive.Description
|
|
8
|
-
ref={ref}
|
|
9
|
-
data-slot="sheet-description"
|
|
10
|
-
className={cn("text-muted-foreground text-sm", className)}
|
|
11
|
-
{...props}
|
|
12
|
-
/>
|
|
13
|
-
);
|
|
14
|
-
});
|
|
15
|
-
export default SheetDescription;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { forwardRef } from "react";
|
|
2
|
-
import { cn } from "../../../utils/index.js";
|
|
3
|
-
|
|
4
|
-
const SheetFooter = forwardRef(function SheetFooter({ className, children, ...props }, ref) {
|
|
5
|
-
return (
|
|
6
|
-
<div ref={ref} data-slot="sheet-footer" className={cn("gap-2 p-4 mt-auto flex flex-col", className)} {...props}>
|
|
7
|
-
{children}
|
|
8
|
-
</div>
|
|
9
|
-
);
|
|
10
|
-
});
|
|
11
|
-
export default SheetFooter;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { forwardRef } from "react";
|
|
2
|
-
import { cn } from "../../../utils/index.js";
|
|
3
|
-
|
|
4
|
-
const SheetHeader = forwardRef(function SheetHeader({ className, children, ...props }, ref) {
|
|
5
|
-
return (
|
|
6
|
-
<div ref={ref} data-slot="sheet-header" className={cn("gap-0.5 p-4 flex flex-col", className)} {...props}>
|
|
7
|
-
{children}
|
|
8
|
-
</div>
|
|
9
|
-
);
|
|
10
|
-
});
|
|
11
|
-
export default SheetHeader;
|
|
@@ -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 SheetOverlay = forwardRef(function SheetOverlay({ className, ...props }, ref) {
|
|
6
|
-
return (
|
|
7
|
-
<DialogPrimitive.Overlay
|
|
8
|
-
ref={ref}
|
|
9
|
-
data-slot="sheet-overlay"
|
|
10
|
-
className={cn("bg-black/10 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 z-50", className)}
|
|
11
|
-
{...props}
|
|
12
|
-
/>
|
|
13
|
-
);
|
|
14
|
-
});
|
|
15
|
-
export default SheetOverlay;
|
|
@@ -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 SheetTitle = forwardRef(function SheetTitle({ className, ...props }, ref) {
|
|
6
|
-
return (
|
|
7
|
-
<DialogPrimitive.Title
|
|
8
|
-
ref={ref}
|
|
9
|
-
data-slot="sheet-title"
|
|
10
|
-
className={cn("text-foreground text-base font-medium", className)}
|
|
11
|
-
{...props}
|
|
12
|
-
/>
|
|
13
|
-
);
|
|
14
|
-
});
|
|
15
|
-
export default SheetTitle;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { forwardRef } from "react";
|
|
2
|
-
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
3
|
-
|
|
4
|
-
const SheetTrigger = forwardRef(function SheetTrigger(props, ref) {
|
|
5
|
-
return <DialogPrimitive.Trigger ref={ref} data-slot="sheet-trigger" {...props} />;
|
|
6
|
-
});
|
|
7
|
-
export default SheetTrigger;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { forwardRef } from "react";
|
|
2
|
-
import * as TogglePrimitive from "@radix-ui/react-toggle";
|
|
3
|
-
import { cn } from "../../../utils/index.js";
|
|
4
|
-
import { tv } from "tailwind-variants";
|
|
5
|
-
|
|
6
|
-
export const toggleVariants = tv({
|
|
7
|
-
base: "hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[state=on]:bg-muted gap-1 rounded-lg text-sm font-medium transition-all [&_svg:not([class*='size-'])]:size-4 group/toggle hover:bg-muted inline-flex items-center justify-center whitespace-nowrap outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
8
|
-
variants: {
|
|
9
|
-
variant: {
|
|
10
|
-
default: "bg-transparent",
|
|
11
|
-
outline: "border-input hover:bg-muted border bg-transparent",
|
|
12
|
-
},
|
|
13
|
-
size: {
|
|
14
|
-
default: "h-8 min-w-8 px-2",
|
|
15
|
-
sm: "h-7 min-w-7 rounded-[min(var(--sb--radius-md),12px)] px-1.5 text-[0.8rem]",
|
|
16
|
-
lg: "h-9 min-w-9 px-2.5",
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
defaultVariants: {
|
|
20
|
-
variant: "default",
|
|
21
|
-
size: "default",
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
const Toggle = forwardRef(function Toggle({ className, variant = "default", size = "default", ...props }, ref) {
|
|
26
|
-
return (
|
|
27
|
-
<TogglePrimitive.Root
|
|
28
|
-
ref={ref}
|
|
29
|
-
data-slot="toggle"
|
|
30
|
-
className={cn(toggleVariants({ variant, size }), className)}
|
|
31
|
-
{...props}
|
|
32
|
-
/>
|
|
33
|
-
);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
export default Toggle;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { forwardRef } from "react";
|
|
2
|
-
import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
|
|
3
|
-
import { useToggleGroupCtx } from "./toggle-group.jsx";
|
|
4
|
-
import { cn } from "../../../utils/index.js";
|
|
5
|
-
import { toggleVariants } from "../toggle/index.js";
|
|
6
|
-
|
|
7
|
-
const ToggleGroupItem = forwardRef(function ToggleGroupItem({ className, variant, size, ...props }, ref) {
|
|
8
|
-
const ctx = useToggleGroupCtx();
|
|
9
|
-
|
|
10
|
-
return (
|
|
11
|
-
<ToggleGroupPrimitive.Item
|
|
12
|
-
ref={ref}
|
|
13
|
-
data-slot="toggle-group-item"
|
|
14
|
-
data-variant={ctx.variant || variant}
|
|
15
|
-
data-size={ctx.size || size}
|
|
16
|
-
data-spacing={ctx.spacing}
|
|
17
|
-
className={cn(
|
|
18
|
-
"group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg shrink-0 focus:z-10 focus-visible:z-10 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t",
|
|
19
|
-
toggleVariants({
|
|
20
|
-
variant: ctx.variant || variant,
|
|
21
|
-
size: ctx.size || size,
|
|
22
|
-
}),
|
|
23
|
-
className
|
|
24
|
-
)}
|
|
25
|
-
{...props}
|
|
26
|
-
/>
|
|
27
|
-
);
|
|
28
|
-
});
|
|
29
|
-
export default ToggleGroupItem;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { forwardRef, createContext, useContext, useMemo } from "react";
|
|
2
|
-
import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
|
|
3
|
-
import { cn } from "../../../utils/index.js";
|
|
4
|
-
|
|
5
|
-
export const ToggleGroupContext = createContext({
|
|
6
|
-
variant: "default",
|
|
7
|
-
size: "default",
|
|
8
|
-
spacing: 0,
|
|
9
|
-
orientation: "horizontal",
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
export function useToggleGroupCtx() {
|
|
13
|
-
return useContext(ToggleGroupContext);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const ToggleGroup = forwardRef(function ToggleGroup(
|
|
17
|
-
{ className, variant = "default", size = "default", spacing = 0, orientation = "horizontal", children, ...props },
|
|
18
|
-
ref
|
|
19
|
-
) {
|
|
20
|
-
const ctx = useMemo(() => ({ variant, size, spacing, orientation }), [variant, size, spacing, orientation]);
|
|
21
|
-
|
|
22
|
-
return (
|
|
23
|
-
<ToggleGroupContext.Provider value={ctx}>
|
|
24
|
-
<ToggleGroupPrimitive.Root
|
|
25
|
-
ref={ref}
|
|
26
|
-
orientation={orientation}
|
|
27
|
-
data-slot="toggle-group"
|
|
28
|
-
data-variant={variant}
|
|
29
|
-
data-size={size}
|
|
30
|
-
data-spacing={spacing}
|
|
31
|
-
style={{ '--sb--gap': spacing }}
|
|
32
|
-
className={cn(
|
|
33
|
-
"rounded-lg data-[size=sm]:rounded-[min(var(--sb--radius-md),10px)] group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--sb--gap))] data-vertical:flex-col data-vertical:items-stretch",
|
|
34
|
-
className
|
|
35
|
-
)}
|
|
36
|
-
{...props}
|
|
37
|
-
>
|
|
38
|
-
{children}
|
|
39
|
-
</ToggleGroupPrimitive.Root>
|
|
40
|
-
</ToggleGroupContext.Provider>
|
|
41
|
-
);
|
|
42
|
-
});
|
|
43
|
-
export default ToggleGroup;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared error boundary for isolated story rendering.
|
|
3
|
-
*
|
|
4
|
-
* Used by:
|
|
5
|
-
* - componentIsolate.jsx (the iframe shell at /_storyboard/canvas/isolate)
|
|
6
|
-
* - InlineStoryRenderer (in-process story rendering when canvas.inlineStories=true)
|
|
7
|
-
*
|
|
8
|
-
* Catches render errors so a broken story cannot crash the parent (canvas or shell).
|
|
9
|
-
*/
|
|
10
|
-
import { createElement, Component as ReactComponent } from 'react'
|
|
11
|
-
|
|
12
|
-
const errorStyle = {
|
|
13
|
-
padding: '16px',
|
|
14
|
-
color: '#cf222e',
|
|
15
|
-
fontFamily: 'system-ui, -apple-system, sans-serif',
|
|
16
|
-
fontSize: '13px',
|
|
17
|
-
lineHeight: 1.5,
|
|
18
|
-
whiteSpace: 'pre-wrap',
|
|
19
|
-
wordBreak: 'break-word',
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export class StoryErrorBoundary extends ReactComponent {
|
|
23
|
-
constructor(props) {
|
|
24
|
-
super(props)
|
|
25
|
-
this.state = { error: null }
|
|
26
|
-
}
|
|
27
|
-
static getDerivedStateFromError(error) {
|
|
28
|
-
return { error }
|
|
29
|
-
}
|
|
30
|
-
componentDidUpdate(prevProps) {
|
|
31
|
-
if (prevProps.resetKey !== this.props.resetKey && this.state.error) {
|
|
32
|
-
this.setState({ error: null })
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
render() {
|
|
36
|
-
if (this.state.error) {
|
|
37
|
-
return createElement('div', { style: errorStyle },
|
|
38
|
-
createElement('strong', null, this.props.name || 'Component'),
|
|
39
|
-
createElement('br'),
|
|
40
|
-
String(this.state.error.message || this.state.error),
|
|
41
|
-
)
|
|
42
|
-
}
|
|
43
|
-
return this.props.children
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export default StoryErrorBoundary
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Canvas Component Isolate — iframe entry point.
|
|
3
|
-
*
|
|
4
|
-
* Renders a single named export from a .story.jsx module inside an
|
|
5
|
-
* isolated document. The parent CanvasPage embeds this via an iframe
|
|
6
|
-
* so a broken component cannot crash the entire canvas.
|
|
7
|
-
*
|
|
8
|
-
* Query params:
|
|
9
|
-
* module — absolute or base-relative path to the .story.jsx file
|
|
10
|
-
* export — the named export to render
|
|
11
|
-
* theme — canvas theme (light / dark / dark_dimmed)
|
|
12
|
-
*/
|
|
13
|
-
import { createElement } from 'react'
|
|
14
|
-
import { createRoot } from 'react-dom/client'
|
|
15
|
-
import { ThemeProvider, BaseStyles } from '@primer/react'
|
|
16
|
-
import { StoryErrorBoundary as IsolateErrorBoundary } from './StoryErrorBoundary.jsx'
|
|
17
|
-
|
|
18
|
-
// ── Primer Primitives CSS (required for CSS variables) ──────────────
|
|
19
|
-
import '@primer/primitives/dist/css/base/size/size.css'
|
|
20
|
-
import '@primer/primitives/dist/css/base/typography/typography.css'
|
|
21
|
-
import '@primer/primitives/dist/css/base/motion/motion.css'
|
|
22
|
-
import '@primer/primitives/dist/css/functional/size/border.css'
|
|
23
|
-
import '@primer/primitives/dist/css/functional/size/breakpoints.css'
|
|
24
|
-
import '@primer/primitives/dist/css/functional/size/size-coarse.css'
|
|
25
|
-
import '@primer/primitives/dist/css/functional/size/size-fine.css'
|
|
26
|
-
import '@primer/primitives/dist/css/functional/size/size.css'
|
|
27
|
-
import '@primer/primitives/dist/css/functional/size/viewport.css'
|
|
28
|
-
import '@primer/primitives/dist/css/functional/typography/typography.css'
|
|
29
|
-
import '@primer/primitives/dist/css/functional/themes/light.css'
|
|
30
|
-
import '@primer/primitives/dist/css/functional/themes/light-colorblind.css'
|
|
31
|
-
import '@primer/primitives/dist/css/functional/themes/dark.css'
|
|
32
|
-
import '@primer/primitives/dist/css/functional/themes/dark-colorblind.css'
|
|
33
|
-
import '@primer/primitives/dist/css/functional/themes/dark-high-contrast.css'
|
|
34
|
-
import '@primer/primitives/dist/css/functional/themes/dark-dimmed.css'
|
|
35
|
-
|
|
36
|
-
// ── Styles ──────────────────────────────────────────────────────────
|
|
37
|
-
const errorStyle = {
|
|
38
|
-
padding: '16px',
|
|
39
|
-
color: '#cf222e',
|
|
40
|
-
fontFamily: 'system-ui, -apple-system, sans-serif',
|
|
41
|
-
fontSize: '13px',
|
|
42
|
-
lineHeight: 1.5,
|
|
43
|
-
whiteSpace: 'pre-wrap',
|
|
44
|
-
wordBreak: 'break-word',
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// ── Resolve module path (mirrors useCanvas.resolveCanvasModuleImport) ─
|
|
48
|
-
function resolveModulePath(raw) {
|
|
49
|
-
if (!raw) return raw
|
|
50
|
-
if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(raw)) return raw
|
|
51
|
-
if (!raw.startsWith('/')) return raw
|
|
52
|
-
const base = (import.meta.env?.BASE_URL || '/').replace(/\/$/, '')
|
|
53
|
-
if (!base) return raw
|
|
54
|
-
if (raw.startsWith(base)) return raw
|
|
55
|
-
return `${base}${raw}`
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// ── Main ────────────────────────────────────────────────────────────
|
|
59
|
-
const params = new URLSearchParams(window.location.search)
|
|
60
|
-
const modulePath = params.get('module')
|
|
61
|
-
const exportName = params.get('export')
|
|
62
|
-
const theme = params.get('theme') || 'light'
|
|
63
|
-
|
|
64
|
-
// Map theme to Primer colorMode
|
|
65
|
-
const colorMode = theme.startsWith('dark') ? 'night' : 'day'
|
|
66
|
-
|
|
67
|
-
// Apply theme to document for Primer / CSS-var inheritance
|
|
68
|
-
document.documentElement.setAttribute('data-color-mode', theme.startsWith('dark') ? 'dark' : 'light')
|
|
69
|
-
document.documentElement.setAttribute('data-dark-theme', theme.startsWith('dark') ? theme : '')
|
|
70
|
-
document.documentElement.setAttribute('data-light-theme', theme.startsWith('dark') ? '' : theme || 'light')
|
|
71
|
-
document.documentElement.setAttribute('data-sb-theme', theme || 'light')
|
|
72
|
-
|
|
73
|
-
// Note: we deliberately do NOT install the canvas-hmr-guard here. The guard
|
|
74
|
-
// drops BOTH `full-reload` and `update` payloads server-side, which means
|
|
75
|
-
// edits to the story source file never reach this iframe — no Fast Refresh,
|
|
76
|
-
// no reload, nothing. Story widgets are expected to refresh when the
|
|
77
|
-
// underlying .story.jsx is edited, so we let HMR through.
|
|
78
|
-
void import.meta.hot
|
|
79
|
-
|
|
80
|
-
const root = createRoot(document.getElementById('root'))
|
|
81
|
-
|
|
82
|
-
async function mount() {
|
|
83
|
-
if (!modulePath) {
|
|
84
|
-
root.render(createElement('div', { style: errorStyle }, 'Missing module param'))
|
|
85
|
-
return
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Validate: only allow .story.{jsx,tsx} modules
|
|
89
|
-
if (!modulePath.match(/\.story\.(jsx|tsx)$/)) {
|
|
90
|
-
root.render(createElement('div', { style: errorStyle }, 'Invalid module path — only .story.jsx/.tsx files are allowed'))
|
|
91
|
-
return
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
try {
|
|
95
|
-
const resolved = resolveModulePath(modulePath)
|
|
96
|
-
const mod = await import(/* @vite-ignore */ resolved)
|
|
97
|
-
|
|
98
|
-
if (exportName) {
|
|
99
|
-
// Single export mode
|
|
100
|
-
const Component = mod[exportName]
|
|
101
|
-
if (!Component || typeof Component !== 'function') {
|
|
102
|
-
throw new Error(`Export "${exportName}" not found or is not a component`)
|
|
103
|
-
}
|
|
104
|
-
root.render(
|
|
105
|
-
createElement(ThemeProvider, { colorMode },
|
|
106
|
-
createElement(BaseStyles, null,
|
|
107
|
-
createElement(IsolateErrorBoundary, { name: exportName },
|
|
108
|
-
createElement(Component),
|
|
109
|
-
),
|
|
110
|
-
),
|
|
111
|
-
),
|
|
112
|
-
)
|
|
113
|
-
} else {
|
|
114
|
-
// All exports mode — render every named function export stacked
|
|
115
|
-
const entries = Object.entries(mod).filter(
|
|
116
|
-
([key, value]) => key !== 'default' && typeof value === 'function',
|
|
117
|
-
)
|
|
118
|
-
if (entries.length === 0) {
|
|
119
|
-
throw new Error('No named exports found in story module')
|
|
120
|
-
}
|
|
121
|
-
root.render(
|
|
122
|
-
createElement(ThemeProvider, { colorMode },
|
|
123
|
-
createElement(BaseStyles, null,
|
|
124
|
-
...entries.map(([name, Component]) =>
|
|
125
|
-
createElement(IsolateErrorBoundary, { key: name, name },
|
|
126
|
-
createElement(Component),
|
|
127
|
-
),
|
|
128
|
-
),
|
|
129
|
-
),
|
|
130
|
-
),
|
|
131
|
-
)
|
|
132
|
-
}
|
|
133
|
-
} catch (err) {
|
|
134
|
-
root.render(
|
|
135
|
-
createElement('div', { style: errorStyle },
|
|
136
|
-
createElement('strong', null, exportName || 'Component'),
|
|
137
|
-
createElement('br'),
|
|
138
|
-
String(err.message || err),
|
|
139
|
-
),
|
|
140
|
-
)
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
mount()
|