{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "@nswds/ui", "homepage": "https://github.com/digitalnsw/nswds-ui", "items": [ { "name": "theme", "type": "registry:theme", "title": "NSWDS Theme", "description": "NSW Government semantic design tokens — maps the shadcn token names onto the @nswds/tokens palette for light and dark mode.", "dependencies": [ "@nswds/tokens" ], "docs": "Add the @nswds/tokens token layers to your Tailwind entry CSS (after `@import \"tailwindcss\";`):\n\n@import \"@nswds/tokens/tailwind/preset.css\";\n@import \"@nswds/tokens/css/colors/global/oklch.css\";\n@import \"@nswds/tokens/css/colors/semantic/oklch.css\";\n@import \"@nswds/tokens/css/colors/semantic/oklch.dark.css\";\n@import \"@nswds/tokens/css/colors/themes/masterbrand/oklch.css\";\n@import \"@nswds/tokens/tailwind/colors/themes/masterbrand/oklch.css\";\n\n`preset.css` wires every token category (colour, radius, space, typography, motion, shadow, border) into Tailwind in a single import. Keep the oklch colour layers AFTER it so the palette stays oklch (preset bundles hex values); the masterbrand layers add the brand theme, which preset excludes. The semantic DARK layer is scoped `.dark`, so the role tokens these variables map onto flip automatically — toggle the `.dark` class on your root element for dark mode (no separate dark variable block needed).\n\nSee https://github.com/digitalnsw/nswds-ui/blob/main/docs/installing-from-the-registry.md", "cssVars": { "theme": { "font-heading": "var(--font-sans)" }, "light": { "background": "var(--surface-default)", "foreground": "var(--text-default)", "card": "var(--surface-raised)", "card-foreground": "var(--text-default)", "popover": "var(--surface-raised)", "popover-foreground": "var(--text-default)", "primary": "var(--action-default)", "primary-foreground": "var(--text-inverse)", "secondary": "var(--surface-sunken)", "secondary-foreground": "var(--text-default)", "muted": "var(--background-subtle)", "muted-foreground": "var(--text-muted)", "accent": "var(--background-subtle)", "accent-foreground": "var(--text-default)", "destructive": "var(--danger-solid)", "border": "var(--border-default)", "input": "var(--border-default)", "ring": "var(--border-strong)", "chart-1": "var(--primary-450)", "chart-2": "var(--primary-550)", "chart-3": "var(--primary-600)", "chart-4": "var(--primary-650)", "chart-5": "var(--primary-700)", "radius": "var(--radius-md)", "sidebar": "var(--background-subtle)", "sidebar-foreground": "var(--text-default)", "sidebar-primary": "var(--action-default)", "sidebar-primary-foreground": "var(--text-inverse)", "sidebar-accent": "var(--background-subtle)", "sidebar-accent-foreground": "var(--text-default)", "sidebar-border": "var(--border-default)", "sidebar-ring": "var(--border-strong)", "input-border": "var(--border-strong)", "input-foreground": "var(--text-default)", "input-placeholder": "var(--text-muted)", "input-surface": "var(--surface-default)", "input-surface-hover": "var(--surface-sunken)", "input-ring": "var(--border-strong)", "input-invalid-border": "var(--danger-border)", "input-invalid-surface-hover": "var(--danger-surface)", "input-invalid-ring": "var(--danger-solid)" }, "dark": {} } }, { "name": "button", "type": "registry:ui", "title": "Button", "description": "A button component with variants and sizes.", "dependencies": [ "@base-ui/react", "class-variance-authority", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/link.json", "https://ui.digital.nsw.gov.au/registry/r/spinner.json" ], "files": [ { "path": "src/components/button.tsx", "type": "registry:ui", "target": "components/button.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "badge", "type": "registry:ui", "title": "Badge", "description": "A badge component with variants, colours, sizes, and interactive button/link variants.", "dependencies": [ "@base-ui/react", "class-variance-authority", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/link.json" ], "files": [ { "path": "src/components/badge.tsx", "type": "registry:ui", "target": "components/badge.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "card", "type": "registry:ui", "title": "Card", "description": "A content container with header, content, footer, action, and description slots.", "dependencies": [ "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/card.tsx", "type": "registry:ui", "target": "components/card.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "field", "type": "registry:ui", "title": "Field", "description": "Form field layout primitives — set, group, label, description, error, and separator slots.", "dependencies": [ "@base-ui/react", "class-variance-authority", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/label.json", "https://ui.digital.nsw.gov.au/registry/r/separator.json" ], "files": [ { "path": "src/components/field.tsx", "type": "registry:ui", "target": "components/field.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "input", "type": "registry:ui", "title": "Input", "description": "A text input built on the Base UI input primitive with NSW form styling.", "dependencies": [ "@base-ui/react", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/input.tsx", "type": "registry:ui", "target": "components/input.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "label", "type": "registry:ui", "title": "Label", "description": "A form label with disabled-state styling.", "dependencies": [ "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/label.tsx", "type": "registry:ui", "target": "components/label.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "labeled-separator", "type": "registry:ui", "title": "Labeled Separator", "description": "A horizontal divider broken by a centred label, such as an \"or\" rule between sign-in methods.", "dependencies": [ "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/separator.json" ], "files": [ { "path": "src/components/labeled-separator.tsx", "type": "registry:ui", "target": "components/labeled-separator.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "separator", "type": "registry:ui", "title": "Separator", "description": "A semantic or decorative divider built on the Base UI separator primitive.", "dependencies": [ "@base-ui/react", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/separator.tsx", "type": "registry:ui", "target": "components/separator.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "icons", "type": "registry:ui", "title": "Icons", "description": "Curated NSWDS icon subset used by the shipped components and patterns. The full Material Symbols set is available per-icon from the @nswds/ui npm package (import { IconSearch } from '@nswds/ui/icons').", "files": [ { "path": "src/icons/types.ts", "type": "registry:ui", "target": "icons/types.ts" }, { "path": "src/icons/accessibility.tsx", "type": "registry:ui", "target": "icons/accessibility.tsx" }, { "path": "src/icons/add.tsx", "type": "registry:ui", "target": "icons/add.tsx" }, { "path": "src/icons/arrow-forward.tsx", "type": "registry:ui", "target": "icons/arrow-forward.tsx" }, { "path": "src/icons/call.tsx", "type": "registry:ui", "target": "icons/call.tsx" }, { "path": "src/icons/check.tsx", "type": "registry:ui", "target": "icons/check.tsx" }, { "path": "src/icons/check-circle.tsx", "type": "registry:ui", "target": "icons/check-circle.tsx" }, { "path": "src/icons/chevron-right.tsx", "type": "registry:ui", "target": "icons/chevron-right.tsx" }, { "path": "src/icons/close.tsx", "type": "registry:ui", "target": "icons/close.tsx" }, { "path": "src/icons/code.tsx", "type": "registry:ui", "target": "icons/code.tsx" }, { "path": "src/icons/colors.tsx", "type": "registry:ui", "target": "icons/colors.tsx" }, { "path": "src/icons/dark-mode.tsx", "type": "registry:ui", "target": "icons/dark-mode.tsx" }, { "path": "src/icons/east.tsx", "type": "registry:ui", "target": "icons/east.tsx" }, { "path": "src/icons/error.tsx", "type": "registry:ui", "target": "icons/error.tsx" }, { "path": "src/icons/expand-more.tsx", "type": "registry:ui", "target": "icons/expand-more.tsx" }, { "path": "src/icons/info.tsx", "type": "registry:ui", "target": "icons/info.tsx" }, { "path": "src/icons/key.tsx", "type": "registry:ui", "target": "icons/key.tsx" }, { "path": "src/icons/keyboard-arrow-down.tsx", "type": "registry:ui", "target": "icons/keyboard-arrow-down.tsx" }, { "path": "src/icons/light-mode.tsx", "type": "registry:ui", "target": "icons/light-mode.tsx" }, { "path": "src/icons/location-on.tsx", "type": "registry:ui", "target": "icons/location-on.tsx" }, { "path": "src/icons/login.tsx", "type": "registry:ui", "target": "icons/login.tsx" }, { "path": "src/icons/mail.tsx", "type": "registry:ui", "target": "icons/mail.tsx" }, { "path": "src/icons/menu.tsx", "type": "registry:ui", "target": "icons/menu.tsx" }, { "path": "src/icons/more-horiz.tsx", "type": "registry:ui", "target": "icons/more-horiz.tsx" }, { "path": "src/icons/open-in-new.tsx", "type": "registry:ui", "target": "icons/open-in-new.tsx" }, { "path": "src/icons/package.tsx", "type": "registry:ui", "target": "icons/package.tsx" }, { "path": "src/icons/palette.tsx", "type": "registry:ui", "target": "icons/palette.tsx" }, { "path": "src/icons/person-add.tsx", "type": "registry:ui", "target": "icons/person-add.tsx" }, { "path": "src/icons/remove.tsx", "type": "registry:ui", "target": "icons/remove.tsx" }, { "path": "src/icons/search.tsx", "type": "registry:ui", "target": "icons/search.tsx" }, { "path": "src/icons/shapes.tsx", "type": "registry:ui", "target": "icons/shapes.tsx" }, { "path": "src/icons/warning.tsx", "type": "registry:ui", "target": "icons/warning.tsx" }, { "path": "src/icons/west.tsx", "type": "registry:ui", "target": "icons/west.tsx" }, { "path": "src/icons/widgets.tsx", "type": "registry:ui", "target": "icons/widgets.tsx" } ] }, { "name": "link", "type": "registry:ui", "title": "Link", "description": "A link primitive with a provider for app router link components.", "dependencies": [ "class-variance-authority", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/link.tsx", "type": "registry:ui", "target": "components/link.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "logo", "type": "registry:ui", "title": "Logo", "description": "NSW Government logo component.", "dependencies": [ "clsx" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/logo.tsx", "type": "registry:ui", "target": "components/logo.tsx" } ] }, { "name": "footer", "type": "registry:ui", "title": "Footer", "description": "End-of-page contentinfo landmark with acknowledgement of Country, legal links, ownership and social channels, themeable across 13 token-based surface colours.", "dependencies": [ "class-variance-authority", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/link.json", "https://ui.digital.nsw.gov.au/registry/r/separator.json" ], "files": [ { "path": "src/components/footer.tsx", "type": "registry:ui", "target": "components/footer.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "header", "type": "registry:ui", "title": "Header", "description": "Top-of-page banner landmark with brand lockup, site name, version badge and a slot for header controls, in four WCAG 2.2 AAA surface colours.", "dependencies": [ "class-variance-authority", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/badge.json", "https://ui.digital.nsw.gov.au/registry/r/link.json", "https://ui.digital.nsw.gov.au/registry/r/logo.json" ], "files": [ { "path": "src/components/header.tsx", "type": "registry:ui", "target": "components/header.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "masthead", "type": "registry:ui", "title": "Masthead", "description": "The \"A NSW Government website\" strip shown above the site header, with WCAG 2.2 AAA colour variants and fluid/contained width presets.", "dependencies": [ "class-variance-authority", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/masthead.tsx", "type": "registry:ui", "target": "components/masthead.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "skip-link", "type": "registry:ui", "title": "Skip Link", "description": "Focus-revealed bypass links (SkipLink + SkipLinks landmark) that let keyboard and screen-reader users jump past repeated blocks, with the same AAA colour variants as the Masthead.", "dependencies": [ "class-variance-authority", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/skip-link.tsx", "type": "registry:ui", "target": "components/skip-link.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "spinner", "type": "registry:ui", "title": "Spinner", "description": "An inline loading spinner with semantic colour and size variants.", "dependencies": [ "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/spinner.tsx", "type": "registry:ui", "target": "components/spinner.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "aspect-ratio", "type": "registry:ui", "title": "Aspect Ratio", "description": "Constrains its content to a given width-to-height ratio.", "dependencies": [ "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/aspect-ratio.tsx", "type": "registry:ui", "target": "components/aspect-ratio.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "collapsible", "type": "registry:ui", "title": "Collapsible", "description": "An expandable section built on the Base UI collapsible primitive.", "dependencies": [ "@base-ui/react" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/collapsible.tsx", "type": "registry:ui", "target": "components/collapsible.tsx" } ] }, { "name": "drawer", "type": "registry:ui", "title": "Drawer", "description": "An edge-anchored panel that slides in from any side, built on Vaul.", "dependencies": [ "vaul", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/drawer.tsx", "type": "registry:ui", "target": "components/drawer.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "hover-card", "type": "registry:ui", "title": "Hover Card", "description": "A rich preview surface shown on hover or focus, built on the Base UI preview-card primitive.", "dependencies": [ "@base-ui/react", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/hover-card.tsx", "type": "registry:ui", "target": "components/hover-card.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "popover", "type": "registry:ui", "title": "Popover", "description": "A floating panel anchored to a trigger, built on the Base UI popover primitive.", "dependencies": [ "@base-ui/react", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/popover.tsx", "type": "registry:ui", "target": "components/popover.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "resizable", "type": "registry:ui", "title": "Resizable", "description": "Resizable panel groups with draggable handles, built on react-resizable-panels.", "dependencies": [ "react-resizable-panels", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/resizable.tsx", "type": "registry:ui", "target": "components/resizable.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "scroll-area", "type": "registry:ui", "title": "Scroll Area", "description": "A custom scrollable region with styled scrollbars, built on the Base UI scroll-area primitive.", "dependencies": [ "@base-ui/react", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/scroll-area.tsx", "type": "registry:ui", "target": "components/scroll-area.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "sheet", "type": "registry:ui", "title": "Sheet", "description": "An edge-anchored dialog that slides in from any side, built on the Base UI dialog primitive.", "dependencies": [ "@base-ui/react", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/components/sheet.tsx", "type": "registry:ui", "target": "components/sheet.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "sonner", "type": "registry:ui", "title": "Sonner", "description": "A toast notification surface wired to next-themes, with NSWDS status icons.", "dependencies": [ "clsx", "next-themes", "sonner", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/spinner.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/components/sonner.tsx", "type": "registry:ui", "target": "components/sonner.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "tooltip", "type": "registry:ui", "title": "Tooltip", "description": "A small label shown on hover or focus, built on the Base UI tooltip primitive.", "dependencies": [ "@base-ui/react", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json" ], "files": [ { "path": "src/components/tooltip.tsx", "type": "registry:ui", "target": "components/tooltip.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "main-nav", "type": "registry:ui", "title": "Main Navigation", "description": "The full-width NSW site navigation bar with mega-menu panels, current-page marking and 13 token-based surface colours, built on the navigation-menu component.", "dependencies": [ "@base-ui/react", "class-variance-authority", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/link.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/components/main-nav.tsx", "type": "registry:ui", "target": "components/main-nav.tsx" }, { "path": "src/components/navigation-menu.tsx", "type": "registry:ui", "target": "components/navigation-menu.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "side-nav", "type": "registry:ui", "title": "Side Navigation", "description": "Vertical section navigation with arbitrary collapsible nesting, current-page marking and auto-expansion of the active branch.", "dependencies": [ "class-variance-authority", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/collapsible.json", "https://ui.digital.nsw.gov.au/registry/r/link.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/components/side-nav.tsx", "type": "registry:ui", "target": "components/side-nav.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "step-indicator", "type": "registry:ui", "title": "Step Indicator", "description": "Ordered multi-step progress list with status markers (completed, saved, in progress, error, cannot start) and an aria-current step, plus a sectioned StepNav wrapper.", "dependencies": [ "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/link.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/components/step-indicator.tsx", "type": "registry:ui", "target": "components/step-indicator.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "expandable-search", "type": "registry:ui", "title": "Expandable Search", "description": "A 48px search button that expands into a text field on focus, with ink-derived surface colours matching the footer palette.", "dependencies": [ "class-variance-authority", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/components/expandable-search.tsx", "type": "registry:ui", "target": "components/expandable-search.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "theme-switcher", "type": "registry:ui", "title": "Theme Switcher", "description": "Light/dark toggle button with controlled and uncontrolled modes — framework-free, wire it to next-themes or any theme store.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/components/theme-switcher.tsx", "type": "registry:ui", "target": "components/theme-switcher.tsx" } ] }, { "name": "push-menu", "type": "registry:ui", "title": "Push Menu", "description": "Multi-level drill-down navigation menu with slide transitions, focus management and inert parked levels, for mobile drawers.", "dependencies": [ "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/link.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/components/push-menu.tsx", "type": "registry:ui", "target": "components/push-menu.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "site-search", "type": "registry:ui", "title": "Site Search", "description": "Cmd/Ctrl-K site search palette on the Base UI autocomplete and dialog primitives — grouped results, keyboard filtering and an onSelect callback for framework routing.", "dependencies": [ "@base-ui/react", "clsx", "tailwind-merge" ], "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/components/site-search.tsx", "type": "registry:ui", "target": "components/site-search.tsx" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "lib/utils.ts" } ] }, { "name": "login-form", "type": "registry:block", "title": "Login Form", "description": "A login form worked example (Card + Field + Input + Button) wired with NSWDS components. Copy-and-adapt block — not a published component.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/card.json", "https://ui.digital.nsw.gov.au/registry/r/field.json", "https://ui.digital.nsw.gov.au/registry/r/input.json", "https://ui.digital.nsw.gov.au/registry/r/labeled-separator.json", "https://ui.digital.nsw.gov.au/registry/r/link.json", "https://ui.digital.nsw.gov.au/registry/r/separator.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/patterns/login-form.tsx", "type": "registry:component", "target": "components/login-form.tsx" } ] }, { "name": "sign-up-form", "type": "registry:block", "title": "Sign-up Form", "description": "A sign-up form worked example (Card + Field + Input + Button) wired with NSWDS components. Copy-and-adapt block — not a published component.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/card.json", "https://ui.digital.nsw.gov.au/registry/r/field.json", "https://ui.digital.nsw.gov.au/registry/r/input.json", "https://ui.digital.nsw.gov.au/registry/r/labeled-separator.json", "https://ui.digital.nsw.gov.au/registry/r/link.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/patterns/sign-up-form.tsx", "type": "registry:component", "target": "components/sign-up-form.tsx" } ] }, { "name": "forgot-password-form", "type": "registry:block", "title": "Forgot Password Form", "description": "A forgot-password form worked example (Card + Field + Input + Button) wired with NSWDS components. Copy-and-adapt block — not a published component.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/card.json", "https://ui.digital.nsw.gov.au/registry/r/field.json", "https://ui.digital.nsw.gov.au/registry/r/input.json", "https://ui.digital.nsw.gov.au/registry/r/link.json" ], "files": [ { "path": "src/patterns/forgot-password-form.tsx", "type": "registry:component", "target": "components/forgot-password-form.tsx" } ] }, { "name": "footer-simple-centred", "type": "registry:block", "title": "Footer — Simple Centred", "description": "Everything centred under the NSW Government logo: the smallest footer that still carries acknowledgement of Country, legal links and ownership.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/footer.json", "https://ui.digital.nsw.gov.au/registry/r/logo.json", "https://ui.digital.nsw.gov.au/registry/r/separator.json" ], "files": [ { "path": "src/patterns/footer-simple-centred.tsx", "type": "registry:component", "target": "components/footer-simple-centred.tsx" } ] }, { "name": "footer-compact", "type": "registry:block", "title": "Footer — Compact Bar", "description": "A single horizontal row of logo, links, ownership and social, for embedded tools and admin screens. Omits acknowledgement of Country by design.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/footer.json", "https://ui.digital.nsw.gov.au/registry/r/logo.json" ], "files": [ { "path": "src/patterns/footer-compact.tsx", "type": "registry:component", "target": "components/footer-compact.tsx" } ] }, { "name": "footer-sitemap", "type": "registry:block", "title": "Footer — Site Map", "description": "Four columns of links above the standard footer. The default choice for a department or agency site.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/footer.json" ], "files": [ { "path": "src/patterns/footer-sitemap.tsx", "type": "registry:component", "target": "components/footer-sitemap.tsx" } ] }, { "name": "footer-sitemap-brand", "type": "registry:block", "title": "Footer — Site Map with Brand", "description": "The NSW Government mark and a one-paragraph mission beside three link columns.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/footer.json", "https://ui.digital.nsw.gov.au/registry/r/logo.json" ], "files": [ { "path": "src/patterns/footer-sitemap-brand.tsx", "type": "registry:component", "target": "components/footer-sitemap-brand.tsx" } ] }, { "name": "footer-newsletter", "type": "registry:block", "title": "Footer — Newsletter", "description": "Link columns beside a labelled email subscription form built on Field, Input and Button.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/footer.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/field.json", "https://ui.digital.nsw.gov.au/registry/r/input.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/patterns/footer-newsletter.tsx", "type": "registry:component", "target": "components/footer-newsletter.tsx" } ] }, { "name": "footer-contact", "type": "registry:block", "title": "Footer — Contact Details", "description": "Phone, email, street address and opening hours in an
element, beside the site map.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/footer.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/patterns/footer-contact.tsx", "type": "registry:component", "target": "components/footer-contact.tsx" } ] }, { "name": "footer-cta", "type": "registry:block", "title": "Footer — Call to Action", "description": "A call-to-action band above the site map, tinted with the footer ink so it works on every surface colour.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/footer.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/patterns/footer-cta.tsx", "type": "registry:component", "target": "components/footer-cta.tsx" } ] }, { "name": "footer-accordion", "type": "registry:block", "title": "Footer — Collapsible Site Map", "description": "A long site map that collapses into accordions below the lg breakpoint and lays out as columns above it.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/footer.json", "https://ui.digital.nsw.gov.au/registry/r/collapsible.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/patterns/footer-accordion.tsx", "type": "registry:component", "target": "components/footer-accordion.tsx" } ] }, { "name": "mobile-nav", "type": "registry:block", "title": "Mobile Navigation Drawer", "description": "Hamburger trigger opening a left-side sheet containing the multi-level push menu — the mobile navigation pattern for NSW site headers.", "registryDependencies": [ "https://ui.digital.nsw.gov.au/registry/r/theme.json", "https://ui.digital.nsw.gov.au/registry/r/button.json", "https://ui.digital.nsw.gov.au/registry/r/sheet.json", "https://ui.digital.nsw.gov.au/registry/r/push-menu.json", "https://ui.digital.nsw.gov.au/registry/r/icons.json" ], "files": [ { "path": "src/patterns/mobile-nav.tsx", "type": "registry:component", "target": "components/mobile-nav.tsx" } ] } ], "meta": { "nswdsVersion": "5.1.0" } }