` | Grid container that stacks direct `Tabs.Panel` children |
+| `Tabs.Panel` | `
` | `role="tabpanel"`; hidden when inactive |
+| `Tabs.Indicator` | `` | Decorative element that tracks the active tab's position and size |
+
+All parts accept `xstyle`. Parts other than `Tabs.Root` also accept a `render` prop for polymorphic
+rendering and standard HTML attributes. `Tabs.Root` renders a column container inside the primitive's
+context provider so the list and panels stack regardless of the surrounding layout.
+
+The selection indicator uses a short CSS transition and disables its motion when the user prefers
+reduced motion.
+
+`Tabs.Panels` places its direct panels in one grid cell. Pair it with force-mounted panels and the
+tabs primitive's transition attributes when a theme needs to animate outgoing and incoming panels.
diff --git a/packages/swingset/src/stories/tabs.component.stories.tsx b/packages/swingset/src/stories/tabs.component.stories.tsx
new file mode 100644
index 00000000000..4d982bffc67
--- /dev/null
+++ b/packages/swingset/src/stories/tabs.component.stories.tsx
@@ -0,0 +1,30 @@
+import { Tabs } from '@clerk/mosaic/components/tabs';
+
+import type { StoryMeta } from '@/lib/types';
+
+export { default as __source } from './tabs.component.stories?raw';
+
+export const meta: StoryMeta = {
+ group: 'Components',
+ status: 'stable',
+ title: 'Tabs',
+ source: 'packages/mosaic/src/components/tabs/tabs.tsx',
+};
+
+export function Default() {
+ return (
+
+
+ Account
+ Security
+ Notifications
+
+
+
+ Manage your account details.
+ Update your password and sessions.
+ Choose what you get notified about.
+
+
+ );
+}