{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "waimakers",
  "homepage": "https://kit.waimakers.app",
  "items": [
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "utils",
      "type": "registry:lib",
      "title": "cn util and state recipes",
      "description": "clsx + tailwind-merge class combiner used by every kit component, and the class recipes the kit's controls share so a state looks the same everywhere: `focusRing` (a 2px --text outline 2px off the edge), `invalidRing` (aria-invalid draws a 2px --danger edge, the border plus a solid 1px ring), and `inputGroupFocusRing`/`inputGroupInvalidRing`, the same two for a group that wraps an input. Tailwind must scan this file, so keep it inside the app's sources.",
      "dependencies": ["clsx@2.1.1", "tailwind-merge@3.6.0"],
      "files": [
        {
          "path": "src/lib/utils.ts",
          "type": "registry:lib",
          "target": "lib/utils.ts"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tokens",
      "type": "registry:file",
      "title": "WAIMAKERS brand tokens",
      "description": "The brand values themselves: the raw palette, the type, space, radius and motion scale, and the semantic roles — what a colour MEANS on a surface — set for light and redefined for dark under a prefers-color-scheme query. Install this before any component: the `theme` item maps shadcn's variables onto these roles and carries none of their values, so without the file a mapped variable resolves to nothing. Served verbatim from the one source in packages/ui, so the reasoning and the measured contrast ratios arrive with the values. Import it from your Tailwind entry, above the components that read it.",
      "files": [
        {
          "path": "src/styles/tokens.css",
          "type": "registry:file",
          "target": "src/styles/tokens.css"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "theme",
      "type": "registry:theme",
      "title": "WAIMAKERS brand theme",
      "description": "The @theme inline join mapping shadcn's CSS variables onto the WAIMAKERS brand roles, plus the `brand-`-namespaced rungs (type scale, tracking, leading, the three brand shadows, the brand radius, the signature ease, the scrim and the roles shadcn has no slot for) that make a brand value reachable from a class instead of retyped as a literal. The status tones `ok`, `attention`, `info` and `danger` each come as a mark, a `-wash` and a `-text` colour for words; `destructive-foreground` stays the label on a danger fill, and `brand-danger-strong` is that fill pressed or open. Every mapping to a newer token falls back to the value an app with older tokens rendered before. Every `brand-` name is additive: no stock Tailwind rung is redefined. It maps the brand roles and carries none of their values, so it needs the `tokens` item beside it: install `@waimakers/tokens` outside this monorepo, or import `@waimakers/ui/tokens.css` inside it.",
      "cssVars": {
        "theme": {
          "color-background": "var(--ground)",
          "color-foreground": "var(--text)",
          "color-card": "var(--surface)",
          "color-card-foreground": "var(--text)",
          "color-popover": "var(--surface-raised, var(--surface))",
          "color-popover-foreground": "var(--text)",
          "color-primary": "var(--accent)",
          "color-primary-foreground": "var(--btn-primary-fg)",
          "color-secondary": "var(--surface-sunken)",
          "color-secondary-foreground": "var(--text)",
          "color-muted": "var(--surface-sunken)",
          "color-muted-foreground": "var(--text-subtle)",
          "color-accent": "var(--accent-wash)",
          "color-accent-foreground": "var(--text)",
          "color-destructive": "var(--danger)",
          "color-destructive-foreground": "var(--danger-fg)",
          "color-ok": "var(--ok)",
          "color-ok-wash": "var(--ok-wash)",
          "color-ok-text": "var(--ok-text, var(--text))",
          "color-attention": "var(--attention)",
          "color-attention-wash": "var(--attention-wash)",
          "color-attention-text": "var(--attention-text, var(--text))",
          "color-info": "var(--info)",
          "color-info-wash": "var(--info-wash)",
          "color-info-text": "var(--info-text, var(--text))",
          "color-danger": "var(--danger)",
          "color-danger-wash": "var(--danger-wash)",
          "color-danger-text": "var(--danger-text, var(--text))",
          "color-border": "var(--border)",
          "color-input": "var(--border-control, var(--border))",
          "color-ring": "var(--focus-ring)",
          "color-sidebar": "var(--surface-sunken)",
          "color-sidebar-foreground": "var(--text)",
          "color-sidebar-primary": "var(--accent)",
          "color-sidebar-primary-foreground": "var(--btn-primary-fg)",
          "color-sidebar-accent": "var(--accent-wash)",
          "color-sidebar-accent-foreground": "var(--text)",
          "color-sidebar-border": "var(--border)",
          "color-sidebar-ring": "var(--focus-ring)",
          "radius-sm": "calc(var(--radius) - 4px)",
          "radius-md": "calc(var(--radius) - 2px)",
          "radius-lg": "var(--radius)",
          "radius-xl": "calc(var(--radius) + 4px)",
          "font-sans": "var(--font-body)",
          "font-display": "var(--font-display)",
          "font-mono": "var(--font-mono)",
          "color-brand-scrim": "var(--scrim)",
          "color-brand-accent-strong": "var(--accent-strong)",
          "color-brand-danger-strong": "var(--danger-strong, var(--danger))",
          "color-brand-accent-text": "var(--accent-text)",
          "color-brand-muted": "var(--text-muted)",
          "color-brand-border-strong": "var(--border-strong)",
          "text-brand-title": "var(--text-title)",
          "text-brand-h2": "var(--text-h2)",
          "text-brand-h3": "var(--text-h3)",
          "text-brand-lede": "var(--text-lede)",
          "text-brand-body": "var(--text-body)",
          "text-brand-small": "var(--text-small)",
          "text-brand-eyebrow": "var(--text-eyebrow)",
          "tracking-brand-eyebrow": "var(--tracking-eyebrow)",
          "tracking-brand-tight": "var(--tracking-tight)",
          "tracking-brand-code": "var(--tracking-code)",
          "leading-brand-body": "var(--leading-body)",
          "leading-brand-title": "var(--leading-title)",
          "shadow-brand-card": "var(--shadow-card)",
          "shadow-brand-sm": "var(--shadow-sm)",
          "shadow-brand-overlay": "var(--shadow-overlay, var(--shadow-card))",
          "radius-brand-lg": "var(--radius-lg)",
          "ease-brand": "var(--ease)"
        }
      }
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "description": "Collapsed by default; the trigger carries the count and the chevron is the only affordance. No underline on hover, no orange — the focus ring is --text.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/accordion.tsx",
          "type": "registry:ui",
          "target": "components/ui/accordion.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button",
      "type": "registry:ui",
      "title": "Button",
      "description": "Brand-restyled shadcn Button. Pill shape, ink label on the accent, the `link` variant dropped (orange is never text on a light ground). It presses in a pixel while held, unless it opens a popup; while its popup is open (aria-expanded) it holds its hover fill. `loading` keeps the label in place for width, lays a Spinner over it, sets aria-busy and disables the button; rendered as a link or another element, a loading or disabled Button is aria-disabled and refuses clicks and Enter, whichever element carries the label. The focus ring is the kit's shared --text outline, the transition takes the brand ease and stops under reduced motion.",
      "dependencies": ["@base-ui/react@1.9.0", "class-variance-authority@0.7.1"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/spinner"],
      "files": [
        {
          "path": "src/components/ui/button.tsx",
          "type": "registry:ui",
          "target": "components/ui/button.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "card",
      "type": "registry:ui",
      "title": "Card",
      "description": "Surface, hairline and radius from the brand roles; the title is set in the brand display face.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/card.tsx",
          "type": "registry:ui",
          "target": "components/ui/card.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "checkbox",
      "type": "registry:ui",
      "title": "Checkbox",
      "description": "The shadcn Checkbox on Base UI, not Radix. The ticked box is the accent with its paired ink glyph, because a tick is a mark a person made and the brand's spark marks what a person did; the focus ring is the kit's --text ring rather than orange, which fails WCAG SC 1.4.11 on white. Its edge is the 3:1 control border; an indeterminate box draws a dash instead of the tick; a 32px hit area around the 16px box takes the pointer; aria-invalid draws a 2px --danger edge, the border plus a solid 1px ring, never an opacity fade, measured at 4.38:1 or better on every ground. dark:bg-input/30 is dropped — dark is a token set here, not a variant. It carries no label of its own: Base UI renders a span beside a hidden input, so every caller supplies an id and a Label htmlFor, or an aria-label.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/checkbox.tsx",
          "type": "registry:ui",
          "target": "components/ui/checkbox.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "radio-group",
      "type": "registry:ui",
      "title": "Radio group",
      "description": "Radio Group uses Base UI, not Radix. A Radio is a branded circular control by default, on the 3:1 control border with a 32px hit area; checked, it fills with the accent and draws an ink dot inside that border; aria-invalid draws a 2px --danger edge, the border plus a solid 1px ring, never an opacity fade, measured at 4.38:1 or better on every ground. Compose it with a kit Button to keep button styling without nesting controls. RadioGroup provides roving focus, arrow-key selection, wrapping and native form values.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/radio-group.tsx",
          "type": "registry:ui",
          "target": "components/ui/radio-group.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tabs",
      "type": "registry:ui",
      "title": "Tabs",
      "description": "Tabs uses Base UI, not Radix. The default pill and line variants use brand roles; the active pill carries the control border rather than a shadow. Compose TabsTrigger with a kit Button to preserve button styling. Tabs provides roving focus, manual or automatic activation, wrapping, orientation-aware arrow keys and tab-panel associations.",
      "dependencies": ["@base-ui/react@1.9.0", "class-variance-authority@0.7.1"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/tabs.tsx",
          "type": "registry:ui",
          "target": "components/ui/tabs.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "table",
      "type": "registry:ui",
      "title": "Table",
      "description": "Header, body, row, head and cell; wrapper scrolls horizontally so a wide table never scrolls the page body.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/table.tsx",
          "type": "registry:ui",
          "target": "components/ui/table.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table",
      "type": "registry:block",
      "title": "Data Table",
      "description": "TanStack Table with manual sort, expansion and selection, responsive column priority and optional stacked rows.",
      "dependencies": ["@tanstack/react-table@8.21.3", "lucide-react@1.33.0"],
      "registryDependencies": [
        "@waimakers/utils",
        "@waimakers/table",
        "@waimakers/button",
        "@waimakers/empty-state",
        "@waimakers/error-state",
        "@waimakers/refused-state",
        "@waimakers/skeleton-presets",
        "@waimakers/tooltip"
      ],
      "files": [
        {
          "path": "src/components/ui/data-table.tsx",
          "type": "registry:ui",
          "target": "components/ui/data-table.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input",
      "type": "registry:ui",
      "title": "Input",
      "description": "44px field with the 3:1 control border and no resting shadow; focus ring is --text, not orange (orange fails WCAG SC 1.4.11 on white); aria-invalid draws a 2px --danger edge, the border plus a solid 1px ring, never an opacity fade, measured at 4.38:1 or better on every ground.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/input.tsx",
          "type": "registry:ui",
          "target": "components/ui/input.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "textarea",
      "type": "registry:ui",
      "title": "Textarea",
      "description": "shadcn's textarea, restyled to the brand and to Input's own class list — a form must not show two borders, two focus rings or two placeholder colours across its single- and multi-line fields, and stock shadcn styles the two differently (it fades the border on focus; the kit rings, on --text rather than orange, because orange fails WCAG SC 1.4.11 on white). aria-invalid draws Input's measured treatment: a 2px --danger edge, the border plus a solid 1px ring, because --danger is never an opacity fade here. dark:bg-input/30 is dropped too — dark is a token set in this kit, not a variant, and --border is never a fill. field-sizing-content grows the box with what is typed; min-h-24 is a three-line floor rather than shadcn's two, because the callers are prose fields and `rows` still overrides it.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/textarea.tsx",
          "type": "registry:ui",
          "target": "components/ui/textarea.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "label",
      "type": "registry:ui",
      "title": "Label",
      "description": "A plain styled <label> — no @radix-ui/react-label dependency, matching the kit's pinned set.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/label.tsx",
          "type": "registry:ui",
          "target": "components/ui/label.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "badge",
      "type": "registry:ui",
      "title": "Badge",
      "description": "Accent as a FILL with an ink label; no orange-text variant.",
      "dependencies": ["@base-ui/react@1.9.0", "class-variance-authority@0.7.1"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/badge.tsx",
          "type": "registry:ui",
          "target": "components/ui/badge.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "avatar",
      "type": "registry:ui",
      "title": "Avatar",
      "description": "The shadcn Avatar on Base UI, not Radix, without the badge and group parts. Adds what the stock avatar leaves to the caller: a deterministic two-letter monogram on a brand-role fill picked by the name, the kit's six illustrated characters (SVG files that ship with the item, referenced by key), token-based sizes sm/md/lg/xl, and one accessibility contract: `decorative` when a visible name sits beside it so a screen reader hears the name once, otherwise role=img with the name.",
      "dependencies": ["@base-ui/react@1.9.0", "class-variance-authority@0.7.1"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/avatar.tsx",
          "type": "registry:ui",
          "target": "components/ui/avatar.tsx"
        },
        {
          "path": "src/assets/characters/amber-owl.svg",
          "type": "registry:file",
          "target": "assets/characters/amber-owl.svg"
        },
        {
          "path": "src/assets/characters/blue-fox.svg",
          "type": "registry:file",
          "target": "assets/characters/blue-fox.svg"
        },
        {
          "path": "src/assets/characters/green-turtle.svg",
          "type": "registry:file",
          "target": "assets/characters/green-turtle.svg"
        },
        {
          "path": "src/assets/characters/orange-tiger.svg",
          "type": "registry:file",
          "target": "assets/characters/orange-tiger.svg"
        },
        {
          "path": "src/assets/characters/purple-octopus.svg",
          "type": "registry:file",
          "target": "assets/characters/purple-octopus.svg"
        },
        {
          "path": "src/assets/characters/red-panda.svg",
          "type": "registry:file",
          "target": "assets/characters/red-panda.svg"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "spinner",
      "type": "registry:ui",
      "title": "Spinner",
      "description": "A turning ring in the current text colour that says it is working: role=status named \"Loading\" by default, so a screen reader hears it; pass aria-label to say what is loading. Button's `loading` prop lays one over its label.",
      "dependencies": ["lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/spinner.tsx",
          "type": "registry:ui",
          "target": "components/ui/spinner.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "skeleton",
      "type": "registry:ui",
      "title": "Skeleton",
      "description": "Loading placeholder on the sunken surface; honours reduced motion.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/skeleton.tsx",
          "type": "registry:ui",
          "target": "components/ui/skeleton.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tooltip",
      "type": "registry:ui",
      "title": "Tooltip",
      "description": "The shadcn Tooltip on Base UI, not Radix. The popup is the ink/paper inversion (bg-foreground on text-background) rather than shadcn's bg-primary, because the brand forbids orange as a surface behind text; the enter is the Popover's scale/opacity move, honouring motion-reduce. Carries an aside, never the only place something is said.",
      "dependencies": ["@base-ui/react@1.9.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/tooltip.tsx",
          "type": "registry:ui",
          "target": "components/ui/tooltip.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "copy-button",
      "type": "registry:ui",
      "title": "Copy button",
      "description": "One exact value taken to the clipboard in one keystroke, composed over the kit's Button because the shadcn registry carries no copy control. Idle, copied and refused are three states and three announcements: the outcome lands in a visually-hidden role=\"status\" region, so a person who cannot see the tick is told at the same moment, and a browser that refuses clipboard access says so instead of doing nothing.",
      "dependencies": ["lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/button"],
      "files": [
        {
          "path": "src/components/ui/copy-button.tsx",
          "type": "registry:ui",
          "target": "components/ui/copy-button.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "empty-state",
      "type": "registry:ui",
      "title": "Empty state",
      "description": "A centred title, description, icon and action for empty content. Neutral uses a dashed border; info, ok, attention and danger use solid borders and readable tone washes. RefusedState and ErrorState supply the distinct refusal and failure presets.",
      "dependencies": ["lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/empty-state.tsx",
          "type": "registry:ui",
          "target": "components/ui/empty-state.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sidebar",
      "type": "registry:ui",
      "title": "Sidebar",
      "description": "The shadcn sidebar composite on Base UI, not Radix: the rail is the second neutral layer (--sidebar → --surface-sunken), the active item wears the accent WASH plus a saturated leading rule (never orange text), hover lifts to the paper surface, and mobile is a Base UI Dialog drawer. Supports offcanvas and none; icon-collapse and its tooltip are left out on purpose.",
      "dependencies": [
        "@base-ui/react@1.9.0",
        "class-variance-authority@0.7.1",
        "lucide-react@1.33.0"
      ],
      "registryDependencies": [
        "@waimakers/utils",
        "@waimakers/theme",
        "@waimakers/button",
        "@waimakers/separator"
      ],
      "files": [
        {
          "path": "src/components/ui/sidebar.tsx",
          "type": "registry:ui",
          "target": "components/ui/sidebar.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "select",
      "type": "registry:ui",
      "title": "Select",
      "description": "The shadcn Select on Base UI, not Radix. A 44px Input-family trigger; the highlighted item wears the accent WASH with an ink label (never orange text); the popup is the raised surface with the overlay shadow and a scale/opacity enter; the focus ring is --text; aria-invalid draws a 2px --danger edge, the border plus a solid 1px ring, never an opacity fade, measured at 4.38:1 or better on every ground.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/separator"],
      "files": [
        {
          "path": "src/components/ui/select.tsx",
          "type": "registry:ui",
          "target": "components/ui/select.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "popover",
      "type": "registry:ui",
      "title": "Popover",
      "description": "The shadcn Popover on Base UI, not Radix. The popup is the raised surface (--popover → --surface-raised) with the overlay shadow, a themed hairline and a scale/opacity enter honouring motion-reduce. The overlay the date-picker composes over, and a general-purpose overlay in its own right. Header, Title and Description parts provide the popup accessible name and description.",
      "dependencies": ["@base-ui/react@1.9.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/popover.tsx",
          "type": "registry:ui",
          "target": "components/ui/popover.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "autocomplete",
      "type": "registry:ui",
      "title": "Autocomplete",
      "description": "A text field with suggestions on Base UI's first-class Autocomplete primitive: what is typed is the value, known entries are one pick away, and nothing snaps back when the list closes. Input-family 44px field with clear and open controls; the highlighted row wears the accent WASH; the popup is the raised surface; the focus ring is --text; aria-invalid on the input draws a 2px --danger edge round the whole field.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/autocomplete.tsx",
          "type": "registry:ui",
          "target": "components/ui/autocomplete.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "combobox",
      "type": "registry:ui",
      "title": "Combobox",
      "description": "A searchable single/multi-select picker on Base UI's first-class Combobox primitive — the kit's equivalent of shadcn's Command+Popover recipe, without cmdk. Input-family 44px field with a leading search glyph, clear and open controls; the highlighted row wears the accent WASH; the popup is the raised surface; the focus ring is --text; aria-invalid on the input draws a 2px --danger edge round the whole field.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/separator"],
      "files": [
        {
          "path": "src/components/ui/combobox.tsx",
          "type": "registry:ui",
          "target": "components/ui/combobox.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "command",
      "type": "registry:ui",
      "title": "Command",
      "description": "shadcn's canonical Command (cmdk) command palette, restyled to the brand. The highlighted item wears the accent WASH with an ink label; group headings take the kit's uppercase tracked label; the popup is the raised surface with the overlay shadow; the focus ring is --text. CommandDialog composes the kit's Base UI Dialog (not shadcn's) for the overlay. Owner-authorised Radix exception: cmdk pulls @radix-ui/react-dialog, react-id, react-primitive and react-compose-refs.",
      "dependencies": ["cmdk@1.1.1", "@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/dialog"],
      "files": [
        {
          "path": "src/components/ui/command.tsx",
          "type": "registry:ui",
          "target": "components/ui/command.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "calendar",
      "type": "registry:ui",
      "title": "Calendar",
      "description": "shadcn's canonical Calendar (React DayPicker), restyled to the brand. The selected day is the accent as a fill with an ink label; today wears the accent wash; the focus ring is --text. React DayPicker owns the WAI-ARIA date-grid and keyboard model; the one adaptation is a native day button so its ref-driven focus works with the kit's Base UI Button.",
      "dependencies": ["react-day-picker@10.0.1", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/button"],
      "files": [
        {
          "path": "src/components/ui/calendar.tsx",
          "type": "registry:ui",
          "target": "components/ui/calendar.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "date-picker",
      "type": "registry:ui",
      "title": "Date picker",
      "description": "The shadcn date-picker recipe assembled from the kit's own Popover and Calendar: an Input-family 44px trigger showing the formatted date or a muted placeholder, opening the branded month grid; selecting a day closes it. The focus ring is --text; aria-invalid draws a 2px --danger edge, the border plus a solid 1px ring, never an opacity fade, measured at 4.38:1 or better on every ground.",
      "dependencies": ["lucide-react@1.33.0"],
      "registryDependencies": [
        "@waimakers/utils",
        "@waimakers/theme",
        "@waimakers/popover",
        "@waimakers/calendar"
      ],
      "files": [
        {
          "path": "src/components/ui/date-picker.tsx",
          "type": "registry:ui",
          "target": "components/ui/date-picker.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "prose",
      "type": "registry:ui",
      "title": "Prose",
      "description": "A branded Markdown renderer for author-written text. Thin, safe wrapper over react-markdown + remark-gfm — no raw HTML (no rehype-raw, skipHtml set) and dangerous URL protocols dropped by default. GFM tables, strikethrough and task lists render. Headings in the brand display face; links are ink text with an orange underline mark, never orange words; code/pre on the sunken surface. headingScale picks the heading ramp: \"page\" (default) for a reading page, \"compact\" for a bounded surface like a card or popover, where a page-sized h1 would swamp its container.",
      "dependencies": ["react-markdown@10.1.0", "remark-gfm@4.0.1"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/prose.tsx",
          "type": "registry:ui",
          "target": "components/ui/prose.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "sheet",
      "type": "registry:ui",
      "title": "Sheet",
      "description": "A Base UI slide-over on the raised surface with the overlay shadow and scrim. Supports left, right, top and bottom edges, the brand ease and reduced-motion parity. size=sm|md|lg|xl controls only left and right widths; top and bottom span the viewport and scroll within its height. showCloseButton adds a named close control. Focus stays inside and returns to the trigger on close.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/sheet.tsx",
          "type": "registry:ui",
          "target": "components/ui/sheet.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "board",
      "type": "registry:ui",
      "title": "Board",
      "description": "A lane board over dnd-kit: Board / BoardColumn / BoardCard. onMove(cardId, toColumnId, toIndex) reports cross-column moves and same-column reorders. toIndex is the zero-based position in the destination column’s rendered list after removing the moved card; a drop on column space appends, and an empty column gives 0. onDragStateChange?(dragging) reports pickup and drop or cancellation, so callers can pause polling during a drag. shadcn publishes no board, so this is a brand primitive rather than a restyle. Keyboard-operable by construction: dnd-kit's KeyboardSensor with a lane-aware coordinateGetter (left/right cross lanes, up/down move within one) plus screen-reader announcements composed from the caller's own card and lane labels. Semantic role tokens only — a picked-up card is marked by a ring and a lift and a drop target by a dashed hairline, so neither state relies on colour, and no lane or card is filled with orange. The board scrolls sideways and a lane scrolls down; neither makes the page scroll horizontally. Honours prefers-reduced-motion.",
      "dependencies": ["@dnd-kit/core@6.3.1", "@dnd-kit/sortable@10.0.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/board.tsx",
          "type": "registry:ui",
          "target": "components/ui/board.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "toast",
      "type": "registry:ui",
      "title": "Toast",
      "description": "shadcn's Base UI toast, restyled to the brand. Mount one <Toaster /> as a SIBLING of the app's content and raise a toast from anywhere with toast.add({ title, description }) — the manager is created at module scope, so a handler needs no hook and no provider in scope. The five status types (success, info, warning, error, loading) are DROPPED, as the button `link` variant was: the brand's one attention colour is orange, orange is never text on the light ground, and a coloured status ladder cannot be rendered honestly on these tokens. Base UI's `type` still reaches the DOM as data-type, so a future status has a seam. Raised surface with the kit radius, the overlay shadow and a themed hairline; entrance, stack transform and swipe all collapse under motion-reduce; the viewport sits above the popover layer, because a toast is often raised BY something inside an open overlay.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/button"],
      "files": [
        {
          "path": "src/components/ui/toast.tsx",
          "type": "registry:ui",
          "target": "components/ui/toast.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dropdown-menu",
      "type": "registry:ui",
      "title": "Dropdown menu",
      "description": "A Base UI menu on the raised surface with the overlay shadow. Arrow keys move between items, skip disabled items and return focus on Escape. Items highlight with the accent wash; variant=\"destructive\" uses danger text at rest and a readable label on a danger fill while highlighted. Link items keep native navigation and close on activation. Supports groups, submenus, checkbox and radio items.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/dropdown-menu.tsx",
          "type": "registry:ui",
          "target": "components/ui/dropdown-menu.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chart",
      "type": "registry:ui",
      "title": "Chart",
      "description": "shadcn's Chart over Recharts, restyled to the brand. Recharts is a charting library rather than a headless primitive library, so nothing here swaps out of Radix; what the port changes is the palette. ChartContainer takes a ChartConfig keyed by series and ChartStyle writes it out as --color-<series> custom properties scoped to that one chart's data-chart attribute, so a series colour is passed in by the caller from the brand tokens and never restated here. Recharts paints its own defaults as literal hex, so the container overrides them by attribute selector: grid, polar-grid and reference lines take --border, the tooltip cursor takes --border or --muted, and the white dot and sector strokes go transparent. Axis ticks and legend labels are --text-subtle. The tooltip surface is the raised popover at the kit radius with the overlay shadow and a themed hairline, matching Popover and DropdownMenu. ChartContainer is a plain div that forwards its props, so the caller owns the accessible name: give the chart role=\"img\" with an aria-label, or a figure with a caption.",
      "dependencies": ["recharts@3.8.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/chart.tsx",
          "type": "registry:ui",
          "target": "components/ui/chart.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "assistant-css",
      "type": "registry:file",
      "title": "Assistant design styles",
      "description": "Office-faithful, framework-free assistant tokens, launcher and lazy panel styles. Includes legacy Office class aliases and wm-assistant classes. Import tokens and launcher at startup, panel CSS when opened.",
      "files": [
        {
          "path": "src/assistant/assistant-tokens.css",
          "type": "registry:file",
          "target": "src/assistant-kit/assistant-tokens.css"
        },
        {
          "path": "src/assistant/assistant-launcher.css",
          "type": "registry:file",
          "target": "src/assistant-kit/assistant-launcher.css"
        },
        {
          "path": "src/assistant/assistant.css",
          "type": "registry:file",
          "target": "src/assistant-kit/assistant.css"
        },
        {
          "path": "src/assistant/model-chevron.svg",
          "type": "registry:file",
          "target": "src/assistant-kit/model-chevron.svg"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "assistant-react",
      "type": "registry:ui",
      "title": "Assistant presentational components",
      "description": "Transport-free assistant launcher, panel parts, streaming Markdown, reveal and steps. Copy in with assistant-css and pinned digest manifest; pass app persona and callbacks.",
      "registryDependencies": ["@waimakers/assistant-css"],
      "files": [
        {
          "path": "src/assistant/assistant-launcher.tsx",
          "type": "registry:ui",
          "target": "src/assistant-kit/assistant-launcher.tsx"
        },
        {
          "path": "src/assistant/assistant-panel.tsx",
          "type": "registry:ui",
          "target": "src/assistant-kit/assistant-panel.tsx"
        },
        {
          "path": "src/assistant/assistant-markdown.tsx",
          "type": "registry:ui",
          "target": "src/assistant-kit/assistant-markdown.tsx"
        },
        {
          "path": "src/assistant/assistant-reveal.ts",
          "type": "registry:ui",
          "target": "src/assistant-kit/assistant-reveal.ts"
        },
        {
          "path": "src/assistant/assistant-steps.tsx",
          "type": "registry:ui",
          "target": "src/assistant-kit/assistant-steps.tsx"
        },
        {
          "path": "src/assistant/assistant-manifest.json",
          "type": "registry:file",
          "target": "src/assistant-kit/assistant-manifest.json"
        },
        {
          "path": "src/assistant/check-assistant-kit.mjs",
          "type": "registry:file",
          "target": "src/assistant-kit/check-assistant-kit.mjs"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "brand-lockup",
      "type": "registry:ui",
      "title": "WAIMAKERS product lockup",
      "description": "The Office wordmark with a lowercase product name in Caveat Regular. Includes self-contained wordmarks and the licensed lowercase font subset; import styles/brand-lockup.css and install tokens.",
      "files": [
        {
          "path": "src/components/ui/brand-lockup.tsx",
          "type": "registry:ui",
          "target": "components/ui/brand-lockup.tsx"
        },
        {
          "path": "src/components/ui/brand-assets.ts",
          "type": "registry:ui",
          "target": "components/ui/brand-assets.ts"
        },
        {
          "path": "src/styles/brand-lockup.css",
          "type": "registry:file",
          "target": "styles/brand-lockup.css"
        },
        {
          "path": "public/fonts/caveat-OFL.txt",
          "type": "registry:file",
          "target": "styles/caveat-OFL.txt"
        },
        {
          "path": "src/assets/brand/wordmark-black.svg",
          "type": "registry:file",
          "target": "assets/brand/wordmark-black.svg"
        },
        {
          "path": "src/assets/brand/wordmark-white.svg",
          "type": "registry:file",
          "target": "assets/brand/wordmark-white.svg"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "field",
      "type": "registry:ui",
      "title": "Field",
      "description": "Base UI Field and Fieldset. Render plain Input or Textarea through FieldControl to associate the label, description and visible errors. Setting invalid also reveals FieldError.",
      "dependencies": ["@base-ui/react@1.9.0", "class-variance-authority@0.7.1"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/field.tsx",
          "type": "registry:ui",
          "target": "components/ui/field.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "input-group",
      "type": "registry:ui",
      "title": "Input group",
      "description": "Input and textarea groups with icons, suffixes and actions. InputGroupClear calls onClear to update the value, then returns focus to the control.",
      "dependencies": ["class-variance-authority@0.7.1", "lucide-react@1.33.0"],
      "registryDependencies": [
        "@waimakers/utils",
        "@waimakers/theme",
        "@waimakers/button",
        "@waimakers/input",
        "@waimakers/textarea"
      ],
      "files": [
        {
          "path": "src/components/ui/input-group.tsx",
          "type": "registry:ui",
          "target": "components/ui/input-group.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "toggle",
      "type": "registry:ui",
      "title": "Toggle",
      "description": "A pill toggle with a quiet pressed state, shared focus and invalid recipes.",
      "dependencies": ["@base-ui/react@1.9.0", "class-variance-authority@0.7.1"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/toggle.tsx",
          "type": "registry:ui",
          "target": "components/ui/toggle.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "toggle-group",
      "type": "registry:ui",
      "title": "Toggle group",
      "description": "Quiet segmented choices on Base UI. Array values represent single or multiple pressed options, with arrow-key navigation on both axes.",
      "dependencies": ["@base-ui/react@1.9.0", "class-variance-authority@0.7.1"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/toggle"],
      "files": [
        {
          "path": "src/components/ui/toggle-group.tsx",
          "type": "registry:ui",
          "target": "components/ui/toggle-group.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "switch",
      "type": "registry:ui",
      "title": "Switch",
      "description": "Immediate on/off settings, in default and small sizes, on Base UI Switch.",
      "dependencies": ["@base-ui/react@1.9.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/switch.tsx",
          "type": "registry:ui",
          "target": "components/ui/switch.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "button-group",
      "type": "registry:ui",
      "title": "Button group",
      "description": "Related actions joined horizontally or vertically, with independent keyboard focus.",
      "dependencies": ["@base-ui/react@1.9.0", "class-variance-authority@0.7.1"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/button-group.tsx",
          "type": "registry:ui",
          "target": "components/ui/button-group.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "item",
      "type": "registry:ui",
      "title": "Item",
      "description": "Flat list items with media, content and actions; render as a native link or button.",
      "dependencies": ["@base-ui/react@1.9.0", "class-variance-authority@0.7.1"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/item.tsx",
          "type": "registry:ui",
          "target": "components/ui/item.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dialog",
      "type": "registry:ui",
      "title": "Dialog",
      "description": "A named, scrollable modal with a focus trap, Escape dismissal and focus return. The close control is present by default. The raised surface and overlay shadow use brand tokens.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/button"],
      "files": [
        {
          "path": "src/components/ui/dialog.tsx",
          "type": "registry:ui",
          "target": "components/ui/dialog.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert-dialog",
      "type": "registry:ui",
      "title": "Alert dialog",
      "description": "A confirmation modal. Initial focus lands on Cancel regardless of action order, unless initialFocus is supplied. Actions remain ordinary buttons so an asynchronous operation can keep the dialog open. Destructive confirmations name the consequence in their title or description.",
      "dependencies": ["@base-ui/react@1.9.0"],
      "registryDependencies": [
        "@waimakers/utils",
        "@waimakers/theme",
        "@waimakers/button",
        "@waimakers/dialog"
      ],
      "files": [
        {
          "path": "src/components/ui/alert-dialog.tsx",
          "type": "registry:ui",
          "target": "components/ui/alert-dialog.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "alert",
      "type": "registry:ui",
      "title": "Alert",
      "description": "A flat notice in neutral, info, attention or danger tone, with title, description and an optional wrapping action area. Static notices carry no live role; use role=\"alert\" only for an event that just happened.",
      "dependencies": ["class-variance-authority@0.7.1"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/alert.tsx",
          "type": "registry:ui",
          "target": "components/ui/alert.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "collapsible",
      "type": "registry:ui",
      "title": "Collapsible",
      "description": "A single disclosure with aria-expanded, a connected content panel and the shared focus outline. Content is hidden while closed.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/collapsible.tsx",
          "type": "registry:ui",
          "target": "components/ui/collapsible.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "separator",
      "type": "registry:ui",
      "title": "Separator",
      "description": "A semantic horizontal or vertical separator. Both orientations draw a one-pixel rule on the shared border role.",
      "dependencies": ["@base-ui/react@1.9.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/separator.tsx",
          "type": "registry:ui",
          "target": "components/ui/separator.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kbd",
      "type": "registry:ui",
      "title": "Keyboard shortcut",
      "description": "Native kbd elements for keys and grouped shortcuts. A quiet flat surface without elevation.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/kbd.tsx",
          "type": "registry:ui",
          "target": "components/ui/kbd.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "breadcrumb",
      "type": "registry:ui",
      "title": "Breadcrumb",
      "description": "A labelled navigation trail with wrapping links, a current-page marker and decorative separators. Links accept Base UI render composition and the shared focus outline.",
      "dependencies": ["@base-ui/react@1.9.0", "lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/breadcrumb.tsx",
          "type": "registry:ui",
          "target": "components/ui/breadcrumb.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "page-header",
      "type": "registry:ui",
      "title": "Page header",
      "description": "The page's one h1 with an optional breadcrumb, meta line, lede and actions. Actions sit beside the title from sm up and wrap under it below; the lede is visually hidden on a phone and stays readable to assistive technology. A page header inside the dashboard shell replaces the shell's default.",
      "registryDependencies": [
        "@waimakers/utils",
        "@waimakers/theme",
        "@waimakers/breadcrumb",
        "@waimakers/skeleton"
      ],
      "files": [
        {
          "path": "src/components/ui/page-header.tsx",
          "type": "registry:ui",
          "target": "components/ui/page-header.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "section",
      "type": "registry:ui",
      "title": "Section",
      "description": "A region named by its own h2, with an optional description and actions beside the title from sm up.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/section.tsx",
          "type": "registry:ui",
          "target": "components/ui/section.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "hover-card",
      "type": "registry:ui",
      "title": "Hover card",
      "description": "A raised contextual preview that opens on pointer hover or keyboard focus. Keep essential information in the page as well. Trigger delay and closeDelay remain configurable.",
      "dependencies": ["@base-ui/react@1.9.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/hover-card.tsx",
          "type": "registry:ui",
          "target": "components/ui/hover-card.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "status-badge",
      "type": "registry:ui",
      "title": "Status badge",
      "description": "A labelled status with a leading dot: attention uses the action fill, danger/ok/info use readable washes, neutral is outlined, and progress is outlined with a dot that stops pulsing under reduced motion. Exports Tone for exhaustive domain maps.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/badge"],
      "files": [
        {
          "path": "src/components/ui/status-badge.tsx",
          "type": "registry:ui",
          "target": "components/ui/status-badge.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "description-list",
      "type": "registry:ui",
      "title": "Description list",
      "description": "Semantic dl, grouped dt and dd parts in stacked, inline or responsive two-column layouts. Details can use monospace; missing values show a dash and announce Not set.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme"],
      "files": [
        {
          "path": "src/components/ui/description-list.tsx",
          "type": "registry:ui",
          "target": "components/ui/description-list.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "id-token",
      "type": "registry:ui",
      "title": "Identifier token",
      "description": "Middle-truncated identifier with a keyboard-focusable full-value tooltip and the existing CopyButton confirmation and clipboard refusal announcement. No toast.",
      "registryDependencies": [
        "@waimakers/utils",
        "@waimakers/theme",
        "@waimakers/tooltip",
        "@waimakers/copy-button"
      ],
      "files": [
        {
          "path": "src/components/ui/id-token.tsx",
          "type": "registry:ui",
          "target": "components/ui/id-token.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "timestamp",
      "type": "registry:ui",
      "title": "Timestamp",
      "description": "Machine-readable time with relative, date and datetime formats. SSR emits deterministic UTC text; hydration enables local and relative formatting, refreshed each minute. A focusable tooltip shows local time and UTC.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/tooltip"],
      "files": [
        {
          "path": "src/components/ui/timestamp.tsx",
          "type": "registry:ui",
          "target": "components/ui/timestamp.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "code-block",
      "type": "registry:ui",
      "title": "Code block",
      "description": "A named focusable pre with native scrolling, an optional language header and exact-value CopyButton. The command variant wraps naturally and places a configurable copy action beside the command.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/copy-button"],
      "files": [
        {
          "path": "src/components/ui/code-block.tsx",
          "type": "registry:ui",
          "target": "components/ui/code-block.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "technical-details",
      "type": "registry:ui",
      "title": "Technical details",
      "description": "Closed-by-default Base UI disclosure for secondary facts or code, with a chevron and optional count. Remembers open state in sessionStorage per page or explicit key and still works when browser storage is refused.",
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/collapsible"],
      "files": [
        {
          "path": "src/components/ui/technical-details.tsx",
          "type": "registry:ui",
          "target": "components/ui/technical-details.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "refused-state",
      "type": "registry:ui",
      "title": "Refused state",
      "description": "A solid-bordered attention EmptyState preset that names the refused action, required grant and person who can grant access. Announces refusal as an alert; accepts a request action.",
      "dependencies": ["lucide-react@1.33.0"],
      "registryDependencies": ["@waimakers/utils", "@waimakers/theme", "@waimakers/empty-state"],
      "files": [
        {
          "path": "src/components/ui/refused-state.tsx",
          "type": "registry:ui",
          "target": "components/ui/refused-state.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "error-state",
      "type": "registry:ui",
      "title": "Error state",
      "description": "An error message with a danger panel or compact inline layout, optional Try again with loading state and a copyable reference. Announces the error in place.",
      "dependencies": ["lucide-react@1.33.0"],
      "registryDependencies": [
        "@waimakers/utils",
        "@waimakers/theme",
        "@waimakers/empty-state",
        "@waimakers/button",
        "@waimakers/id-token"
      ],
      "files": [
        {
          "path": "src/components/ui/error-state.tsx",
          "type": "registry:ui",
          "target": "components/ui/error-state.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "skeleton-presets",
      "type": "registry:ui",
      "title": "Skeleton layouts",
      "description": "Loading table with row/column counts, card and description-list presets built from the same kit layout parts as real content. Each exposes one loading announcement and hides placeholder cells from assistive technology.",
      "registryDependencies": [
        "@waimakers/utils",
        "@waimakers/theme",
        "@waimakers/skeleton",
        "@waimakers/card",
        "@waimakers/description-list",
        "@waimakers/table"
      ],
      "files": [
        {
          "path": "src/components/ui/skeleton-presets.tsx",
          "type": "registry:ui",
          "target": "components/ui/skeleton-presets.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-toolbar",
      "type": "registry:ui",
      "title": "Data Table Toolbar",
      "description": "Search, filters and column visibility for a list.",
      "registryDependencies": [
        "@waimakers/utils",
        "@waimakers/button",
        "@waimakers/badge",
        "@waimakers/input-group",
        "@waimakers/dropdown-menu"
      ],
      "files": [
        {
          "path": "src/components/ui/data-table-toolbar.tsx",
          "type": "registry:ui",
          "target": "components/ui/data-table-toolbar.tsx"
        }
      ],
      "dependencies": ["lucide-react@1.33.0"]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "data-table-load-more",
      "type": "registry:ui",
      "title": "Data Table Load More",
      "description": "Cursor pagination with pending and retry states.",
      "registryDependencies": ["@waimakers/button"],
      "files": [
        {
          "path": "src/components/ui/data-table-load-more.tsx",
          "type": "registry:ui",
          "target": "components/ui/data-table-load-more.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "detail-sheet",
      "type": "registry:block",
      "title": "Detail Sheet",
      "description": "Read-only or quick-action detail beside a list, with a fixed header and footer.",
      "registryDependencies": [
        "@waimakers/id-token",
        "@waimakers/sheet",
        "@waimakers/status-badge",
        "@waimakers/technical-details"
      ],
      "files": [
        {
          "path": "src/components/ui/detail-sheet.tsx",
          "type": "registry:ui",
          "target": "components/ui/detail-sheet.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "app-shell",
      "type": "registry:block",
      "title": "App Shell",
      "description": "Sidebar shell with a product lockup, navigation, account footer and breadcrumb. Pages own their heading.",
      "registryDependencies": [
        "@waimakers/brand-lockup",
        "@waimakers/breadcrumb",
        "@waimakers/sidebar",
        "@waimakers/tooltip"
      ],
      "files": [
        {
          "path": "src/components/ui/app-shell.tsx",
          "type": "registry:ui",
          "target": "components/ui/app-shell.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "page-list",
      "type": "registry:block",
      "title": "Page List",
      "description": "A page header, list toolbar and responsive table. Open a row in a detail sheet.",
      "registryDependencies": [
        "@waimakers/data-table",
        "@waimakers/detail-sheet",
        "@waimakers/page-header"
      ],
      "files": [
        {
          "path": "src/components/ui/page-list.tsx",
          "type": "registry:ui",
          "target": "components/ui/page-list.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "page-detail",
      "type": "registry:block",
      "title": "Page Detail",
      "description": "A detail page with a breadcrumb, sections, labelled facts and optional technical details.",
      "registryDependencies": [
        "@waimakers/description-list",
        "@waimakers/page-header",
        "@waimakers/section",
        "@waimakers/technical-details"
      ],
      "files": [
        {
          "path": "src/components/ui/page-detail.tsx",
          "type": "registry:ui",
          "target": "components/ui/page-detail.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kit-css",
      "type": "registry:file",
      "title": "WAIMAKERS kit stylesheet",
      "files": [
        {
          "path": "src/styles/kit.css",
          "type": "registry:file",
          "target": "src/styles/kit.css"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "fonts-css",
      "type": "registry:file",
      "title": "WAIMAKERS fonts stylesheet",
      "files": [
        {
          "path": "src/styles/fonts.css",
          "type": "registry:file",
          "target": "src/styles/fonts.css"
        }
      ]
    }
  ]
}
