{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "prfct",
  "homepage": "https://www.prfct.dev",
  "items": [
    {
      "name": "utils",
      "type": "registry:lib",
      "title": "Utils",
      "description": "A token-aware cn() that merges prfct's custom utilities correctly.",
      "dependencies": [
        "cn"
      ],
      "files": [
        {
          "path": "lib/utils.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "use-mobile",
      "type": "registry:hook",
      "title": "useIsMobile",
      "description": "true below the md breakpoint, via useSyncExternalStore.",
      "files": [
        {
          "path": "hooks/use-mobile.ts",
          "type": "registry:hook"
        }
      ]
    },
    {
      "name": "prfct",
      "type": "registry:style",
      "title": "prfct theme",
      "description": "Design tokens, base styles, motion and focus utilities, the Inter font face, the theme provider and a token-aware cn().",
      "dependencies": [
        "next-themes",
        "tw-animate-css",
        "shadcn",
        "cn"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "styles/prfct.css",
          "type": "registry:file",
          "target": "styles/prfct/index.css"
        },
        {
          "path": "styles/fonts.css",
          "type": "registry:file",
          "target": "styles/prfct/fonts.css"
        },
        {
          "path": "styles/tokens.css",
          "type": "registry:file",
          "target": "styles/prfct/tokens.css"
        },
        {
          "path": "styles/base.css",
          "type": "registry:file",
          "target": "styles/prfct/base.css"
        },
        {
          "path": "styles/utilities.css",
          "type": "registry:file",
          "target": "styles/prfct/utilities.css"
        },
        {
          "path": "components/theme-provider.tsx",
          "type": "registry:component"
        }
      ],
      "docs": "prfct is installed. Two more steps:\n\n1. In your global stylesheet, import prfct after shadcn's variants and remove\n   the :root, .dark and @theme inline blocks `shadcn init` generated:\n     @import \"../styles/prfct/index.css\";\n\n2. Download the Inter subset into public/fonts:\n     curl --create-dirs -o public/fonts/inter-4.1-variable.woff2 https://www.prfct.dev/fonts/inter-4.1-variable.woff2\n     curl -o public/fonts/inter-4.1-variable-italic.woff2 https://www.prfct.dev/fonts/inter-4.1-variable-italic.woff2"
    },
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "description": "A stack of headings that each reveal a section of content — progressive disclosure for secondary information.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/accordion.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "alert",
      "type": "registry:ui",
      "title": "Alert",
      "description": "A persistent, inline message that tells people something important about the page or task in front of them.",
      "dependencies": [
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/alert.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "alert-dialog",
      "type": "registry:ui",
      "title": "Alert Dialog",
      "description": "A modal confirmation that interrupts people before a consequential or irreversible action, and can only be dismissed by making a choice.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/button.json"
      ],
      "files": [
        {
          "path": "components/ui/alert-dialog.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "aspect-ratio",
      "type": "registry:ui",
      "title": "Aspect Ratio",
      "description": "Holds media to a fixed width-to-height ratio, reserving its space before the content loads.",
      "dependencies": [],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/aspect-ratio.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "avatar",
      "type": "registry:ui",
      "title": "Avatar",
      "description": "A compact visual identity for a person or an organization, with an image, initials fallback and optional presence status.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/avatar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "badge",
      "type": "registry:ui",
      "title": "Badge",
      "description": "A short, non-interactive label that tags an object with a status, category or count.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/badge.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "breadcrumb",
      "type": "registry:ui",
      "title": "Breadcrumb",
      "description": "Shows where the current page sits in the hierarchy and gives one-click access to every level above it.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/locale.json"
      ],
      "files": [
        {
          "path": "components/ui/breadcrumb.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "button",
      "type": "registry:ui",
      "title": "Button",
      "description": "Triggers an action. The most important interactive element in any interface — and the easiest one to overuse.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/spinner.json"
      ],
      "files": [
        {
          "path": "components/ui/button.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "button-group",
      "type": "registry:ui",
      "title": "Button Group",
      "description": "Joins related buttons, inputs and text into a single control so they read as one set of actions.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/separator.json"
      ],
      "files": [
        {
          "path": "components/ui/button-group.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "calendar",
      "type": "registry:ui",
      "title": "Calendar",
      "description": "A month grid for choosing a single date, several dates or a range — the building block of every date picker.",
      "dependencies": [
        "lucide-react",
        "react-day-picker"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/button.json",
        "https://www.prfct.dev/r/locale.json"
      ],
      "files": [
        {
          "path": "components/ui/calendar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "card",
      "type": "registry:ui",
      "title": "Card",
      "description": "A raised surface that groups related content and actions about a single subject.",
      "dependencies": [],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/card.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "carousel",
      "type": "registry:ui",
      "title": "Carousel",
      "description": "A horizontally or vertically scrolling set of slides with swipe, keyboard and button navigation, built on Embla.",
      "dependencies": [
        "embla-carousel-react",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/button.json",
        "https://www.prfct.dev/r/locale.json"
      ],
      "files": [
        {
          "path": "components/ui/carousel.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "chart",
      "type": "registry:ui",
      "title": "Chart",
      "description": "Themed, accessible charts built on Recharts, with a validated categorical palette, quiet chrome and tooltips that match the system.",
      "dependencies": [
        "recharts"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/locale.json"
      ],
      "files": [
        {
          "path": "components/ui/chart.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "checkbox",
      "type": "registry:ui",
      "title": "Checkbox",
      "description": "Toggles a single option on or off, or selects any number of options from a set — committed when the form is submitted.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/checkbox.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "collapsible",
      "type": "registry:ui",
      "title": "Collapsible",
      "description": "A single region that people can show or hide — the smallest unit of progressive disclosure.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/collapsible.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "combobox",
      "type": "registry:ui",
      "title": "Combobox",
      "description": "A text input with a filterable list, for choosing from more options than a select can comfortably show.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/button.json",
        "https://www.prfct.dev/r/input-group.json",
        "https://www.prfct.dev/r/locale.json"
      ],
      "files": [
        {
          "path": "components/ui/combobox.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "command",
      "type": "registry:ui",
      "title": "Command",
      "description": "A fast, keyboard-first list of commands and results with fuzzy search — inline, or as a ⌘K palette on top of the page.",
      "dependencies": [
        "cmdk",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/dialog.json",
        "https://www.prfct.dev/r/kbd.json",
        "https://www.prfct.dev/r/locale.json"
      ],
      "files": [
        {
          "path": "components/ui/command.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "context-menu",
      "type": "registry:ui",
      "title": "Context Menu",
      "description": "Actions for a specific object, opened by right-click or long-press right where the pointer is — a shortcut, never the only path.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/context-menu.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "dialog",
      "type": "registry:ui",
      "title": "Dialog",
      "description": "A window overlaid on the page that focuses attention on one task and blocks everything else until it is finished or dismissed.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/button.json",
        "https://www.prfct.dev/r/locale.json"
      ],
      "files": [
        {
          "path": "components/ui/dialog.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "drawer",
      "type": "registry:ui",
      "title": "Drawer",
      "description": "A touch-first panel that slides from an edge, follows the finger, rests on snap points and dismisses with a swipe.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/drawer.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "dropdown-menu",
      "type": "registry:ui",
      "title": "Dropdown Menu",
      "description": "A list of actions or options that appears from a trigger, keeping secondary commands one click away without cluttering the interface.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/dropdown-menu.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "empty",
      "type": "registry:ui",
      "title": "Empty",
      "description": "Explains why there's nothing to show and what to do next — for first use, no results, cleared work and restricted access.",
      "dependencies": [
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/empty.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "field",
      "type": "registry:ui",
      "title": "Field",
      "description": "The layout system for forms — labels, controls, descriptions and errors arranged consistently, accessibly and at any width.",
      "dependencies": [
        "class-variance-authority",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/label.json",
        "https://www.prfct.dev/r/separator.json"
      ],
      "files": [
        {
          "path": "components/ui/field.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "hover-card",
      "type": "registry:ui",
      "title": "Hover Card",
      "description": "A preview of the content behind a link — a person, a repository, a page — shown when the link is hovered or focused.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/hover-card.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "input",
      "type": "registry:ui",
      "title": "Input",
      "description": "A single-line text field for names, emails, numbers and search — always paired with a visible label.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/input.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "input-group",
      "type": "registry:ui",
      "title": "Input Group",
      "description": "An input with icons, text, buttons or keyboard hints attached — bordered, focused and validated as a single control.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/button.json"
      ],
      "files": [
        {
          "path": "components/ui/input-group.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "input-otp",
      "type": "registry:ui",
      "title": "Input OTP",
      "description": "A segmented field for one-time passcodes, PINs and recovery codes, with paste, SMS autofill and password-manager support.",
      "dependencies": [
        "input-otp",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/input-otp.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "item",
      "type": "registry:ui",
      "title": "Item",
      "description": "A flexible row that pairs media, a title and a description with actions — the building block for lists, settings and resource rows.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/separator.json"
      ],
      "files": [
        {
          "path": "components/ui/item.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "kbd",
      "type": "registry:ui",
      "title": "Kbd",
      "description": "Displays a keyboard key or shortcut, inline with text or inside menus and tooltips.",
      "dependencies": [],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/kbd.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "label",
      "type": "registry:ui",
      "title": "Label",
      "description": "The accessible name of a form control. Clicking it focuses or toggles the control it belongs to.",
      "dependencies": [],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/label.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "locale",
      "type": "registry:ui",
      "title": "Locale",
      "description": "Switch the few words prfct components say on their own — close buttons, spinners, pagination, calendars — to any language with one provider.",
      "dependencies": [],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/locale.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "menubar",
      "type": "registry:ui",
      "title": "Menubar",
      "description": "A persistent row of menus — File, Edit, View — that gives desktop-class applications a complete, discoverable command vocabulary.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/dropdown-menu.json"
      ],
      "files": [
        {
          "path": "components/ui/menubar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "native-select",
      "type": "registry:ui",
      "title": "Native Select",
      "description": "The browser's own select element, styled to match prfct — best on mobile, in long forms and wherever zero JavaScript matters.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/native-select.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "navigation-menu",
      "type": "registry:ui",
      "title": "Navigation Menu",
      "description": "Top-level site navigation with rich, animated panels — for marketing sites and documentation where each section needs more than a single link.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/navigation-menu.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "pagination",
      "type": "registry:ui",
      "title": "Pagination",
      "description": "Splits a long set of results into pages and lets people move between them — predictably, shareably, and with a sense of how much there is.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/button.json",
        "https://www.prfct.dev/r/locale.json"
      ],
      "files": [
        {
          "path": "components/ui/pagination.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "popover",
      "type": "registry:ui",
      "title": "Popover",
      "description": "A floating panel anchored to a trigger for small, interactive content — settings, quick forms and pickers — without blocking the page.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/popover.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "progress",
      "type": "registry:ui",
      "title": "Progress",
      "description": "Shows how far a task has come, or that it is underway when its length is unknown.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/progress.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "radio-group",
      "type": "registry:ui",
      "title": "Radio Group",
      "description": "Lets people choose exactly one option from a small set, with every option visible at once.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/radio-group.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "resizable",
      "type": "registry:ui",
      "title": "Resizable",
      "description": "Panels that people can resize by dragging or with the keyboard — for layouts whose proportions are personal.",
      "dependencies": [
        "react-resizable-panels"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/resizable.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "scroll-area",
      "type": "registry:ui",
      "title": "Scroll Area",
      "description": "A scrollable region with quiet overlay scrollbars that match the theme — native scrolling underneath, consistent chrome on top.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/scroll-area.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "select",
      "type": "registry:ui",
      "title": "Select",
      "description": "Lets people choose one option — or several — from a list that stays out of the way until it's needed.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/select.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "separator",
      "type": "registry:ui",
      "title": "Separator",
      "description": "A hairline that divides content into groups — horizontally between sections, vertically between inline items.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/separator.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "sheet",
      "type": "registry:ui",
      "title": "Sheet",
      "description": "A panel that slides in from the edge of the screen for longer forms, details and filters, while keeping the page underneath in context.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/button.json",
        "https://www.prfct.dev/r/locale.json"
      ],
      "files": [
        {
          "path": "components/ui/sheet.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "sidebar",
      "type": "registry:ui",
      "title": "Sidebar",
      "description": "The persistent navigation of an application — collapsible to an icon rail, off-canvas on mobile, and themeable to the last pixel.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/button.json",
        "https://www.prfct.dev/r/input.json",
        "https://www.prfct.dev/r/locale.json",
        "https://www.prfct.dev/r/separator.json",
        "https://www.prfct.dev/r/sheet.json",
        "https://www.prfct.dev/r/skeleton.json",
        "https://www.prfct.dev/r/tooltip.json",
        "https://www.prfct.dev/r/use-mobile.json"
      ],
      "files": [
        {
          "path": "components/ui/sidebar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "skeleton",
      "type": "registry:ui",
      "title": "Skeleton",
      "description": "A placeholder that previews the shape of content while it loads, so the page settles instead of jumping.",
      "dependencies": [],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/skeleton.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "slider",
      "type": "registry:ui",
      "title": "Slider",
      "description": "Selects a value, or a range of values, by dragging along a track — best when the approximate position matters more than the exact number.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/slider.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "spinner",
      "type": "registry:ui",
      "title": "Spinner",
      "description": "An indeterminate activity indicator for short waits when the system is working and the result is on its way.",
      "dependencies": [],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/locale.json"
      ],
      "files": [
        {
          "path": "components/ui/spinner.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "switch",
      "type": "registry:ui",
      "title": "Switch",
      "description": "Turns a setting on or off, taking effect the moment it's flipped.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/switch.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "table",
      "type": "registry:ui",
      "title": "Table",
      "description": "Semantic HTML tables for structured data, with tabular numerals, row states and the parts to build sortable, selectable data tables.",
      "dependencies": [],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/table.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "tabs",
      "type": "registry:ui",
      "title": "Tabs",
      "description": "Switches between related views that share a context, showing one panel at a time without leaving the page.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/tabs.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "textarea",
      "type": "registry:ui",
      "title": "Textarea",
      "description": "A multi-line text field that grows with its content — for messages, descriptions and feedback.",
      "dependencies": [],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/textarea.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "toast",
      "type": "registry:ui",
      "title": "Toast",
      "description": "A brief, non-blocking notification that confirms an action or reports a background event, then gets out of the way.",
      "dependencies": [
        "@base-ui/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/button.json",
        "https://www.prfct.dev/r/locale.json",
        "https://www.prfct.dev/r/spinner.json"
      ],
      "files": [
        {
          "path": "components/ui/toast.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "toggle",
      "type": "registry:ui",
      "title": "Toggle",
      "description": "A two-state button that turns a single option on or off and shows its current state.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/toggle.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "toggle-group",
      "type": "registry:ui",
      "title": "Toggle Group",
      "description": "A set of toggle buttons for choosing one option — or several — from a small, visible set.",
      "dependencies": [
        "@base-ui/react",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json",
        "https://www.prfct.dev/r/toggle.json"
      ],
      "files": [
        {
          "path": "components/ui/toggle-group.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "tooltip",
      "type": "registry:ui",
      "title": "Tooltip",
      "description": "A short text label that appears on hover and keyboard focus to name an icon-only control or reveal its shortcut.",
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://www.prfct.dev/r/utils.json"
      ],
      "files": [
        {
          "path": "components/ui/tooltip.tsx",
          "type": "registry:ui"
        }
      ]
    }
  ]
}
