{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "damon",
  "homepage": "https://damon-ui.pages.dev",
  "items": [
    {
      "name": "theme-marketing",
      "type": "registry:theme",
      "title": "Theme: marketing",
      "description": "Marketing preset: ink-on-white with a blue/violet brand pair, layered surfaces, brand gradient, fluid display type, and success/warning/info tones. Light and dark.",
      "categories": [
        "theme"
      ],
      "cssVars": {
        "theme": {
          "color-success": "var(--success)",
          "color-success-foreground": "var(--success-foreground)",
          "color-warning": "var(--warning)",
          "color-warning-foreground": "var(--warning-foreground)",
          "color-info": "var(--info)",
          "color-info-foreground": "var(--info-foreground)",
          "color-brand": "var(--brand)",
          "color-brand-foreground": "var(--brand-foreground)",
          "color-brand-2": "var(--brand-2)",
          "color-surface-1": "var(--surface-1)",
          "color-surface-2": "var(--surface-2)",
          "color-surface-inverse": "var(--surface-inverse)",
          "color-surface-inverse-foreground": "var(--surface-inverse-foreground)",
          "text-display": "clamp(2rem, 4.5vw, 3.5rem)",
          "text-display--line-height": "1.1",
          "text-hero": "clamp(2.5rem, 7vw, 6rem)",
          "text-hero--line-height": "1"
        },
        "light": {
          "success": "#176b45",
          "success-foreground": "#ffffff",
          "warning": "#8a4b08",
          "warning-foreground": "#ffffff",
          "info": "#1d4ed8",
          "info-foreground": "#ffffff",
          "brand": "#4363d9",
          "brand-foreground": "#ffffff",
          "brand-2": "#6029ba",
          "surface-1": "#f7f8fa",
          "surface-2": "#eef0f4",
          "surface-inverse": "#0e1a33",
          "surface-inverse-foreground": "#f7f8fa",
          "brand-gradient": "linear-gradient(135deg, var(--brand), var(--brand-2))",
          "radius": "0.75rem",
          "background": "#ffffff",
          "foreground": "#0e1a33",
          "card": "#ffffff",
          "card-foreground": "#0e1a33",
          "popover": "#ffffff",
          "popover-foreground": "#0e1a33",
          "primary": "#4363d9",
          "primary-foreground": "#ffffff",
          "secondary": "#eef0f4",
          "secondary-foreground": "#0e1a33",
          "muted": "#f7f8fa",
          "muted-foreground": "#566077",
          "accent": "#eef0f4",
          "accent-foreground": "#0e1a33",
          "destructive": "#d92d20",
          "border": "#e3e6ec",
          "input": "#d5d9e2",
          "ring": "#4363d9"
        },
        "dark": {
          "success": "#7bcea3",
          "success-foreground": "#0b1422",
          "warning": "#f4c36a",
          "warning-foreground": "#0b1422",
          "info": "#8ab4ff",
          "info-foreground": "#0b1422",
          "brand": "#8b9fff",
          "brand-foreground": "#0b1020",
          "brand-2": "#b197fc",
          "surface-1": "#12161f",
          "surface-2": "#1a1f2b",
          "surface-inverse": "#eef1f7",
          "surface-inverse-foreground": "#0e1a33",
          "brand-gradient": "linear-gradient(135deg, var(--brand), var(--brand-2))",
          "background": "#0b1020",
          "foreground": "#eef1f7",
          "card": "#121828",
          "card-foreground": "#eef1f7",
          "popover": "#121828",
          "popover-foreground": "#eef1f7",
          "primary": "#8b9fff",
          "primary-foreground": "#0b1020",
          "secondary": "#1b2236",
          "secondary-foreground": "#eef1f7",
          "muted": "#161c2c",
          "muted-foreground": "#9aa3b8",
          "accent": "#1b2236",
          "accent-foreground": "#eef1f7",
          "destructive": "#ff8a80",
          "border": "#252d42",
          "input": "#2f3850",
          "ring": "#8b9fff"
        }
      }
    },
    {
      "name": "theme-admin",
      "type": "registry:theme",
      "title": "Theme: admin",
      "description": "Admin/SaaS preset: warm linen canvas, paper cards, ink primary, terracotta brand, dense radius, sidebar tokens and status tones tuned for the warm canvas. Light and dark.",
      "categories": [
        "theme"
      ],
      "cssVars": {
        "theme": {
          "color-success": "var(--success)",
          "color-success-foreground": "var(--success-foreground)",
          "color-warning": "var(--warning)",
          "color-warning-foreground": "var(--warning-foreground)",
          "color-info": "var(--info)",
          "color-info-foreground": "var(--info-foreground)",
          "color-brand": "var(--brand)",
          "color-brand-foreground": "var(--brand-foreground)",
          "color-brand-2": "var(--brand-2)",
          "color-surface-1": "var(--surface-1)",
          "color-surface-2": "var(--surface-2)",
          "color-surface-inverse": "var(--surface-inverse)",
          "color-surface-inverse-foreground": "var(--surface-inverse-foreground)"
        },
        "light": {
          "success": "#356646",
          "success-foreground": "#fffef9",
          "warning": "#7d5214",
          "warning-foreground": "#fffef9",
          "info": "#2f6273",
          "info-foreground": "#fffef9",
          "brand": "#b6472a",
          "brand-foreground": "#fffef9",
          "brand-2": "#8b5b16",
          "surface-1": "#f7f6f0",
          "surface-2": "#eeece3",
          "surface-inverse": "#262923",
          "surface-inverse-foreground": "#fffef9",
          "brand-gradient": "linear-gradient(135deg, var(--brand), var(--brand-2))",
          "radius": "0.5rem",
          "background": "#f2f0e9",
          "foreground": "#262923",
          "card": "#fffef9",
          "card-foreground": "#262923",
          "popover": "#fffef9",
          "popover-foreground": "#262923",
          "primary": "#262923",
          "primary-foreground": "#fffef9",
          "secondary": "#e9e7df",
          "secondary-foreground": "#262923",
          "muted": "#f7f6f0",
          "muted-foreground": "#5f645b",
          "accent": "#eeece3",
          "accent-foreground": "#262923",
          "destructive": "#a33b34",
          "border": "#d8d5ca",
          "input": "#b9b6ab",
          "ring": "#9e3d25",
          "sidebar": "#e9e7df",
          "sidebar-foreground": "#262923",
          "sidebar-primary": "#262923",
          "sidebar-primary-foreground": "#fffef9",
          "sidebar-accent": "#dfddd3",
          "sidebar-accent-foreground": "#262923",
          "sidebar-border": "#d8d5ca",
          "sidebar-ring": "#9e3d25"
        },
        "dark": {
          "success": "#8cc79f",
          "success-foreground": "#171916",
          "warning": "#e2b866",
          "warning-foreground": "#171916",
          "info": "#8cc0d0",
          "info-foreground": "#171916",
          "brand": "#e0896f",
          "brand-foreground": "#171916",
          "brand-2": "#e2b866",
          "surface-1": "#1c1f1b",
          "surface-2": "#232622",
          "surface-inverse": "#ecebe4",
          "surface-inverse-foreground": "#171916",
          "brand-gradient": "linear-gradient(135deg, var(--brand), var(--brand-2))",
          "background": "#171916",
          "foreground": "#ecebe4",
          "card": "#1f221e",
          "card-foreground": "#ecebe4",
          "popover": "#1f221e",
          "popover-foreground": "#ecebe4",
          "primary": "#ecebe4",
          "primary-foreground": "#171916",
          "secondary": "#2a2d28",
          "secondary-foreground": "#ecebe4",
          "muted": "#232622",
          "muted-foreground": "#a5a99f",
          "accent": "#2c2f2a",
          "accent-foreground": "#ecebe4",
          "destructive": "#f0877d",
          "border": "#343832",
          "input": "#4a4e46",
          "ring": "#e0896f",
          "sidebar": "#1b1d1a",
          "sidebar-foreground": "#ecebe4",
          "sidebar-primary": "#ecebe4",
          "sidebar-primary-foreground": "#171916",
          "sidebar-accent": "#2a2d28",
          "sidebar-accent-foreground": "#ecebe4",
          "sidebar-border": "#343832",
          "sidebar-ring": "#e0896f"
        }
      }
    },
    {
      "name": "nz-money",
      "type": "registry:lib",
      "title": "NZ money",
      "description": "Locale-proof NZD formatting with BigInt rounding: formatMoney, formatCents, toCents, moneyInputValue, formatPercent, formatBytes.",
      "categories": [
        "lib"
      ],
      "files": [
        {
          "path": "registry/damon/lib/nz-money.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "nz-date",
      "type": "registry:lib",
      "title": "NZ date",
      "description": "Timezone-proof NZ dates: todayInNz, nzDateOf, addDays, differenceInDays, formatNzDate (7 Oct 2026), formatNzDateTime, nzTaxYear. No Date for calendar dates.",
      "categories": [
        "lib"
      ],
      "files": [
        {
          "path": "registry/damon/lib/nz-date.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "gst",
      "type": "registry:lib",
      "title": "GST",
      "description": "NZ GST maths with exact BigInt arithmetic (splitInclusive, gstFromInclusive, inclusiveFromExclusive, isGstConsistent) and IRD/GST number validation.",
      "categories": [
        "lib"
      ],
      "files": [
        {
          "path": "registry/damon/lib/gst.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "labeled-field",
      "type": "registry:ui",
      "title": "Labeled field",
      "description": "Label + control + description + error in one component, with id, htmlFor, aria-describedby, aria-invalid and aria-required wired automatically. Plus FieldRow and FormActions. Built on shadcn Field.",
      "categories": [
        "ui"
      ],
      "registryDependencies": [
        "field"
      ],
      "files": [
        {
          "path": "registry/damon/ui/labeled-field.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "status-badge",
      "type": "registry:ui",
      "title": "Status badge",
      "description": "Status value → coloured dot (or tinted pill) + readable label. Ships a default status→tone map (paid, overdue, draft…) you can extend.",
      "categories": [
        "ui"
      ],
      "dependencies": [
        "class-variance-authority"
      ],
      "files": [
        {
          "path": "registry/damon/ui/status-badge.tsx",
          "type": "registry:ui"
        }
      ],
      "cssVars": {
        "theme": {
          "color-success": "var(--success)",
          "color-success-foreground": "var(--success-foreground)",
          "color-warning": "var(--warning)",
          "color-warning-foreground": "var(--warning-foreground)",
          "color-info": "var(--info)",
          "color-info-foreground": "var(--info-foreground)"
        },
        "light": {
          "success": "#176b45",
          "success-foreground": "#ffffff",
          "warning": "#8a4b08",
          "warning-foreground": "#ffffff",
          "info": "#1d4ed8",
          "info-foreground": "#ffffff"
        },
        "dark": {
          "success": "#7bcea3",
          "success-foreground": "#0b1422",
          "warning": "#f4c36a",
          "warning-foreground": "#0b1422",
          "info": "#8ab4ff",
          "info-foreground": "#0b1422"
        }
      }
    },
    {
      "name": "notice",
      "type": "registry:ui",
      "title": "Notice",
      "description": "Inline message with info / success / warning / danger tones, optional title and actions, and the right ARIA role per tone. Built on shadcn Alert.",
      "categories": [
        "ui"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "alert"
      ],
      "files": [
        {
          "path": "registry/damon/ui/notice.tsx",
          "type": "registry:ui"
        }
      ],
      "cssVars": {
        "theme": {
          "color-success": "var(--success)",
          "color-success-foreground": "var(--success-foreground)",
          "color-warning": "var(--warning)",
          "color-warning-foreground": "var(--warning-foreground)",
          "color-info": "var(--info)",
          "color-info-foreground": "var(--info-foreground)"
        },
        "light": {
          "success": "#176b45",
          "success-foreground": "#ffffff",
          "warning": "#8a4b08",
          "warning-foreground": "#ffffff",
          "info": "#1d4ed8",
          "info-foreground": "#ffffff"
        },
        "dark": {
          "success": "#7bcea3",
          "success-foreground": "#0b1422",
          "warning": "#f4c36a",
          "warning-foreground": "#0b1422",
          "info": "#8ab4ff",
          "info-foreground": "#0b1422"
        }
      }
    },
    {
      "name": "page-header",
      "type": "registry:ui",
      "title": "Page header",
      "description": "App page title row: eyebrow (breadcrumb/back link), title with inline badge, description and right-aligned actions that wrap on mobile.",
      "categories": [
        "ui"
      ],
      "files": [
        {
          "path": "registry/damon/ui/page-header.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "resource-state",
      "type": "registry:ui",
      "title": "Resource state",
      "description": "Empty, error and loading states for lists and pages: EmptyState, ErrorState (retry + reference id), LoadingState (table/cards/list skeletons). Built on shadcn Empty and Skeleton.",
      "categories": [
        "ui"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "empty",
        "skeleton",
        "button"
      ],
      "files": [
        {
          "path": "registry/damon/ui/resource-state.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "confirm-dialog",
      "type": "registry:ui",
      "title": "Confirm dialog",
      "description": "Second confirmation for irreversible actions. Submits the enclosing form (server actions work) or runs an async onConfirm with pending and error states. Built on shadcn AlertDialog.",
      "categories": [
        "ui"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "alert-dialog",
        "button"
      ],
      "files": [
        {
          "path": "registry/damon/ui/confirm-dialog.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "data-table",
      "type": "registry:ui",
      "title": "Data table",
      "description": "Admin list table from plain column defs: client or URL-driven sorting, row selection with bulk-action bar, column visibility menu, empty and loading states. No table library. Built on shadcn Table.",
      "categories": [
        "ui",
        "table"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "table",
        "checkbox",
        "dropdown-menu",
        "button",
        "skeleton"
      ],
      "files": [
        {
          "path": "registry/damon/ui/data-table.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "filter-bar",
      "type": "registry:ui",
      "title": "Filter bar",
      "description": "List filters as a GET form (shareable URLs, works before hydration): FilterBar, FilterField, FilterSearch, FilterSelect, removable FilterChips, optional auto-submit and preserved params.",
      "categories": [
        "ui",
        "table"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "input"
      ],
      "files": [
        {
          "path": "registry/damon/ui/filter-bar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "pager",
      "type": "registry:ui",
      "title": "Pager",
      "description": "Pagination: numbered Pager (URL links or onPageChange, '21–40 of 312'), CursorPager for keyset pagination, plus pageRange and buildQuery helpers.",
      "categories": [
        "ui",
        "table"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/damon/ui/pager.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "reveal",
      "type": "registry:ui",
      "title": "Reveal",
      "description": "Fade-and-rise on first scroll into view (IntersectionObserver, fires once). Respects reduced motion and never hides content when JS is off, without a noscript override.",
      "categories": [
        "ui",
        "motion"
      ],
      "files": [
        {
          "path": "registry/damon/ui/reveal.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "page-hero",
      "type": "registry:block",
      "title": "Page hero",
      "description": "Marketing page opener: eyebrow, fluid text-hero/text-display title, intro, actions and optional media, with a staggered rise-in. Uses theme-marketing surface and type tokens.",
      "categories": [
        "block",
        "marketing"
      ],
      "dependencies": [
        "tw-animate-css"
      ],
      "files": [
        {
          "path": "registry/damon/blocks/page-hero.tsx",
          "type": "registry:component"
        }
      ],
      "cssVars": {
        "theme": {
          "color-brand": "var(--brand)",
          "color-brand-foreground": "var(--brand-foreground)",
          "color-brand-2": "var(--brand-2)",
          "color-surface-1": "var(--surface-1)",
          "color-surface-2": "var(--surface-2)",
          "color-surface-inverse": "var(--surface-inverse)",
          "color-surface-inverse-foreground": "var(--surface-inverse-foreground)",
          "text-display": "clamp(2rem, 4.5vw, 3.5rem)",
          "text-display--line-height": "1.1",
          "text-hero": "clamp(2.5rem, 7vw, 6rem)",
          "text-hero--line-height": "1"
        },
        "light": {
          "brand": "#4363d9",
          "brand-foreground": "#ffffff",
          "brand-2": "#6029ba",
          "surface-1": "#f7f8fa",
          "surface-2": "#eef0f4",
          "surface-inverse": "#0e1a33",
          "surface-inverse-foreground": "#f7f8fa",
          "brand-gradient": "linear-gradient(135deg, var(--brand), var(--brand-2))"
        },
        "dark": {
          "brand": "#8b9fff",
          "brand-foreground": "#0b1020",
          "brand-2": "#b197fc",
          "surface-1": "#12161f",
          "surface-2": "#1a1f2b",
          "surface-inverse": "#eef1f7",
          "surface-inverse-foreground": "#0e1a33",
          "brand-gradient": "linear-gradient(135deg, var(--brand), var(--brand-2))"
        }
      }
    },
    {
      "name": "cta-band",
      "type": "registry:block",
      "title": "CTA band",
      "description": "Closing call-to-action section: big heading, primary and secondary actions, small print; inverse, brand-gradient or muted tone, optional background image with scrim.",
      "categories": [
        "block",
        "marketing"
      ],
      "files": [
        {
          "path": "registry/damon/blocks/cta-band.tsx",
          "type": "registry:component"
        }
      ],
      "cssVars": {
        "theme": {
          "color-brand": "var(--brand)",
          "color-brand-foreground": "var(--brand-foreground)",
          "color-brand-2": "var(--brand-2)",
          "color-surface-1": "var(--surface-1)",
          "color-surface-2": "var(--surface-2)",
          "color-surface-inverse": "var(--surface-inverse)",
          "color-surface-inverse-foreground": "var(--surface-inverse-foreground)",
          "text-display": "clamp(2rem, 4.5vw, 3.5rem)",
          "text-display--line-height": "1.1",
          "text-hero": "clamp(2.5rem, 7vw, 6rem)",
          "text-hero--line-height": "1"
        },
        "light": {
          "brand": "#4363d9",
          "brand-foreground": "#ffffff",
          "brand-2": "#6029ba",
          "surface-1": "#f7f8fa",
          "surface-2": "#eef0f4",
          "surface-inverse": "#0e1a33",
          "surface-inverse-foreground": "#f7f8fa",
          "brand-gradient": "linear-gradient(135deg, var(--brand), var(--brand-2))"
        },
        "dark": {
          "brand": "#8b9fff",
          "brand-foreground": "#0b1020",
          "brand-2": "#b197fc",
          "surface-1": "#12161f",
          "surface-2": "#1a1f2b",
          "surface-inverse": "#eef1f7",
          "surface-inverse-foreground": "#0e1a33",
          "brand-gradient": "linear-gradient(135deg, var(--brand), var(--brand-2))"
        }
      }
    },
    {
      "name": "json-ld",
      "type": "registry:lib",
      "title": "JSON-LD",
      "description": "Safe <JsonLd> script plus schema.org builders with stable @ids: organization, website, service, article, faqPage, jsonLdGraph. Escapes </script> and line separators.",
      "categories": [
        "lib",
        "seo"
      ],
      "files": [
        {
          "path": "registry/damon/lib/json-ld.tsx",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "seo",
      "type": "registry:lib",
      "title": "SEO metadata",
      "description": "createSeo(config) → page(), article(), root() Next.js Metadata with canonical, Open Graph, Twitter and hreflang; plus truncate, plainText and hreflangAlternates.",
      "categories": [
        "lib",
        "seo"
      ],
      "files": [
        {
          "path": "registry/damon/lib/seo.ts",
          "type": "registry:lib"
        }
      ]
    }
  ]
}
