{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "dcyfr-labs",
  "homepage": "https://www.dcyfr.ai",
  "items": [
    {
      "name": "dcyfr-button",
      "type": "registry:ui",
      "title": "dcyfr Button",
      "description": "Brand-aligned button with dcyfr-labs design tokens. Wraps the shadcn/ui button primitive and adds brand-specific variants."
    },
    {
      "name": "dcyfr-card",
      "type": "registry:ui",
      "title": "dcyfr Card",
      "description": "Brand-aligned card with dcyfr-labs design tokens. Variants: default, elevated, secure, glass, ghostly."
    },
    {
      "name": "dcyfr-badge",
      "type": "registry:ui",
      "title": "dcyfr Badge",
      "description": "Brand-aligned badge with dcyfr-labs design tokens. Variants: brand, secure, danger, info, outline, ghostly. Sizes: sm, md, lg."
    },
    {
      "name": "dcyfr-input",
      "type": "registry:ui",
      "title": "dcyfr Input",
      "description": "Brand-aligned input with built-in validation (error/success with icons + aria). Surface variants: default, secure, ghostly."
    },
    {
      "name": "dcyfr-dialog",
      "type": "registry:ui",
      "title": "dcyfr Dialog",
      "description": "Brand-aligned dialog wrapping Radix primitives. Content variants: default, secure, glass, elevated. Includes header/footer/title/description/close subcomponents."
    },
    {
      "name": "dcyfr-label",
      "type": "registry:ui",
      "title": "dcyfr Label",
      "description": "Brand-aligned label. Variants: default, required (asterisk indicator), secure. Includes required shorthand prop."
    },
    {
      "name": "dcyfr-textarea",
      "type": "registry:ui",
      "title": "dcyfr Textarea",
      "description": "Brand-aligned textarea with built-in validation (error/success with icons + aria). Surface variants: default, secure, ghostly. Mirrors dcyfr-input API."
    },
    {
      "name": "dcyfr-select",
      "type": "registry:ui",
      "title": "dcyfr Select",
      "description": "Brand-aligned select wrapping Radix primitives. Trigger surface variants: default, secure, ghostly; sizes sm/md/lg. Content panel uses glassy popover by default."
    },
    {
      "name": "dcyfr-checkbox",
      "type": "registry:ui",
      "title": "dcyfr Checkbox",
      "description": "Brand-aligned checkbox wrapping Radix primitives. Variants: default, secure. Supports indeterminate state with Minus icon."
    },
    {
      "name": "dcyfr-radio-group",
      "type": "registry:ui",
      "title": "dcyfr RadioGroup",
      "description": "Brand-aligned radio group wrapping Radix primitives. Variants: default, secure. Includes grouped root + item subcomponents."
    },
    {
      "name": "dcyfr-tabs",
      "type": "registry:ui",
      "title": "dcyfr Tabs",
      "description": "Brand-aligned tabs wrapping Radix primitives. List + Trigger variants: default (bordered row), pill (rounded pills), underline (minimal bottom-bar indicator)."
    },
    {
      "name": "dcyfr-separator",
      "type": "registry:ui",
      "title": "dcyfr Separator",
      "description": "Brand-aligned separator wrapping Radix primitives. Variants: default (solid border), gradient (fade via border color), dashed. Horizontal + vertical orientations."
    },
    {
      "name": "dcyfr-scroll-area",
      "type": "registry:ui",
      "title": "dcyfr ScrollArea",
      "description": "Brand-aligned scroll area wrapping Radix primitives. Scrollbar variants: default (neutral), brand-rail (primary-colored thumb)."
    },
    {
      "name": "dcyfr-sheet",
      "type": "registry:ui",
      "title": "dcyfr Sheet",
      "description": "Brand-aligned side-anchored dialog wrapping Radix primitives. Side: left/right/top/bottom. Content variants: default, secure (ring), glass (backdrop-blur). Full subcomponent set."
    },
    {
      "name": "dcyfr-dropdown-menu",
      "type": "registry:ui",
      "title": "dcyfr DropdownMenu",
      "description": "Brand-aligned dropdown menu wrapping Radix primitives. Content variants: default, secure, compact. Item density default/compact + destructive variant. Full subcomponent set including Sub menus."
    },
    {
      "name": "dcyfr-navigation-menu",
      "type": "registry:ui",
      "title": "dcyfr NavigationMenu",
      "description": "Brand-aligned navigation menu wrapping Radix primitives. Root variants: default (bordered, backdrop-blur), centered (max-width container), minimal (no chrome). Includes viewport + indicator animations."
    },
    {
      "name": "dcyfr-alert",
      "type": "registry:ui",
      "title": "dcyfr Alert",
      "description": "Brand-aligned alert with title + description subcomponents. Variants: info, secure, success, warning, danger, ghostly. Supports leading-icon slot."
    },
    {
      "name": "dcyfr-progress",
      "type": "registry:ui",
      "title": "dcyfr Progress",
      "description": "Brand-aligned progress bar wrapping Radix primitives. Variants: default, secure, danger, success. Sizes sm/md/lg. Indeterminate mode supported."
    },
    {
      "name": "dcyfr-skeleton",
      "type": "registry:ui",
      "title": "dcyfr Skeleton",
      "description": "Brand-aligned skeleton loader. Variants: default (pulse), shimmer (gradient sweep, self-contained — no globals.css dependency), text (line-height matched), circle. Respects reduced-motion."
    },
    {
      "name": "dcyfr-sonner",
      "type": "registry:ui",
      "title": "dcyfr Toaster (sonner)",
      "description": "Brand-themed sonner Toaster. Wraps `sonner` with DCYFR tokens for default/success/error/warning/info toast variants. Toast callers import toast() from sonner directly."
    },
    {
      "name": "dcyfr-tooltip",
      "type": "registry:ui",
      "title": "dcyfr Tooltip",
      "description": "Brand-aligned tooltip wrapping Radix primitives. Content variants: default, secure, inverted. Provider + Trigger + Content subcomponents."
    },
    {
      "name": "dcyfr-table",
      "type": "registry:ui",
      "title": "dcyfr Table",
      "description": "Brand-aligned table with full Header/Body/Footer/Row/Head/Cell/Caption set. Variants: default, striped, compact (tight padding + text-xs), elevated (wrapped in card). Context auto-tightens cell density in compact."
    },
    {
      "name": "dcyfr-accordion",
      "type": "registry:ui",
      "title": "dcyfr Accordion",
      "description": "Brand-aligned accordion wrapping Radix primitives. Variants: default (bordered items), bordered (outer border + rounded), ghostly (no borders). Chevron rotation preserved. Requires accordion keyframes in globals.css."
    },
    {
      "name": "dcyfr-avatar",
      "type": "registry:ui",
      "title": "dcyfr Avatar",
      "description": "Brand-aligned avatar wrapping Radix primitives. Variants: default (rounded-full), ring (primary ring + offset), square. Sizes xs/sm/md/lg/xl. Image + Fallback subcomponents."
    },
    {
      "name": "dcyfr-design-tokens",
      "type": "registry:style",
      "title": "dcyfr Design Tokens",
      "description": "Canonical :root + .dark semantic token blocks plus DCYFR-specific tokens (--secure, --success, --warning, --ease-brand). Per-site identity blocks (.theme-<name>) compose on top. Source of truth for the dcyfr-site-scaffold capability spec §Required patterns §5."
    },
    {
      "name": "dcyfr-theme-provider",
      "type": "registry:ui",
      "title": "dcyfr Theme Provider",
      "description": "next-themes wrapper matching the dcyfr-site-scaffold contract. Consumers render <ThemeProvider attribute=\"class\" defaultTheme=\"system|light|dark\" enableSystem> at layout root."
    },
    {
      "name": "dcyfr-theme-switcher",
      "type": "registry:ui",
      "title": "dcyfr Theme Switcher",
      "description": "Dropdown Light / Dark / System selector using next-themes. Dependencies on dcyfr-button + dcyfr-dropdown-menu primitives."
    },
    {
      "name": "dcyfr-page-shell",
      "type": "registry:ui",
      "title": "dcyfr Page Shell",
      "description": "Layout primitive composing nav + footer + children. Padding variants (none|sm|md|lg) and max-width variants (prose|md|lg|xl|full)."
    },
    {
      "name": "dcyfr-site-nav",
      "type": "registry:ui",
      "title": "dcyfr Site Nav",
      "description": "Top-level site navigation. Desktop horizontal row + theme switcher + optional CTA; mobile hamburger + Sheet drawer. Variants: default, centered, minimal."
    },
    {
      "name": "dcyfr-site-footer",
      "type": "registry:ui",
      "title": "dcyfr Site Footer",
      "description": "Standard site footer with brand slot, up to 4 columns of links, and copyright. Columns variant: default or minimal."
    },
    {
      "name": "dcyfr-chrome",
      "type": "registry:block",
      "title": "dcyfr Chrome",
      "description": "Bundled chrome cohort — installs theme-provider, theme-switcher, page-shell, site-nav, site-footer as one atomic unit. Aligns with the dcyfr-site-scaffold capability spec's Required Files table. Prefer this over installing primitives individually."
    },
    {
      "name": "dcyfr-hero-stack",
      "type": "registry:ui",
      "title": "dcyfr HeroStack",
      "description": "Decorative fanned-card hero — three card slots in a shallow fan with pure-CSS hover spread. Server component, zero client JS. Generic over `children` (consumers pass any React node per slot). Sizes sm/md/lg. Defaults to aria-hidden; opt into a meaningful aria-label when the deck IS the content."
    },
    {
      "name": "dcyfr-spotlight",
      "type": "registry:ui",
      "title": "dcyfr Spotlight",
      "description": "Per-render-random featured-item slot. Generic-typed server component — accepts an item array and a render-prop, picks one via Fisher-Yates per request. Returns null when the array is empty (renders optional `empty` fallback). Consuming route MUST set `export const dynamic = \"force-dynamic\"` (or use a dynamic data fetch) for the random pick to actually rotate per visit."
    },
    {
      "name": "dcyfr-animated-counter",
      "type": "registry:ui",
      "title": "dcyfr AnimatedCounter",
      "description": "Counts from 0 up to `value` over `durationMs` using requestAnimationFrame. Fires once on first mount, easeOutCubic. Respects `prefers-reduced-motion: reduce` (renders final value immediately, skips the rAF loop). `tabular-nums` always applied so digits don't dance. Optional custom formatter."
    },
    {
      "name": "dcyfr-status-marquee",
      "type": "registry:ui",
      "title": "dcyfr StatusMarquee",
      "description": "Single-line live-stats marquee for site chrome. Accepts a `{ value, label, animate?, highlight? }[]` and renders horizontally with optional inter-stat dividers (border/dot/none). Server-rendered shell; numeric stats with `animate: true` defer to DcyfrAnimatedCounter (client). Highlight uses the brand `--secure` token."
    },
    {
      "name": "dcyfr-command-palette",
      "type": "registry:block",
      "title": "dcyfr CommandPalette",
      "description": "cmdk-backed global command palette. Provider mounts the dialog once and owns the cmd+k / ctrl+k global shortcut. Consumers pass declarative `Command[]` entries (id, label, hint?, icon?, run? OR href?). Focus trap, ESC + click-outside close, focus restoration handled by cmdk's <Command.Dialog>. Variants: default, secure, glass."
    }
  ]
}
