diff --git a/docs-ui/src/app/components/[slug]/page.tsx b/docs-ui/src/app/components/[slug]/page.tsx
deleted file mode 100644
index 1422334471..0000000000
--- a/docs-ui/src/app/components/[slug]/page.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { components, layoutComponents } from '@/utils/data';
-
-export default async function Page({
- params,
-}: {
- params: Promise<{ slug: string }>;
-}) {
- const { slug } = await params;
-
- const { default: Component } = await import(`@/content/${slug}.mdx`);
-
- return ;
-}
-
-export function generateStaticParams() {
- const list = [...components, ...layoutComponents];
-
- return list.map(component => ({
- slug: component.slug,
- }));
-}
-
-export const dynamicParams = false;
diff --git a/docs-ui/src/content/accordion.props.ts b/docs-ui/src/app/components/accordion/accordion.props.ts
similarity index 100%
rename from docs-ui/src/content/accordion.props.ts
rename to docs-ui/src/app/components/accordion/accordion.props.ts
diff --git a/docs-ui/src/content/accordion.mdx b/docs-ui/src/app/components/accordion/page.mdx
similarity index 84%
rename from docs-ui/src/content/accordion.mdx
rename to docs-ui/src/app/components/accordion/page.mdx
index fc4bad1f8e..d2332673ea 100644
--- a/docs-ui/src/content/accordion.mdx
+++ b/docs-ui/src/app/components/accordion/page.mdx
@@ -1,7 +1,14 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { AccordionSnippet } from '@/snippets/stories-snippets';
+import {
+ Default,
+ WithSubtitle,
+ CustomTrigger,
+ DefaultExpanded,
+ GroupSingleOpen,
+ GroupMultipleOpen,
+} from './stories';
import {
accordionPropDefs,
accordionTriggerPropDefs,
@@ -16,7 +23,7 @@ import {
} from './accordion.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { AccordionDefinition } from '../utils/definitions';
+import { AccordionDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={accordionUsageSnippet}
/>
@@ -72,7 +79,7 @@ Here's a view when using both title and subtitle props.
align="center"
py={4}
height={240}
- preview={}
+ preview={}
code={accordionWithSubtitleSnippet}
/>
@@ -84,7 +91,7 @@ Here's a view when providing custom multi-line content as children.
align="center"
py={4}
height={280}
- preview={}
+ preview={}
code={accordionCustomTriggerSnippet}
/>
@@ -96,7 +103,7 @@ Here's a view when the panel is expanded by default.
align="center"
py={4}
height={280}
- preview={}
+ preview={}
code={accordionDefaultExpandedSnippet}
/>
@@ -108,7 +115,7 @@ Here's a view when only one accordion can be open at a time.
align="center"
py={4}
height={280}
- preview={}
+ preview={}
code={accordionGroupSingleOpenSnippet}
/>
@@ -120,7 +127,7 @@ Here's a view when multiple accordions can be open simultaneously.
align="center"
py={4}
height={280}
- preview={}
+ preview={}
code={accordionGroupMultipleOpenSnippet}
/>
diff --git a/docs-ui/src/app/components/accordion/stories.tsx b/docs-ui/src/app/components/accordion/stories.tsx
new file mode 100644
index 0000000000..3f871b840b
--- /dev/null
+++ b/docs-ui/src/app/components/accordion/stories.tsx
@@ -0,0 +1,19 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Accordion/Accordion.stories';
+
+const {
+ Default: DefaultStory,
+ WithSubtitle: WithSubtitleStory,
+ CustomTrigger: CustomTriggerStory,
+ DefaultExpanded: DefaultExpandedStory,
+ GroupSingleOpen: GroupSingleOpenStory,
+ GroupMultipleOpen: GroupMultipleOpenStory,
+} = stories;
+
+export const Default = () => ;
+export const WithSubtitle = () => ;
+export const CustomTrigger = () => ;
+export const DefaultExpanded = () => ;
+export const GroupSingleOpen = () => ;
+export const GroupMultipleOpen = () => ;
diff --git a/docs-ui/src/content/avatar.props.ts b/docs-ui/src/app/components/avatar/avatar.props.ts
similarity index 100%
rename from docs-ui/src/content/avatar.props.ts
rename to docs-ui/src/app/components/avatar/avatar.props.ts
diff --git a/docs-ui/src/content/avatar.mdx b/docs-ui/src/app/components/avatar/page.mdx
similarity index 81%
rename from docs-ui/src/content/avatar.mdx
rename to docs-ui/src/app/components/avatar/page.mdx
index 047485c2cc..5ec0d78fdd 100644
--- a/docs-ui/src/content/avatar.mdx
+++ b/docs-ui/src/app/components/avatar/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { AvatarSnippet } from '@/snippets/stories-snippets';
+import { Default, Sizes, Fallback, Purpose } from './stories';
import {
avatarPropDefs,
snippetUsage,
@@ -11,7 +11,7 @@ import {
} from './avatar.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { AvatarDefinition } from '../utils/definitions';
+import { AvatarDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={``}
/>
@@ -44,7 +44,7 @@ Avatar sizes can be set using the `size` prop.
align="center"
py={4}
open
- preview={}
+ preview={}
code={snippetSizes}
/>
@@ -56,7 +56,7 @@ If the image is not available, the avatar will show the initials of the name.
align="center"
py={4}
open
- preview={}
+ preview={}
code={snippetFallback}
/>
@@ -67,7 +67,7 @@ Control how the avatar is announced to screen readers using the `purpose` prop.
}
+ preview={}
code={snippetPurpose}
/>
diff --git a/docs-ui/src/app/components/avatar/stories.tsx b/docs-ui/src/app/components/avatar/stories.tsx
new file mode 100644
index 0000000000..e8e9f601b1
--- /dev/null
+++ b/docs-ui/src/app/components/avatar/stories.tsx
@@ -0,0 +1,15 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Avatar/Avatar.stories';
+
+const {
+ Default: DefaultStory,
+ Sizes: SizesStory,
+ Fallback: FallbackStory,
+ Purpose: PurposeStory,
+} = stories;
+
+export const Default = () => ;
+export const Sizes = () => ;
+export const Fallback = () => ;
+export const Purpose = () => ;
diff --git a/docs-ui/src/content/box.props.ts b/docs-ui/src/app/components/box/box.props.ts
similarity index 100%
rename from docs-ui/src/content/box.props.ts
rename to docs-ui/src/app/components/box/box.props.ts
diff --git a/docs-ui/src/content/box.mdx b/docs-ui/src/app/components/box/page.mdx
similarity index 90%
rename from docs-ui/src/content/box.mdx
rename to docs-ui/src/app/components/box/page.mdx
index 66e99ec19a..f6e50b28d7 100644
--- a/docs-ui/src/content/box.mdx
+++ b/docs-ui/src/app/components/box/page.mdx
@@ -1,7 +1,7 @@
import { CodeBlock } from '@/components/CodeBlock';
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
-import { BoxSnippet } from '@/snippets/stories-snippets';
+import { Default } from './stories';
import {
boxPropDefs,
snippetUsage,
@@ -12,7 +12,7 @@ import {
import { spacingPropDefs } from '@/utils/propDefs';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { BoxDefinition } from '../utils/definitions';
+import { BoxDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={boxPreviewSnippet}
align="center"
/>
diff --git a/docs-ui/src/app/components/box/stories.tsx b/docs-ui/src/app/components/box/stories.tsx
new file mode 100644
index 0000000000..82afa5fdff
--- /dev/null
+++ b/docs-ui/src/app/components/box/stories.tsx
@@ -0,0 +1,7 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Box/Box.stories';
+
+const { Default: DefaultStory } = stories;
+
+export const Default = () => ;
diff --git a/docs-ui/src/content/button-icon.props.ts b/docs-ui/src/app/components/button-icon/button-icon.props.ts
similarity index 100%
rename from docs-ui/src/content/button-icon.props.ts
rename to docs-ui/src/app/components/button-icon/button-icon.props.ts
diff --git a/docs-ui/src/content/button-icon.mdx b/docs-ui/src/app/components/button-icon/page.mdx
similarity index 81%
rename from docs-ui/src/content/button-icon.mdx
rename to docs-ui/src/app/components/button-icon/page.mdx
index b0595cc9bc..fc2d6eec9f 100644
--- a/docs-ui/src/content/button-icon.mdx
+++ b/docs-ui/src/app/components/button-icon/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { ButtonIconSnippet } from '@/snippets/stories-snippets';
+import { Variants, Sizes, Disabled, Loading } from './stories';
import {
buttonIconPropDefs,
buttonIconUsageSnippet,
@@ -15,7 +15,7 @@ import {
} from './button-icon.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { ButtonIconDefinition } from '../utils/definitions';
+import { ButtonIconDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={buttonIconDefaultSnippet}
/>
@@ -48,7 +48,7 @@ Here's a view when buttons have different variants.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonIconVariantsSnippet}
/>
@@ -60,7 +60,7 @@ Here's a view when buttons have different sizes.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonIconSizesSnippet}
/>
@@ -72,7 +72,7 @@ Here's a view when buttons are disabled.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonIconDisabledSnippet}
/>
@@ -84,7 +84,7 @@ Here's a view when buttons are in a loading state.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonIconLoadingSnippet}
/>
diff --git a/docs-ui/src/app/components/button-icon/stories.tsx b/docs-ui/src/app/components/button-icon/stories.tsx
new file mode 100644
index 0000000000..5d28fb28a6
--- /dev/null
+++ b/docs-ui/src/app/components/button-icon/stories.tsx
@@ -0,0 +1,15 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/ButtonIcon/ButtonIcon.stories';
+
+const {
+ Variants: VariantsStory,
+ Sizes: SizesStory,
+ Disabled: DisabledStory,
+ Loading: LoadingStory,
+} = stories;
+
+export const Variants = () => ;
+export const Sizes = () => ;
+export const Disabled = () => ;
+export const Loading = () => ;
diff --git a/docs-ui/src/content/button-link.props.ts b/docs-ui/src/app/components/button-link/button-link.props.ts
similarity index 100%
rename from docs-ui/src/content/button-link.props.ts
rename to docs-ui/src/app/components/button-link/button-link.props.ts
diff --git a/docs-ui/src/content/button-link.mdx b/docs-ui/src/app/components/button-link/page.mdx
similarity index 81%
rename from docs-ui/src/content/button-link.mdx
rename to docs-ui/src/app/components/button-link/page.mdx
index 4f3f376aee..074ea204ec 100644
--- a/docs-ui/src/content/button-link.mdx
+++ b/docs-ui/src/app/components/button-link/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { ButtonLinkSnippet } from '@/snippets/stories-snippets';
+import { Variants, Sizes, WithIcons, Disabled } from './stories';
import {
buttonLinkPropDefs,
buttonLinkSnippetUsage,
@@ -13,7 +13,7 @@ import {
} from './button-link.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { ButtonLinkDefinition } from '../utils/definitions';
+import { ButtonLinkDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={buttonLinkVariantsSnippet}
/>
@@ -46,7 +46,7 @@ Here's a view when buttons have different variants.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonLinkVariantsSnippet}
/>
@@ -58,7 +58,7 @@ Here's a view when buttons have different sizes.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonLinkSizesSnippet}
/>
@@ -70,7 +70,7 @@ Here's a view when buttons have icons.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonLinkIconsSnippet}
/>
@@ -82,7 +82,7 @@ Here's a view when buttons are disabled.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonLinkDisabledSnippet}
/>
diff --git a/docs-ui/src/app/components/button-link/stories.tsx b/docs-ui/src/app/components/button-link/stories.tsx
new file mode 100644
index 0000000000..a865afe87c
--- /dev/null
+++ b/docs-ui/src/app/components/button-link/stories.tsx
@@ -0,0 +1,15 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/ButtonLink/ButtonLink.stories';
+
+const {
+ Variants: VariantsStory,
+ Sizes: SizesStory,
+ WithIcons: WithIconsStory,
+ Disabled: DisabledStory,
+} = stories;
+
+export const Variants = () => ;
+export const Sizes = () => ;
+export const WithIcons = () => ;
+export const Disabled = () => ;
diff --git a/docs-ui/src/content/button.props.ts b/docs-ui/src/app/components/button/button.props.ts
similarity index 100%
rename from docs-ui/src/content/button.props.ts
rename to docs-ui/src/app/components/button/button.props.ts
diff --git a/docs-ui/src/content/button.mdx b/docs-ui/src/app/components/button/page.mdx
similarity index 80%
rename from docs-ui/src/content/button.mdx
rename to docs-ui/src/app/components/button/page.mdx
index d161c97edf..daead3ba92 100644
--- a/docs-ui/src/content/button.mdx
+++ b/docs-ui/src/app/components/button/page.mdx
@@ -1,7 +1,8 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { ButtonSnippet, ButtonLinkSnippet } from '@/snippets/stories-snippets';
+import { Variants, Sizes, WithIcons, Disabled, Loading } from './stories';
+import { Variants as ButtonLinkVariants } from '../button-link/stories';
import {
buttonPropDefs,
buttonSnippetUsage,
@@ -16,7 +17,7 @@ import {
import { ChangelogComponent } from '@/components/ChangelogComponent';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { ButtonDefinition } from '../utils/definitions';
+import { ButtonDefinition } from '../../../utils/definitions';
}
+ preview={}
code={buttonVariantsSnippet}
/>
@@ -48,7 +49,7 @@ Here's a view when buttons have different variants.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonVariantsSnippet}
/>
@@ -60,7 +61,7 @@ Here's a view when buttons have different sizes.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonSizesSnippet}
/>
@@ -72,7 +73,7 @@ Here's a view when buttons have icons.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonIconsSnippet}
/>
@@ -84,7 +85,7 @@ Here's a view when buttons are disabled.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonDisabledSnippet}
/>
@@ -96,7 +97,7 @@ Here's a view when buttons are in a loading state.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonLoadingSnippet}
/>
@@ -114,7 +115,7 @@ If you want to use a button as a link, please use the `ButtonLink` component.
align="center"
py={4}
open
- preview={}
+ preview={}
code={buttonAsLinkSnippet}
/>
diff --git a/docs-ui/src/app/components/button/stories.tsx b/docs-ui/src/app/components/button/stories.tsx
new file mode 100644
index 0000000000..b958eb8fdf
--- /dev/null
+++ b/docs-ui/src/app/components/button/stories.tsx
@@ -0,0 +1,17 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Button/Button.stories';
+
+const {
+ Variants: VariantsStory,
+ Sizes: SizesStory,
+ WithIcons: WithIconsStory,
+ Disabled: DisabledStory,
+ Loading: LoadingStory,
+} = stories;
+
+export const Variants = () => ;
+export const Sizes = () => ;
+export const WithIcons = () => ;
+export const Disabled = () => ;
+export const Loading = () => ;
diff --git a/docs-ui/src/content/card.props.ts b/docs-ui/src/app/components/card/card.props.ts
similarity index 100%
rename from docs-ui/src/content/card.props.ts
rename to docs-ui/src/app/components/card/card.props.ts
diff --git a/docs-ui/src/content/card.mdx b/docs-ui/src/app/components/card/page.mdx
similarity index 86%
rename from docs-ui/src/content/card.mdx
rename to docs-ui/src/app/components/card/page.mdx
index c38a07e920..fd1ed233d9 100644
--- a/docs-ui/src/content/card.mdx
+++ b/docs-ui/src/app/components/card/page.mdx
@@ -1,5 +1,5 @@
import { PropsTable } from '@/components/PropsTable';
-import { CardSnippet } from '@/snippets/stories-snippets';
+import { CustomSize, WithLongBody, WithListRow } from './stories';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
import {
@@ -14,7 +14,7 @@ import {
} from './card.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { CardDefinition } from '../utils/definitions';
+import { CardDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={cardDefaultSnippet}
/>
@@ -68,7 +68,7 @@ Here's a view when card has a long body.
}
+ preview={}
code={cardLongBodySnippet}
open
/>
@@ -80,7 +80,7 @@ Here's a view when card has a list.
}
+ preview={}
code={cardListRowSnippet}
open
/>
diff --git a/docs-ui/src/app/components/card/stories.tsx b/docs-ui/src/app/components/card/stories.tsx
new file mode 100644
index 0000000000..d9c4b80ec4
--- /dev/null
+++ b/docs-ui/src/app/components/card/stories.tsx
@@ -0,0 +1,13 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Card/Card.stories';
+
+const {
+ CustomSize: CustomSizeStory,
+ WithLongBody: WithLongBodyStory,
+ WithListRow: WithListRowStory,
+} = stories;
+
+export const CustomSize = () => ;
+export const WithLongBody = () => ;
+export const WithListRow = () => ;
diff --git a/docs-ui/src/content/checkbox.props.ts b/docs-ui/src/app/components/checkbox/checkbox.props.ts
similarity index 100%
rename from docs-ui/src/content/checkbox.props.ts
rename to docs-ui/src/app/components/checkbox/checkbox.props.ts
diff --git a/docs-ui/src/content/checkbox.mdx b/docs-ui/src/app/components/checkbox/page.mdx
similarity index 81%
rename from docs-ui/src/content/checkbox.mdx
rename to docs-ui/src/app/components/checkbox/page.mdx
index c574e8fed4..5f1735bc50 100644
--- a/docs-ui/src/content/checkbox.mdx
+++ b/docs-ui/src/app/components/checkbox/page.mdx
@@ -1,5 +1,5 @@
import { PropsTable } from '@/components/PropsTable';
-import { CheckboxSnippet } from '@/snippets/stories-snippets';
+import { Default, AllVariants } from './stories';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
import {
@@ -10,7 +10,7 @@ import {
} from './checkbox.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { CheckboxDefinition } from '../utils/definitions';
+import { CheckboxDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={checkboxDefaultSnippet}
/>
@@ -43,7 +43,7 @@ Here's a view when checkboxes have different variants.
align="center"
py={4}
open
- preview={}
+ preview={}
code={checkboxVariantsSnippet}
/>
diff --git a/docs-ui/src/app/components/checkbox/stories.tsx b/docs-ui/src/app/components/checkbox/stories.tsx
new file mode 100644
index 0000000000..55d75ed3a6
--- /dev/null
+++ b/docs-ui/src/app/components/checkbox/stories.tsx
@@ -0,0 +1,8 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Checkbox/Checkbox.stories';
+
+const { Default: DefaultStory, AllVariants: AllVariantsStory } = stories;
+
+export const Default = () => ;
+export const AllVariants = () => ;
diff --git a/docs-ui/src/content/container.props.ts b/docs-ui/src/app/components/container/container.props.ts
similarity index 100%
rename from docs-ui/src/content/container.props.ts
rename to docs-ui/src/app/components/container/container.props.ts
diff --git a/docs-ui/src/content/container.mdx b/docs-ui/src/app/components/container/page.mdx
similarity index 87%
rename from docs-ui/src/content/container.mdx
rename to docs-ui/src/app/components/container/page.mdx
index 56c2d5d405..18c307b104 100644
--- a/docs-ui/src/content/container.mdx
+++ b/docs-ui/src/app/components/container/page.mdx
@@ -1,7 +1,7 @@
import { CodeBlock } from '@/components/CodeBlock';
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
-import { ContainerSnippet } from '@/snippets/stories-snippets';
+import { Preview } from './stories';
import {
containerPropDefs,
containerUsageSnippet,
@@ -11,7 +11,7 @@ import {
} from './container.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { ContainerDefinition } from '../utils/definitions';
+import { ContainerDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={containerDefaultSnippet}
/>
diff --git a/docs-ui/src/app/components/container/stories.tsx b/docs-ui/src/app/components/container/stories.tsx
new file mode 100644
index 0000000000..95f4097e12
--- /dev/null
+++ b/docs-ui/src/app/components/container/stories.tsx
@@ -0,0 +1,7 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Container/Container.stories';
+
+const { Preview: PreviewStory } = stories;
+
+export const Preview = () => ;
diff --git a/docs-ui/src/content/dialog.props.ts b/docs-ui/src/app/components/dialog/dialog.props.ts
similarity index 100%
rename from docs-ui/src/content/dialog.props.ts
rename to docs-ui/src/app/components/dialog/dialog.props.ts
diff --git a/docs-ui/src/content/dialog.mdx b/docs-ui/src/app/components/dialog/page.mdx
similarity index 88%
rename from docs-ui/src/content/dialog.mdx
rename to docs-ui/src/app/components/dialog/page.mdx
index e1e4ec436e..b80a3f4a69 100644
--- a/docs-ui/src/content/dialog.mdx
+++ b/docs-ui/src/app/components/dialog/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { DialogSnippet } from '@/snippets/stories-snippets';
+import { Default, PreviewFixedWidthAndHeight, PreviewWithForm } from './stories';
import {
dialogPropDefs,
dialogTriggerPropDefs,
@@ -18,7 +18,7 @@ import {
} from './dialog.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { DialogDefinition } from '../utils/definitions';
+import { DialogDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={dialogDefaultSnippet}
/>
@@ -82,7 +82,7 @@ Dialog with a fixed height body that scrolls when content overflows.
}
+ preview={}
code={dialogFixedWidthAndHeightSnippet}
/>
@@ -93,7 +93,7 @@ Dialog containing form elements for user input.
}
+ preview={}
code={dialogWithFormSnippet}
/>
diff --git a/docs-ui/src/app/components/dialog/stories.tsx b/docs-ui/src/app/components/dialog/stories.tsx
new file mode 100644
index 0000000000..46e41fe742
--- /dev/null
+++ b/docs-ui/src/app/components/dialog/stories.tsx
@@ -0,0 +1,15 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Dialog/Dialog.stories';
+
+const {
+ Default: DefaultStory,
+ PreviewFixedWidthAndHeight: PreviewFixedWidthAndHeightStory,
+ PreviewWithForm: PreviewWithFormStory,
+} = stories;
+
+export const Default = () => ;
+export const PreviewFixedWidthAndHeight = () => (
+
+);
+export const PreviewWithForm = () => ;
diff --git a/docs-ui/src/content/flex.props.ts b/docs-ui/src/app/components/flex/flex.props.ts
similarity index 100%
rename from docs-ui/src/content/flex.props.ts
rename to docs-ui/src/app/components/flex/flex.props.ts
diff --git a/docs-ui/src/content/flex.mdx b/docs-ui/src/app/components/flex/page.mdx
similarity index 90%
rename from docs-ui/src/content/flex.mdx
rename to docs-ui/src/app/components/flex/page.mdx
index 36284f1f0b..1083642f28 100644
--- a/docs-ui/src/content/flex.mdx
+++ b/docs-ui/src/app/components/flex/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { CodeBlock } from '@/components/CodeBlock';
import { Snippet } from '@/components/Snippet';
-import { FlexSnippet } from '@/snippets/stories-snippets';
+import { Default } from './stories';
import {
flexPropDefs,
flexUsageSnippet,
@@ -14,7 +14,7 @@ import {
import { spacingPropDefs } from '@/utils/propDefs';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { FlexDefinition } from '../utils/definitions';
+import { FlexDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={flexDefaultSnippet}
/>
diff --git a/docs-ui/src/app/components/flex/stories.tsx b/docs-ui/src/app/components/flex/stories.tsx
new file mode 100644
index 0000000000..1770374930
--- /dev/null
+++ b/docs-ui/src/app/components/flex/stories.tsx
@@ -0,0 +1,7 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Flex/Flex.stories';
+
+const { Default: DefaultStory } = stories;
+
+export const Default = () => ;
diff --git a/docs-ui/src/content/grid.props.ts b/docs-ui/src/app/components/grid/grid.props.ts
similarity index 100%
rename from docs-ui/src/content/grid.props.ts
rename to docs-ui/src/app/components/grid/grid.props.ts
diff --git a/docs-ui/src/content/grid.mdx b/docs-ui/src/app/components/grid/page.mdx
similarity index 94%
rename from docs-ui/src/content/grid.mdx
rename to docs-ui/src/app/components/grid/page.mdx
index 5f179b9e14..bcf83f985e 100644
--- a/docs-ui/src/content/grid.mdx
+++ b/docs-ui/src/app/components/grid/page.mdx
@@ -1,7 +1,7 @@
import { CodeBlock } from '@/components/CodeBlock';
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
-import { GridSnippet } from '@/snippets/stories-snippets';
+import { Default } from './stories';
import { spacingPropDefs } from '@/utils/propDefs';
import {
gridPropDefs,
@@ -16,7 +16,7 @@ import {
} from './grid.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { GridDefinition } from '../utils/definitions';
+import { GridDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={gridDefaultSnippet}
/>
diff --git a/docs-ui/src/app/components/grid/stories.tsx b/docs-ui/src/app/components/grid/stories.tsx
new file mode 100644
index 0000000000..137f474fb6
--- /dev/null
+++ b/docs-ui/src/app/components/grid/stories.tsx
@@ -0,0 +1,7 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Grid/Grid.stories';
+
+const { Default: DefaultStory } = stories;
+
+export const Default = () => ;
diff --git a/docs-ui/src/content/header-page.props.ts b/docs-ui/src/app/components/header-page/header-page.props.ts
similarity index 100%
rename from docs-ui/src/content/header-page.props.ts
rename to docs-ui/src/app/components/header-page/header-page.props.ts
diff --git a/docs-ui/src/content/header-page.mdx b/docs-ui/src/app/components/header-page/page.mdx
similarity index 81%
rename from docs-ui/src/content/header-page.mdx
rename to docs-ui/src/app/components/header-page/page.mdx
index 12ef2c32ee..459daac1f2 100644
--- a/docs-ui/src/content/header-page.mdx
+++ b/docs-ui/src/app/components/header-page/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { CodeBlock } from '@/components/CodeBlock';
import { Snippet } from '@/components/Snippet';
-import { HeaderPageSnippet } from '@/snippets/stories-snippets';
+import { WithEverything, WithLongBreadcrumbs, WithTabs, WithCustomActions, WithMenuItems } from './stories';
import {
propDefs,
usage,
@@ -14,7 +14,7 @@ import {
} from './header-page.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { HeaderPageDefinition } from '../utils/definitions';
+import { HeaderPageDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={defaultSnippet}
/>
@@ -46,7 +46,7 @@ prop is an array of objects with a `label` and `href` property. By default we tr
}
+ preview={}
code={withBreadcrumbs}
/>
@@ -57,7 +57,7 @@ prop is an array of objects with a `label` and `href` property.
}
+ preview={}
code={withTabs}
/>
@@ -68,7 +68,7 @@ prop is a React node.
}
+ preview={}
code={withCustomActions}
/>
@@ -79,7 +79,7 @@ prop is an array of objects with a `label`, `value` and `onClick` property.
}
+ preview={}
code={withMenuItems}
/>
diff --git a/docs-ui/src/app/components/header-page/stories.tsx b/docs-ui/src/app/components/header-page/stories.tsx
new file mode 100644
index 0000000000..fce9e9bf82
--- /dev/null
+++ b/docs-ui/src/app/components/header-page/stories.tsx
@@ -0,0 +1,17 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/HeaderPage/HeaderPage.stories';
+
+const {
+ WithEverything: WithEverythingStory,
+ WithLongBreadcrumbs: WithLongBreadcrumbsStory,
+ WithTabs: WithTabsStory,
+ WithCustomActions: WithCustomActionsStory,
+ WithMenuItems: WithMenuItemsStory,
+} = stories;
+
+export const WithEverything = () => ;
+export const WithLongBreadcrumbs = () => ;
+export const WithTabs = () => ;
+export const WithCustomActions = () => ;
+export const WithMenuItems = () => ;
diff --git a/docs-ui/src/content/header.props.ts b/docs-ui/src/app/components/header/header.props.ts
similarity index 100%
rename from docs-ui/src/content/header.props.ts
rename to docs-ui/src/app/components/header/header.props.ts
diff --git a/docs-ui/src/content/header.mdx b/docs-ui/src/app/components/header/page.mdx
similarity index 79%
rename from docs-ui/src/content/header.mdx
rename to docs-ui/src/app/components/header/page.mdx
index eb505d7a62..f1ffdf8b33 100644
--- a/docs-ui/src/content/header.mdx
+++ b/docs-ui/src/app/components/header/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { CodeBlock } from '@/components/CodeBlock';
import { Snippet } from '@/components/Snippet';
-import { HeaderSnippet } from '@/snippets/stories-snippets';
+import { WithAllOptionsAndTabs, WithAllOptions, WithBreadcrumbs, WithHeaderPage } from './stories';
import {
propDefs,
usage,
@@ -13,7 +13,7 @@ import {
} from './header.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { HeaderDefinition } from '../utils/definitions';
+import { HeaderDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={defaultSnippet}
/>
@@ -44,7 +44,7 @@ A simple example of how to use the Header component.
}
+ preview={}
code={simple}
open
/>
@@ -56,7 +56,7 @@ under the hood and will be active when you are on the corresponding page.
}
+preview={}
code={withTabs}
open
/>
@@ -66,7 +66,7 @@ open
Breacrumbs should appear when you scroll down (and not directly visible as it is in the demo below).
}
+ preview={}
code={withBreadcrumbs}
open
/>
@@ -76,7 +76,7 @@ Breacrumbs should appear when you scroll down (and not directly visible as it is
You can use the `Header` component inside the [HeaderPage](/components/header-page) component to compose your multi-level navigation.
}
+ preview={}
code={withHeaderPage}
open
/>
diff --git a/docs-ui/src/app/components/header/stories.tsx b/docs-ui/src/app/components/header/stories.tsx
new file mode 100644
index 0000000000..526063e0df
--- /dev/null
+++ b/docs-ui/src/app/components/header/stories.tsx
@@ -0,0 +1,17 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Header/Header.stories';
+
+const {
+ WithAllOptionsAndTabs: WithAllOptionsAndTabsStory,
+ WithAllOptions: WithAllOptionsStory,
+ WithBreadcrumbs: WithBreadcrumbsStory,
+ WithHeaderPage: WithHeaderPageStory,
+} = stories;
+
+export const WithAllOptionsAndTabs = () => (
+
+);
+export const WithAllOptions = () => ;
+export const WithBreadcrumbs = () => ;
+export const WithHeaderPage = () => ;
diff --git a/docs-ui/src/content/link.props.ts b/docs-ui/src/app/components/link/link.props.ts
similarity index 100%
rename from docs-ui/src/content/link.props.ts
rename to docs-ui/src/app/components/link/link.props.ts
diff --git a/docs-ui/src/content/link.mdx b/docs-ui/src/app/components/link/page.mdx
similarity index 83%
rename from docs-ui/src/content/link.mdx
rename to docs-ui/src/app/components/link/page.mdx
index 486c06b298..e71c43d73b 100644
--- a/docs-ui/src/content/link.mdx
+++ b/docs-ui/src/app/components/link/page.mdx
@@ -1,11 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import {
- MenuSnippet,
- ButtonSnippet,
- LinkSnippet,
-} from '@/snippets/stories-snippets';
+import { Default, AllVariants, AllWeights, AllColors, Truncate } from './stories';
import {
linkPropDefs,
linkUsageSnippet,
@@ -19,7 +15,7 @@ import {
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
import { ChangelogComponent } from '@/components/ChangelogComponent';
-import { LinkDefinition } from '../utils/definitions';
+import { LinkDefinition } from '../../../utils/definitions';
}
+ preview={}
code={linkDefaultSnippet}
/>
@@ -60,7 +56,7 @@ Here's a view when links have different variants.
align="center"
py={4}
open
- preview={}
+ preview={}
code={linkVariantsSnippet}
/>
@@ -72,7 +68,7 @@ Here's a view when links have different weights.
align="center"
py={4}
open
- preview={}
+ preview={}
code={linkWeightsSnippet}
/>
@@ -84,7 +80,7 @@ Here's a view when links have different colors.
align="center"
py={4}
open
- preview={}
+ preview={}
code={linkColorsSnippet}
/>
@@ -94,7 +90,7 @@ The `Link` component has a `truncate` prop that can be used to truncate the text
}
+ preview={}
code={linkTruncateSnippet}
/>
diff --git a/docs-ui/src/app/components/link/stories.tsx b/docs-ui/src/app/components/link/stories.tsx
new file mode 100644
index 0000000000..16d4906a24
--- /dev/null
+++ b/docs-ui/src/app/components/link/stories.tsx
@@ -0,0 +1,17 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Link/Link.stories';
+
+const {
+ Default: DefaultStory,
+ AllVariants: AllVariantsStory,
+ AllWeights: AllWeightsStory,
+ AllColors: AllColorsStory,
+ Truncate: TruncateStory,
+} = stories;
+
+export const Default = () => ;
+export const AllVariants = () => ;
+export const AllWeights = () => ;
+export const AllColors = () => ;
+export const Truncate = () => ;
diff --git a/docs-ui/src/content/menu.props.ts b/docs-ui/src/app/components/menu/menu.props.ts
similarity index 100%
rename from docs-ui/src/content/menu.props.ts
rename to docs-ui/src/app/components/menu/menu.props.ts
diff --git a/docs-ui/src/content/menu.mdx b/docs-ui/src/app/components/menu/page.mdx
similarity index 89%
rename from docs-ui/src/content/menu.mdx
rename to docs-ui/src/app/components/menu/page.mdx
index 9ede0885e2..f6327d9d11 100644
--- a/docs-ui/src/content/menu.mdx
+++ b/docs-ui/src/app/components/menu/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { MenuSnippet } from '@/snippets/stories-snippets';
+import { Preview, PreviewSubmenu, PreviewIcons, PreviewLinks, PreviewSections, PreviewSeparators, PreviewAutocompleteMenu, PreviewAutocompleteListbox, PreviewAutocompleteListboxMultiple } from './stories';
import {
usage,
preview,
@@ -27,7 +27,7 @@ import {
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
import { ChangelogComponent } from '@/components/ChangelogComponent';
-import { MenuDefinition } from '../utils/definitions';
+import { MenuDefinition } from '../../../utils/definitions';
}
+ preview={}
code={preview}
/>
@@ -142,7 +142,7 @@ the submenu is displayed in the correct position. The best practice is to use th
align="center"
py={4}
open
- preview={}
+ preview={}
code={submenu}
/>
@@ -154,7 +154,7 @@ You can use the `iconStart` prop to add an icon to the menu item.
align="center"
py={4}
open
- preview={}
+ preview={}
code={icons}
/>
@@ -167,7 +167,7 @@ to work for both internal and external links.
align="center"
py={4}
open
- preview={}
+ preview={}
code={links}
/>
@@ -179,7 +179,7 @@ You can use the `MenuSection` component to add a section to the menu.
align="center"
py={4}
open
- preview={}
+ preview={}
code={sections}
/>
@@ -191,7 +191,7 @@ You can use the `MenuSeparator` component to add a separator to the menu.
align="center"
py={4}
open
- preview={}
+ preview={}
code={separators}
/>
@@ -203,7 +203,7 @@ You can use the `MenuAutocomplete` component to add a autocomplete to the menu.
align="center"
py={4}
open
- preview={}
+ preview={}
code={autocomplete}
/>
@@ -215,7 +215,7 @@ You can use the `MenuListBox` component to add a list box to the menu.
align="center"
py={4}
open
- preview={}
+ preview={}
code={autocompleteListbox}
/>
@@ -228,7 +228,7 @@ allow multiple selection.
align="center"
py={4}
open
- preview={}
+ preview={}
code={autocompleteListboxMultiple}
/>
diff --git a/docs-ui/src/app/components/menu/stories.tsx b/docs-ui/src/app/components/menu/stories.tsx
new file mode 100644
index 0000000000..3e4f445ec2
--- /dev/null
+++ b/docs-ui/src/app/components/menu/stories.tsx
@@ -0,0 +1,31 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Menu/Menu.stories';
+
+const {
+ Preview: PreviewStory,
+ PreviewSubmenu: PreviewSubmenuStory,
+ PreviewIcons: PreviewIconsStory,
+ PreviewLinks: PreviewLinksStory,
+ PreviewSections: PreviewSectionsStory,
+ PreviewSeparators: PreviewSeparatorsStory,
+ PreviewAutocompleteMenu: PreviewAutocompleteMenuStory,
+ PreviewAutocompleteListbox: PreviewAutocompleteListboxStory,
+ PreviewAutocompleteListboxMultiple: PreviewAutocompleteListboxMultipleStory,
+} = stories;
+
+export const Preview = () => ;
+export const PreviewSubmenu = () => ;
+export const PreviewIcons = () => ;
+export const PreviewLinks = () => ;
+export const PreviewSections = () => ;
+export const PreviewSeparators = () => ;
+export const PreviewAutocompleteMenu = () => (
+
+);
+export const PreviewAutocompleteListbox = () => (
+
+);
+export const PreviewAutocompleteListboxMultiple = () => (
+
+);
diff --git a/docs-ui/src/app/components/password-field/page.mdx b/docs-ui/src/app/components/password-field/page.mdx
new file mode 100644
index 0000000000..80f2774042
--- /dev/null
+++ b/docs-ui/src/app/components/password-field/page.mdx
@@ -0,0 +1,65 @@
+import { PropsTable } from '@/components/PropsTable';
+import { Snippet } from '@/components/Snippet';
+import {
+ inputPropDefs,
+ passwordFieldUsageSnippet,
+ passwordFieldDefaultSnippet,
+ passwordFieldSizesSnippet,
+ passwordFieldDescriptionSnippet,
+} from './password-field.props';
+import { PageTitle } from '@/components/PageTitle';
+import { Theming } from '@/components/Theming';
+import { ChangelogComponent } from '@/components/ChangelogComponent';
+import { CodeBlock } from '@/components/CodeBlock';
+import { PasswordFieldDefinition } from '../../../utils/definitions';
+import { WithLabel, Sizes, WithDescription } from './stories';
+
+
+
+}
+ code={passwordFieldDefaultSnippet}
+/>
+
+## Usage
+
+
+
+## API reference
+
+
+
+## Examples
+
+### Sizes
+
+We support two different sizes: `small`, `medium`.
+
+}
+ code={passwordFieldSizesSnippet}
+/>
+
+### With description
+
+Here's a simple PasswordField with a description.
+
+}
+ code={passwordFieldDescriptionSnippet}
+/>
+
+
+
+
diff --git a/docs-ui/src/content/password-field.props.ts b/docs-ui/src/app/components/password-field/password-field.props.ts
similarity index 100%
rename from docs-ui/src/content/password-field.props.ts
rename to docs-ui/src/app/components/password-field/password-field.props.ts
diff --git a/docs-ui/src/app/components/password-field/stories.tsx b/docs-ui/src/app/components/password-field/stories.tsx
new file mode 100644
index 0000000000..407c716fb1
--- /dev/null
+++ b/docs-ui/src/app/components/password-field/stories.tsx
@@ -0,0 +1,13 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/PasswordField/PasswordField.stories';
+
+const {
+ WithLabel: WithLabelStory,
+ Sizes: SizesStory,
+ WithDescription: WithDescriptionStory,
+} = stories;
+
+export const WithLabel = () => ;
+export const Sizes = () => ;
+export const WithDescription = () => ;
diff --git a/docs-ui/src/content/popover.mdx b/docs-ui/src/app/components/popover/page.mdx
similarity index 82%
rename from docs-ui/src/content/popover.mdx
rename to docs-ui/src/app/components/popover/page.mdx
index ca3f728b01..8e9a948c71 100644
--- a/docs-ui/src/content/popover.mdx
+++ b/docs-ui/src/app/components/popover/page.mdx
@@ -1,5 +1,5 @@
import { PropsTable } from '@/components/PropsTable';
-import { PopoverSnippet } from '@/snippets/stories-snippets';
+import { Default } from './stories';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
import {
@@ -13,7 +13,7 @@ import {
} from './popover.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { PopoverDefinition } from '../utils/definitions';
+import { PopoverDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={popoverDefaultSnippet}
/>
@@ -49,7 +49,7 @@ Popover supports multiple placement options to position the content relative to
}
+ preview={}
code={popoverPlacementsSnippet}
/>
@@ -60,7 +60,7 @@ You can hide the arrow by setting the `hideArrow` prop.
}
+ preview={}
code={popoverNoArrowSnippet}
/>
@@ -71,7 +71,7 @@ Popovers can contain complex content including buttons, forms, and other interac
}
+ preview={}
code={popoverRichContentSnippet}
/>
@@ -82,7 +82,7 @@ Non-modal popovers allow interaction with other elements on the page while the p
}
+ preview={}
code={popoverNonModalSnippet}
/>
@@ -93,7 +93,7 @@ Popovers automatically handle scrolling when content exceeds the available viewp
}
+ preview={}
code={popoverDefaultSnippet}
/>
diff --git a/docs-ui/src/content/popover.props.ts b/docs-ui/src/app/components/popover/popover.props.ts
similarity index 100%
rename from docs-ui/src/content/popover.props.ts
rename to docs-ui/src/app/components/popover/popover.props.ts
diff --git a/docs-ui/src/app/components/popover/stories.tsx b/docs-ui/src/app/components/popover/stories.tsx
new file mode 100644
index 0000000000..5a01027a67
--- /dev/null
+++ b/docs-ui/src/app/components/popover/stories.tsx
@@ -0,0 +1,7 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Popover/Popover.stories';
+
+const { Default: DefaultStory } = stories;
+
+export const Default = () => ;
diff --git a/docs-ui/src/content/radio-group.mdx b/docs-ui/src/app/components/radio-group/page.mdx
similarity index 81%
rename from docs-ui/src/content/radio-group.mdx
rename to docs-ui/src/app/components/radio-group/page.mdx
index ba9352c026..de8379574f 100644
--- a/docs-ui/src/content/radio-group.mdx
+++ b/docs-ui/src/app/components/radio-group/page.mdx
@@ -1,6 +1,6 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
-import { RadioGroupSnippet } from '@/snippets/stories-snippets';
+import { Default, Horizontal, Disabled, DisabledSingle, Validation, ReadOnly } from './stories';
import {
radioGroupPropDefs,
radioGroupUsageSnippet,
@@ -16,7 +16,7 @@ import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
import { ChangelogComponent } from '@/components/ChangelogComponent';
import { CodeBlock } from '@/components/CodeBlock';
-import { RadioGroupDefinition } from '../utils/definitions';
+import { RadioGroupDefinition } from '../../../utils/definitions';
}
+ preview={}
code={radioGroupDefaultSnippet}
/>
@@ -48,7 +48,7 @@ Here's a simple TextField with a description.
align="center"
py={4}
open
- preview={}
+ preview={}
code={radioGroupHorizontalSnippet}
/>
@@ -60,7 +60,7 @@ You can disable the entire radio group by adding the `isDisabled` prop to the `R
align="center"
py={4}
open
- preview={}
+ preview={}
code={radioGroupDisabledSnippet}
/>
@@ -72,7 +72,7 @@ You can disable a single radio by adding the `isDisabled` prop to the `Radio` co
align="center"
py={4}
open
- preview={}
+ preview={}
code={radioGroupDisabledSingleSnippet}
/>
@@ -84,7 +84,7 @@ Here's an example of a radio group with errors.
align="center"
py={4}
open
- preview={}
+ preview={}
code={radioGroupValidationSnippet}
/>
@@ -96,7 +96,7 @@ You can make the radio group read only by adding the `isReadOnly` prop to the `R
align="center"
py={4}
open
- preview={}
+ preview={}
code={radioGroupReadOnlySnippet}
/>
diff --git a/docs-ui/src/content/radio-group.props.ts b/docs-ui/src/app/components/radio-group/radio-group.props.ts
similarity index 100%
rename from docs-ui/src/content/radio-group.props.ts
rename to docs-ui/src/app/components/radio-group/radio-group.props.ts
diff --git a/docs-ui/src/app/components/radio-group/stories.tsx b/docs-ui/src/app/components/radio-group/stories.tsx
new file mode 100644
index 0000000000..23853d3bcd
--- /dev/null
+++ b/docs-ui/src/app/components/radio-group/stories.tsx
@@ -0,0 +1,19 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/RadioGroup/RadioGroup.stories';
+
+const {
+ Default: DefaultStory,
+ Horizontal: HorizontalStory,
+ Disabled: DisabledStory,
+ DisabledSingle: DisabledSingleStory,
+ Validation: ValidationStory,
+ ReadOnly: ReadOnlyStory,
+} = stories;
+
+export const Default = () => ;
+export const Horizontal = () => ;
+export const Disabled = () => ;
+export const DisabledSingle = () => ;
+export const Validation = () => ;
+export const ReadOnly = () => ;
diff --git a/docs-ui/src/content/search-field.mdx b/docs-ui/src/app/components/search-field/page.mdx
similarity index 80%
rename from docs-ui/src/content/search-field.mdx
rename to docs-ui/src/app/components/search-field/page.mdx
index 6b33feea42..9be0dc36af 100644
--- a/docs-ui/src/content/search-field.mdx
+++ b/docs-ui/src/app/components/search-field/page.mdx
@@ -1,6 +1,6 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
-import { SearchFieldSnippet } from '@/snippets/stories-snippets';
+import { WithLabel, Sizes, WithDescription, StartCollapsed } from './stories';
import {
searchFieldPropDefs,
searchFieldUsageSnippet,
@@ -13,7 +13,7 @@ import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
import { ChangelogComponent } from '@/components/ChangelogComponent';
import { CodeBlock } from '@/components/CodeBlock';
-import { SearchFieldDefinition } from '../utils/definitions';
+import { SearchFieldDefinition } from '../../../utils/definitions';
}
+ preview={}
code={searchFieldDefaultSnippet}
/>
@@ -45,7 +45,7 @@ We support two different sizes: `small`, `medium`.
align="center"
py={4}
open
- preview={}
+ preview={}
code={searchFieldSizesSnippet}
/>
@@ -57,7 +57,7 @@ Here's a simple SearchField with a description.
align="center"
py={4}
open
- preview={}
+ preview={}
code={searchFieldDescriptionSnippet}
/>
@@ -69,7 +69,7 @@ You can make the SearchField collapsible by setting the `startCollapsed` prop to
align="center"
py={4}
open
- preview={}
+ preview={}
code={searchFieldCollapsibleSnippet}
/>
diff --git a/docs-ui/src/content/search-field.props.ts b/docs-ui/src/app/components/search-field/search-field.props.ts
similarity index 100%
rename from docs-ui/src/content/search-field.props.ts
rename to docs-ui/src/app/components/search-field/search-field.props.ts
diff --git a/docs-ui/src/app/components/search-field/stories.tsx b/docs-ui/src/app/components/search-field/stories.tsx
new file mode 100644
index 0000000000..9aeec97ab3
--- /dev/null
+++ b/docs-ui/src/app/components/search-field/stories.tsx
@@ -0,0 +1,15 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/SearchField/SearchField.stories';
+
+const {
+ WithLabel: WithLabelStory,
+ Sizes: SizesStory,
+ WithDescription: WithDescriptionStory,
+ StartCollapsed: StartCollapsedStory,
+} = stories;
+
+export const WithLabel = () => ;
+export const Sizes = () => ;
+export const WithDescription = () => ;
+export const StartCollapsed = () => ;
diff --git a/docs-ui/src/content/select.mdx b/docs-ui/src/app/components/select/page.mdx
similarity index 80%
rename from docs-ui/src/content/select.mdx
rename to docs-ui/src/app/components/select/page.mdx
index 757a79effe..66d632b521 100644
--- a/docs-ui/src/content/select.mdx
+++ b/docs-ui/src/app/components/select/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { SelectSnippet } from '@/snippets/stories-snippets';
+import { Preview, WithLabelAndDescription, Sizes, WithIcon, Disabled, DisabledOption, Searchable, MultipleSelection, SearchableMultiple } from './stories';
import {
selectPropDefs,
selectUsageSnippet,
@@ -19,7 +19,7 @@ import {
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
import { ChangelogComponent } from '@/components/ChangelogComponent';
-import { SelectDefinition } from '../utils/definitions';
+import { SelectDefinition } from '../../../utils/definitions';
}
+ preview={}
code={selectDefaultSnippet}
/>
@@ -51,7 +51,7 @@ Select component with label and description.
align="center"
py={4}
open
- preview={}
+ preview={}
code={selectDescriptionSnippet}
/>
@@ -63,7 +63,7 @@ Here's a view when the selects have different sizes.
align="center"
py={4}
open
- preview={}
+ preview={}
code={selectSizesSnippet}
/>
@@ -76,7 +76,7 @@ Here's a view when the select has an icon.
align="center"
py={4}
open
-preview={}
+preview={}
code={selectIconSnippet}
/>
@@ -88,7 +88,7 @@ Here's a view when the select is disabled.
align="center"
py={4}
open
- preview={}
+ preview={}
code={selectDisabledSnippet}
/>
@@ -100,7 +100,7 @@ You can disable specific options within the Select component using `disabledKeys
align="center"
py={4}
open
- preview={}
+ preview={}
code={selectDisabledOptionsSnippet}
/>
@@ -112,7 +112,7 @@ Here's a view when the select has searchable filtering.
align="center"
py={4}
open
- preview={}
+ preview={}
code={selectSearchableSnippet}
/>
@@ -124,7 +124,7 @@ Here's a view when the select allows multiple selections.
align="center"
py={4}
open
- preview={}
+ preview={}
code={selectMultipleSnippet}
/>
@@ -136,7 +136,7 @@ Here's a view when the select combines search and multiple selection.
align="center"
py={4}
open
- preview={}
+ preview={}
code={selectSearchableMultipleSnippet}
/>
diff --git a/docs-ui/src/content/select.props.ts b/docs-ui/src/app/components/select/select.props.ts
similarity index 100%
rename from docs-ui/src/content/select.props.ts
rename to docs-ui/src/app/components/select/select.props.ts
diff --git a/docs-ui/src/app/components/select/stories.tsx b/docs-ui/src/app/components/select/stories.tsx
new file mode 100644
index 0000000000..149a6d2ae1
--- /dev/null
+++ b/docs-ui/src/app/components/select/stories.tsx
@@ -0,0 +1,27 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Select/Select.stories';
+
+const {
+ Preview: PreviewStory,
+ WithLabelAndDescription: WithLabelAndDescriptionStory,
+ Sizes: SizesStory,
+ WithIcon: WithIconStory,
+ Disabled: DisabledStory,
+ DisabledOption: DisabledOptionStory,
+ Searchable: SearchableStory,
+ MultipleSelection: MultipleSelectionStory,
+ SearchableMultiple: SearchableMultipleStory,
+} = stories;
+
+export const Preview = () => ;
+export const WithLabelAndDescription = () => (
+
+);
+export const Sizes = () => ;
+export const WithIcon = () => ;
+export const Disabled = () => ;
+export const DisabledOption = () => ;
+export const Searchable = () => ;
+export const MultipleSelection = () => ;
+export const SearchableMultiple = () => ;
diff --git a/docs-ui/src/content/skeleton.mdx b/docs-ui/src/app/components/skeleton/page.mdx
similarity index 82%
rename from docs-ui/src/content/skeleton.mdx
rename to docs-ui/src/app/components/skeleton/page.mdx
index 07cd4b3332..a32672e352 100644
--- a/docs-ui/src/content/skeleton.mdx
+++ b/docs-ui/src/app/components/skeleton/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { SkeletonSnippet } from '@/snippets/stories-snippets';
+import { Demo1, Demo2 } from './stories';
import {
skeletonPropDefs,
skeletonUsageSnippet,
@@ -12,7 +12,7 @@ import {
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
import { ChangelogComponent } from '@/components/ChangelogComponent';
-import { SkeletonDefinition } from '../utils/definitions';
+import { SkeletonDefinition } from '../../../utils/definitions';
}
+ preview={}
code={skeletonDefaultSnippet}
/>
@@ -43,7 +43,7 @@ You can use a mix of different sizes to create a more complex skeleton.
}
+ preview={}
code={skeletonDemo1Snippet}
open
/>
@@ -55,7 +55,7 @@ You can use a mix of different sizes to create a more complex skeleton.
}
+ preview={}
code={skeletonDemo2Snippet}
open
/>
diff --git a/docs-ui/src/content/skeleton.props.ts b/docs-ui/src/app/components/skeleton/skeleton.props.ts
similarity index 100%
rename from docs-ui/src/content/skeleton.props.ts
rename to docs-ui/src/app/components/skeleton/skeleton.props.ts
diff --git a/docs-ui/src/app/components/skeleton/stories.tsx b/docs-ui/src/app/components/skeleton/stories.tsx
new file mode 100644
index 0000000000..c699cea620
--- /dev/null
+++ b/docs-ui/src/app/components/skeleton/stories.tsx
@@ -0,0 +1,8 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Skeleton/Skeleton.stories';
+
+const { Demo1: Demo1Story, Demo2: Demo2Story } = stories;
+
+export const Demo1 = () => ;
+export const Demo2 = () => ;
diff --git a/docs-ui/src/content/switch.mdx b/docs-ui/src/app/components/switch/page.mdx
similarity index 81%
rename from docs-ui/src/content/switch.mdx
rename to docs-ui/src/app/components/switch/page.mdx
index 965cc7832b..e721973a50 100644
--- a/docs-ui/src/content/switch.mdx
+++ b/docs-ui/src/app/components/switch/page.mdx
@@ -1,12 +1,12 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { SwitchSnippet } from '@/snippets/stories-snippets';
+import { Default, Disabled } from './stories';
import { switchPropDefs, snippetUsage } from './switch.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
import { ChangelogComponent } from '@/components/ChangelogComponent';
-import { SwitchDefinition } from '../utils/definitions';
+import { SwitchDefinition } from '../../../utils/definitions';
}
+ preview={}
code={``}
/>
@@ -38,7 +38,7 @@ A switch can be disabled using the `isDisabled` prop.
align="center"
py={4}
open
- preview={}
+ preview={}
code={``}
/>
diff --git a/docs-ui/src/app/components/switch/stories.tsx b/docs-ui/src/app/components/switch/stories.tsx
new file mode 100644
index 0000000000..1a8a56a051
--- /dev/null
+++ b/docs-ui/src/app/components/switch/stories.tsx
@@ -0,0 +1,8 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Switch/Switch.stories';
+
+const { Default: DefaultStory, Disabled: DisabledStory } = stories;
+
+export const Default = () => ;
+export const Disabled = () => ;
diff --git a/docs-ui/src/content/switch.props.ts b/docs-ui/src/app/components/switch/switch.props.ts
similarity index 100%
rename from docs-ui/src/content/switch.props.ts
rename to docs-ui/src/app/components/switch/switch.props.ts
diff --git a/docs-ui/src/content/table.mdx b/docs-ui/src/app/components/table/page.mdx
similarity index 91%
rename from docs-ui/src/content/table.mdx
rename to docs-ui/src/app/components/table/page.mdx
index 00b7290532..db87494f21 100644
--- a/docs-ui/src/content/table.mdx
+++ b/docs-ui/src/app/components/table/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { TableSnippet } from '@/snippets/stories-snippets';
+import { TableRockBand, SelectionModePlayground, SelectionBehaviorPlayground, SelectionToggleWithActions } from './stories';
import {
tablePropDefs,
tableHeaderPropDefs,
@@ -24,7 +24,7 @@ import {
import { ChangelogComponent } from '@/components/ChangelogComponent';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { TableDefinition } from '../utils/definitions';
+import { TableDefinition } from '../../../utils/definitions';
}
+ preview={}
code={tableBasicSnippet}
/>
@@ -100,7 +100,7 @@ Tables support row selection with two configuration options: selection mode and
Use `selectionMode` to control how many rows can be selected. With `single`, only one row can be selected at a time. With `multiple`, any number of rows can be selected, and a header checkbox provides select-all functionality.
}
+ preview={}
code={tableSelectionModeSnippet}
/>
@@ -109,7 +109,7 @@ Use `selectionMode` to control how many rows can be selected. With `single`, onl
Use `selectionBehavior` to control how selection is indicated and interacted with. With `toggle`, checkboxes appear for selection. With `replace`, selection is indicated by row background color—click to select, Cmd/Ctrl+click for multiple.
}
+ preview={}
code={tableSelectionBehaviorSnippet}
/>
@@ -120,7 +120,7 @@ With toggle behavior, clicking a row triggers its action when nothing is selecte
With replace behavior, clicking selects the row and double-clicking triggers the action.
}
+ preview={}
code={tableSelectionActionsSnippet}
/>
diff --git a/docs-ui/src/app/components/table/stories.tsx b/docs-ui/src/app/components/table/stories.tsx
new file mode 100644
index 0000000000..2627694d30
--- /dev/null
+++ b/docs-ui/src/app/components/table/stories.tsx
@@ -0,0 +1,21 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Table/stories/Table.docs.stories';
+
+const {
+ TableRockBand: TableRockBandStory,
+ SelectionModePlayground: SelectionModePlaygroundStory,
+ SelectionBehaviorPlayground: SelectionBehaviorPlaygroundStory,
+ SelectionToggleWithActions: SelectionToggleWithActionsStory,
+} = stories;
+
+export const TableRockBand = () => ;
+export const SelectionModePlayground = () => (
+
+);
+export const SelectionBehaviorPlayground = () => (
+
+);
+export const SelectionToggleWithActions = () => (
+
+);
diff --git a/docs-ui/src/content/table.props.ts b/docs-ui/src/app/components/table/table.props.ts
similarity index 100%
rename from docs-ui/src/content/table.props.ts
rename to docs-ui/src/app/components/table/table.props.ts
diff --git a/docs-ui/src/content/tabs.mdx b/docs-ui/src/app/components/tabs/page.mdx
similarity index 84%
rename from docs-ui/src/content/tabs.mdx
rename to docs-ui/src/app/components/tabs/page.mdx
index 1fc7448eba..0f3ab6bfd4 100644
--- a/docs-ui/src/content/tabs.mdx
+++ b/docs-ui/src/app/components/tabs/page.mdx
@@ -1,5 +1,5 @@
import { PropsTable } from '@/components/PropsTable';
-import { TabsSnippet } from '@/snippets/stories-snippets';
+import { Default, WithTabPanels, WithMockedURLTab2, PrefixMatchingDeepNesting } from './stories';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
import {
@@ -13,7 +13,7 @@ import {
} from './tabs.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { TabsDefinition } from '../utils/definitions';
+import { TabsDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={tabsDefaultSnippet}
/>
@@ -53,7 +53,7 @@ To connect the tabs with the panels, you need to use the `id` prop on the tab an
}
+ preview={}
code={tabsWithTabPanelsSnippet}
open
/>
@@ -64,7 +64,7 @@ You can use the `href` prop on the tab to make it a link. This will use the `rea
}
+ preview={}
code={tabsWithLinksSnippet}
open
/>
@@ -75,7 +75,7 @@ You can use the `matchStrategy` prop on the tab to control how the tab is matche
}
+ preview={}
code={tabsWithDeeplyNestedRoutesSnippet}
open
/>
diff --git a/docs-ui/src/app/components/tabs/stories.tsx b/docs-ui/src/app/components/tabs/stories.tsx
new file mode 100644
index 0000000000..ee1704a45e
--- /dev/null
+++ b/docs-ui/src/app/components/tabs/stories.tsx
@@ -0,0 +1,17 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Tabs/Tabs.stories';
+
+const {
+ Default: DefaultStory,
+ WithTabPanels: WithTabPanelsStory,
+ WithMockedURLTab2: WithMockedURLTab2Story,
+ PrefixMatchingDeepNesting: PrefixMatchingDeepNestingStory,
+} = stories;
+
+export const Default = () => ;
+export const WithTabPanels = () => ;
+export const WithMockedURLTab2 = () => ;
+export const PrefixMatchingDeepNesting = () => (
+
+);
diff --git a/docs-ui/src/content/tabs.props.ts b/docs-ui/src/app/components/tabs/tabs.props.ts
similarity index 100%
rename from docs-ui/src/content/tabs.props.ts
rename to docs-ui/src/app/components/tabs/tabs.props.ts
diff --git a/docs-ui/src/content/tag-group.mdx b/docs-ui/src/app/components/tag-group/page.mdx
similarity index 80%
rename from docs-ui/src/content/tag-group.mdx
rename to docs-ui/src/app/components/tag-group/page.mdx
index 88e60b31f5..a10695727d 100644
--- a/docs-ui/src/content/tag-group.mdx
+++ b/docs-ui/src/app/components/tag-group/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { TagGroupSnippet } from '@/snippets/stories-snippets';
+import { Default, WithLink, WithIcon, Sizes, RemovingTags, Disabled } from './stories';
import {
tagGroupPropDefs,
tagPropDefs,
@@ -15,7 +15,7 @@ import {
} from './tag-group.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { TagGroupDefinition } from '../utils/definitions';
+import { TagGroupDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={preview}
/>
@@ -58,7 +58,7 @@ A tag can be a link by passing a `href` prop.
align="center"
py={4}
open
- preview={}
+ preview={}
code={withLink}
/>
@@ -70,7 +70,7 @@ A tag can have an icon by passing a `icon` prop.
align="center"
py={4}
open
- preview={}
+ preview={}
code={withIcons}
/>
@@ -82,7 +82,7 @@ A tag can have a size by passing a `size` prop. It could be `small` or `medium`.
align="center"
py={4}
open
- preview={}
+ preview={}
code={sizes}
/>
@@ -94,7 +94,7 @@ A tag can be removed by passing a `onRemove` prop.
align="center"
py={4}
open
- preview={}
+ preview={}
code={removingTags}
/>
@@ -106,7 +106,7 @@ A switch can be disabled using the `isDisabled` prop.
align="center"
py={4}
open
- preview={}
+ preview={}
code={disabled}
/>
diff --git a/docs-ui/src/app/components/tag-group/stories.tsx b/docs-ui/src/app/components/tag-group/stories.tsx
new file mode 100644
index 0000000000..4fb495df08
--- /dev/null
+++ b/docs-ui/src/app/components/tag-group/stories.tsx
@@ -0,0 +1,19 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/TagGroup/TagGroup.stories';
+
+const {
+ Default: DefaultStory,
+ WithLink: WithLinkStory,
+ WithIcon: WithIconStory,
+ Sizes: SizesStory,
+ RemovingTags: RemovingTagsStory,
+ Disabled: DisabledStory,
+} = stories;
+
+export const Default = () => ;
+export const WithLink = () => ;
+export const WithIcon = () => ;
+export const Sizes = () => ;
+export const RemovingTags = () => ;
+export const Disabled = () => ;
diff --git a/docs-ui/src/content/tag-group.props.ts b/docs-ui/src/app/components/tag-group/tag-group.props.ts
similarity index 100%
rename from docs-ui/src/content/tag-group.props.ts
rename to docs-ui/src/app/components/tag-group/tag-group.props.ts
diff --git a/docs-ui/src/content/text-field.mdx b/docs-ui/src/app/components/text-field/page.mdx
similarity index 80%
rename from docs-ui/src/content/text-field.mdx
rename to docs-ui/src/app/components/text-field/page.mdx
index 9f14a82975..1ab0857787 100644
--- a/docs-ui/src/content/text-field.mdx
+++ b/docs-ui/src/app/components/text-field/page.mdx
@@ -1,6 +1,6 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
-import { TextFieldSnippet } from '@/snippets/stories-snippets';
+import { WithLabel, Sizes, WithDescription } from './stories';
import {
inputPropDefs,
textFieldUsageSnippet,
@@ -10,7 +10,7 @@ import {
} from './text-field.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { TextFieldDefinition } from '../utils/definitions';
+import { TextFieldDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
import { CodeBlock } from '@/components/CodeBlock';
@@ -22,7 +22,7 @@ import { CodeBlock } from '@/components/CodeBlock';
}
+ preview={}
code={textFieldDefaultSnippet}
/>
@@ -44,7 +44,7 @@ We support two different sizes: `small`, `medium`.
align="center"
py={4}
open
- preview={}
+ preview={}
code={textFieldSizesSnippet}
/>
@@ -56,7 +56,7 @@ Here's a simple TextField with a description.
align="center"
py={4}
open
- preview={}
+ preview={}
code={textFieldDescriptionSnippet}
/>
diff --git a/docs-ui/src/app/components/text-field/stories.tsx b/docs-ui/src/app/components/text-field/stories.tsx
new file mode 100644
index 0000000000..9b6afd6c80
--- /dev/null
+++ b/docs-ui/src/app/components/text-field/stories.tsx
@@ -0,0 +1,13 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/TextField/TextField.stories';
+
+const {
+ WithLabel: WithLabelStory,
+ Sizes: SizesStory,
+ WithDescription: WithDescriptionStory,
+} = stories;
+
+export const WithLabel = () => ;
+export const Sizes = () => ;
+export const WithDescription = () => ;
diff --git a/docs-ui/src/content/text-field.props.ts b/docs-ui/src/app/components/text-field/text-field.props.ts
similarity index 100%
rename from docs-ui/src/content/text-field.props.ts
rename to docs-ui/src/app/components/text-field/text-field.props.ts
diff --git a/docs-ui/src/content/text.mdx b/docs-ui/src/app/components/text/page.mdx
similarity index 82%
rename from docs-ui/src/content/text.mdx
rename to docs-ui/src/app/components/text/page.mdx
index c987b8e5f7..2f72087b05 100644
--- a/docs-ui/src/content/text.mdx
+++ b/docs-ui/src/app/components/text/page.mdx
@@ -1,5 +1,5 @@
import { PropsTable } from '@/components/PropsTable';
-import { TextSnippet } from '@/snippets/stories-snippets';
+import { Default, AllVariants, AllWeights, AllColors, Truncate } from './stories';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
import {
@@ -14,7 +14,7 @@ import {
} from './text.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { TextDefinition } from '../utils/definitions';
+import { TextDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={textDefaultSnippet}
/>
@@ -45,7 +45,7 @@ appearance of the text.
}
+ preview={}
code={textVariantsSnippet}
/>
@@ -56,7 +56,7 @@ appearance of the text.
}
+ preview={}
code={textWeightsSnippet}
/>
@@ -67,7 +67,7 @@ appearance of the text.
}
+ preview={}
code={textColorsSnippet}
/>
@@ -77,7 +77,7 @@ The `Text` component has a `truncate` prop that can be used to truncate the text
}
+ preview={}
code={textTruncateSnippet}
/>
diff --git a/docs-ui/src/app/components/text/stories.tsx b/docs-ui/src/app/components/text/stories.tsx
new file mode 100644
index 0000000000..946734151a
--- /dev/null
+++ b/docs-ui/src/app/components/text/stories.tsx
@@ -0,0 +1,17 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Text/Text.stories';
+
+const {
+ Default: DefaultStory,
+ AllVariants: AllVariantsStory,
+ AllWeights: AllWeightsStory,
+ AllColors: AllColorsStory,
+ Truncate: TruncateStory,
+} = stories;
+
+export const Default = () => ;
+export const AllVariants = () => ;
+export const AllWeights = () => ;
+export const AllColors = () => ;
+export const Truncate = () => ;
diff --git a/docs-ui/src/content/text.props.ts b/docs-ui/src/app/components/text/text.props.ts
similarity index 100%
rename from docs-ui/src/content/text.props.ts
rename to docs-ui/src/app/components/text/text.props.ts
diff --git a/docs-ui/src/content/toggle-button-group.mdx b/docs-ui/src/app/components/toggle-button-group/page.mdx
similarity index 74%
rename from docs-ui/src/content/toggle-button-group.mdx
rename to docs-ui/src/app/components/toggle-button-group/page.mdx
index 19034f0ac5..16d5d14cc6 100644
--- a/docs-ui/src/content/toggle-button-group.mdx
+++ b/docs-ui/src/app/components/toggle-button-group/page.mdx
@@ -13,11 +13,11 @@ import {
toggleButtonGroupIconsOnlySnippet,
toggleButtonGroupSurfacesSnippet,
} from './toggle-button-group.props';
-import { ToggleButtonGroupSnippet } from '@/snippets/stories-snippets';
+import { SingleSelection, Surfaces, MultipleSelection, WithIcons, IconsOnly, DisallowEmptySelection, Orientation, DisabledGroup } from './stories';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
import { ChangelogComponent } from '@/components/ChangelogComponent';
-import { ToggleButtonGroupDefinition } from '../utils/definitions';
+import { ToggleButtonGroupDefinition } from '../../../utils/definitions';
}
+ preview={}
code={toggleButtonGroupSingleSnippet}
/>
@@ -47,7 +47,7 @@ import { ToggleButtonGroupDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonGroupSurfacesSnippet}
/>
@@ -57,7 +57,7 @@ import { ToggleButtonGroupDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonGroupSingleSnippet}
/>
@@ -67,7 +67,7 @@ import { ToggleButtonGroupDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonGroupMultipleSnippet}
/>
@@ -77,7 +77,7 @@ import { ToggleButtonGroupDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonGroupIconsSnippet}
/>
@@ -87,7 +87,7 @@ import { ToggleButtonGroupDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonGroupIconsOnlySnippet}
/>
@@ -97,7 +97,7 @@ import { ToggleButtonGroupDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonGroupDisallowEmptySnippet}
/>
@@ -107,7 +107,7 @@ import { ToggleButtonGroupDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonGroupVerticalSnippet}
/>
@@ -117,7 +117,7 @@ import { ToggleButtonGroupDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonGroupDisabledSnippet}
/>
diff --git a/docs-ui/src/app/components/toggle-button-group/stories.tsx b/docs-ui/src/app/components/toggle-button-group/stories.tsx
new file mode 100644
index 0000000000..8d75c021b5
--- /dev/null
+++ b/docs-ui/src/app/components/toggle-button-group/stories.tsx
@@ -0,0 +1,25 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/ToggleButtonGroup/ToggleButtonGroup.stories';
+
+const {
+ SingleSelection: SingleSelectionStory,
+ Surfaces: SurfacesStory,
+ MultipleSelection: MultipleSelectionStory,
+ WithIcons: WithIconsStory,
+ IconsOnly: IconsOnlyStory,
+ DisallowEmptySelection: DisallowEmptySelectionStory,
+ Orientation: OrientationStory,
+ DisabledGroup: DisabledGroupStory,
+} = stories;
+
+export const SingleSelection = () => ;
+export const Surfaces = () => ;
+export const MultipleSelection = () => ;
+export const WithIcons = () => ;
+export const IconsOnly = () => ;
+export const DisallowEmptySelection = () => (
+
+);
+export const Orientation = () => ;
+export const DisabledGroup = () => ;
diff --git a/docs-ui/src/content/toggle-button-group.props.ts b/docs-ui/src/app/components/toggle-button-group/toggle-button-group.props.ts
similarity index 100%
rename from docs-ui/src/content/toggle-button-group.props.ts
rename to docs-ui/src/app/components/toggle-button-group/toggle-button-group.props.ts
diff --git a/docs-ui/src/content/toggle-button.mdx b/docs-ui/src/app/components/toggle-button/page.mdx
similarity index 79%
rename from docs-ui/src/content/toggle-button.mdx
rename to docs-ui/src/app/components/toggle-button/page.mdx
index 78750ec365..45dea83828 100644
--- a/docs-ui/src/content/toggle-button.mdx
+++ b/docs-ui/src/app/components/toggle-button/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { ToggleButtonSnippet } from '@/snippets/stories-snippets';
+import { Default, Surfaces, Sizes, WithIcons, Disabled, Controlled, DynamicContent } from './stories';
import {
toggleButtonPropDefs,
toggleButtonUsageSnippet,
@@ -15,7 +15,7 @@ import {
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
import { ChangelogComponent } from '@/components/ChangelogComponent';
-import { ToggleButtonDefinition } from '../utils/definitions';
+import { ToggleButtonDefinition } from '../../../utils/definitions';
}
+ preview={}
code={toggleButtonUsageSnippet}
/>
@@ -45,7 +45,7 @@ import { ToggleButtonDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonSurfacesSnippet}
/>
@@ -55,7 +55,7 @@ import { ToggleButtonDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonSizesSnippet}
/>
@@ -65,7 +65,7 @@ import { ToggleButtonDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonIconsSnippet}
/>
@@ -75,7 +75,7 @@ import { ToggleButtonDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonDisabledSnippet}
/>
@@ -85,7 +85,7 @@ import { ToggleButtonDefinition } from '../utils/definitions';
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonControlledSnippet}
/>
@@ -97,7 +97,7 @@ The `children` prop can be a function that receives render props, allowing you t
align="center"
py={4}
open
- preview={}
+ preview={}
code={toggleButtonFunctionChildrenSnippet}
/>
diff --git a/docs-ui/src/app/components/toggle-button/stories.tsx b/docs-ui/src/app/components/toggle-button/stories.tsx
new file mode 100644
index 0000000000..ce210dc6ab
--- /dev/null
+++ b/docs-ui/src/app/components/toggle-button/stories.tsx
@@ -0,0 +1,21 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/ToggleButton/ToggleButton.stories';
+
+const {
+ Default: DefaultStory,
+ Surfaces: SurfacesStory,
+ Sizes: SizesStory,
+ WithIcons: WithIconsStory,
+ Disabled: DisabledStory,
+ Controlled: ControlledStory,
+ DynamicContent: DynamicContentStory,
+} = stories;
+
+export const Default = () => ;
+export const Surfaces = () => ;
+export const Sizes = () => ;
+export const WithIcons = () => ;
+export const Disabled = () => ;
+export const Controlled = () => ;
+export const DynamicContent = () => ;
diff --git a/docs-ui/src/content/toggle-button.props.ts b/docs-ui/src/app/components/toggle-button/toggle-button.props.ts
similarity index 100%
rename from docs-ui/src/content/toggle-button.props.ts
rename to docs-ui/src/app/components/toggle-button/toggle-button.props.ts
diff --git a/docs-ui/src/content/tooltip.mdx b/docs-ui/src/app/components/tooltip/page.mdx
similarity index 85%
rename from docs-ui/src/content/tooltip.mdx
rename to docs-ui/src/app/components/tooltip/page.mdx
index 8ebf6539d6..c62ece88ec 100644
--- a/docs-ui/src/content/tooltip.mdx
+++ b/docs-ui/src/app/components/tooltip/page.mdx
@@ -1,5 +1,5 @@
import { PropsTable } from '@/components/PropsTable';
-import { TooltipSnippet } from '@/snippets/stories-snippets';
+import { Default } from './stories';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
import {
@@ -10,7 +10,7 @@ import {
} from './tooltip.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { TooltipDefinition } from '../utils/definitions';
+import { TooltipDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={tooltipDefaultSnippet}
align="center"
/>
diff --git a/docs-ui/src/app/components/tooltip/stories.tsx b/docs-ui/src/app/components/tooltip/stories.tsx
new file mode 100644
index 0000000000..101131db43
--- /dev/null
+++ b/docs-ui/src/app/components/tooltip/stories.tsx
@@ -0,0 +1,7 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/Tooltip/Tooltip.stories';
+
+const { Default: DefaultStory } = stories;
+
+export const Default = () => ;
diff --git a/docs-ui/src/content/tooltip.props.ts b/docs-ui/src/app/components/tooltip/tooltip.props.ts
similarity index 100%
rename from docs-ui/src/content/tooltip.props.ts
rename to docs-ui/src/app/components/tooltip/tooltip.props.ts
diff --git a/docs-ui/src/content/visually-hidden.mdx b/docs-ui/src/app/components/visually-hidden/page.mdx
similarity index 82%
rename from docs-ui/src/content/visually-hidden.mdx
rename to docs-ui/src/app/components/visually-hidden/page.mdx
index 72ffc7a1d4..98591e502c 100644
--- a/docs-ui/src/content/visually-hidden.mdx
+++ b/docs-ui/src/app/components/visually-hidden/page.mdx
@@ -1,7 +1,7 @@
import { PropsTable } from '@/components/PropsTable';
import { Snippet } from '@/components/Snippet';
import { CodeBlock } from '@/components/CodeBlock';
-import { VisuallyHiddenSnippet } from '@/snippets/stories-snippets';
+import { Default, ExampleUsage } from './stories';
import {
visuallyHiddenPropDefs,
visuallyHiddenUsageSnippet,
@@ -10,7 +10,7 @@ import {
} from './visually-hidden.props';
import { PageTitle } from '@/components/PageTitle';
import { Theming } from '@/components/Theming';
-import { VisuallyHiddenDefinition } from '../utils/definitions';
+import { VisuallyHiddenDefinition } from '../../../utils/definitions';
import { ChangelogComponent } from '@/components/ChangelogComponent';
}
+ preview={}
code={visuallyHiddenDefaultSnippet}
/>
@@ -42,7 +42,7 @@ Here's an example of providing screen reader context for a list of links in a fo
}
+ preview={}
code={visuallyHiddenExampleUsageSnippet}
open
/>
diff --git a/docs-ui/src/app/components/visually-hidden/stories.tsx b/docs-ui/src/app/components/visually-hidden/stories.tsx
new file mode 100644
index 0000000000..2edefe0f94
--- /dev/null
+++ b/docs-ui/src/app/components/visually-hidden/stories.tsx
@@ -0,0 +1,8 @@
+'use client';
+
+import * as stories from '@backstage/ui/src/components/VisuallyHidden/VisuallyHidden.stories';
+
+const { Default: DefaultStory, ExampleUsage: ExampleUsageStory } = stories;
+
+export const Default = () => ;
+export const ExampleUsage = () => ;
diff --git a/docs-ui/src/content/visually-hidden.props.ts b/docs-ui/src/app/components/visually-hidden/visually-hidden.props.ts
similarity index 100%
rename from docs-ui/src/content/visually-hidden.props.ts
rename to docs-ui/src/app/components/visually-hidden/visually-hidden.props.ts
diff --git a/docs-ui/src/content/PasswordField.tsx b/docs-ui/src/content/PasswordField.tsx
deleted file mode 100644
index 953ec3515e..0000000000
--- a/docs-ui/src/content/PasswordField.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-'use client';
-
-import * as stories from '../../../packages/ui/src/components/PasswordField/PasswordField.stories';
-
-export const Default = () => {
- const { CustomField } = stories;
- return ;
-};
diff --git a/docs-ui/src/content/password-field.mdx b/docs-ui/src/content/password-field.mdx
deleted file mode 100644
index 2b6d3c1ca6..0000000000
--- a/docs-ui/src/content/password-field.mdx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { PropsTable } from '@/components/PropsTable';
-import { Snippet } from '@/components/Snippet';
-import { PasswordFieldSnippet } from '@/snippets/stories-snippets';
-import {
- inputPropDefs,
- passwordFieldUsageSnippet,
- passwordFieldDefaultSnippet,
- passwordFieldSizesSnippet,
- passwordFieldDescriptionSnippet,
-} from './password-field.props';
-import { PageTitle } from '@/components/PageTitle';
-import { Theming } from '@/components/Theming';
-import { ChangelogComponent } from '@/components/ChangelogComponent';
-import { CodeBlock } from '@/components/CodeBlock';
-import { PasswordFieldDefinition } from '../utils/definitions';
-import { Default } from './PasswordField';
-
-
-
-
diff --git a/docs-ui/src/snippets/stories-snippets.tsx b/docs-ui/src/snippets/stories-snippets.tsx
deleted file mode 100644
index 9297844baa..0000000000
--- a/docs-ui/src/snippets/stories-snippets.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-'use client';
-
-import * as BoxStories from '../../../packages/ui/src/components/Box/Box.stories';
-import * as ButtonStories from '../../../packages/ui/src/components/Button/Button.stories';
-import * as ButtonIconStories from '../../../packages/ui/src/components/ButtonIcon/ButtonIcon.stories';
-import * as ButtonLinkStories from '../../../packages/ui/src/components/ButtonLink/ButtonLink.stories';
-import * as CheckboxStories from '../../../packages/ui/src/components/Checkbox/Checkbox.stories';
-import * as ContainerStories from '../../../packages/ui/src/components/Container/Container.stories';
-import * as GridStories from '../../../packages/ui/src/components/Grid/Grid.stories';
-import * as TextFieldStories from '../../../packages/ui/src/components/TextField/TextField.stories';
-import * as TextStories from '../../../packages/ui/src/components/Text/Text.stories';
-import * as FlexStories from '../../../packages/ui/src/components/Flex/Flex.stories';
-import * as SelectStories from '../../../packages/ui/src/components/Select/Select.stories';
-import * as MenuStories from '../../../packages/ui/src/components/Menu/Menu.stories';
-import * as LinkStories from '../../../packages/ui/src/components/Link/Link.stories';
-import * as AvatarStories from '../../../packages/ui/src/components/Avatar/Avatar.stories';
-import * as AccordionStories from '../../../packages/ui/src/components/Accordion/Accordion.stories';
-import * as DialogStories from '../../../packages/ui/src/components/Dialog/Dialog.stories';
-import * as RadioGroupStories from '../../../packages/ui/src/components/RadioGroup/RadioGroup.stories';
-import * as TabsStories from '../../../packages/ui/src/components/Tabs/Tabs.stories';
-import * as SwitchStories from '../../../packages/ui/src/components/Switch/Switch.stories';
-import * as SearchFieldStories from '../../../packages/ui/src/components/SearchField/SearchField.stories';
-import * as TooltipStories from '../../../packages/ui/src/components/Tooltip/Tooltip.stories';
-import * as SkeletonStories from '../../../packages/ui/src/components/Skeleton/Skeleton.stories';
-import * as CardStories from '../../../packages/ui/src/components/Card/Card.stories';
-import * as HeaderStories from '../../../packages/ui/src/components/Header/Header.stories';
-import * as HeaderPageStories from '../../../packages/ui/src/components/HeaderPage/HeaderPage.stories';
-import * as TableStories from '../../../packages/ui/src/components/Table/stories/Table.docs.stories';
-import * as TagGroupStories from '../../../packages/ui/src/components/TagGroup/TagGroup.stories';
-import * as PasswordFieldStories from '../../../packages/ui/src/components/PasswordField/PasswordField.stories';
-import * as PopoverStories from '../../../packages/ui/src/components/Popover/Popover.stories';
-import * as VisuallyHiddenStories from '../../../packages/ui/src/components/VisuallyHidden/VisuallyHidden.stories';
-import * as ToggleButtonStories from '../../../packages/ui/src/components/ToggleButton/ToggleButton.stories';
-import * as ToggleButtonGroupStories from '../../../packages/ui/src/components/ToggleButtonGroup/ToggleButtonGroup.stories';
-
-// Helper function to create snippet components
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-const createSnippetComponent = (stories: any) => {
- return function SnippetComponent({ story }: { story: string }) {
- // In CSF3, stories are already React components that can be rendered directly
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- const StoryComponent = stories[story as keyof typeof stories] as any;
-
- return StoryComponent ? : null;
- };
-};
-
-// Create snippet components using the helper function
-export const BoxSnippet = createSnippetComponent(BoxStories);
-export const ButtonSnippet = createSnippetComponent(ButtonStories);
-export const ButtonIconSnippet = createSnippetComponent(ButtonIconStories);
-export const ButtonLinkSnippet = createSnippetComponent(ButtonLinkStories);
-export const CheckboxSnippet = createSnippetComponent(CheckboxStories);
-export const ContainerSnippet = createSnippetComponent(ContainerStories);
-export const GridSnippet = createSnippetComponent(GridStories);
-export const TextFieldSnippet = createSnippetComponent(TextFieldStories);
-export const PasswordFieldSnippet =
- createSnippetComponent(PasswordFieldStories);
-export const PopoverSnippet = createSnippetComponent(PopoverStories);
-export const TextSnippet = createSnippetComponent(TextStories);
-export const FlexSnippet = createSnippetComponent(FlexStories);
-export const SelectSnippet = createSnippetComponent(SelectStories);
-export const MenuSnippet = createSnippetComponent(MenuStories);
-export const LinkSnippet = createSnippetComponent(LinkStories);
-export const AvatarSnippet = createSnippetComponent(AvatarStories);
-export const AccordionSnippet = createSnippetComponent(AccordionStories);
-export const DialogSnippet = createSnippetComponent(DialogStories);
-export const RadioGroupSnippet = createSnippetComponent(RadioGroupStories);
-export const TabsSnippet = createSnippetComponent(TabsStories);
-export const SwitchSnippet = createSnippetComponent(SwitchStories);
-export const SearchFieldSnippet = createSnippetComponent(SearchFieldStories);
-export const TooltipSnippet = createSnippetComponent(TooltipStories);
-export const SkeletonSnippet = createSnippetComponent(SkeletonStories);
-export const CardSnippet = createSnippetComponent(CardStories);
-export const HeaderSnippet = createSnippetComponent(HeaderStories);
-export const HeaderPageSnippet = createSnippetComponent(HeaderPageStories);
-export const TableSnippet = createSnippetComponent(TableStories);
-export const TagGroupSnippet = createSnippetComponent(TagGroupStories);
-export const ToggleButtonSnippet = createSnippetComponent(ToggleButtonStories);
-export const ToggleButtonGroupSnippet = createSnippetComponent(
- ToggleButtonGroupStories,
-);
-export const VisuallyHiddenSnippet = createSnippetComponent(
- VisuallyHiddenStories,
-);