import type { Meta, StoryObj } from "@storybook/react-vite"; import { Card } from "@shared/components/Card"; import { Button } from "@shared/components/Button"; import { MetricCard } from "@shared/components/MetricCard"; import { StatusBadge } from "@shared/components/StatusBadge"; function CardBody({ color }: { color: string }) { return (

{color} card

Surface treatment with the {color} accent strip.

); } const meta: Meta = { title: "Primitives/Card", component: Card, tags: ["autodocs"], parameters: { layout: "padded" }, args: { accent: undefined, padding: "default", interactive: false, }, argTypes: { accent: { control: "inline-radio", options: [undefined, "blue", "purple", "green", "amber", "red"], }, padding: { control: "inline-radio", options: ["tight", "default", "loose"], }, interactive: { control: "boolean" }, }, decorators: [ (S) => (
), ], render: (args) => ( ), }; export default meta; type Story = StoryObj; /** Flip accent / padding / interactive in controls. */ export const Playground: Story = {}; export const AccentMatrix: Story = { decorators: [ (S) => (
), ], render: () => (
{(["blue", "purple", "green", "amber", "red", undefined] as const).map( (accent) => ( ), )}
), }; export const InContext_ProductGrid: Story = { decorators: [ (S) => (
), ], render: () => (

Sources

Attach pipelines where PDFs already live.

Pipelines

Hero

Compose document workflows from typed operations.

Agents

Wire your agent via MCP, REST, or tool definitions.

), }; export const InContext_MetricsInsideCard: Story = { args: { padding: "loose" }, render: (args) => (

Last 24 hours

), };