{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "goodui",
  "homepage": "https://goodui.dev",
  "items": [
    {
      "name": "scheduler",
      "type": "registry:component",
      "title": "Scheduler engine",
      "description": "Drag-and-drop month/week/day scheduler with recurrence, resource lanes and free-slot search. Zero dependencies.",
      "files": [
        {
          "path": "components/slotgrid/core.ts",
          "type": "registry:lib",
          "target": "components/slotgrid/core.ts"
        },
        {
          "path": "components/slotgrid/scheduler.tsx",
          "type": "registry:component",
          "target": "components/slotgrid/scheduler.tsx"
        }
      ]
    },
    {
      "name": "sounds",
      "type": "registry:lib",
      "title": "goodui sounds",
      "description": "24 synthesized UI sounds with no audio files (tap, toggle, success, error, notify, celebrate…): Web Audio recipes, play(), useSound(), <SoundProvider> and data-sound attributes. Off until the visitor opts in.",
      "files": [
        {
          "path": "lib/sounds.ts",
          "type": "registry:lib",
          "target": "lib/goodui-sounds.ts"
        }
      ]
    },
    {
      "name": "locale",
      "type": "registry:lib",
      "title": "goodui locale",
      "description": "Set the language once and every goodui component speaks it: <GooduiLocaleProvider lang labels>, useGooduiLocale() with Intl number, date, relative and currency formatters, useLabels() and RTL direction. English and en-US without it.",
      "files": [
        {
          "path": "lib/locale.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locale.ts"
        }
      ]
    },
    {
      "name": "locale-en",
      "type": "registry:lib",
      "title": "goodui labels: English",
      "description": "English labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"en\" labels={en}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/en.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/en.ts"
        }
      ]
    },
    {
      "name": "locale-tr",
      "type": "registry:lib",
      "title": "goodui labels: Turkish",
      "description": "Turkish labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"tr\" labels={tr}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/tr.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/tr.ts"
        }
      ]
    },
    {
      "name": "locale-de",
      "type": "registry:lib",
      "title": "goodui labels: German",
      "description": "German labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"de\" labels={de}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/de.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/de.ts"
        }
      ]
    },
    {
      "name": "locale-fr",
      "type": "registry:lib",
      "title": "goodui labels: French",
      "description": "French labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"fr\" labels={fr}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/fr.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/fr.ts"
        }
      ]
    },
    {
      "name": "locale-es",
      "type": "registry:lib",
      "title": "goodui labels: Spanish",
      "description": "Spanish labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"es\" labels={es}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/es.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/es.ts"
        }
      ]
    },
    {
      "name": "locale-it",
      "type": "registry:lib",
      "title": "goodui labels: Italian",
      "description": "Italian labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"it\" labels={it}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/it.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/it.ts"
        }
      ]
    },
    {
      "name": "locale-pt-BR",
      "type": "registry:lib",
      "title": "goodui labels: Brazilian Portuguese",
      "description": "Brazilian Portuguese labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"pt-BR\" labels={pt_BR}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/pt-BR.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/pt-BR.ts"
        }
      ]
    },
    {
      "name": "locale-nl",
      "type": "registry:lib",
      "title": "goodui labels: Dutch",
      "description": "Dutch labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"nl\" labels={nl}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/nl.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/nl.ts"
        }
      ]
    },
    {
      "name": "locale-pl",
      "type": "registry:lib",
      "title": "goodui labels: Polish",
      "description": "Polish labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"pl\" labels={pl}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/pl.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/pl.ts"
        }
      ]
    },
    {
      "name": "locale-ru",
      "type": "registry:lib",
      "title": "goodui labels: Russian",
      "description": "Russian labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"ru\" labels={ru}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/ru.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/ru.ts"
        }
      ]
    },
    {
      "name": "locale-hi",
      "type": "registry:lib",
      "title": "goodui labels: Hindi",
      "description": "Hindi labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"hi\" labels={hi}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/hi.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/hi.ts"
        }
      ]
    },
    {
      "name": "locale-id",
      "type": "registry:lib",
      "title": "goodui labels: Indonesian",
      "description": "Indonesian labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"id\" labels={id}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/id.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/id.ts"
        }
      ]
    },
    {
      "name": "locale-vi",
      "type": "registry:lib",
      "title": "goodui labels: Vietnamese",
      "description": "Vietnamese labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"vi\" labels={vi}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/vi.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/vi.ts"
        }
      ]
    },
    {
      "name": "locale-th",
      "type": "registry:lib",
      "title": "goodui labels: Thai",
      "description": "Thai labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"th\" labels={th}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/th.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/th.ts"
        }
      ]
    },
    {
      "name": "locale-ja",
      "type": "registry:lib",
      "title": "goodui labels: Japanese",
      "description": "Japanese labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"ja\" labels={ja}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/ja.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/ja.ts"
        }
      ]
    },
    {
      "name": "locale-ko",
      "type": "registry:lib",
      "title": "goodui labels: Korean",
      "description": "Korean labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"ko\" labels={ko}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/ko.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/ko.ts"
        }
      ]
    },
    {
      "name": "locale-zh-CN",
      "type": "registry:lib",
      "title": "goodui labels: Simplified Chinese",
      "description": "Simplified Chinese labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"zh-CN\" labels={zh_CN}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/zh-CN.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/zh-CN.ts"
        }
      ]
    },
    {
      "name": "locale-ar",
      "type": "registry:lib",
      "title": "goodui labels: Arabic",
      "description": "Arabic labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"ar\" labels={ar}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/ar.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/ar.ts"
        }
      ]
    },
    {
      "name": "locale-he",
      "type": "registry:lib",
      "title": "goodui labels: Hebrew",
      "description": "Hebrew labels for every goodui component (aria-labels, screen-reader text, built-in button text). Pass it to <GooduiLocaleProvider lang=\"he\" labels={he}>.",
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "lib/locales/he.ts",
          "type": "registry:lib",
          "target": "lib/goodui-locales/he.ts"
        }
      ]
    },
    {
      "name": "scheduler-week",
      "type": "registry:block",
      "title": "Week scheduler",
      "description": "Drag-and-drop week calendar with resize, drag-to-create and recurring events.",
      "categories": [
        "scheduling"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/scheduler.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "registry/blocks/scheduling/scheduler-week.tsx",
          "type": "registry:component",
          "target": "components/goodui/scheduler-week.tsx"
        }
      ]
    },
    {
      "name": "resource-timeline",
      "type": "registry:block",
      "title": "Resource timeline",
      "description": "Staff or rooms as rows on a day timeline with drag, resize, conflicts and click-to-book. FullCalendar charges $480 for this view. Here it is free.",
      "categories": [
        "scheduling"
      ],
      "registryDependencies": [
        "avatar",
        "badge",
        "button",
        "card",
        "dialog",
        "https://goodui.dev/r/scheduler.json",
        "input",
        "label"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/scheduling/resource-timeline.tsx",
          "type": "registry:component",
          "target": "components/goodui/resource-timeline.tsx"
        }
      ]
    },
    {
      "name": "slot-picker",
      "type": "registry:block",
      "title": "Slot picker",
      "description": "Calendly-style date and time slot picker with availability and time zone.",
      "categories": [
        "scheduling"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "calendar",
        "card",
        "separator"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/scheduling/slot-picker.tsx",
          "type": "registry:component",
          "target": "components/goodui/slot-picker.tsx"
        }
      ]
    },
    {
      "name": "today-schedule",
      "type": "registry:block",
      "title": "Today's schedule",
      "description": "Dashboard card with the next appointments and a live progress line.",
      "categories": [
        "scheduling"
      ],
      "registryDependencies": [
        "avatar",
        "badge",
        "button",
        "card"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/scheduling/today-schedule.tsx",
          "type": "registry:component",
          "target": "components/goodui/today-schedule.tsx"
        }
      ]
    },
    {
      "name": "kpi-cards",
      "type": "registry:block",
      "title": "KPI cards",
      "description": "Four metric cards with trend badges and comparison to last period.",
      "categories": [
        "dashboard"
      ],
      "registryDependencies": [
        "card"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/dashboard/kpi-cards.tsx",
          "type": "registry:component",
          "target": "components/goodui/kpi-cards.tsx"
        }
      ]
    },
    {
      "name": "notification-settings",
      "type": "registry:block",
      "title": "Notification settings",
      "description": "Per-channel notification preferences grouped by topic.",
      "categories": [
        "settings"
      ],
      "registryDependencies": [
        "button",
        "card",
        "checkbox",
        "label",
        "switch"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/settings/notification-settings.tsx",
          "type": "registry:component",
          "target": "components/goodui/notification-settings.tsx"
        }
      ]
    },
    {
      "name": "sign-in-split",
      "type": "registry:block",
      "title": "Split sign-in",
      "description": "Brand-forward sign-in with a live product mock, rotating testimonials, social login and polished error, reset and success states.",
      "categories": [
        "auth"
      ],
      "registryDependencies": [
        "button",
        "checkbox",
        "input",
        "label"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/auth/sign-in-split.tsx",
          "type": "registry:component",
          "target": "components/goodui/sign-in-split.tsx"
        }
      ]
    },
    {
      "name": "otp-verify",
      "type": "registry:block",
      "title": "OTP verification",
      "description": "6-digit email code screen that submits by itself, shakes on a wrong code, counts down to resend and lets users change their email.",
      "categories": [
        "auth"
      ],
      "registryDependencies": [
        "button",
        "input",
        "input-otp",
        "label"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/auth/otp-verify.tsx",
          "type": "registry:component",
          "target": "components/goodui/otp-verify.tsx"
        }
      ]
    },
    {
      "name": "setup-checklist",
      "type": "registry:block",
      "title": "Setup checklist",
      "description": "Getting-started card with a progress ring, expandable one-click steps, skip and undo, and a confetti finish that gets new accounts to their first booking.",
      "categories": [
        "onboarding"
      ],
      "registryDependencies": [
        "badge",
        "button"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/onboarding/setup-checklist.tsx",
          "type": "registry:component",
          "target": "components/goodui/setup-checklist.tsx"
        }
      ]
    },
    {
      "name": "empty-states",
      "type": "registry:block",
      "title": "Empty states",
      "description": "Four illustrated empty states (no bookings, no results, offline, no access), each with a primary action that works.",
      "categories": [
        "onboarding"
      ],
      "registryDependencies": [
        "avatar",
        "badge",
        "button",
        "input",
        "textarea"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/onboarding/empty-states.tsx",
          "type": "registry:component",
          "target": "components/goodui/empty-states.tsx"
        }
      ]
    },
    {
      "name": "contacts-directory",
      "type": "registry:block",
      "title": "Contacts directory",
      "description": "Client directory with search, A–Z jump rail, favorites, grid and list views, and a detail sheet with editable tags and notes.",
      "categories": [
        "tables"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "input",
        "label",
        "sheet",
        "textarea"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/tables/contacts-directory.tsx",
          "type": "registry:component",
          "target": "components/goodui/contacts-directory.tsx"
        }
      ]
    },
    {
      "name": "usage-meters",
      "type": "registry:block",
      "title": "Usage meters",
      "description": "Gauges for bookings, SMS credits, seats and storage that warn near the limit, forecast usage and top up through a live-priced dialog.",
      "categories": [
        "billing"
      ],
      "registryDependencies": [
        "button",
        "dialog",
        "input",
        "label",
        "switch"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/billing/usage-meters.tsx",
          "type": "registry:component",
          "target": "components/goodui/usage-meters.tsx"
        }
      ]
    },
    {
      "name": "activity-feed",
      "type": "registry:block",
      "title": "Activity feed",
      "description": "Color-coded team timeline of bookings, payments, notes, status changes and uploads, with type filters and load more.",
      "categories": [
        "notifications"
      ],
      "registryDependencies": [
        "avatar",
        "button"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/notifications/activity-feed.tsx",
          "type": "registry:component",
          "target": "components/goodui/activity-feed.tsx"
        }
      ]
    },
    {
      "name": "whats-new",
      "type": "registry:block",
      "title": "What's new",
      "description": "Changelog launcher with an unread badge that opens illustrated release slides and a full changelog view.",
      "categories": [
        "notifications"
      ],
      "registryDependencies": [
        "button",
        "checkbox",
        "dialog",
        "label"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/notifications/whats-new.tsx",
          "type": "registry:component",
          "target": "components/goodui/whats-new.tsx"
        }
      ]
    },
    {
      "name": "prompt-composer",
      "type": "registry:block",
      "title": "Prompt composer",
      "description": "Rich prompt input with slash commands, file attachments, model picker, token counter and a history of sent prompts.",
      "categories": [
        "ai"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/ai/prompt-composer.tsx",
          "type": "registry:component",
          "target": "components/goodui/prompt-composer.tsx"
        }
      ]
    },
    {
      "name": "profile-settings",
      "type": "registry:block",
      "title": "Profile settings",
      "description": "Cover-art profile card with avatar upload, live handle availability check, time zone and locale pickers with a format preview, and a sticky unsaved-changes bar.",
      "categories": [
        "settings"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/input.json",
        "https://goodui.dev/r/select.json",
        "label",
        "textarea"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/settings/profile-settings.tsx",
          "type": "registry:component",
          "target": "components/goodui/profile-settings.tsx"
        }
      ]
    },
    {
      "name": "localization-settings",
      "type": "registry:block",
      "title": "Localization settings",
      "description": "Languages table with completion bars, publish and default controls, auto-translate progress, an add-language dialog and a booking-page preview that flips to RTL.",
      "categories": [
        "settings"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/badge.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/dialog.json",
        "https://goodui.dev/r/dropdown-menu.json",
        "https://goodui.dev/r/select.json",
        "https://goodui.dev/r/switch.json",
        "label"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/settings/localization-settings.tsx",
          "type": "registry:component",
          "target": "components/goodui/localization-settings.tsx"
        }
      ]
    },
    {
      "name": "password-reset",
      "type": "registry:block",
      "title": "Password reset",
      "description": "Three-step reset flow on one card: request by email, 6-digit code with resend cooldown, then a new password with live rules, ending on an animated success.",
      "categories": [
        "auth"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/input.json",
        "https://goodui.dev/r/otp-input.json",
        "https://goodui.dev/r/success-check.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/auth/password-reset.tsx",
          "type": "registry:component",
          "target": "components/goodui/password-reset.tsx"
        }
      ]
    },
    {
      "name": "magic-link-sent",
      "type": "registry:block",
      "title": "Magic link sent",
      "description": "Check-your-inbox screen with an animated envelope, one-click mail app buttons, a resend countdown ring, inline email edit, expiry timer and a code fallback.",
      "categories": [
        "auth"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/circular-progress.json",
        "https://goodui.dev/r/input.json",
        "https://goodui.dev/r/otp-input.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/auth/magic-link-sent.tsx",
          "type": "registry:component",
          "target": "components/goodui/magic-link-sent.tsx"
        }
      ]
    },
    {
      "name": "usage-alerts",
      "type": "registry:block",
      "title": "Usage alerts",
      "description": "Metered usage bars with forecast overlays and threshold markers, alert rules with channels and toggles, a new-rule dialog and a simulate-a-day button that fires alerts.",
      "categories": [
        "billing"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/alert.json",
        "https://goodui.dev/r/badge.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/dialog.json",
        "https://goodui.dev/r/number-flow.json",
        "https://goodui.dev/r/number-input.json",
        "https://goodui.dev/r/select.json",
        "https://goodui.dev/r/switch.json",
        "https://goodui.dev/r/toggle-group.json",
        "label"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/billing/usage-alerts.tsx",
          "type": "registry:component",
          "target": "components/goodui/usage-alerts.tsx"
        }
      ]
    },
    {
      "name": "activity-heatmap",
      "type": "registry:block",
      "title": "Activity heatmap",
      "description": "GitHub-style calendar heatmap of a year of bookings with tooltips, bookings or revenue metric, 12-month or 90-day range, streak cards, best hours bars and best weekdays.",
      "categories": [
        "dashboard"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/number-flow.json",
        "https://goodui.dev/r/tooltip.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/dashboard/activity-heatmap.tsx",
          "type": "registry:component",
          "target": "components/goodui/activity-heatmap.tsx"
        }
      ]
    },
    {
      "name": "approvals-queue",
      "type": "registry:block",
      "title": "Approvals queue",
      "description": "Approval inbox for time off, refunds, discounts and schedule changes with approve, reject with a required reason, j/k/a/r keyboard navigation, a done tab and undo.",
      "categories": [
        "tables"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/avatar.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/kbd.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/tables/approvals-queue.tsx",
          "type": "registry:component",
          "target": "components/goodui/approvals-queue.tsx"
        }
      ]
    },
    {
      "name": "page-header-actions",
      "type": "registry:block",
      "title": "Page header actions",
      "description": "Page header patterns in one scrolling page: breadcrumb, avatar, inline rename, status badge, primary and overflow actions, tabs with counts, filter chips, a delete confirmation, and a sticky header that compacts on scroll.",
      "categories": [
        "app-shell"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/avatar.json",
        "https://goodui.dev/r/breadcrumb.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/dropdown-menu.json",
        "https://goodui.dev/r/tabs.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/app-shell/page-header-actions.tsx",
          "type": "registry:component",
          "target": "components/goodui/page-header-actions.tsx"
        }
      ]
    },
    {
      "name": "day-agenda",
      "type": "registry:block",
      "title": "Day agenda",
      "description": "Timeline agenda with a moving current-time line, now/next cards, overlapping bookings packed into columns, and drag-to-resize that snaps to 15 minutes (Shift+arrows on the keyboard).",
      "categories": [
        "scheduling"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/avatar.json",
        "https://goodui.dev/r/button.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/scheduling/day-agenda.tsx",
          "type": "registry:component",
          "target": "components/goodui/day-agenda.tsx"
        }
      ]
    },
    {
      "name": "waitlist-manager",
      "type": "registry:block",
      "title": "Waitlist manager",
      "description": "Waitlist with priority reordering, open slots to offer, a 15-minute countdown on each offer, simulated accept/decline, auto-release of expired offers and a next-up card.",
      "categories": [
        "scheduling"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/avatar.json",
        "https://goodui.dev/r/button.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/scheduling/waitlist-manager.tsx",
          "type": "registry:component",
          "target": "components/goodui/waitlist-manager.tsx"
        }
      ]
    },
    {
      "name": "hero-product-shot",
      "type": "registry:block",
      "title": "Hero with product shot",
      "description": "Centered hero over a dot grid with a tilting, parallax product mock that goes live on click (numbers roll, chart grows, floating booking toast), avatar trust row and a trial dialog with email validation and an inbox success state.",
      "categories": [
        "marketing"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/avatar.json",
        "https://goodui.dev/r/badge.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/dialog.json",
        "https://goodui.dev/r/dot-grid.json",
        "https://goodui.dev/r/input.json",
        "https://goodui.dev/r/number-flow.json",
        "https://goodui.dev/r/success-check.json",
        "https://goodui.dev/r/tilt-card.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing/hero-product-shot.tsx",
          "type": "registry:component",
          "target": "components/goodui/hero-product-shot.tsx"
        }
      ]
    },
    {
      "name": "logo-cloud-marquee",
      "type": "registry:block",
      "title": "Logo cloud marquee",
      "description": "Two opposing marquee rows of hand-drawn customer marks with edge fades, pause on hover, a play/pause control and tappable logos that reveal who the customer is.",
      "categories": [
        "marketing"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/counter-up.json",
        "https://goodui.dev/r/marquee.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing/logo-cloud-marquee.tsx",
          "type": "registry:component",
          "target": "components/goodui/logo-cloud-marquee.tsx"
        }
      ]
    },
    {
      "name": "faq-accordion",
      "type": "registry:block",
      "title": "FAQ accordion",
      "description": "Height-animated FAQ with a sticky sidebar of topic filters with counts, search that highlights matches inside questions, expand/collapse all and an ask-a-question fallback for empty results.",
      "categories": [
        "marketing"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/accordion-height.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/input.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing/faq-accordion.tsx",
          "type": "registry:component",
          "target": "components/goodui/faq-accordion.tsx"
        }
      ]
    },
    {
      "name": "stats-band",
      "type": "registry:block",
      "title": "Stats band with counting numbers",
      "description": "Four big counting statistics in a split card; hovering or focusing a stat draws its yearly sparkline and updates a live caption, with a replay button.",
      "categories": [
        "marketing"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/counter-up.json",
        "https://goodui.dev/r/sparkline-draw.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing/stats-band.tsx",
          "type": "registry:component",
          "target": "components/goodui/stats-band.tsx"
        }
      ]
    },
    {
      "name": "newsletter-signup",
      "type": "registry:block",
      "title": "Newsletter signup",
      "description": "Split newsletter card with topic checkboxes, validation, a counting reader number, a success check with the chosen topics and a sidebar of recent issues you can open.",
      "categories": [
        "marketing"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/avatar.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/checkbox.json",
        "https://goodui.dev/r/counter-up.json",
        "https://goodui.dev/r/input.json",
        "https://goodui.dev/r/success-check.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/marketing/newsletter-signup.tsx",
          "type": "registry:component",
          "target": "components/goodui/newsletter-signup.tsx"
        }
      ]
    },
    {
      "name": "import-progress",
      "type": "registry:block",
      "title": "Import progress",
      "description": "Live CSV import screen with a rolling row counter, striped progress, stage checklist, just-imported feed, auto-fixed warnings with a CSV report download, pause/resume and a cancel confirmation.",
      "categories": [
        "onboarding"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/badge.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/dialog.json",
        "https://goodui.dev/r/number-flow.json",
        "https://goodui.dev/r/progress.json",
        "https://goodui.dev/r/success-check.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/onboarding/import-progress.tsx",
          "type": "registry:component",
          "target": "components/goodui/import-progress.tsx"
        }
      ]
    },
    {
      "name": "order-tracking",
      "type": "registry:block",
      "title": "Order tracking",
      "description": "Parcel tracking with a route map whose truck moves along the path as scans arrive, a timeline of stages, copyable tracking number, text-me-updates dialog, receipt download and a simulate button.",
      "categories": [
        "commerce"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/badge.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/dialog.json",
        "https://goodui.dev/r/input.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/commerce/order-tracking.tsx",
          "type": "registry:component",
          "target": "components/goodui/order-tracking.tsx"
        }
      ]
    },
    {
      "name": "client-profile",
      "type": "registry:block",
      "title": "Client profile",
      "description": "Cover-art client card with lifetime value, visits and copyable contact details, editable tags, a monthly spend chart, next-visit card, visit timeline with ratings, team notes with undo and copyable color formulas, plus book and SMS actions.",
      "categories": [
        "booking"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/avatar.json",
        "https://goodui.dev/r/badge.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/dialog.json",
        "https://goodui.dev/r/input.json",
        "https://goodui.dev/r/number-flow.json",
        "https://goodui.dev/r/rating.json",
        "https://goodui.dev/r/tabs.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/booking/client-profile.tsx",
          "type": "registry:component",
          "target": "components/goodui/client-profile.tsx"
        }
      ]
    },
    {
      "name": "gift-card-issue",
      "type": "registry:block",
      "title": "Gift card issue",
      "description": "Amount chips or custom amount, five card designs, occasion tags, recipient and delivery fields with validation, and a live 3D-flipping gift card preview that reveals the redeem code once issued, with copy, save and resend.",
      "categories": [
        "booking"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/input.json",
        "https://goodui.dev/r/number-flow.json",
        "https://goodui.dev/r/success-check.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/booking/gift-card-issue.tsx",
          "type": "registry:component",
          "target": "components/goodui/gift-card-issue.tsx"
        }
      ]
    },
    {
      "name": "consent-form",
      "type": "registry:block",
      "title": "Consent form with signature",
      "description": "Scroll-to-read consent document with a reading progress meter that unlocks the required statements, typed legal name, a draw-to-sign canvas with clear, validation and a signed-and-sealed state with a downloadable copy.",
      "categories": [
        "booking"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/checkbox.json",
        "https://goodui.dev/r/input.json",
        "https://goodui.dev/r/success-check.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/booking/consent-form.tsx",
          "type": "registry:component",
          "target": "components/goodui/consent-form.tsx"
        }
      ]
    },
    {
      "name": "prompt-library",
      "type": "registry:block",
      "title": "Prompt library",
      "description": "Folder sidebar with counts and a starred filter, searchable prompt cards with highlighted {{variables}}, tags, versions and usage, a use dialog that fills variables into a live preview with copy and send, plus new prompt and delete with undo.",
      "categories": [
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/badge.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/dialog.json",
        "https://goodui.dev/r/input.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/ai/prompt-library.tsx",
          "type": "registry:component",
          "target": "components/goodui/prompt-library.tsx"
        }
      ]
    },
    {
      "name": "fine-tune-jobs",
      "type": "registry:block",
      "title": "Fine-tune job list",
      "description": "Job list with status filters, live training progress and loss sparklines, a detail panel with an animated loss curve, metadata, deploy-to-assistant, cancel with confirmation, retry for failures and a log console, plus a new-job dialog with a cost estimate.",
      "categories": [
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/badge.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/dialog.json",
        "https://goodui.dev/r/input.json",
        "https://goodui.dev/r/number-input.json",
        "https://goodui.dev/r/progress.json",
        "https://goodui.dev/r/select.json",
        "https://goodui.dev/r/sparkline-draw.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/ai/fine-tune-jobs.tsx",
          "type": "registry:component",
          "target": "components/goodui/fine-tune-jobs.tsx"
        }
      ]
    },
    {
      "name": "schema-browser",
      "type": "registry:block",
      "title": "Schema browser",
      "description": "Searchable schema and table tree beside a table page with row counts, related-table chips, column list with primary and foreign keys that navigate, sample rows and generated DDL, each copyable.",
      "categories": [
        "tables"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/badge.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/input.json",
        "https://goodui.dev/r/tree-expand.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/tables/schema-browser.tsx",
          "type": "registry:component",
          "target": "components/goodui/schema-browser.tsx"
        }
      ]
    },
    {
      "name": "export-center",
      "type": "registry:block",
      "title": "Export center",
      "description": "Export jobs with format icons, animated progress, ready downloads that really save a file, failed and expired states with retry, delete with undo, scheduled exports with toggles and a new-export dialog with source, range, format and column picking.",
      "categories": [
        "tables"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/badge.json",
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/checkbox.json",
        "https://goodui.dev/r/dialog.json",
        "https://goodui.dev/r/progress.json",
        "https://goodui.dev/r/select.json",
        "https://goodui.dev/r/switch.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/blocks/tables/export-center.tsx",
          "type": "registry:component",
          "target": "components/goodui/export-center.tsx"
        }
      ]
    },
    {
      "name": "number-flow",
      "type": "registry:component",
      "title": "Number flow",
      "description": "Digits roll to the new value with locale formatting, prefixes and suffixes.",
      "categories": [
        "components",
        "numbers"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/numbers/number-flow.tsx",
          "type": "registry:component",
          "target": "components/goodui/number-flow.tsx"
        }
      ]
    },
    {
      "name": "shimmer-button",
      "type": "registry:component",
      "title": "Shimmer button",
      "description": "A light sweep runs across the button. Pure CSS; the sweep is removed for reduced motion.",
      "categories": [
        "components",
        "buttons"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/buttons/shimmer-button.tsx",
          "type": "registry:component",
          "target": "components/goodui/shimmer-button.tsx"
        }
      ]
    },
    {
      "name": "tabs-indicator",
      "type": "registry:component",
      "title": "Tabs indicator",
      "description": "Tabs whose indicator glides between tabs on a shared-layout spring (underline with hover highlight, pill, or segmented with icons), with arrow-key navigation and panels that slide in the direction of travel while the height eases to fit.",
      "categories": [
        "components",
        "navigation"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/navigation/tabs-indicator.tsx",
          "type": "registry:component",
          "target": "components/goodui/tabs-indicator.tsx"
        }
      ]
    },
    {
      "name": "segmented-control",
      "type": "registry:component",
      "title": "Segmented control",
      "description": "iOS-style segmented control whose thumb springs to the chosen segment and squeezes while pressed, with sizes, icons, full-width mode, dividers that hide next to the thumb, and radio-group arrow keys.",
      "categories": [
        "components",
        "navigation"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/navigation/segmented-control.tsx",
          "type": "registry:component",
          "target": "components/goodui/segmented-control.tsx"
        }
      ]
    },
    {
      "name": "stepper",
      "type": "registry:component",
      "title": "Stepper",
      "description": "Horizontal or vertical stepper where the connecting line fills between steps, numbers morph into drawn checkmarks, a current-step ring glides to the active step, errors shake, and completed steps are clickable.",
      "categories": [
        "components",
        "navigation"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/navigation/stepper.tsx",
          "type": "registry:component",
          "target": "components/goodui/stepper.tsx"
        }
      ]
    },
    {
      "name": "dock",
      "type": "registry:component",
      "title": "Dock",
      "description": "macOS-style dock whose tiles magnify on a spring as the pointer nears, with tooltips, running dots, badges and a launch bounce, falling back to a simple press scale on touch.",
      "categories": [
        "components",
        "navigation"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/navigation/dock.tsx",
          "type": "registry:component",
          "target": "components/goodui/dock.tsx"
        }
      ]
    },
    {
      "name": "bottom-nav",
      "type": "registry:component",
      "title": "Bottom navigation",
      "description": "Mobile bottom bar where a pill glides to the selected tab and its icon bounces, in a labelled or expanding variant, with popping badges and an optional raised center action.",
      "categories": [
        "components",
        "navigation"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/navigation/bottom-nav.tsx",
          "type": "registry:component",
          "target": "components/goodui/bottom-nav.tsx"
        }
      ]
    },
    {
      "name": "command-palette-morph",
      "type": "registry:component",
      "title": "Command palette morph",
      "description": "A search field morphs into a command palette through a shared layout animation, with fuzzy matching, highlighted letters, grouped results, a sliding selection, arrow keys, Enter, Esc and Ctrl/Cmd+K.",
      "categories": [
        "components",
        "navigation"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/navigation/command-palette-morph.tsx",
          "type": "registry:component",
          "target": "components/goodui/command-palette-morph.tsx"
        }
      ]
    },
    {
      "name": "morphing-dialog",
      "type": "registry:component",
      "title": "Morphing dialog",
      "description": "A service card expands into a booking dialog, with its image, title and price flying into place through a shared-layout spring, then folds back into the card on Esc or backdrop click.",
      "categories": [
        "components",
        "overlays"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/overlays/morphing-dialog.tsx",
          "type": "registry:component",
          "target": "components/goodui/morphing-dialog.tsx"
        }
      ]
    },
    {
      "name": "drawer-spring",
      "type": "registry:component",
      "title": "Spring drawer",
      "description": "A bottom sheet with half and full snap points plus side drawers on a spring; drag the handle and the release speed picks the snap point or closes it, while the backdrop fades with the drag.",
      "categories": [
        "components",
        "overlays"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/overlays/drawer-spring.tsx",
          "type": "registry:component",
          "target": "components/goodui/drawer-spring.tsx"
        }
      ]
    },
    {
      "name": "popover-morph",
      "type": "registry:component",
      "title": "Popover morph",
      "description": "A small button such as \"Add note\" morphs into a floating form panel, its label sliding into the header, and shrinks back into the button on save, Esc or an outside click.",
      "categories": [
        "components",
        "overlays"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/overlays/popover-morph.tsx",
          "type": "registry:component",
          "target": "components/goodui/popover-morph.tsx"
        }
      ]
    },
    {
      "name": "tooltip-animated",
      "type": "registry:component",
      "title": "Animated tooltip",
      "description": "A tooltip springs out of the trigger's side and can lean toward the pointer over avatars; tooltips in a delay group open instantly once one is already showing.",
      "categories": [
        "components",
        "overlays"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/overlays/tooltip-animated.tsx",
          "type": "registry:component",
          "target": "components/goodui/tooltip-animated.tsx"
        }
      ]
    },
    {
      "name": "dropdown-stagger",
      "type": "registry:component",
      "title": "Stagger dropdown",
      "description": "A dropdown menu springs open while its items stagger in, with a highlight that glides between items, submenus, checkbox and radio items, and full keyboard navigation.",
      "categories": [
        "components",
        "overlays"
      ],
      "registryDependencies": [],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/overlays/dropdown-stagger.tsx",
          "type": "registry:component",
          "target": "components/goodui/dropdown-stagger.tsx"
        }
      ]
    },
    {
      "name": "accordion-height",
      "type": "registry:component",
      "title": "Accordion height",
      "description": "Accordion whose panels spring open to their real height (motion height:auto) with a rotating chevron, in single or multiple mode, with arrow-key, Home and End navigation between headers.",
      "categories": [
        "components",
        "lists"
      ],
      "registryDependencies": [],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/lists/accordion-height.tsx",
          "type": "registry:component",
          "target": "components/goodui/accordion-height.tsx"
        }
      ]
    },
    {
      "name": "list-reorder",
      "type": "registry:component",
      "title": "List reorder",
      "description": "Drag-to-reorder list with a grip handle, a lifted shadow on the dragged row, neighbours that spring into place, and Alt+Arrow keyboard moves announced to screen readers.",
      "categories": [
        "components",
        "lists"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/lists/list-reorder.tsx",
          "type": "registry:component",
          "target": "components/goodui/list-reorder.tsx"
        }
      ]
    },
    {
      "name": "table-row-presence",
      "type": "registry:component",
      "title": "Table row presence",
      "description": "Data table where new rows grow in with a brief highlight, removed rows slide out and collapse, and re-sorting glides every row to its new position.",
      "categories": [
        "components",
        "lists"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/lists/table-row-presence.tsx",
          "type": "registry:component",
          "target": "components/goodui/table-row-presence.tsx"
        }
      ]
    },
    {
      "name": "animated-list",
      "type": "registry:component",
      "title": "Animated list",
      "description": "Notification stack where new items spring in from the top, older ones glide down, slightly dimmed in the depth variant, and items beyond the limit blur away.",
      "categories": [
        "components",
        "lists"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/lists/animated-list.tsx",
          "type": "registry:component",
          "target": "components/goodui/animated-list.tsx"
        }
      ]
    },
    {
      "name": "tree-expand",
      "type": "registry:component",
      "title": "Tree expand",
      "description": "File or category tree with spring expand/collapse, indentation guides, a selection highlight that glides between rows, and full arrow-key, Enter and type-ahead navigation.",
      "categories": [
        "components",
        "lists"
      ],
      "registryDependencies": [],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/lists/tree-expand.tsx",
          "type": "registry:component",
          "target": "components/goodui/tree-expand.tsx"
        }
      ]
    },
    {
      "name": "expandable-row-list",
      "type": "registry:component",
      "title": "Expandable row list",
      "description": "Appointment rows that open inline into a raised card with notes and working actions, while neighbouring rows smoothly make room.",
      "categories": [
        "components",
        "lists"
      ],
      "registryDependencies": [],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/lists/expandable-row-list.tsx",
          "type": "registry:component",
          "target": "components/goodui/expandable-row-list.tsx"
        }
      ]
    },
    {
      "name": "tag-input",
      "type": "registry:component",
      "title": "Tag input",
      "description": "Chips input where Enter, comma or paste adds tags that spring in, Backspace arms then removes, duplicates shake, with a filtered suggestions dropdown, validation and a max count.",
      "categories": [
        "components",
        "inputs"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/inputs/tag-input.tsx",
          "type": "registry:component",
          "target": "components/goodui/tag-input.tsx"
        }
      ]
    },
    {
      "name": "otp-input",
      "type": "registry:component",
      "title": "OTP input",
      "description": "One-time code input from plain inputs with auto-advance, paste and SMS autofill, a blinking caret and popping digits, then a pulsing verify, green success bounce or red shake.",
      "categories": [
        "components",
        "inputs"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/inputs/otp-input.tsx",
          "type": "registry:component",
          "target": "components/goodui/otp-input.tsx"
        }
      ]
    },
    {
      "name": "floating-label-input",
      "type": "registry:component",
      "title": "Floating label input",
      "description": "Input and textarea whose label springs up on focus or value, with prefix/suffix slots that fade in, an animated clear button, character counter and a slide-in error.",
      "categories": [
        "components",
        "inputs"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/inputs/floating-label-input.tsx",
          "type": "registry:component",
          "target": "components/goodui/floating-label-input.tsx"
        }
      ]
    },
    {
      "name": "vanish-input",
      "type": "registry:component",
      "title": "Vanish input",
      "description": "Search field with rotating, blurred-in placeholder hints; on submit the typed text dissolves into drifting particles drawn on a canvas.",
      "categories": [
        "components",
        "inputs"
      ],
      "registryDependencies": [],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/inputs/vanish-input.tsx",
          "type": "registry:component",
          "target": "components/goodui/vanish-input.tsx"
        }
      ]
    },
    {
      "name": "input-shake",
      "type": "registry:component",
      "title": "Input shake",
      "description": "Validation wrapper for any input that shakes and slides in an error with an icon when invalid, and draws a check circle when valid.",
      "categories": [
        "components",
        "inputs"
      ],
      "registryDependencies": [],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/inputs/input-shake.tsx",
          "type": "registry:component",
          "target": "components/goodui/input-shake.tsx"
        }
      ]
    },
    {
      "name": "switch-spring",
      "type": "registry:component",
      "title": "Spring switch",
      "description": "Switch with a springy thumb that squashes while pressed, icons that spin inside the thumb, three sizes, label and description.",
      "categories": [
        "components",
        "inputs"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/inputs/switch-spring.tsx",
          "type": "registry:component",
          "target": "components/goodui/switch-spring.tsx"
        }
      ]
    },
    {
      "name": "checkbox-draw",
      "type": "registry:component",
      "title": "Drawn checkbox",
      "description": "Checkbox whose check stroke draws itself in over a popping fill, with an indeterminate dash and an animated strike-through for checklists.",
      "categories": [
        "components",
        "inputs"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/inputs/checkbox-draw.tsx",
          "type": "registry:component",
          "target": "components/goodui/checkbox-draw.tsx"
        }
      ]
    },
    {
      "name": "slider-tooltip",
      "type": "registry:component",
      "title": "Slider with tooltip",
      "description": "Single or range slider built from scratch with pointer and keyboard control, step snapping, marks and a value bubble that scales in while dragging.",
      "categories": [
        "components",
        "inputs"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/inputs/slider-tooltip.tsx",
          "type": "registry:component",
          "target": "components/goodui/slider-tooltip.tsx"
        }
      ]
    },
    {
      "name": "search-expand",
      "type": "registry:component",
      "title": "Expanding search",
      "description": "Search icon that springs open into a field with a recent-searches dropdown and a / shortcut; Esc or blur folds it back when empty.",
      "categories": [
        "components",
        "inputs"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/inputs/search-expand.tsx",
          "type": "registry:component",
          "target": "components/goodui/search-expand.tsx"
        }
      ]
    },
    {
      "name": "file-drop-pulse",
      "type": "registry:component",
      "title": "File drop zone",
      "description": "Drag-and-drop zone whose border pulses while files hover, then lists files with type icons, springy progress bars, size and type errors, and undo on remove.",
      "categories": [
        "components",
        "inputs"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/inputs/file-drop-pulse.tsx",
          "type": "registry:component",
          "target": "components/goodui/file-drop-pulse.tsx"
        }
      ]
    },
    {
      "name": "ripple-button",
      "type": "registry:component",
      "title": "Ripple button",
      "description": "Material-style ink ripple that grows from the exact press point and fades on release, pure CSS, across five variants and icon buttons.",
      "categories": [
        "components",
        "buttons"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/buttons/ripple-button.tsx",
          "type": "registry:component",
          "target": "components/goodui/ripple-button.tsx"
        }
      ]
    },
    {
      "name": "rainbow-button",
      "type": "registry:component",
      "title": "Rainbow button",
      "description": "Button with a seamlessly flowing rainbow border and a soft colored glow underneath, tuned to invert cleanly between light and dark themes.",
      "categories": [
        "components",
        "buttons"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/buttons/rainbow-button.tsx",
          "type": "registry:component",
          "target": "components/goodui/rainbow-button.tsx"
        }
      ]
    },
    {
      "name": "border-beam-button",
      "type": "registry:component",
      "title": "Border beam button",
      "description": "A short light beam rides around the button's rounded border with CSS offset-path, with a conic fallback and a static gradient for reduced motion.",
      "categories": [
        "components",
        "buttons"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/buttons/border-beam-button.tsx",
          "type": "registry:component",
          "target": "components/goodui/border-beam-button.tsx"
        }
      ]
    },
    {
      "name": "magnetic-button",
      "type": "registry:component",
      "title": "Magnetic button",
      "description": "Button and its label are pulled toward a nearby cursor with a smooth falloff and spring back on leave; off for touch and reduced motion.",
      "categories": [
        "components",
        "buttons"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/buttons/magnetic-button.tsx",
          "type": "registry:component",
          "target": "components/goodui/magnetic-button.tsx"
        }
      ]
    },
    {
      "name": "stateful-button",
      "type": "registry:component",
      "title": "Stateful button",
      "description": "Async button that morphs idle to spinner to drawn check or shaking error, with a spring width change between labels.",
      "categories": [
        "components",
        "buttons"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/buttons/stateful-button.tsx",
          "type": "registry:component",
          "target": "components/goodui/stateful-button.tsx"
        }
      ]
    },
    {
      "name": "copy-button",
      "type": "registry:component",
      "title": "Copy button",
      "description": "Copy-to-clipboard button whose icon blurs from copy into a drawn check with a popping Copied! tooltip, plus a fallback when the Clipboard API is blocked.",
      "categories": [
        "components",
        "buttons"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/buttons/copy-button.tsx",
          "type": "registry:component",
          "target": "components/goodui/copy-button.tsx"
        }
      ]
    },
    {
      "name": "hold-to-confirm",
      "type": "registry:component",
      "title": "Hold to confirm",
      "description": "Press-and-hold button for destructive actions: a fill sweeps across with the label flipping color at its edge, early release rewinds it, works with Space and Enter.",
      "categories": [
        "components",
        "buttons"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/buttons/hold-to-confirm.tsx",
          "type": "registry:component",
          "target": "components/goodui/hold-to-confirm.tsx"
        }
      ]
    },
    {
      "name": "liquid-glass-button",
      "type": "registry:component",
      "title": "Liquid glass button",
      "description": "Frosted glass button and pill toolbar with backdrop blur, rim light and a specular highlight that follows the pointer, falling back to a solid tint without backdrop-filter.",
      "categories": [
        "components",
        "buttons"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/buttons/liquid-glass-button.tsx",
          "type": "registry:component",
          "target": "components/goodui/liquid-glass-button.tsx"
        }
      ]
    },
    {
      "name": "theme-toggle",
      "type": "registry:component",
      "title": "Theme toggle",
      "description": "Light/dark toggle that reveals the new theme as a circle from the click point with the View Transitions API while the sun morphs into a moon.",
      "categories": [
        "components",
        "buttons"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/buttons/theme-toggle.tsx",
          "type": "registry:component",
          "target": "components/goodui/theme-toggle.tsx"
        }
      ]
    },
    {
      "name": "text-reveal",
      "type": "registry:component",
      "title": "Text reveal",
      "description": "Reveals a heading word by word or letter by letter with a staggered blur, fade and rise when it scrolls into view or on demand.",
      "categories": [
        "components",
        "text"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/text/text-reveal.tsx",
          "type": "registry:component",
          "target": "components/goodui/text-reveal.tsx"
        }
      ]
    },
    {
      "name": "typewriter",
      "type": "registry:component",
      "title": "Typewriter",
      "description": "Types and deletes a list of phrases with a human rhythm and a caret that only blinks while idle; works as an animated input placeholder.",
      "categories": [
        "components",
        "text"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/text/typewriter.tsx",
          "type": "registry:component",
          "target": "components/goodui/typewriter.tsx"
        }
      ]
    },
    {
      "name": "word-rotate",
      "type": "registry:component",
      "title": "Word rotate",
      "description": "Swaps words in place with a vertical slide and blur while the box springs to each word's width, so the sentence glides instead of jumping.",
      "categories": [
        "components",
        "text"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/text/word-rotate.tsx",
          "type": "registry:component",
          "target": "components/goodui/word-rotate.tsx"
        }
      ]
    },
    {
      "name": "shiny-text",
      "type": "registry:component",
      "title": "Shiny text",
      "description": "A soft light band sweeps across muted text on a loop or on hover, made for badges like \"New: AI receptionist\". Pure CSS.",
      "categories": [
        "components",
        "text"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/text/shiny-text.tsx",
          "type": "registry:component",
          "target": "components/goodui/shiny-text.tsx"
        }
      ]
    },
    {
      "name": "gradient-text",
      "type": "registry:component",
      "title": "Gradient text",
      "description": "Text filled with a slowly drifting multi-stop gradient, with Aurora, Sunset, Ocean and theme palettes tuned separately for light and dark.",
      "categories": [
        "components",
        "text"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/text/gradient-text.tsx",
          "type": "registry:component",
          "target": "components/goodui/gradient-text.tsx"
        }
      ]
    },
    {
      "name": "scramble-text",
      "type": "registry:component",
      "title": "Scramble text",
      "description": "Text scrambles through random glyphs and resolves left to right on mount, on view, on hover or on demand; renders the real text on the server.",
      "categories": [
        "components",
        "text"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/text/scramble-text.tsx",
          "type": "registry:component",
          "target": "components/goodui/scramble-text.tsx"
        }
      ]
    },
    {
      "name": "highlighter",
      "type": "registry:component",
      "title": "Highlighter",
      "description": "Draws a marker highlight, hand-drawn underline, circle, box or strike-through behind a phrase when it scrolls into view, in six colors.",
      "categories": [
        "components",
        "text"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/text/highlighter.tsx",
          "type": "registry:component",
          "target": "components/goodui/highlighter.tsx"
        }
      ]
    },
    {
      "name": "text-morph",
      "type": "registry:component",
      "title": "Text morph",
      "description": "Morphs between strings letter by letter: shared characters spring to their new positions while the rest blur in and out.",
      "categories": [
        "components",
        "text"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/text/text-morph.tsx",
          "type": "registry:component",
          "target": "components/goodui/text-morph.tsx"
        }
      ]
    },
    {
      "name": "scroll-velocity",
      "type": "registry:component",
      "title": "Scroll velocity",
      "description": "Rows of large text drift in opposite directions and speed up or flip with your scroll speed and direction.",
      "categories": [
        "components",
        "text"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/text/scroll-velocity.tsx",
          "type": "registry:component",
          "target": "components/goodui/scroll-velocity.tsx"
        }
      ]
    },
    {
      "name": "spotlight-card",
      "type": "registry:component",
      "title": "Spotlight card",
      "description": "A soft spotlight and a lit border follow the pointer across a card; in a group, neighboring cards' borders light up too.",
      "categories": [
        "components",
        "cards"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/cards/spotlight-card.tsx",
          "type": "registry:component",
          "target": "components/goodui/spotlight-card.tsx"
        }
      ]
    },
    {
      "name": "tilt-card",
      "type": "registry:component",
      "title": "Tilt card",
      "description": "Tilts toward the pointer on a spring with a moving glare, a shifting shadow and layers that float at their own depth.",
      "categories": [
        "components",
        "cards"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/cards/tilt-card.tsx",
          "type": "registry:component",
          "target": "components/goodui/tilt-card.tsx"
        }
      ]
    },
    {
      "name": "border-beam",
      "type": "registry:component",
      "title": "Border beam",
      "description": "Wraps any card or input and runs a light beam around its border, matching the element's corner radius automatically.",
      "categories": [
        "components",
        "cards"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/cards/border-beam.tsx",
          "type": "registry:component",
          "target": "components/goodui/border-beam.tsx"
        }
      ]
    },
    {
      "name": "glow-border",
      "type": "registry:component",
      "title": "Glow border",
      "description": "A slowly rotating gradient arc travels around the card border with a soft glow that intensifies on hover and focus.",
      "categories": [
        "components",
        "cards"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/cards/glow-border.tsx",
          "type": "registry:component",
          "target": "components/goodui/glow-border.tsx"
        }
      ]
    },
    {
      "name": "progressive-blur",
      "type": "registry:component",
      "title": "Progressive blur",
      "description": "Blur that grows stronger toward the edge of a scroll container, built from stacked backdrop-filter layers; shown on a scrolling bookings list.",
      "categories": [
        "components",
        "cards"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/cards/progressive-blur.tsx",
          "type": "registry:component",
          "target": "components/goodui/progressive-blur.tsx"
        }
      ]
    },
    {
      "name": "expandable-card",
      "type": "registry:component",
      "title": "Expandable card",
      "description": "A card expands in place on a spring to reveal details, such as a staff profile with bookable slots or a plan's full feature list.",
      "categories": [
        "components",
        "cards"
      ],
      "registryDependencies": [],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/cards/expandable-card.tsx",
          "type": "registry:component",
          "target": "components/goodui/expandable-card.tsx"
        }
      ]
    },
    {
      "name": "dot-grid",
      "type": "registry:component",
      "title": "Dot grid",
      "description": "A dot or line grid background with a radial, top or edge fade and an optional glow that follows the pointer. Pure CSS.",
      "categories": [
        "components",
        "backgrounds"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/backgrounds/dot-grid.tsx",
          "type": "registry:component",
          "target": "components/goodui/dot-grid.tsx"
        }
      ]
    },
    {
      "name": "flickering-grid",
      "type": "registry:component",
      "title": "Flickering grid",
      "description": "A canvas grid of small squares that flicker in opacity, follows the theme color, is sharp on retina and pauses off-screen.",
      "categories": [
        "components",
        "backgrounds"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/backgrounds/flickering-grid.tsx",
          "type": "registry:component",
          "target": "components/goodui/flickering-grid.tsx"
        }
      ]
    },
    {
      "name": "aurora",
      "type": "registry:component",
      "title": "Aurora",
      "description": "Soft colored light drifts slowly behind a section, with light and dark palettes and only transform animations for low CPU.",
      "categories": [
        "components",
        "backgrounds"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/backgrounds/aurora.tsx",
          "type": "registry:component",
          "target": "components/goodui/aurora.tsx"
        }
      ]
    },
    {
      "name": "particles",
      "type": "registry:component",
      "title": "Particles",
      "description": "Canvas particles drift gently, link up with fine lines and move out of the pointer's way; density scales with the area.",
      "categories": [
        "components",
        "backgrounds"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/backgrounds/particles.tsx",
          "type": "registry:component",
          "target": "components/goodui/particles.tsx"
        }
      ]
    },
    {
      "name": "marquee",
      "type": "registry:component",
      "title": "Marquee",
      "description": "An endless horizontal or vertical marquee with faded edges that pauses on hover, shown with customer logos, testimonials and a live bookings ticker.",
      "categories": [
        "components",
        "backgrounds"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/backgrounds/marquee.tsx",
          "type": "registry:component",
          "target": "components/goodui/marquee.tsx"
        }
      ]
    },
    {
      "name": "counter-up",
      "type": "registry:component",
      "title": "Counter up",
      "description": "Counts from 0 (or from) to the value with an ease-out curve when it scrolls into view, with locale formatting, once or replay-on-return, and counts from the current value when it changes.",
      "categories": [
        "components",
        "numbers"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/numbers/counter-up.tsx",
          "type": "registry:component",
          "target": "components/goodui/counter-up.tsx"
        }
      ]
    },
    {
      "name": "meter",
      "type": "registry:component",
      "title": "Usage meter",
      "description": "Labeled usage meter like \"SMS credits 7,420 / 10,000\" whose fill springs to the new value and shifts to amber and rose near the limit, with optional per-seat segments.",
      "categories": [
        "components",
        "numbers"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/number-flow.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/numbers/meter.tsx",
          "type": "registry:component",
          "target": "components/goodui/meter.tsx"
        }
      ]
    },
    {
      "name": "progress",
      "type": "registry:component",
      "title": "Progress",
      "description": "Linear progress in four variants: spring-filled determinate, indeterminate double sweep, moving stripes and segmented steps.",
      "categories": [
        "components",
        "numbers"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/numbers/progress.tsx",
          "type": "registry:component",
          "target": "components/goodui/progress.tsx"
        }
      ]
    },
    {
      "name": "circular-progress",
      "type": "registry:component",
      "title": "Circular progress",
      "description": "SVG ring or 270° gauge whose arc springs to the value via stroke-dashoffset, with a rolling percentage or custom label in the center.",
      "categories": [
        "components",
        "numbers"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/number-flow.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/numbers/circular-progress.tsx",
          "type": "registry:component",
          "target": "components/goodui/circular-progress.tsx"
        }
      ]
    },
    {
      "name": "sparkline-draw",
      "type": "registry:component",
      "title": "Sparkline draw",
      "description": "Smooth monotone sparkline that draws itself in, fades in a gradient area, shows point values on hover or arrow keys, and redraws when the data changes.",
      "categories": [
        "components",
        "numbers"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/numbers/sparkline-draw.tsx",
          "type": "registry:component",
          "target": "components/goodui/sparkline-draw.tsx"
        }
      ]
    },
    {
      "name": "delta-badge",
      "type": "registry:component",
      "title": "Delta badge",
      "description": "\"+12.4%\" change badge whose digits roll, arrow rotates to the new direction and background pulses green or red, with an inverted mode for metrics where down is good.",
      "categories": [
        "components",
        "numbers"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/number-flow.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/numbers/delta-badge.tsx",
          "type": "registry:component",
          "target": "components/goodui/delta-badge.tsx"
        }
      ]
    },
    {
      "name": "cell-flash",
      "type": "registry:component",
      "title": "Cell flash",
      "description": "Wraps a table value and briefly flashes it green when it rises, red when it falls, with a fading ▲/▼, like a trading terminal.",
      "categories": [
        "components",
        "numbers"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/numbers/cell-flash.tsx",
          "type": "registry:component",
          "target": "components/goodui/cell-flash.tsx"
        }
      ]
    },
    {
      "name": "toast-stack",
      "type": "registry:component",
      "title": "Toast stack",
      "description": "Self-contained toaster with toast() API: cards stack and expand on hover, swipe away with a drag, morph from loading to success or error for promises, and pause their timers on hover.",
      "categories": [
        "components",
        "feedback"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/feedback/toast-stack.tsx",
          "type": "registry:component",
          "target": "components/goodui/toast-stack.tsx"
        }
      ]
    },
    {
      "name": "notification-badge",
      "type": "registry:component",
      "title": "Notification badge",
      "description": "Count badge for icon buttons that springs in, bumps when the count rises, rolls its digits, caps at 99+ and offers a pulse ring or dot variant.",
      "categories": [
        "components",
        "feedback"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/number-flow.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/feedback/notification-badge.tsx",
          "type": "registry:component",
          "target": "components/goodui/notification-badge.tsx"
        }
      ]
    },
    {
      "name": "skeleton-auto",
      "type": "registry:component",
      "title": "Skeleton auto",
      "description": "SkeletonSwap traces its children's text lines, controls and avatars (<img> or data-skeleton elements) into shimmer blocks with one shared sweep, then cross-fades to the real content; includes line, circle and block primitives.",
      "categories": [
        "components",
        "feedback"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/feedback/skeleton-auto.tsx",
          "type": "registry:component",
          "target": "components/goodui/skeleton-auto.tsx"
        }
      ]
    },
    {
      "name": "spinners",
      "type": "registry:component",
      "title": "Spinners",
      "description": "Six CSS-only loaders (ring, dots, bars, pulse, orbit, typing) sized in px or presets and painted with currentColor.",
      "categories": [
        "components",
        "feedback"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/feedback/spinners.tsx",
          "type": "registry:component",
          "target": "components/goodui/spinners.tsx"
        }
      ]
    },
    {
      "name": "multi-step-loader",
      "type": "registry:component",
      "title": "Multi-step loader",
      "description": "Card or overlay that ticks through steps like \"Reserving slot…\" with spinners, drawn checkmarks and a filling rail, ending on an animated success state.",
      "categories": [
        "components",
        "feedback"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/success-check.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/feedback/multi-step-loader.tsx",
          "type": "registry:component",
          "target": "components/goodui/multi-step-loader.tsx"
        }
      ]
    },
    {
      "name": "confetti",
      "type": "registry:component",
      "title": "Confetti",
      "description": "Hand-written canvas 2D confetti with flipping paper physics, fired over the page from an element or inside a contained canvas via ref, and a no-op under reduced motion.",
      "categories": [
        "components",
        "feedback"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/feedback/confetti.tsx",
          "type": "registry:component",
          "target": "components/goodui/confetti.tsx"
        }
      ]
    },
    {
      "name": "success-check",
      "type": "registry:component",
      "title": "Success check",
      "description": "Check or X in a circle that draws its stroke, fills, then pops with a ray-and-ring burst, for payment and booking result screens.",
      "categories": [
        "components",
        "feedback"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/feedback/success-check.tsx",
          "type": "registry:component",
          "target": "components/goodui/success-check.tsx"
        }
      ]
    },
    {
      "name": "button",
      "type": "registry:component",
      "title": "Button",
      "description": "One button with ten variants, six tones, seven shadows, ten animations, three shapes and five sizes that all combine, plus loading and icon slots.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/button.tsx",
          "type": "registry:component",
          "target": "components/goodui/button.tsx"
        }
      ]
    },
    {
      "name": "badge",
      "type": "registry:component",
      "title": "Badge",
      "description": "One badge, every layer: solid, soft, outline, status dot, gradient, glass and neo in six tones, with pulse, shine, bounce-in and count-pop animations, icons, removable chips and clickable filters.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/components/core/badge.tsx",
          "type": "registry:component",
          "target": "components/goodui/badge.tsx"
        }
      ]
    },
    {
      "name": "card",
      "type": "registry:component",
      "title": "Card",
      "description": "Eight surfaces (elevated, glass, gradient border, neo, inset…) with shadow, padding, radius and accent stripes, plus hover layers (lift, 3D tilt, pointer spotlight, glow, scale) and a looping border beam.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/card.tsx",
          "type": "registry:component",
          "target": "components/goodui/card.tsx"
        }
      ]
    },
    {
      "name": "input",
      "type": "registry:component",
      "title": "Input",
      "description": "Six field styles with top, floating, inline or hidden labels, focus ring, glow, underline-grow or lift, error shake with sliding messages, icon and text addons, clear button, counter and auto-growing textarea.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/input.tsx",
          "type": "registry:component",
          "target": "components/goodui/input.tsx"
        }
      ]
    },
    {
      "name": "avatar",
      "type": "registry:component",
      "title": "Avatar",
      "description": "Six sizes and four shapes including squircle, status dots with pulse, solid, gradient and rotating story rings, image fade-in with name-based gradient initials, and groups that cap with +N and fan out on hover.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/components/core/avatar.tsx",
          "type": "registry:component",
          "target": "components/goodui/avatar.tsx"
        }
      ]
    },
    {
      "name": "alert",
      "type": "registry:component",
      "title": "Alert",
      "description": "Soft, solid, outline, left-accent, glass, neo and full-width banner alerts with tone-picked icons, actions, slide, fade, shake or pop entrances, smooth collapse on dismiss and a pausable auto-dismiss countdown.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/alert.tsx",
          "type": "registry:component",
          "target": "components/goodui/alert.tsx"
        }
      ]
    },
    {
      "name": "tabs",
      "type": "registry:component",
      "title": "Tabs",
      "description": "Six variants (underline, pill, segmented, enclosed folder tabs, soft, vertical line), a sliding, fading or static indicator, fade or directional slide panels, tones, sizes, shapes, shadows and orientation, with icons, count badges, arrow keys and a one-line items API.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/tabs.tsx",
          "type": "registry:component",
          "target": "components/goodui/tabs.tsx"
        }
      ]
    },
    {
      "name": "switch",
      "type": "registry:component",
      "title": "Switch",
      "description": "iOS, Material 3, square, neo-brutalist, icon thumb and ON/OFF label variants with none, smooth, spring and bounce motion, six tones, three sizes, track shadows, sun/moon or check/x glyphs, label and description on either side, and a loading state.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/switch.tsx",
          "type": "registry:component",
          "target": "components/goodui/switch.tsx"
        }
      ]
    },
    {
      "name": "checkbox",
      "type": "registry:component",
      "title": "Checkbox & Radio",
      "description": "Checkbox and RadioGroup on real inputs with default, filled, outline, circle, neo and whole-card variants, draw, pop and bounce animations, tones, sizes, shadows, indeterminate, invalid and descriptions.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/checkbox.tsx",
          "type": "registry:component",
          "target": "components/goodui/checkbox.tsx"
        }
      ]
    },
    {
      "name": "separator",
      "type": "registry:component",
      "title": "Separator",
      "description": "Line, dashed, dotted, gradient, double, glow and ornament separators with diamond, dot or icon marks, labels at the center, start or end, tones, thickness, vertical orientation, a draw-in-on-view and a shimmer animation.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/separator.tsx",
          "type": "registry:component",
          "target": "components/goodui/separator.tsx"
        }
      ]
    },
    {
      "name": "breadcrumb",
      "type": "registry:component",
      "title": "Breadcrumb",
      "description": "Slash, chevron, dot, pill, arrow-step and underline trails with four current-page styles, tones, sizes, a staggered fade or sliding hover underline, and long trails that collapse into a keyboard-friendly menu.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/breadcrumb.tsx",
          "type": "registry:component",
          "target": "components/goodui/breadcrumb.tsx"
        }
      ]
    },
    {
      "name": "pagination",
      "type": "registry:component",
      "title": "Pagination",
      "description": "Outline, soft, ghost, pill, neo, minimal and carousel-dot pagination with a sliding active marker or press feedback, tones, sizes and shapes, plus first/last, range info, page-size select and jump-to-page.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/pagination.tsx",
          "type": "registry:component",
          "target": "components/goodui/pagination.tsx"
        }
      ]
    },
    {
      "name": "heading",
      "type": "registry:component",
      "title": "Heading",
      "description": "Layered heading: semantic level and size decoupled, sans/serif/mono/display font slots you map to your own fonts, eight ink treatments (gradient, muted tail, outline, marker highlight, hand-drawn squiggle, shimmer…), serif-italic emphasis via _words_, and on-view word, letter and mask reveals.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/heading.tsx",
          "type": "registry:component",
          "target": "components/goodui/heading.tsx"
        }
      ]
    },
    {
      "name": "text",
      "type": "registry:component",
      "title": "Text",
      "description": "Every body-copy role in one primitive: paragraph, lead, small, caption, overline, eyebrow pill, quote with attribution and inline code, with tones, readable measures, truncate or line clamp, and on-view entrances.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/text.tsx",
          "type": "registry:component",
          "target": "components/goodui/text.tsx"
        }
      ]
    },
    {
      "name": "link",
      "type": "registry:component",
      "title": "Link",
      "description": "Inline link with seven underline styles (static, slide-in, grow from center, marker sweep, nudging arrow), line decorations, tones, leading icons and automatic external-link handling. Works with next/link via as.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/link.tsx",
          "type": "registry:component",
          "target": "components/goodui/link.tsx"
        }
      ]
    },
    {
      "name": "kbd",
      "type": "registry:component",
      "title": "Kbd",
      "description": "Keyboard keys and combos in flat, raised 3D, outline, glass, neo and solid styles. Keycaps depress when the real keys are pressed, Mod maps to ⌘ or Ctrl, and onTrigger turns any combo or G-then-T sequence into a working hotkey.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/kbd.tsx",
          "type": "registry:component",
          "target": "components/goodui/kbd.tsx"
        }
      ]
    },
    {
      "name": "stat-card",
      "type": "registry:component",
      "title": "Stat Card",
      "description": "KPI card with seven variants, tones, shadows and sizes: count-up or rolling NumberFlow values, auto-toned delta badges (invertible for no-show rates), line, area or bar sparklines that draw in, icons, footers and a skeleton state.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/number-flow.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/stat-card.tsx",
          "type": "registry:component",
          "target": "components/goodui/stat-card.tsx"
        }
      ]
    },
    {
      "name": "select",
      "type": "registry:component",
      "title": "Select",
      "description": "Fully custom single or multi select: outline, filled, ghost, underline, pill and neo triggers; icons, avatars, descriptions and groups; search with match highlight, chips, clear, type-ahead and full keyboard; animated menu that flips up when space runs out.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/select.tsx",
          "type": "registry:component",
          "target": "components/goodui/select.tsx"
        }
      ]
    },
    {
      "name": "dialog",
      "type": "registry:component",
      "title": "Dialog & Sheet",
      "description": "Modal dialog, alert dialog and sheet in one: default, soft, glass and neo surfaces in six tones; center, top, start/end/left/right and draggable bottom sheets, fullscreen, and a phone override to fullscreen or sheet; scale, slide, blur, fade or morph-from-trigger entrances; async confirm with spinner and inline error, type-to-confirm, nested dialogs that step back, focus trap and restore, and scroll lock without layout shift.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/dialog.tsx",
          "type": "registry:component",
          "target": "components/goodui/dialog.tsx"
        }
      ]
    },
    {
      "name": "tooltip",
      "type": "registry:component",
      "title": "Tooltip",
      "description": "Dark, light, tone, glass and neo tooltips with sizes, shapes, shadows and an optional arrow; twelve placements that flip and shift at the screen edge, scale, fade, slide or spring entrances, rich title + keyboard-shortcut content, delay groups that open instantly after the first, follow-cursor for charts and touch long-press.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/kbd.json",
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/tooltip.tsx",
          "type": "registry:component",
          "target": "components/goodui/tooltip.tsx"
        }
      ]
    },
    {
      "name": "popover",
      "type": "registry:component",
      "title": "Popover",
      "description": "Anchored popover with an arrow in default, soft, glass, neo and inverted surfaces, tones, sizes, radii and shadows; side and align that flip and shift to stay on screen, match-trigger-width, scale, fade, slide or spring entrances, header, close button and footer slots, and modal (focus trapped) or non-modal (Tab flows back to the page) behavior, shown as a date filter, share menu, switcher and inline note form.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/popover.tsx",
          "type": "registry:component",
          "target": "components/goodui/popover.tsx"
        }
      ]
    },
    {
      "name": "dropdown-menu",
      "type": "registry:component",
      "title": "Dropdown Menu",
      "description": "Menu button and right-click context menu with default, glass, neo, inverted and flat surfaces, soft, solid, bar or outline highlights, tones, sizes, shapes and shadows; icons, descriptions, badges and live keyboard shortcuts, checkbox items, radio groups, labelled groups, destructive items and nested sub-menus with hover intent and a safe triangle; scale, fade, slide or stagger entrances, type-ahead and full APG keyboard, portaled and flipped to stay on screen.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/dropdown-menu.tsx",
          "type": "registry:component",
          "target": "components/goodui/dropdown-menu.tsx"
        }
      ]
    },
    {
      "name": "combobox",
      "type": "registry:component",
      "title": "Combobox",
      "description": "Autocomplete combobox (ARIA 1.2) with outline, filled, ghost, underline, pill and neo fields, tones, sizes and shadows; local ranked matching or debounced async search with abort, cache, loading, empty and error-with-retry states, every matched word highlighted, groups, avatars, single or multi-select chips, an “Add …” create row and automatic virtualization for 10,000+ rows, in a portaled list that flips above the field.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/combobox.tsx",
          "type": "registry:component",
          "target": "components/goodui/combobox.tsx"
        }
      ]
    },
    {
      "name": "date-picker",
      "type": "registry:component",
      "title": "Date Picker",
      "description": "Date picker and calendar with no date library: single, range (two months side by side) and multiple modes, presets, time inputs, min/max, disabled weekdays, booked days, ISO week numbers, month/year quick switch, typed dates parsed in the locale's order via Intl with the locale's first weekday, popover or inline, six field variants, tones, solid/soft/ring selection, day shapes, sizes and slide, fade or scale month animations with APG grid keyboard.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/date-picker.tsx",
          "type": "registry:component",
          "target": "components/goodui/date-picker.tsx"
        }
      ]
    },
    {
      "name": "multi-step-form",
      "type": "registry:component",
      "title": "Multi-step Form",
      "description": "Wizard with numbered, progress-bar or vertical step headers, sync and async per-step validation that blocks Continue and focuses the first invalid field, optional steps with Skip, an auto review step with Edit links, async submit with loading, error retry and success, draft persistence, direction-aware slide or fade transitions and screen-reader step announcements, in card, outline, plain, glass and neo shells with tones and sizes.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/button.json",
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/multi-step-form.tsx",
          "type": "registry:component",
          "target": "components/goodui/multi-step-form.tsx"
        }
      ]
    },
    {
      "name": "number-input",
      "type": "registry:component",
      "title": "Number Input",
      "description": "Numeric spinbutton with split, end or stacked steppers, press-and-hold acceleration, min/max/step and large steps, Intl currency, percent and unit formatting over a raw value, arrow, PageUp/PageDown, Home/End and focused-wheel stepping, slide or pop step feedback and an invalid state, in the six input variants with tones, sizes, shapes and shadows.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/components/core/number-input.tsx",
          "type": "registry:component",
          "target": "components/goodui/number-input.tsx"
        }
      ]
    },
    {
      "name": "rating",
      "type": "registry:component",
      "title": "Rating",
      "description": "Star, heart, circle, bolt, diamond or custom-icon rating in solid, soft, outline, glow and neo styles: half steps, hover preview, clear, animated clip fill with pop or wave, value, count and word labels, read-only exact averages, RTL fill and arrow flipping, with radiogroup or slider semantics.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/rating.tsx",
          "type": "registry:component",
          "target": "components/goodui/rating.tsx"
        }
      ]
    },
    {
      "name": "toggle-group",
      "type": "registry:component",
      "title": "Toggle Group",
      "description": "Single (radiogroup) or multiple (aria-pressed) toggle buttons in outline, soft, solid, segmented, neo and glass styles with a sliding, fading or popping active marker, text or icon items, tones, sizes, shapes, shadows, attached or spaced, vertical, full width, disabled items and roving arrow-key focus that flips in RTL.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/toggle-group.tsx",
          "type": "registry:component",
          "target": "components/goodui/toggle-group.tsx"
        }
      ]
    },
    {
      "name": "table",
      "type": "registry:component",
      "title": "Table",
      "description": "Lined, striped, bordered, card-row and minimal tables with tones, three densities, shadows and corner shapes, tint, accent-bar or lift hover, row state tones and selection, sortable headers with aria-sort, sticky header, caption, footer totals, skeleton and empty states, fade or stagger entrances, and rows that stack into labelled cards on small containers.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/core/table.tsx",
          "type": "registry:component",
          "target": "components/goodui/table.tsx"
        }
      ]
    },
    {
      "name": "data-grid",
      "type": "registry:component",
      "title": "Data Grid",
      "description": "Virtualized data grid for 100k+ rows with typed columns (number, currency, percent, date, boolean, badge, avatar, actions) formatted by Intl, multi-sort, per-column filters and global search, resize, drag reorder, pin, hide, Shift-range selection with a bulk action bar, inline editing with sync or async validation, spreadsheet keyboard navigation, expandable rows, footer aggregates, CSV and real .xlsx export, loading, empty and error states, server mode with pagination, RTL and tones, densities and variants.",
      "categories": [
        "components",
        "core"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/avatar.json",
        "https://goodui.dev/r/badge.json",
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/pagination.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/core/data-grid.tsx",
          "type": "registry:component",
          "target": "components/goodui/data-grid.tsx"
        }
      ]
    },
    {
      "name": "chat-message",
      "type": "registry:component",
      "title": "Chat message",
      "description": "User, assistant and system messages with avatars, grouping, a hover actions row (copy, good/bad, retry, edit), markdown-ish rendering of lists, quotes and fenced code into CodeBlocks, and a blinking caret while the answer streams.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/code-block.json",
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/chat-message.tsx",
          "type": "registry:component",
          "target": "components/goodui/chat-message.tsx"
        }
      ]
    },
    {
      "name": "streaming-text",
      "type": "registry:component",
      "title": "Streaming text",
      "description": "Reveals an answer token by token at a steady speed with a cursor that blinks while waiting for more, stop and resume, word or character mode, and smooth catch-up when uneven SSE chunks arrive; reduced motion shows sentence chunks.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/streaming-text.tsx",
          "type": "registry:component",
          "target": "components/goodui/streaming-text.tsx"
        }
      ]
    },
    {
      "name": "tool-call",
      "type": "registry:component",
      "title": "Tool call",
      "description": "Collapsible card for an agent's tool call: name and arguments in the header, a status that morphs from spinner to drawn check or error, a live duration while running, and argument and output panes inside.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/tool-call.tsx",
          "type": "registry:component",
          "target": "components/goodui/tool-call.tsx"
        }
      ]
    },
    {
      "name": "reasoning-block",
      "type": "registry:component",
      "title": "Reasoning block",
      "description": "\"Thinking 8.7s\" disclosure with a live tenths timer, a shimmering label while the model reasons, the current step previewed under the header and the full step list plus notes folded inside.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/reasoning-block.tsx",
          "type": "registry:component",
          "target": "components/goodui/reasoning-block.tsx"
        }
      ]
    },
    {
      "name": "model-picker",
      "type": "registry:component",
      "title": "Model picker",
      "description": "Model dropdown grouped by provider with icon slots, speed and quality meters that grow in, context window and price per million tokens, a gliding highlight and full keyboard support with type-ahead.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/model-picker.tsx",
          "type": "registry:component",
          "target": "components/goodui/model-picker.tsx"
        }
      ]
    },
    {
      "name": "chat-composer",
      "type": "registry:component",
      "title": "Chat composer",
      "description": "Prompt input with an auto-growing textarea, attachment chips from picker, paste or drop, a slash-command menu, model and mode selectors, a token ring against the context limit, Enter or Cmd+Enter to send and a Stop button while streaming.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/model-picker.json",
        "https://goodui.dev/r/sounds.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/chat-composer.tsx",
          "type": "registry:component",
          "target": "components/goodui/chat-composer.tsx"
        }
      ]
    },
    {
      "name": "citations",
      "type": "registry:component",
      "title": "Citations",
      "description": "Inline numbered source chips that open a spring hover card with title, domain, snippet and date, a CitedText helper that turns [1] markers into chips, and a sources list whose row lights up when its chip is hovered.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/citations.tsx",
          "type": "registry:component",
          "target": "components/goodui/citations.tsx"
        }
      ]
    },
    {
      "name": "agent-plan",
      "type": "registry:component",
      "title": "Agent plan",
      "description": "Live checklist of an agent's plan: pending, active with a pulsing halo, drawn check, error and skipped states, nested substeps that fold away when done, and a spring progress bar with a step count.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/agent-plan.tsx",
          "type": "registry:component",
          "target": "components/goodui/agent-plan.tsx"
        }
      ]
    },
    {
      "name": "token-meter",
      "type": "registry:component",
      "title": "Token meter",
      "description": "Context window usage bar whose segments (system, history, tools, response) spring to new widths, with rolling numbers, a legend, and amber then rose tones near and over the limit.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/number-flow.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/token-meter.tsx",
          "type": "registry:component",
          "target": "components/goodui/token-meter.tsx"
        }
      ]
    },
    {
      "name": "voice-orb",
      "type": "registry:component",
      "title": "Voice orb",
      "description": "Breathing voice-assistant orb that swells with a level prop through a spring: idle breathing, listening rings, speaking light that churns faster, and a spinning thinking arc, all in CSS on theme colors.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/voice-orb.tsx",
          "type": "registry:component",
          "target": "components/goodui/voice-orb.tsx"
        }
      ]
    },
    {
      "name": "diff-view",
      "type": "registry:component",
      "title": "Diff view",
      "description": "Unified or split diff computed from before and after text, with old/new gutters, syntax colors, changed-character highlights inside replaced lines, and Accept or Reject per hunk that collapses the discarded lines.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/code-block.json",
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/diff-view.tsx",
          "type": "registry:component",
          "target": "components/goodui/diff-view.tsx"
        }
      ]
    },
    {
      "name": "code-block",
      "type": "registry:component",
      "title": "Code block",
      "description": "Syntax-colored code from a built-in tokenizer or your own tokens, with theme-derived colors, line numbers, highlighted lines, a file tab, copy with a drawn check, a wrap toggle and a staggered line entrance.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "files": [
        {
          "path": "registry/components/ai/code-block.tsx",
          "type": "registry:component",
          "target": "components/goodui/code-block.tsx"
        }
      ]
    },
    {
      "name": "suggestion-chips",
      "type": "registry:component",
      "title": "Suggestion chips",
      "description": "Starter prompts that stagger in on springs, lift on hover and fill the composer on click, as pills, cards with hints or a scrolling row with faded edges; swapping the set replays the entrance.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/suggestion-chips.tsx",
          "type": "registry:component",
          "target": "components/goodui/suggestion-chips.tsx"
        }
      ]
    },
    {
      "name": "thread-list",
      "type": "registry:component",
      "title": "Thread list",
      "description": "Conversation sidebar with search highlighting, pinned and date groups, a selection that glides between rows, hover actions on desktop and swipe-to-reveal on touch, inline rename, delete and arrow-key navigation.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/thread-list.tsx",
          "type": "registry:component",
          "target": "components/goodui/thread-list.tsx"
        }
      ]
    },
    {
      "name": "eval-score",
      "type": "registry:component",
      "title": "Eval score",
      "description": "Evaluation score with a rolling number, a pass, borderline or fail badge that pops in against a threshold, a spring-filled bar and a criteria breakdown with per-criterion thresholds, as card, inline row or badge.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/number-flow.json"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/eval-score.tsx",
          "type": "registry:component",
          "target": "components/goodui/eval-score.tsx"
        }
      ]
    },
    {
      "name": "typing-indicator",
      "type": "registry:component",
      "title": "Typing indicator",
      "description": "Three dots waving in turn with an \"Aiko is typing\" sentence for one or several names, as a chat bubble, inline or dots only, mounting and leaving on a spring; reduced motion keeps the dots still.",
      "categories": [
        "components",
        "ai"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/ai/typing-indicator.tsx",
          "type": "registry:component",
          "target": "components/goodui/typing-indicator.tsx"
        }
      ]
    },
    {
      "name": "area-chart",
      "type": "registry:component",
      "title": "Area chart",
      "description": "Area chart that draws its line in on view, morphs between 1W / 1M / 1Y ranges, and rolls its headline value as a hairline and tooltip follow the pointer or the arrow keys.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/number-flow.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/area-chart.tsx",
          "type": "registry:component",
          "target": "components/goodui/area-chart.tsx"
        }
      ]
    },
    {
      "name": "line-chart",
      "type": "registry:component",
      "title": "Line chart",
      "description": "Multi-series lines that draw in staggered, a legend that toggles series while the scale refits, a crosshair that reads every series at once, and a dashed forecast segment behind a divider.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/chart-legend.json",
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/line-chart.tsx",
          "type": "registry:component",
          "target": "components/goodui/line-chart.tsx"
        }
      ]
    },
    {
      "name": "bar-chart",
      "type": "registry:component",
      "title": "Bar chart",
      "description": "Grouped, stacked or horizontal bars that grow from the baseline on view and morph when data changes, with a gliding hover band, legend toggles, value labels and 2px surface gaps between segments.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/chart-legend.json",
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/bar-chart.tsx",
          "type": "registry:component",
          "target": "components/goodui/bar-chart.tsx"
        }
      ]
    },
    {
      "name": "donut-chart",
      "type": "registry:component",
      "title": "Donut chart",
      "description": "Donut or pie whose slices sweep in clockwise, re-share the ring when a legend item is toggled, push out on hover and roll the center total to the slice under the pointer.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/chart-legend.json",
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/number-flow.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/donut-chart.tsx",
          "type": "registry:component",
          "target": "components/goodui/donut-chart.tsx"
        }
      ]
    },
    {
      "name": "radial-progress",
      "type": "registry:component",
      "title": "Radial progress",
      "description": "Activity-style concentric goal rings that fill from 12 o'clock on view, spring to new values, dim the others when one is pointed at, and roll the center percentage.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/chart-legend.json",
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/number-flow.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/radial-progress.tsx",
          "type": "registry:component",
          "target": "components/goodui/radial-progress.tsx"
        }
      ]
    },
    {
      "name": "heatmap",
      "type": "registry:component",
      "title": "Heatmap",
      "description": "Calendar (GitHub-style) or matrix heatmap on one hue with cells that pop in column by column, a tooltip, arrow-key navigation that scrolls the calendar along, and a Less–More scale.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/heatmap.tsx",
          "type": "registry:component",
          "target": "components/goodui/heatmap.tsx"
        }
      ]
    },
    {
      "name": "funnel-chart",
      "type": "registry:component",
      "title": "Funnel chart",
      "description": "Funnel whose stage bars grow open one after another on an ordinal ramp, with drop-off chips between stages, conversion from the first stage beside each value, and arrow-key rows.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/funnel-chart.tsx",
          "type": "registry:component",
          "target": "components/goodui/funnel-chart.tsx"
        }
      ]
    },
    {
      "name": "gauge",
      "type": "registry:component",
      "title": "Gauge",
      "description": "Semi-circular gauge with Core-tone bands whose needle springs to the value with a small overshoot (or an arc that fills), a rolling readout and a band label pill, exposed as a meter.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/number-flow.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/gauge.tsx",
          "type": "registry:component",
          "target": "components/goodui/gauge.tsx"
        }
      ]
    },
    {
      "name": "bump-chart",
      "type": "registry:component",
      "title": "Bump chart",
      "description": "Rank-over-time lines that draw in with popping dots and names at the line ends; hovering or arrowing through periods and neighbours highlights one item and reads its change.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/bump-chart.tsx",
          "type": "registry:component",
          "target": "components/goodui/bump-chart.tsx"
        }
      ]
    },
    {
      "name": "treemap",
      "type": "registry:component",
      "title": "Treemap",
      "description": "Squarified treemap whose tinted tiles fade in largest first and spring to a new layout when values change, with labels only where they fit, a tooltip and arrow-key tiles.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/treemap.tsx",
          "type": "registry:component",
          "target": "components/goodui/treemap.tsx"
        }
      ]
    },
    {
      "name": "timeline-chart",
      "type": "registry:component",
      "title": "Timeline chart",
      "description": "Mini Gantt whose bars grow from their start date on view, with progress fills, milestones, group headers, day / week / month ticks, a today marker and arrow-key rows.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/timeline-chart.tsx",
          "type": "registry:component",
          "target": "components/goodui/timeline-chart.tsx"
        }
      ]
    },
    {
      "name": "waterfall-chart",
      "type": "registry:component",
      "title": "Waterfall chart",
      "description": "Running totals as floating bars that step in one after another in success and danger tones, with neutral total bars, connectors, signed value labels and a tooltip with the running total.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/waterfall-chart.tsx",
          "type": "registry:component",
          "target": "components/goodui/waterfall-chart.tsx"
        }
      ]
    },
    {
      "name": "kpi-trend",
      "type": "registry:component",
      "title": "KPI trend",
      "description": "KPI tile family: the number rolls in on view and on every change (NumberFlow), the delta badge pops and pulses, the sparkline draws itself (SparklineDraw), and a group lines tiles up with hairline dividers.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json",
        "https://goodui.dev/r/number-flow.json",
        "https://goodui.dev/r/sparkline-draw.json"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/charts/kpi-trend.tsx",
          "type": "registry:component",
          "target": "components/goodui/kpi-trend.tsx"
        }
      ]
    },
    {
      "name": "chart-legend",
      "type": "registry:component",
      "title": "Chart legend",
      "description": "Shared interactive legend: aria-pressed toggle buttons with popping square, dot, line or dashed swatches, hidden-state strike-through, optional values and a hover channel that highlights a series in its chart.",
      "categories": [
        "components",
        "charts"
      ],
      "registryDependencies": [
        "https://goodui.dev/r/locale.json"
      ],
      "dependencies": [],
      "files": [
        {
          "path": "registry/components/charts/chart-legend.tsx",
          "type": "registry:component",
          "target": "components/goodui/chart-legend.tsx"
        }
      ]
    },
    {
      "name": "agent",
      "type": "registry:item",
      "title": "goodui agent pack",
      "description": "goodui rules for Claude Code (skill), Cursor, GitHub Copilot and Windsurf: which component to use, how to install it, theming, motion, RTL and accessibility rules.",
      "files": [
        {
          "path": ".agent/.claude/skills/goodui/SKILL.md",
          "type": "registry:file",
          "target": ".claude/skills/goodui/SKILL.md"
        },
        {
          "path": ".agent/.cursor/rules/goodui.mdc",
          "type": "registry:file",
          "target": ".cursor/rules/goodui.mdc"
        },
        {
          "path": ".agent/.github/instructions/goodui.instructions.md",
          "type": "registry:file",
          "target": ".github/instructions/goodui.instructions.md"
        },
        {
          "path": ".agent/.windsurf/rules/goodui.md",
          "type": "registry:file",
          "target": ".windsurf/rules/goodui.md"
        }
      ]
    }
  ]
}
