diff --git a/packages/components/stories/overview/Collections.tsx b/packages/components/stories/overview/Collections.tsx
new file mode 100644
index 000000000..53537d48e
--- /dev/null
+++ b/packages/components/stories/overview/Collections.tsx
@@ -0,0 +1,159 @@
+import { Button } from '../../src/Button';
+import { GridList, GridListItem } from '../../src/GridList';
+import { IconButton } from '../../src/IconButton';
+// Import the actual components for custom previews
+import { ListBox, ListBoxItem } from '../../src/ListBox';
+import { Menu, MenuItem, MenuTrigger } from '../../src/Menu';
+import { Popover } from '../../src/Popover';
+import { Cell, Column, Row, Table, TableBody, TableHeader } from '../../src/Table';
+import { TagGroup } from '../../src/TagGroup';
+import { Text } from '../../src/Text';
+import { Tree, TreeItem, TreeItemContent } from '../../src/Tree';
+// Import actual collection stories
+import { Example as TagGroupExample } from '../TagGroup.stories';
+
+// Custom preview components that properly handle collection contexts
+
+const ListBoxPreview = () => (
+
+
+ Item one
+ Item two
+ Item three
+
+
+);
+
+const TagGroupPreview = () => {
+ const storyArgs = TagGroupExample.args || {};
+
+ return (
+
+ {storyArgs.children}
+
+ );
+};
+
+const TablePreview = () => (
+
+
+
+ Name
+ Status
+
+
+
+ Item 1 |
+ Active |
+
+
+ Item 2 |
+ Inactive |
+
+
+
+
+);
+
+// Options component for GridList items (simplified for overview)
+const GridOptions = () => (
+
+
+
+
+ Action one
+
+ Action two
+
+ Action three
+
+
+
+);
+
+const GridListPreview = () => (
+
+
+
+ Item one
+
+
+
+ Item two
+
+
+
+ Item three
+
+
+
+
+);
+
+const TreePreview = () => (
+
+
+
+ Documents
+
+ Project
+
+
+
+ Photos
+
+
+
+);
+
+const MenuPreview = () => (
+
+
+ Open Menu
+
+
+ Item one
+ Item two
+ Item three
+
+
+
+
+);
+
+// Collections category configuration
+export const collectionsCategory = {
+ category: 'Collections',
+ components: [
+ {
+ name: 'Table',
+ component:
,
+ storyPath: 'components-collections-table--docs',
+ },
+ {
+ name: 'GridList',
+ component:
,
+ storyPath: 'components-collections-gridlist--docs',
+ },
+ {
+ name: 'ListBox',
+ component:
,
+ storyPath: 'components-collections-listbox--docs',
+ },
+ {
+ name: 'Tree',
+ component:
,
+ storyPath: 'components-collections-tree--docs',
+ },
+ {
+ name: 'TagGroup',
+ component:
,
+ storyPath: 'components-collections-taggroup--docs',
+ },
+ {
+ name: 'Menu',
+ component:
,
+ storyPath: 'components-collections-menu--docs',
+ },
+ ],
+};
diff --git a/packages/components/stories/overview/DateAndTime.tsx b/packages/components/stories/overview/DateAndTime.tsx
new file mode 100644
index 000000000..4f5c27a7c
--- /dev/null
+++ b/packages/components/stories/overview/DateAndTime.tsx
@@ -0,0 +1,47 @@
+// Import the actual components for complex cases
+import { DatePicker } from '../../src/DatePicker';
+// Import actual date and time stories
+import { Example as CalendarExample } from '../Calendar.stories';
+import { Example as DateFieldExample } from '../DateField.stories';
+import { Example as DatePickerExample } from '../DatePicker.stories';
+import { Example as TimeFieldExample } from '../TimeField.stories';
+// Import shared preview component
+import { StoryPreview } from './StoryPreview';
+
+// Custom wrapper for DatePicker that renders the story properly
+const DatePickerPreview = () => {
+ const storyArgs = DatePickerExample.args || {};
+
+ return (
+
+ {storyArgs.children}
+
+ );
+};
+
+// Date and Time category configuration
+export const dateAndTimeCategory = {
+ category: 'Date and Time',
+ components: [
+ {
+ name: 'Calendar',
+ component:
,
+ storyPath: 'components-date-and-time-calendar--docs',
+ },
+ {
+ name: 'DateField',
+ component:
,
+ storyPath: 'components-date-and-time-datefield--docs',
+ },
+ {
+ name: 'DatePicker',
+ component:
,
+ storyPath: 'components-date-and-time-datepicker--docs',
+ },
+ {
+ name: 'TimeField',
+ component:
,
+ storyPath: 'components-date-and-time-timefield--docs',
+ },
+ ],
+};
diff --git a/packages/components/stories/overview/DragAndDrop.tsx b/packages/components/stories/overview/DragAndDrop.tsx
new file mode 100644
index 000000000..46b5aad94
--- /dev/null
+++ b/packages/components/stories/overview/DragAndDrop.tsx
@@ -0,0 +1,16 @@
+// Import actual drag and drop stories
+import { Example as DropZoneExample } from '../DropZone.stories';
+// Import shared preview component
+import { StoryPreview } from './StoryPreview';
+
+// Drag and Drop category configuration
+export const dragAndDropCategory = {
+ category: 'Drag and drop',
+ components: [
+ {
+ name: 'DropZone',
+ component:
,
+ storyPath: 'components-drag-and-drop-dropzone--docs',
+ },
+ ],
+};
diff --git a/packages/components/stories/overview/Navigation.tsx b/packages/components/stories/overview/Navigation.tsx
new file mode 100644
index 000000000..79e7db70f
--- /dev/null
+++ b/packages/components/stories/overview/Navigation.tsx
@@ -0,0 +1,140 @@
+import { Breadcrumbs } from '../../src/Breadcrumbs';
+import { Disclosure } from '../../src/Disclosure';
+import { DisclosureGroup } from '../../src/DisclosureGroup';
+// Import the actual components for custom previews
+import { Link } from '../../src/Link';
+import { LinkButton } from '../../src/LinkButton';
+import { LinkIconButton } from '../../src/LinkIconButton';
+import { Tabs } from '../../src/Tabs';
+import { Example as BreadcrumbsExample } from '../Breadcrumbs.stories';
+import { Example as DisclosureExample } from '../Disclosure.stories';
+import { Example as DisclosureGroupExample } from '../DisclosureGroup.stories';
+// Import actual navigation stories
+import { Example as LinkExample } from '../Link.stories';
+import { Example as LinkButtonExample } from '../LinkButton.stories';
+import { Example as LinkIconButtonExample } from '../LinkIconButton.stories';
+import { Example as TabsExample } from '../Tabs.stories';
+
+// Custom wrapper for Link that renders the story properly
+const LinkPreview = () => {
+ const storyArgs = LinkExample.args || {};
+
+ return (
+
+
+ {storyArgs.children}
+
+ {storyArgs.children}
+
+
+
+ );
+};
+
+// Custom wrapper for LinkButton that renders the story properly
+const LinkButtonPreview = () => {
+ const storyArgs = LinkButtonExample.args || {};
+
+ return (
+
+ {storyArgs.children}
+
+ );
+};
+
+// Custom wrapper for LinkIconButton that renders the story properly
+const LinkIconButtonPreview = () => {
+ const storyArgs = LinkIconButtonExample.args || {};
+
+ return (
+
+
+
+ );
+};
+
+// Custom wrapper for Breadcrumbs that renders the story properly
+const BreadcrumbsPreview = () => {
+ const storyArgs = BreadcrumbsExample.args || {};
+
+ return (
+
+ {storyArgs.children}
+
+ );
+};
+
+// Custom wrapper for Tabs that renders the story properly
+const TabsPreview = () => {
+ const storyArgs = TabsExample.args || {};
+
+ return (
+
+ {storyArgs.children}
+
+ );
+};
+
+// Custom wrapper for Disclosure that renders the story properly
+const DisclosurePreview = () => {
+ const storyArgs = DisclosureExample.args || {};
+
+ return (
+
+ {storyArgs.children}
+
+ );
+};
+
+// Custom wrapper for DisclosureGroup that renders the story properly
+const DisclosureGroupPreview = () => {
+ const storyArgs = DisclosureGroupExample.args || {};
+
+ return (
+
+ {storyArgs.children}
+
+ );
+};
+
+// Navigation category configuration
+export const navigationCategory = {
+ category: 'Navigation',
+ components: [
+ {
+ name: 'Link',
+ component:
,
+ storyPath: 'components-navigation-link--docs',
+ },
+ {
+ name: 'LinkButton',
+ component:
,
+ storyPath: 'components-navigation-linkbutton--docs',
+ },
+ {
+ name: 'LinkIconButton',
+ component:
,
+ storyPath: 'components-navigation-linkiconbutton--docs',
+ },
+ {
+ name: 'Breadcrumbs',
+ component:
,
+ storyPath: 'components-navigation-breadcrumbs--docs',
+ },
+ {
+ name: 'Disclosure',
+ component:
,
+ storyPath: 'components-navigation-disclosure--docs',
+ },
+ {
+ name: 'DisclosureGroup',
+ component:
,
+ storyPath: 'components-navigation-disclosuregroup--docs',
+ },
+ {
+ name: 'Tabs',
+ component:
,
+ storyPath: 'components-navigation-tabs--docs',
+ },
+ ],
+};
diff --git a/packages/components/stories/overview/Overlays.tsx b/packages/components/stories/overview/Overlays.tsx
new file mode 100644
index 000000000..185c59dae
--- /dev/null
+++ b/packages/components/stories/overview/Overlays.tsx
@@ -0,0 +1,28 @@
+// Import actual overlay stories
+import { Example as ModalExample } from '../Modal.stories';
+import { Example as PopoverExample } from '../Popover.stories';
+import { Example as TooltipExample } from '../Tooltip.stories';
+// Import shared preview component
+import { StoryPreview } from './StoryPreview';
+
+// Overlays category configuration
+export const overlaysCategory = {
+ category: 'Overlays',
+ components: [
+ {
+ name: 'Modal',
+ component:
,
+ storyPath: 'components-overlays-modal--docs',
+ },
+ {
+ name: 'Popover',
+ component:
,
+ storyPath: 'components-overlays-popover--docs',
+ },
+ {
+ name: 'Tooltip',
+ component:
,
+ storyPath: 'components-overlays-tooltip--docs',
+ },
+ ],
+};
diff --git a/packages/components/stories/overview/Overview.stories.tsx b/packages/components/stories/overview/Overview.stories.tsx
new file mode 100644
index 000000000..c1a3cec55
--- /dev/null
+++ b/packages/components/stories/overview/Overview.stories.tsx
@@ -0,0 +1,436 @@
+import type { Meta, StoryObj } from '@storybook/react-vite';
+import type React from 'react';
+
+import { Icon } from '@launchpad-ui/icons';
+import { vars } from '@launchpad-ui/vars';
+
+import { Avatar } from '../../src/Avatar';
+import { Button } from '../../src/Button';
+import { ButtonGroup } from '../../src/ButtonGroup';
+import { Checkbox } from '../../src/Checkbox';
+import { CheckboxGroup } from '../../src/CheckboxGroup';
+import { Code } from '../../src/Code';
+import { FieldGroup } from '../../src/FieldGroup';
+import { FileTrigger } from '../../src/FileTrigger';
+import { Group } from '../../src/Group';
+import { Heading } from '../../src/Heading';
+import { IconButton } from '../../src/IconButton';
+import { Input } from '../../src/Input';
+import { Label } from '../../src/Label';
+import { Link } from '../../src/Link';
+import { NumberField } from '../../src/NumberField';
+import { RadioGroup } from '../../src/RadioGroup';
+import { SearchField } from '../../src/SearchField';
+import { Switch } from '../../src/Switch';
+import { Text } from '../../src/Text';
+import { TextField } from '../../src/TextField';
+import { ToggleButton } from '../../src/ToggleButton';
+import { ToggleButtonGroup } from '../../src/ToggleButtonGroup';
+import { ToggleIconButton } from '../../src/ToggleIconButton';
+import { Toolbar } from '../../src/Toolbar';
+import { collectionsCategory } from './Collections';
+import { dateAndTimeCategory } from './DateAndTime';
+import { dragAndDropCategory } from './DragAndDrop';
+import { navigationCategory } from './Navigation';
+import { overlaysCategory } from './Overlays';
+import { pickersCategory } from './Pickers';
+// Import modular sections from separate files
+import { recipesCategory } from './Recipes';
+import { statusCategory } from './Status';
+
+// Component showcase data
+const componentCategories = [
+ {
+ category: 'Buttons',
+ components: [
+ {
+ name: 'Button',
+ component: (
+
+ Click me
+ Click me
+ Click me
+ Click me
+
+ ),
+ storyPath: 'components-buttons-button--docs',
+ },
+ {
+ name: 'IconButton',
+ component: (
+
+
+
+
+
+
+ ),
+ storyPath: 'components-buttons-iconbutton--docs',
+ },
+ {
+ name: 'ButtonGroup',
+ component: (
+
+
+ First
+ Second
+
+
+ First
+ Second
+
+
+ First
+ Second
+
+
+ ),
+ storyPath: 'components-buttons-buttongroup--docs',
+ },
+ {
+ name: 'FileTrigger',
+ component: (
+
+ Select File
+
+ ),
+ storyPath: 'components-buttons-filetrigger--docs',
+ },
+ {
+ name: 'ToggleButton',
+ component: (
+
+ Toggle
+ Toggle
+ Toggle
+ Toggle
+
+ ),
+ storyPath: 'components-buttons-togglebutton--docs',
+ },
+ {
+ name: 'ToggleButtonGroup',
+ component: (
+
+
+ First
+
+ Second
+ Third
+
+ ),
+ storyPath: 'components-buttons-togglebutton-togglebuttongroup--docs',
+ },
+ {
+ name: 'ToggleIconButton',
+ component: (
+
+
+
+
+
+
+ ),
+ storyPath: 'components-buttons-toggleiconbutton--docs',
+ },
+ ],
+ },
+ {
+ category: 'Content',
+ components: [
+ {
+ name: 'Text',
+ component: (
+
+ Large text
+ Medium text
+ Small text
+
+ ),
+ storyPath: 'components-content-text--docs',
+ },
+ {
+ name: 'Heading',
+ component: (
+
+ Large heading
+ Medium heading
+ Small heading
+
+ ),
+ storyPath: 'components-content-heading--docs',
+ },
+ {
+ name: 'Label',
+ component: (
+
+ Form Label
+ Form Label
+
+ ),
+ storyPath: 'components-content-label--docs',
+ },
+ {
+ name: 'Code',
+ component: (
+
+ console.log('hello')
+ console.log('hello')
+
+ ),
+ storyPath: 'components-content-code--docs',
+ },
+ {
+ name: 'Avatar',
+ component: (
+
+ ),
+ storyPath: 'components-content-avatar--docs',
+ },
+ {
+ name: 'Group',
+ component: (
+
+ Grouped content
+
+ ),
+ storyPath: 'components-content-group--docs',
+ },
+ {
+ name: 'Toolbar',
+ component: (
+
+ Action 1
+ Action 2
+
+ ),
+ storyPath: 'components-content-toolbar--docs',
+ },
+ ],
+ },
+ {
+ category: 'Forms',
+ components: [
+ {
+ name: 'TextField',
+ component: (
+
+ Name
+
+
+ ),
+ storyPath: 'components-forms-textfield--docs',
+ },
+ {
+ name: 'NumberField',
+ component: (
+
+ Age
+
+
+ ),
+ storyPath: 'components-forms-numberfield--docs',
+ },
+ {
+ name: 'SearchField',
+ component: (
+
+ Search
+
+
+ ),
+ storyPath: 'components-forms-searchfield--docs',
+ },
+ {
+ name: 'Checkbox',
+ component:
Check me ,
+ storyPath: 'components-forms-checkbox--docs',
+ },
+ {
+ name: 'CheckboxGroup',
+ component: (
+
+ Options
+ Option A
+ Option B
+
+ ),
+ storyPath: 'components-forms-checkboxgroup--docs',
+ },
+ {
+ name: 'RadioGroup',
+ component: (
+
+ Choose one
+ {/* Radio items would go here */}
+
+ ),
+ storyPath: 'components-forms-radiogroup--docs',
+ },
+ {
+ name: 'Switch',
+ component:
Toggle setting ,
+ storyPath: 'components-forms-switch--docs',
+ },
+ {
+ name: 'FieldGroup',
+ component: (
+
+
+ Field 1
+
+
+
+ ),
+ storyPath: 'components-forms-fieldgroup--docs',
+ },
+ ],
+ },
+ navigationCategory,
+ collectionsCategory,
+ statusCategory,
+ pickersCategory,
+ overlaysCategory,
+ dateAndTimeCategory,
+ dragAndDropCategory,
+ recipesCategory,
+];
+
+// Component card styling
+const cardStyles = {
+ borderRadius: vars.borderRadius.medium,
+ padding: vars.spacing[400],
+ aspectRatio: '1',
+ display: 'flex',
+ flexDirection: 'column' as const,
+ justifyContent: 'space-between',
+ alignItems: 'flex-start',
+ backgroundColor: vars.color.bg.ui.secondary,
+ textDecoration: 'none',
+ color: 'inherit',
+ transition: 'all 0.2s ease',
+};
+
+const ComponentCard = ({
+ name,
+ component,
+ storyPath,
+ hideCodeLink = false,
+}: {
+ name: string;
+ component: React.ReactNode;
+ storyPath: string;
+ hideCodeLink?: boolean;
+}) => {
+ return (
+
+
{name}
+
+ {component}
+
+
+ {!hideCodeLink && (
+
+
+
+ Code
+
+
+ )}
+
+
+
+ Docs
+
+
+
+
+ );
+};
+
+const Overview = () => {
+ return (
+
+ {componentCategories.map(({ category, components }) => (
+
+
{category}
+
+ {components.map(({ name, component, storyPath }) => (
+
+ ))}
+
+
+ ))}
+
+ );
+};
+
+const meta: Meta
= {
+ title: 'Component Overview',
+ component: Overview,
+ tags: ['!dev'],
+ parameters: {
+ layout: 'fullscreen',
+ },
+};
+
+export default meta;
+
+type Story = StoryObj;
+
+/**
+ * Here you can find all available components in the design system. Click on any component to view its documentation and examples.
+ */
+export const AllComponents: Story = {
+ name: 'All Components',
+ render: () => ,
+ parameters: {
+ controls: { disable: true },
+ actions: { disable: true },
+
+ canvas: {
+ layout: 'fullscreen',
+ },
+ },
+};
diff --git a/packages/components/stories/overview/Pickers.tsx b/packages/components/stories/overview/Pickers.tsx
new file mode 100644
index 000000000..ed9e7dff2
--- /dev/null
+++ b/packages/components/stories/overview/Pickers.tsx
@@ -0,0 +1,35 @@
+// Import the actual components for complex cases
+import { Select } from '../../src/Select';
+import { Example as ComboBoxExample } from '../ComboBox.stories';
+// Import actual picker stories
+import { Example as SelectExample } from '../Select.stories';
+// Import shared preview component
+import { StoryPreview } from './StoryPreview';
+
+// Custom wrapper for Select that renders the story properly
+const SelectPreview = () => {
+ const storyArgs = SelectExample.args || {};
+
+ return (
+
+ {storyArgs.children}
+
+ );
+};
+
+// Pickers category configuration
+export const pickersCategory = {
+ category: 'Pickers',
+ components: [
+ {
+ name: 'Select',
+ component: ,
+ storyPath: 'components-pickers-select--docs',
+ },
+ {
+ name: 'ComboBox',
+ component: ,
+ storyPath: 'components-pickers-combobox--docs',
+ },
+ ],
+};
diff --git a/packages/components/stories/overview/Recipes.tsx b/packages/components/stories/overview/Recipes.tsx
new file mode 100644
index 000000000..80cc2906c
--- /dev/null
+++ b/packages/components/stories/overview/Recipes.tsx
@@ -0,0 +1,48 @@
+// Import actual recipe stories
+import {
+ ComboBoxDialog as ComboBoxDialogStory,
+ CopyToClipboard as CopyToClipboardStory,
+ DisabledWithTooltip as DisabledWithTooltipStory,
+ ListBoxTooltip as ListBoxTooltipStory,
+ Pagination as PaginationStory,
+ RadioButtonGroup as RadioButtonGroupStory,
+} from '../recipes/composition.stories';
+// Import shared preview component
+import { StoryPreview } from './StoryPreview';
+
+// Recipes category configuration
+export const recipesCategory = {
+ category: 'Recipes',
+ components: [
+ {
+ name: 'CopyToClipboard',
+ component: ,
+ storyPath: 'recipes-copytoclipboard--docs',
+ },
+ {
+ name: 'ComboBoxDialog',
+ component: ,
+ storyPath: 'recipes-comboboxdialog--docs',
+ },
+ {
+ name: 'DisabledWithTooltip',
+ component: ,
+ storyPath: 'recipes-disabledwithtooltip--docs',
+ },
+ {
+ name: 'ListBoxTooltip',
+ component: ,
+ storyPath: 'recipes-listboxtooltip--docs',
+ },
+ {
+ name: 'Pagination',
+ component: ,
+ storyPath: 'recipes-pagination--docs',
+ },
+ {
+ name: 'RadioButtonGroup',
+ component: ,
+ storyPath: 'recipes-radiobuttongroup--docs',
+ },
+ ],
+};
diff --git a/packages/components/stories/overview/Status.tsx b/packages/components/stories/overview/Status.tsx
new file mode 100644
index 000000000..2c95b94e8
--- /dev/null
+++ b/packages/components/stories/overview/Status.tsx
@@ -0,0 +1,71 @@
+// Import the actual components for args-only stories
+import { Alert } from '../../src/Alert';
+import { Meter } from '../../src/Meter';
+import { ProgressBar } from '../../src/ProgressBar';
+// Import actual status stories
+import { Neutral as AlertExample } from '../Alert.stories';
+import { Example as MeterExample } from '../Meter.stories';
+import { Example as ProgressBarExample } from '../ProgressBar.stories';
+import { Example as ToastExample } from '../Toast.stories';
+// Import shared preview component
+import { StoryPreview } from './StoryPreview';
+
+// Custom wrapper for Alert that renders the story properly
+const AlertPreview = () => {
+ const storyArgs = AlertExample.args || {};
+
+ return (
+
+ );
+};
+
+// Custom wrapper for ProgressBar that renders the story properly
+const ProgressBarPreview = () => {
+ const storyArgs = ProgressBarExample.args || {};
+
+ return (
+
+ );
+};
+
+// Custom wrapper for Meter that renders the story properly
+const MeterPreview = () => {
+ const storyArgs = MeterExample.args || {};
+
+ return (
+
+
+
+ );
+};
+
+// Status category configuration
+export const statusCategory = {
+ category: 'Status',
+ components: [
+ {
+ name: 'Alert',
+ component: ,
+ storyPath: 'components-status-alert--docs',
+ },
+ {
+ name: 'Toast',
+ component: ,
+ storyPath: 'components-status-toast--docs',
+ },
+ {
+ name: 'ProgressBar',
+ component: ,
+ storyPath: 'components-status-progressbar--docs',
+ },
+ {
+ name: 'Meter',
+ component: ,
+ storyPath: 'components-status-meter--docs',
+ },
+ ],
+};
diff --git a/packages/components/stories/overview/StoryPreview.tsx b/packages/components/stories/overview/StoryPreview.tsx
new file mode 100644
index 000000000..381be3ab0
--- /dev/null
+++ b/packages/components/stories/overview/StoryPreview.tsx
@@ -0,0 +1,60 @@
+// Universal component to render any story at smaller scale for overview
+/** biome-ignore-all lint/suspicious/noExplicitAny: */
+import type { ReactNode } from 'react';
+
+interface StoryType {
+ render?: (args?: any, context?: any) => ReactNode;
+ args?: any & {
+ children?: ReactNode;
+ };
+}
+
+export const StoryPreview = ({ story, scale = 1 }: { story: StoryType; scale?: number }) => {
+ // Handle different story structures:
+ // 1. Stories with custom render function (like Button.stories)
+ // 2. Stories with args that need to be passed to the component (like DatePicker)
+ // 3. Stories with just children in args (like simple components)
+
+ const renderStory = () => {
+ if (story.render) {
+ // Story has custom render function - use it with args
+ return story.render(story.args || {}, {});
+ }
+ if (story.args) {
+ // Story has args - need to render the component properly
+ // For stories like DatePicker that need the component wrapper with props
+ const storyArgs = story.args;
+
+ // If the story has a component defined in the meta, we should use it
+ // For now, we'll extract children if available, but this needs the component context
+ if (storyArgs.children) {
+ // This is a complex component like DatePicker that needs proper rendering
+ // We need the actual component to render with args
+ // For now, return the children but this is not ideal
+ return storyArgs.children;
+ }
+
+ // Fallback for other arg patterns
+ return (
+ storyArgs.children || Story Preview
+ );
+ }
+ // Fallback: render placeholder
+ return Story Preview
;
+ };
+
+ return (
+
+ {renderStory()}
+
+ );
+};
diff --git a/packages/components/stories/recipes/composition.stories.tsx b/packages/components/stories/recipes/composition.stories.tsx
index 67e43e98d..a24c4c9a0 100644
--- a/packages/components/stories/recipes/composition.stories.tsx
+++ b/packages/components/stories/recipes/composition.stories.tsx
@@ -132,8 +132,6 @@ export const RadioButtonGroup: Story = {
First
Second
Third
- Fourth
- Fifth
@@ -142,8 +140,6 @@ export const RadioButtonGroup: Story = {
-
-
diff --git a/packages/drawer/stories/Drawer.stories.tsx b/packages/drawer/stories/Drawer.stories.tsx
index 7404fcbe3..a94a1e410 100644
--- a/packages/drawer/stories/Drawer.stories.tsx
+++ b/packages/drawer/stories/Drawer.stories.tsx
@@ -10,6 +10,7 @@ export default {
component: Drawer,
subcomponents: { DrawerHeader },
title: 'Legacy/Drawer',
+ tags: ['deprecated'],
description: 'A partial overlay that appears from the right side of the screen.',
parameters: {
docs: {
diff --git a/packages/dropdown/stories/Dropdown.stories.tsx b/packages/dropdown/stories/Dropdown.stories.tsx
index 970ddad0c..580f392c3 100644
--- a/packages/dropdown/stories/Dropdown.stories.tsx
+++ b/packages/dropdown/stories/Dropdown.stories.tsx
@@ -8,6 +8,7 @@ export default {
component: Dropdown,
subcomponents: { DropdownButton },
title: 'Legacy/Dropdown',
+ tags: ['deprecated'],
description: 'Dropdowns display a list of actions or options to a user.',
parameters: {
chromatic: { disableSnapshot: true },
diff --git a/packages/filter/stories/AppliedFilter.stories.tsx b/packages/filter/stories/AppliedFilter.stories.tsx
index bf3ef2a54..39bb1f168 100644
--- a/packages/filter/stories/AppliedFilter.stories.tsx
+++ b/packages/filter/stories/AppliedFilter.stories.tsx
@@ -5,6 +5,7 @@ import { AppliedFilter } from '../src';
export default {
component: AppliedFilter,
title: 'Legacy/Filter/AppliedFilter',
+ tags: ['deprecated'],
description: 'We use filters to filter our lists based on search critera.',
parameters: {
chromatic: { disableSnapshot: true },
diff --git a/packages/filter/stories/Filter.stories.tsx b/packages/filter/stories/Filter.stories.tsx
index d7b9c5d8b..f183f86fd 100644
--- a/packages/filter/stories/Filter.stories.tsx
+++ b/packages/filter/stories/Filter.stories.tsx
@@ -5,6 +5,7 @@ import { Filter } from '../src';
export default {
component: Filter,
title: 'Legacy/Filter',
+ tags: ['deprecated'],
description: 'We use filters to filter our lists based on search critera.',
parameters: {
chromatic: { disableSnapshot: true },
diff --git a/packages/filter/stories/FilterButton.stories.tsx b/packages/filter/stories/FilterButton.stories.tsx
index 56277bbef..0a1ec50a6 100644
--- a/packages/filter/stories/FilterButton.stories.tsx
+++ b/packages/filter/stories/FilterButton.stories.tsx
@@ -5,6 +5,7 @@ import { FilterButton } from '../src';
export default {
component: FilterButton,
title: 'Legacy/Filter/FilterButton',
+ tags: ['deprecated'],
description:
"When the Filter component doesn't suffice, construct your own custom filter using the FilterButton.",
parameters: {
diff --git a/packages/form/stories/Checkbox.stories.tsx b/packages/form/stories/Checkbox.stories.tsx
index c40e26a53..315a0e1f8 100644
--- a/packages/form/stories/Checkbox.stories.tsx
+++ b/packages/form/stories/Checkbox.stories.tsx
@@ -5,6 +5,7 @@ import { Checkbox } from '../src';
export default {
component: Checkbox,
title: 'Legacy/Form/Checkbox',
+ tags: ['deprecated'],
description: 'A checkbox allows the user to toggle between checked and unchecked states.',
parameters: {
chromatic: { disableSnapshot: true },
diff --git a/packages/form/stories/CompactTextField.stories.tsx b/packages/form/stories/CompactTextField.stories.tsx
index 69b7e691e..862c9d933 100644
--- a/packages/form/stories/CompactTextField.stories.tsx
+++ b/packages/form/stories/CompactTextField.stories.tsx
@@ -5,6 +5,7 @@ import { CompactTextField } from '../src';
export default {
component: CompactTextField,
title: 'Legacy/Form/CompactTextField',
+ tags: ['deprecated'],
description: 'A compact text field allows the user to provide values.',
parameters: {
chromatic: { disableSnapshot: true },
diff --git a/packages/form/stories/FormField.stories.tsx b/packages/form/stories/FormField.stories.tsx
index afd5a2f94..8dbcc1ee1 100644
--- a/packages/form/stories/FormField.stories.tsx
+++ b/packages/form/stories/FormField.stories.tsx
@@ -5,6 +5,7 @@ import { FormField, TextField } from '../src';
export default {
component: FormField,
title: 'Legacy/Form/FormField',
+ tags: ['deprecated'],
description:
'A FormField is an opinionated way to organize form field components like labels, errors, hints, and the field itself."',
parameters: {
diff --git a/packages/form/stories/FormGroup.stories.tsx b/packages/form/stories/FormGroup.stories.tsx
index ef009c997..45cb1de87 100644
--- a/packages/form/stories/FormGroup.stories.tsx
+++ b/packages/form/stories/FormGroup.stories.tsx
@@ -5,6 +5,7 @@ import { FormGroup, FormHint, Label, RequiredAsterisk, TextField } from '../src'
export default {
component: FormGroup,
title: 'Legacy/Form/FormGroup',
+ tags: ['deprecated'],
description: 'A group of form fields.',
parameters: {
chromatic: { disableSnapshot: true },
diff --git a/packages/form/stories/IconField.stories.tsx b/packages/form/stories/IconField.stories.tsx
index 9ee0828dd..10f7e1f92 100644
--- a/packages/form/stories/IconField.stories.tsx
+++ b/packages/form/stories/IconField.stories.tsx
@@ -6,6 +6,7 @@ import { IconField, TextField } from '../src';
export default {
component: IconField,
title: 'Legacy/Form/IconField',
+ tags: ['deprecated'],
description: 'An IconField renders an icon placed next to a passed field."',
parameters: {
chromatic: { disableSnapshot: true },
diff --git a/packages/form/stories/Label.stories.tsx b/packages/form/stories/Label.stories.tsx
index 59c06754c..fbc6e7b78 100644
--- a/packages/form/stories/Label.stories.tsx
+++ b/packages/form/stories/Label.stories.tsx
@@ -5,7 +5,7 @@ import { Label } from '../src';
export default {
component: Label,
title: 'Legacy/Form/Label',
-
+ tags: ['deprecated'],
parameters: {
chromatic: { disableSnapshot: true },
docs: {
diff --git a/packages/form/stories/Radio.stories.tsx b/packages/form/stories/Radio.stories.tsx
index 1d5b331f0..62e311c24 100644
--- a/packages/form/stories/Radio.stories.tsx
+++ b/packages/form/stories/Radio.stories.tsx
@@ -5,6 +5,7 @@ import { Radio } from '../src';
export default {
component: Radio,
title: 'Legacy/Form/Radio',
+ tags: ['deprecated'],
description: 'A radio button allows the user to select one of a set of options."',
parameters: {
chromatic: { disableSnapshot: true },
diff --git a/packages/form/stories/RadioGroup.stories.tsx b/packages/form/stories/RadioGroup.stories.tsx
index 38a7cde5e..334b14c1d 100644
--- a/packages/form/stories/RadioGroup.stories.tsx
+++ b/packages/form/stories/RadioGroup.stories.tsx
@@ -5,6 +5,7 @@ import { Label, Radio, RadioGroup } from '../src';
export default {
component: RadioGroup,
title: 'Legacy/Form/RadioGroup',
+ tags: ['deprecated'],
description: 'A radio button group allows the user to select one of a set of options.',
parameters: {
chromatic: { disableSnapshot: true },
diff --git a/packages/form/stories/SelectField.stories.tsx b/packages/form/stories/SelectField.stories.tsx
index ecd99c24d..365be874e 100644
--- a/packages/form/stories/SelectField.stories.tsx
+++ b/packages/form/stories/SelectField.stories.tsx
@@ -5,6 +5,7 @@ import { SelectField } from '../src';
export default {
component: SelectField,
title: 'Legacy/Form/SelectField',
+ tags: ['deprecated'],
description: 'A select field allows the user to select a value from a set of options."',
parameters: {
chromatic: { disableSnapshot: true },
diff --git a/packages/form/stories/TextArea.stories.tsx b/packages/form/stories/TextArea.stories.tsx
index 020eed7c4..e32881a48 100644
--- a/packages/form/stories/TextArea.stories.tsx
+++ b/packages/form/stories/TextArea.stories.tsx
@@ -39,6 +39,7 @@ const withRestingAndDisabledStates: Decorator = (story, context) => {
export default {
component: TextArea,
title: 'Legacy/Form/TextArea',
+ tags: ['deprecated'],
description: 'A styled form textarea component',
decorators: [
createWithClassesDecorator(testingChromaticClassNames, (args, originalStory, context) => {
diff --git a/packages/form/stories/TextField.stories.tsx b/packages/form/stories/TextField.stories.tsx
index 9dedbb003..b461a09c5 100644
--- a/packages/form/stories/TextField.stories.tsx
+++ b/packages/form/stories/TextField.stories.tsx
@@ -38,6 +38,7 @@ const withRestingAndDisabledStates: Decorator = (story, context) => {
export default {
component: TextField,
title: 'Legacy/Form/TextField',
+ tags: ['deprecated'],
description: 'A text field allows the user to provide values."',
decorators: [
createWithClassesDecorator(chromaticTestStyles, (args, storyFn, context) => {
diff --git a/packages/form/stories/useNumberField.stories.tsx b/packages/form/stories/useNumberField.stories.tsx
index 4dac75a20..930de514d 100644
--- a/packages/form/stories/useNumberField.stories.tsx
+++ b/packages/form/stories/useNumberField.stories.tsx
@@ -29,6 +29,7 @@ const Demo = (props: Partial