Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
f82709b
feat(storybook): add Phase 1 spec for Storybook 10 setup + story scaf…
bntvllnt Mar 10, 2026
ec9f14b
feat(storybook): add test-runner, designs, MCP addons + story coverag…
bntvllnt Mar 11, 2026
ffb4bc2
feat(storybook): implement Storybook 10 with full component coverage
bntvllnt Mar 11, 2026
de382ce
refactor(registry): replace ComponentPreview with Storybook embeds
bntvllnt Mar 11, 2026
1941e02
fix: Storybook rendering + embed hydration race condition
bntvllnt Mar 11, 2026
de2bbf4
feat(storybook): group components by category in sidebar
bntvllnt Mar 11, 2026
9755595
feat(storybook): add MDX docs, performance panel, chromatic + test-ru…
bntvllnt Mar 11, 2026
344054f
fix(storybook): render docs pages by registering addonDocs in preview
bntvllnt Mar 11, 2026
514f2aa
feat(storybook): auto-apply withPerformanceMonitor to all stories
bntvllnt Mar 11, 2026
fbdfee2
feat(storybook): enhance MDX docs with type definitions, code preview…
bntvllnt Mar 11, 2026
bc7872c
fix(storybook): add remark-gfm for markdown table support in MDX docs
bntvllnt Mar 11, 2026
2132497
fix(storybook): add required props to 28 stories preventing runtime c…
bntvllnt Mar 11, 2026
e74eed1
feat(ci): add storybook E2E testing and visual regression workflows
bntvllnt Mar 11, 2026
af27af6
feat(test): add unit tests and visual regression tests for all compon…
bntvllnt Mar 11, 2026
b57a5ce
Merge remote-tracking branch 'origin/main' into feat/storybook
bntvllnt Mar 11, 2026
548c6e1
fix(ci): resolve lint failures and Playwright install in CI
bntvllnt Mar 11, 2026
48ac28f
fix(ci): commit visual snapshots and fix test-runner server startup
bntvllnt Mar 11, 2026
72e49f0
fix(ci): move test-runner config to .storybook, fix visual regression…
bntvllnt Mar 11, 2026
83374ae
fix(ci): add visual test tolerance and make visual regression non-blo…
bntvllnt Mar 11, 2026
fbe54bb
fix(ci): move test setup out of __tests__ to fix test-runner jest con…
bntvllnt Mar 11, 2026
de7adca
fix(ci): convert test-runner configs from CJS to ESM
bntvllnt Mar 11, 2026
71cd00e
fix(ci): remove obsolete test-runner jest config
bntvllnt Mar 11, 2026
eb7bd9a
fix(stories): fix 6 failing stories with proper props and providers
bntvllnt Mar 11, 2026
308d4f0
fix: address code review findings for storybook PR
bntvllnt Mar 12, 2026
b271b84
fix: strengthen test effectiveness and regression prevention
bntvllnt Mar 12, 2026
67688c3
fix: improve visual test quality and regenerate snapshots
bntvllnt Mar 12, 2026
873ab77
fix(ci): resolve storybook test + visual regression CI failures
bntvllnt Mar 14, 2026
d3da587
fix: clean storybook docs and registry lint issues
bntvllnt Apr 22, 2026
6d62f5c
Merge origin/main into feat/storybook
bntvllnt Apr 22, 2026
43d53d3
feat: add forms family batch components (#122)
bntvllnt Apr 24, 2026
d7b0c5d
feat: add registry preview theme controls (#123)
bntvllnt Apr 24, 2026
9eb59db
fix: enforce client directives for hook-based components (#138)
bntvllnt Apr 24, 2026
5abe1cd
feat: add canvas foundation components (#139)
bntvllnt Apr 24, 2026
54708c2
feat: add canvas object components (#140)
bntvllnt Apr 24, 2026
96f1574
fix: unblock storybook integration CI
bntvllnt Apr 24, 2026
3104c05
fix(registry): expose canvas shell components
bntvllnt Apr 24, 2026
e23a241
fix(ui): tighten canvas and registry component polish
bntvllnt Apr 25, 2026
1beaa4d
fix(form): restore native form semantics and aria wiring
bntvllnt Apr 25, 2026
7220a9b
fix(form): keep ids stable in server markup
bntvllnt Apr 25, 2026
3256c11
refactor: evolve canvas shell into floating overlay workspace (#141)
bntvllnt Apr 25, 2026
5c1a721
fix(form): preserve field ids on initial render
bntvllnt Apr 25, 2026
2dbd64b
fix(form): support item-level validation overrides
bntvllnt Apr 25, 2026
4ed4612
fix(form): detect nested helper content
bntvllnt Apr 25, 2026
7a4de92
fix(form): handle fragment and empty helper content
bntvllnt Apr 25, 2026
f02c47e
fix(form): keep custom ids role-scoped
bntvllnt Apr 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 131 additions & 0 deletions apps/registry/components/component-preview/component-preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,12 @@ import {
FileUpload,
Flashcard,
FloatingActionButton,
Form,
FormControl,
FormDescription,
FormItem,
FormLabel,
FormMessage,
Glossary,
HorizontalScrollRow,
HoverCard,
Expand All @@ -123,6 +129,7 @@ import {
MenubarSeparator,
MenubarTrigger,
MetricGauge,
MultiSelect,
NavigationMenu,
NavigationMenuContent,
NavigationMenuItem,
Expand Down Expand Up @@ -150,6 +157,8 @@ import {
ScopeSelector,
ScrollArea,
SearchBar,
SegmentedControl,
SegmentedControlItem,
Select,
SelectContent,
SelectItem,
Expand Down Expand Up @@ -190,6 +199,7 @@ import {
TabsContent,
TabsList,
TabsTrigger,
TagsInput,
Terminal,
Textarea,
ThemeProvider,
Expand Down Expand Up @@ -543,6 +553,63 @@ function CheckboxPreview() {
);
}

function FormPreview() {
return (
<div className="w-full max-w-sm">
<Form invalid>
<FormItem>
<FormLabel>Email</FormLabel>
<FormControl>
<Input placeholder="name@company.com" type="email" />
</FormControl>
<FormDescription>Use your work email address.</FormDescription>
<FormMessage>Please enter a valid email.</FormMessage>
</FormItem>
</Form>
</div>
);
}

function MultiSelectPreview() {
return (
<div className="w-full max-w-sm">
<MultiSelect
defaultValue={["react", "vue"]}
options={[
{ label: "React", value: "react" },
{ label: "Vue", value: "vue" },
{ label: "Svelte", value: "svelte" },
]}
searchable
/>
</div>
);
}

function TagsInputPreview() {
return (
<div className="w-full max-w-sm">
<TagsInput
aria-label="Framework tags"
defaultValue={["React", "Vue"]}
placeholder="Add a framework"
/>
</div>
);
}

function SegmentedControlPreview() {
return (
<div className="w-full max-w-sm">
<SegmentedControl aria-label="Project view" defaultValue="board">
<SegmentedControlItem value="board">Board</SegmentedControlItem>
<SegmentedControlItem value="list">List</SegmentedControlItem>
<SegmentedControlItem value="timeline">Timeline</SegmentedControlItem>
</SegmentedControl>
</div>
);
}

function TerminalPreview() {
return (
<Terminal
Expand Down Expand Up @@ -2106,6 +2173,10 @@ export function ComponentPreview({ componentName }: ComponentPreviewProps) {
return <BreadcrumbPreview />;
case "button":
return <ButtonPreview />;
case "anchor-port":
return (
<SimplePreview description="Connection port primitive for object graph cards and edges." />
);
case "callout":
return <CalloutPreview />;
case "calendar":
Expand All @@ -2120,6 +2191,18 @@ export function ComponentPreview({ componentName }: ComponentPreviewProps) {
return <DataTablePreview />;
case "carousel":
return <CarouselPreview />;
case "canvas-shell":
return (
<SimplePreview description="Overlay shell for infinite-canvas workspaces with floating chrome regions." />
);
case "canvas-view":
return (
<SimplePreview description="Pan-and-zoom canvas surface with keyboard and modified-wheel controls." />
);
case "connector-edge":
return (
<SimplePreview description="Curved connector edge for linking spatial objects on the canvas." />
);
case "category-filter":
return <CategoryFilterPreview />;
case "checkbox":
Expand Down Expand Up @@ -2162,6 +2245,10 @@ export function ComponentPreview({ componentName }: ComponentPreviewProps) {
return <FAQPreview />;
case "flashcard":
return <FlashcardPreview />;
case "edge-label":
return (
<SimplePreview description="Compact edge annotation badge used inside connector paths." />
);
case "file-upload":
return <FileUploadPreview />;
case "filter-bar":
Expand All @@ -2170,6 +2257,12 @@ export function ComponentPreview({ componentName }: ComponentPreviewProps) {
);
case "floating-action-button":
return <FloatingActionButtonPreview />;
case "form":
return <FormPreview />;
case "group-hull":
return (
<SimplePreview description="Dashed grouping surface for related spatial objects." />
);
case "horizontal-scroll-row":
return <HorizontalScrollRowPreview />;
case "hover-card":
Expand All @@ -2186,6 +2279,10 @@ export function ComponentPreview({ componentName }: ComponentPreviewProps) {
return <KeyConceptPreview />;
case "keyboard-shortcuts-help":
return <KeyboardShortcutsHelpPreview />;
case "left-rail":
return (
<SimplePreview description="Primary left-side rail for workspace navigation and context controls." />
);
case "lang-provider":
return <LangProviderPreview />;
case "learning-objectives":
Expand All @@ -2202,12 +2299,22 @@ export function ComponentPreview({ componentName }: ComponentPreviewProps) {
return <MDXContentPreview />;
case "menubar":
return <MenubarPreview />;
case "mini-map-panel":
return (
<SimplePreview description="Viewport overview panel showing camera position within the world surface." />
);
case "metric-gauge":
return <MetricGaugePreview />;
case "model-selector":
return (
<SimplePreview description="A dialog for selecting AI models with search and filtering." />
);
case "multi-select":
return <MultiSelectPreview />;
case "tags-input":
return <TagsInputPreview />;
case "segmented-control":
return <SegmentedControlPreview />;
case "navbar-saas":
return (
<SimplePreview description="A responsive navigation bar for SaaS applications." />
Expand All @@ -2218,6 +2325,14 @@ export function ComponentPreview({ componentName }: ComponentPreviewProps) {
return <NumberInputPreview />;
case "number-ticker":
return <NumberTickerPreview />;
case "object-card":
return (
<SimplePreview description="Object card primitive for spatial entities with metrics, actions, and ports." />
);
case "object-handle":
return (
<SimplePreview description="Drag/move handle affordance for manipulating canvas objects." />
);
case "order-book":
return <OrderBookPreview />;
case "pagination":
Expand All @@ -2242,6 +2357,10 @@ export function ComponentPreview({ componentName }: ComponentPreviewProps) {
return <RadioGroupPreview />;
case "resizable":
return <ResizablePreview />;
case "right-dock":
return (
<SimplePreview description="Right-side dock for inspector, agent, or activity panels in the workspace shell." />
);
case "scroll-area":
return <ScrollAreaPreview />;
case "search-bar":
Expand Down Expand Up @@ -2294,6 +2413,10 @@ export function ComponentPreview({ componentName }: ComponentPreviewProps) {
return (
<SimplePreview description="A table of contents panel with progress tracking." />
);
case "top-bar":
return (
<SimplePreview description="Top workspace bar combining title, subtitle, and command surfaces." />
);
case "table":
return <TablePreview />;
case "tabs":
Expand Down Expand Up @@ -2342,10 +2465,18 @@ export function ComponentPreview({ componentName }: ComponentPreviewProps) {
return <VideoEmbedPreview />;
case "view-switcher":
return <ViewSwitcherPreview />;
case "workspace-switcher":
return (
<SimplePreview description="Workspace selector for moving between orchestration views and object neighborhoods." />
);
case "wallet-card":
return <WalletCardPreview />;
case "watchlist":
return <WatchlistPreview />;
case "zoom-hud":
return (
<SimplePreview description="Heads-up zoom control for resetting and stepping canvas magnification." />
);
case "world-clock-bar":
return <WorldClockBarPreview />;
default:
Expand Down
Loading
Loading