import { Button } from '@/components/button'; import { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '@/components/card'; import { Input } from '@/components/input'; import { Label } from '@/components/label'; import { Separator } from '@/components/separator'; import type { SeparatorProps } from '@/components/separator'; import { Skeleton } from '@/components/skeleton'; import { Spinner } from '@/components/spinner'; import type { Entry } from './types'; export const card: Entry = { slug: 'card', name: 'Card', group: 'Layout', description: 'A surface with a header, body and footer. `--card` is a tinted surface in CBAR rather than white — anything CBAR draws flat white uses `--background` instead.', imports: { subpath: 'card', names: ['Card', 'CardHeader', 'CardTitle', 'CardContent'] }, figma: { set: 'Card' }, compositions: [ { name: 'Full anatomy', render: () => ( Monthly report Generated on the first of each month. 1,284 requests, 99.94% availability, no incidents. ), }, { name: 'With a form', description: 'The header and footer take a `border` utility when the card holds a form — the rules separate the question from the answer, which a card holding prose does not need.', render: () => ( Sign in Use your work e-mail.
), }, ], }; export const separator: Entry = { slug: 'separator', name: 'Separator', group: 'Layout', description: 'A rule between groups. Decorative by default — pass `decorative={false}` when it genuinely separates two regions and should be announced.', imports: { subpath: 'separator', names: ['Separator'] }, axes: { orientation: ['horizontal', 'vertical'] }, defaults: { orientation: 'horizontal' }, render: (props) => { const p = props as SeparatorProps; return (
); }, matrices: [{ title: 'Orientation', rows: 'orientation' }], }; export const skeleton: Entry = { slug: 'skeleton', name: 'Skeleton', group: 'Layout', description: 'A placeholder for content that has not arrived. Size it with utilities — it has no size prop, because a skeleton should match the shape of what it stands in for.', imports: { subpath: 'skeleton', names: ['Skeleton'] }, compositions: [ { name: 'A loading row', render: () => (
), }, ], }; export const spinner: Entry = { slug: 'spinner', name: 'Spinner', group: 'Layout', description: 'An indeterminate busy indicator. It carries an accessible label (default "Loading") so the state is announced, not just drawn.', imports: { subpath: 'spinner', names: ['Spinner'] }, compositions: [ { name: 'Sizes', description: 'Sized with utilities and inheriting colour from its context.', render: () => (
), }, { name: 'Inside a button', render: () => ( ), }, ], };