import { motionPackDetails, motionPackNames, type MotionPackName } from "@ai-ui/tokens"; import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Input, Skeleton, Switch, skinDetails, skinNames, type SkinName } from "@ai-ui/ui"; import type { Meta, StoryObj } from "@storybook/react"; const motionAccessibilityModes = [ { label: "System accessibility", value: "system" }, { label: "Reduced accessibility", value: "reduced" } ] as const; type MotionAccessibilityMode = (typeof motionAccessibilityModes)[number]["value"]; function RuntimePill({ children }: { children: React.ReactNode }) { return ( {children} ); } function PanelPreview() { return (

Dialog panel contract

Panel vars preview the dialog surface without opening an overlay in every matrix cell.

); } function ComparisonCell({ motionAccessibility, motionPack, skin }: { motionAccessibility: MotionAccessibilityMode; motionPack: MotionPackName; skin: SkinName; }) { return (
{motionPackDetails[motionPack].label} {skinDetails[skin].label} {motionAccessibility}
Release routing The same component tree should now pick up distinct skin treatments.
Quiet notifications
); } function MatrixDialogSandbox() { return ( Dialog validation sandbox Use the Storybook toolbar to validate the real overlay under the active theme, skin, and motion settings. ); } function StyleMatrixShowcase() { return (

AI UI / Phase 3

Style matrix compares the same product surface across skin and motion scopes.

This page is the screenshot-friendly regression target for the pilot skin work. The grid uses nested `data-skin`, `data-motion-pack`, and `data-motion="reduced"` scopes so the same building blocks can be reviewed side by side.

{motionPackNames.map((motionPack) => (

{motionPackDetails[motionPack].label}

{motionPackDetails[motionPack].note}

{motionAccessibilityModes.map((motionAccessibilityMode) => (

{motionAccessibilityMode.label}

{motionAccessibilityMode.value === "reduced" ? '`data-motion="reduced"`' : "System preference"} {" "}with{" "} {`data-motion-pack="${motionPack}"`} .

{skinNames.map((skin) => ( ))}
))}
))}

Live overlay validation

Dialog still portals to the document root, so compare its real overlay and panel treatment with the Storybook toolbar. The matrix above covers scoped inline regression across packs and reduced-motion overlay. The control below covers the live overlay behavior.

); } const meta = { title: "Foundation/Style Matrix", component: StyleMatrixShowcase, parameters: { docs: { description: { component: "Phase 3 adds the regression-oriented comparison surface. Use this page for screenshots and visual review, then use the live dialog sandbox below to validate portal-driven overlays under the active toolbar settings." } } } } satisfies Meta; export default meta; type Story = StoryObj; export const Overview: Story = {};