{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "particular",
  "homepage": "https://ui.particular.tech",
  "items": [
    {
      "name": "theme",
      "type": "registry:theme",
      "title": "Theme",
      "description": "Particular.Tech color tokens (light and dark), fonts, and radius as CSS variables.",
      "categories": [
        "foundation"
      ],
      "cssVars": {
        "theme": {
          "color-background": "var(--background)",
          "color-foreground": "var(--foreground)",
          "color-card": "var(--card)",
          "color-card-foreground": "var(--card-foreground)",
          "color-popover": "var(--popover)",
          "color-popover-foreground": "var(--popover-foreground)",
          "color-primary": "var(--primary)",
          "color-primary-foreground": "var(--primary-foreground)",
          "color-secondary": "var(--secondary)",
          "color-secondary-foreground": "var(--secondary-foreground)",
          "color-muted": "var(--muted)",
          "color-muted-foreground": "var(--muted-foreground)",
          "color-accent": "var(--accent)",
          "color-accent-foreground": "var(--accent-foreground)",
          "color-border": "var(--border)",
          "color-input": "var(--input)",
          "color-ring": "var(--ring)",
          "color-brand": "var(--brand)",
          "color-brand-foreground": "var(--brand-foreground)",
          "color-brand-subtle": "var(--brand-subtle)",
          "color-destructive": "var(--destructive)",
          "color-destructive-foreground": "var(--destructive-foreground)",
          "color-destructive-subtle": "var(--destructive-subtle)",
          "color-success": "var(--success)",
          "color-success-foreground": "var(--success-foreground)",
          "color-success-subtle": "var(--success-subtle)",
          "color-warning": "var(--warning)",
          "color-warning-foreground": "var(--warning-foreground)",
          "color-warning-subtle": "var(--warning-subtle)",
          "color-info": "var(--info)",
          "color-info-foreground": "var(--info-foreground)",
          "color-info-subtle": "var(--info-subtle)",
          "color-chart-1": "var(--chart-1)",
          "color-chart-2": "var(--chart-2)",
          "color-chart-3": "var(--chart-3)",
          "color-chart-4": "var(--chart-4)",
          "color-chart-5": "var(--chart-5)",
          "color-sidebar": "var(--sidebar)",
          "color-sidebar-foreground": "var(--sidebar-foreground)",
          "color-sidebar-primary": "var(--sidebar-primary)",
          "color-sidebar-primary-foreground": "var(--sidebar-primary-foreground)",
          "color-sidebar-accent": "var(--sidebar-accent)",
          "color-sidebar-accent-foreground": "var(--sidebar-accent-foreground)",
          "color-sidebar-border": "var(--sidebar-border)",
          "color-sidebar-ring": "var(--sidebar-ring)",
          "font-sans": "var(--font-geist-sans, ui-sans-serif), system-ui, sans-serif",
          "font-mono": "var(--font-geist-mono, ui-monospace), SFMono-Regular, Menlo, monospace",
          "font-heading": "var(--font-geist-sans, ui-sans-serif), system-ui, sans-serif",
          "radius-sm": "calc(var(--radius) * 0.6)",
          "radius-md": "calc(var(--radius) * 0.8)",
          "radius-lg": "var(--radius)",
          "radius-xl": "calc(var(--radius) * 1.4)",
          "radius-2xl": "calc(var(--radius) * 1.8)",
          "radius-3xl": "calc(var(--radius) * 2.2)",
          "radius-4xl": "calc(var(--radius) * 2.6)"
        },
        "light": {
          "radius": "0.5rem",
          "background": "oklch(0.995 0.002 264)",
          "foreground": "oklch(0.18 0.014 264)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.18 0.014 264)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.18 0.014 264)",
          "primary": "oklch(0.2 0.016 264)",
          "primary-foreground": "oklch(0.985 0.002 264)",
          "secondary": "oklch(0.962 0.005 264)",
          "secondary-foreground": "oklch(0.2 0.016 264)",
          "muted": "oklch(0.962 0.005 264)",
          "muted-foreground": "oklch(0.49 0.016 264)",
          "accent": "oklch(0.95 0.007 264)",
          "accent-foreground": "oklch(0.2 0.016 264)",
          "border": "oklch(0.912 0.007 264)",
          "input": "oklch(0.885 0.009 264)",
          "ring": "oklch(0.56 0.21 285)",
          "brand": "oklch(0.52 0.23 285)",
          "brand-foreground": "oklch(0.99 0.005 285)",
          "brand-subtle": "oklch(0.96 0.025 285)",
          "destructive": "oklch(0.53 0.2 25)",
          "destructive-foreground": "oklch(0.99 0.005 25)",
          "destructive-subtle": "oklch(0.965 0.02 25)",
          "success": "oklch(0.5 0.13 155)",
          "success-foreground": "oklch(0.99 0.01 155)",
          "success-subtle": "oklch(0.965 0.03 155)",
          "warning": "oklch(0.52 0.12 60)",
          "warning-foreground": "oklch(0.99 0.01 75)",
          "warning-subtle": "oklch(0.97 0.035 80)",
          "info": "oklch(0.5 0.15 245)",
          "info-foreground": "oklch(0.99 0.008 245)",
          "info-subtle": "oklch(0.965 0.02 245)",
          "chart-1": "oklch(0.56 0.21 285)",
          "chart-2": "oklch(0.66 0.13 200)",
          "chart-3": "oklch(0.64 0.15 155)",
          "chart-4": "oklch(0.75 0.15 75)",
          "chart-5": "oklch(0.62 0.2 350)",
          "sidebar": "oklch(0.982 0.004 264)",
          "sidebar-foreground": "oklch(0.18 0.014 264)",
          "sidebar-primary": "oklch(0.2 0.016 264)",
          "sidebar-primary-foreground": "oklch(0.985 0.002 264)",
          "sidebar-accent": "oklch(0.945 0.008 264)",
          "sidebar-accent-foreground": "oklch(0.2 0.016 264)",
          "sidebar-border": "oklch(0.912 0.007 264)",
          "sidebar-ring": "oklch(0.56 0.21 285)"
        },
        "dark": {
          "background": "oklch(0.145 0.008 264)",
          "foreground": "oklch(0.97 0.004 264)",
          "card": "oklch(0.175 0.009 264)",
          "card-foreground": "oklch(0.97 0.004 264)",
          "popover": "oklch(0.19 0.01 264)",
          "popover-foreground": "oklch(0.97 0.004 264)",
          "primary": "oklch(0.96 0.004 264)",
          "primary-foreground": "oklch(0.18 0.014 264)",
          "secondary": "oklch(0.235 0.01 264)",
          "secondary-foreground": "oklch(0.97 0.004 264)",
          "muted": "oklch(0.235 0.01 264)",
          "muted-foreground": "oklch(0.71 0.014 264)",
          "accent": "oklch(0.255 0.012 264)",
          "accent-foreground": "oklch(0.97 0.004 264)",
          "border": "oklch(1 0 0 / 9%)",
          "input": "oklch(1 0 0 / 14%)",
          "ring": "oklch(0.68 0.18 285)",
          "brand": "oklch(0.72 0.16 285)",
          "brand-foreground": "oklch(0.16 0.03 285)",
          "brand-subtle": "oklch(0.24 0.06 285)",
          "destructive": "oklch(0.7 0.17 22)",
          "destructive-foreground": "oklch(0.16 0.03 22)",
          "destructive-subtle": "oklch(0.24 0.06 22)",
          "success": "oklch(0.76 0.15 155)",
          "success-foreground": "oklch(0.16 0.03 155)",
          "success-subtle": "oklch(0.23 0.045 155)",
          "warning": "oklch(0.8 0.14 75)",
          "warning-foreground": "oklch(0.18 0.03 75)",
          "warning-subtle": "oklch(0.24 0.045 75)",
          "info": "oklch(0.74 0.13 245)",
          "info-foreground": "oklch(0.16 0.03 245)",
          "info-subtle": "oklch(0.24 0.05 245)",
          "chart-1": "oklch(0.68 0.18 285)",
          "chart-2": "oklch(0.74 0.12 200)",
          "chart-3": "oklch(0.72 0.15 155)",
          "chart-4": "oklch(0.8 0.14 75)",
          "chart-5": "oklch(0.7 0.18 350)",
          "sidebar": "oklch(0.16 0.009 264)",
          "sidebar-foreground": "oklch(0.97 0.004 264)",
          "sidebar-primary": "oklch(0.72 0.16 285)",
          "sidebar-primary-foreground": "oklch(0.16 0.03 285)",
          "sidebar-accent": "oklch(0.235 0.012 264)",
          "sidebar-accent-foreground": "oklch(0.97 0.004 264)",
          "sidebar-border": "oklch(1 0 0 / 9%)",
          "sidebar-ring": "oklch(0.68 0.18 285)"
        }
      }
    },
    {
      "name": "all",
      "type": "registry:item",
      "title": "Everything",
      "description": "Every component, hook, and block. Install @particular/theme on its own first; shadcn only applies theme variables for a theme you add directly.",
      "categories": [
        "foundation"
      ],
      "registryDependencies": [
        "@particular/api-keys",
        "@particular/app-shell",
        "@particular/billing",
        "@particular/create-organization",
        "@particular/deployments",
        "@particular/env-variables",
        "@particular/invitation",
        "@particular/members",
        "@particular/oauth-consent",
        "@particular/sign-in",
        "@particular/sign-up",
        "@particular/logo",
        "@particular/providers",
        "@particular/theme-toggle",
        "@particular/use-copy-to-clipboard",
        "@particular/use-mobile",
        "@particular/env-parser",
        "@particular/accordion",
        "@particular/activity-feed",
        "@particular/alert-dialog",
        "@particular/alert",
        "@particular/aspect-ratio",
        "@particular/attachment",
        "@particular/avatar",
        "@particular/badge",
        "@particular/banner",
        "@particular/breadcrumb",
        "@particular/bubble",
        "@particular/button-group",
        "@particular/button",
        "@particular/calendar",
        "@particular/card",
        "@particular/carousel",
        "@particular/chart",
        "@particular/checkbox",
        "@particular/code-block",
        "@particular/collapsible",
        "@particular/combobox",
        "@particular/command",
        "@particular/context-menu",
        "@particular/copy-button",
        "@particular/copyable-id",
        "@particular/data-table",
        "@particular/dialog",
        "@particular/direction",
        "@particular/drawer",
        "@particular/dropdown-menu",
        "@particular/dropzone",
        "@particular/empty",
        "@particular/env-var-editor",
        "@particular/field",
        "@particular/hover-card",
        "@particular/input-group",
        "@particular/input-otp",
        "@particular/input",
        "@particular/install-command",
        "@particular/item",
        "@particular/kbd",
        "@particular/label",
        "@particular/log-viewer",
        "@particular/marker",
        "@particular/menubar",
        "@particular/message-scroller",
        "@particular/message",
        "@particular/metric-card",
        "@particular/native-select",
        "@particular/navigation-menu",
        "@particular/page-header",
        "@particular/pagination",
        "@particular/popover",
        "@particular/pricing-table",
        "@particular/progress",
        "@particular/questionnaire",
        "@particular/radio-group",
        "@particular/relative-time",
        "@particular/resizable",
        "@particular/resource-row",
        "@particular/scroll-area",
        "@particular/secret-input",
        "@particular/select",
        "@particular/separator",
        "@particular/sheet",
        "@particular/sidebar",
        "@particular/skeleton",
        "@particular/slider",
        "@particular/spinner",
        "@particular/status-indicator",
        "@particular/switch",
        "@particular/table",
        "@particular/tabs",
        "@particular/textarea",
        "@particular/toast",
        "@particular/toggle-group",
        "@particular/toggle",
        "@particular/tooltip",
        "@particular/usage-meter"
      ]
    },
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "description": "Stacked sections that expand to reveal content.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/accordion.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "activity-feed",
      "type": "registry:ui",
      "title": "Activity feed",
      "description": "Timeline of who did what, and when.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/avatar",
        "@particular/relative-time"
      ],
      "files": [
        {
          "path": "registry/particular/ui/activity-feed.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "alert",
      "type": "registry:ui",
      "title": "Alert",
      "description": "Inline callout in default, info, success, warning, and destructive tones.",
      "categories": [
        "feedback"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/alert.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "alert-dialog",
      "type": "registry:ui",
      "title": "Alert dialog",
      "description": "Modal confirmation that requires a response.",
      "categories": [
        "overlays"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/alert-dialog.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "api-keys",
      "type": "registry:block",
      "title": "API keys",
      "description": "List, create (key shown once, optional permissions), and revoke API keys.",
      "categories": [
        "blocks"
      ],
      "dependencies": [
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/alert",
        "@particular/alert-dialog",
        "@particular/badge",
        "@particular/button",
        "@particular/checkbox",
        "@particular/dialog",
        "@particular/empty",
        "@particular/field",
        "@particular/input",
        "@particular/relative-time",
        "@particular/secret-input",
        "@particular/spinner",
        "@particular/table"
      ],
      "files": [
        {
          "path": "registry/particular/blocks/api-keys/api-keys.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "app-shell",
      "type": "registry:block",
      "title": "App shell",
      "description": "Sidebar with a team or personal-account and organization switcher, user menu, header with breadcrumbs, and a ⌘K command menu.",
      "categories": [
        "blocks"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/avatar",
        "@particular/breadcrumb",
        "@particular/button",
        "@particular/command",
        "@particular/dropdown-menu",
        "@particular/kbd",
        "@particular/logo",
        "@particular/separator",
        "@particular/sidebar",
        "@particular/theme-toggle"
      ],
      "files": [
        {
          "path": "registry/particular/blocks/app-shell/app-shell.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "aspect-ratio",
      "type": "registry:ui",
      "title": "Aspect ratio",
      "description": "Keeps content at a fixed ratio.",
      "categories": [
        "layout"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/aspect-ratio.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "attachment",
      "type": "registry:ui",
      "title": "Attachment",
      "description": "File or media attachment with title, description, and actions.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/attachment.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "avatar",
      "type": "registry:ui",
      "title": "Avatar",
      "description": "User or team image with fallback, badge, and groups.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/avatar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "badge",
      "type": "registry:ui",
      "title": "Badge",
      "description": "Compact label in neutral, brand, and semantic tones.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/badge.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "banner",
      "type": "registry:ui",
      "title": "Banner",
      "description": "Full-width announcement or incident bar, optionally dismissible.",
      "categories": [
        "feedback"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/banner.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "billing",
      "type": "registry:block",
      "title": "Billing",
      "description": "Current plan, usage, invoices, and plan changes.",
      "categories": [
        "blocks"
      ],
      "dependencies": [
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/alert",
        "@particular/badge",
        "@particular/button",
        "@particular/card",
        "@particular/pricing-table",
        "@particular/spinner",
        "@particular/table",
        "@particular/usage-meter"
      ],
      "files": [
        {
          "path": "registry/particular/blocks/billing/billing.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "breadcrumb",
      "type": "registry:ui",
      "title": "Breadcrumb",
      "description": "Path to the current page.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/breadcrumb.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "bubble",
      "type": "registry:ui",
      "title": "Bubble",
      "description": "Chat bubble with grouping and reactions.",
      "categories": [
        "chat"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/bubble.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "button",
      "type": "registry:ui",
      "title": "Button",
      "description": "Action trigger in default, brand, outline, secondary, ghost, destructive, and link variants.",
      "categories": [
        "actions"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/button.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "button-group",
      "type": "registry:ui",
      "title": "Button group",
      "description": "Joins related buttons into one control.",
      "categories": [
        "actions"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/separator"
      ],
      "files": [
        {
          "path": "registry/particular/ui/button-group.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "calendar",
      "type": "registry:ui",
      "title": "Calendar",
      "description": "Date grid for picking single dates or ranges.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0",
        "react-day-picker@^10.0.2"
      ],
      "registryDependencies": [
        "@particular/button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/calendar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "card",
      "type": "registry:ui",
      "title": "Card",
      "description": "Surface for grouping related content and actions.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/card.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "carousel",
      "type": "registry:ui",
      "title": "Carousel",
      "description": "Horizontally scrolling slides with controls.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "embla-carousel-react@^8.6.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/carousel.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "chart",
      "type": "registry:ui",
      "title": "Chart",
      "description": "Recharts wrappers themed with the chart tokens.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "recharts@3.8.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/chart.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "checkbox",
      "type": "registry:ui",
      "title": "Checkbox",
      "description": "Binary or indeterminate choice.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/checkbox.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "code-block",
      "type": "registry:ui",
      "title": "Code block",
      "description": "Syntax-highlighted code with filename, copy, line numbers, and highlighted lines.",
      "categories": [
        "developer"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "shiki@^4.5.0"
      ],
      "registryDependencies": [
        "@particular/copy-button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/code-block.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "collapsible",
      "type": "registry:ui",
      "title": "Collapsible",
      "description": "Shows and hides one region of content.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/collapsible.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "combobox",
      "type": "registry:ui",
      "title": "Combobox",
      "description": "Searchable select with single or multiple values.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button",
        "@particular/input-group"
      ],
      "files": [
        {
          "path": "registry/particular/ui/combobox.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "command",
      "type": "registry:ui",
      "title": "Command",
      "description": "Command palette with search and keyboard navigation.",
      "categories": [
        "overlays"
      ],
      "dependencies": [
        "cmdk@^1.1.1",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/dialog",
        "@particular/input-group"
      ],
      "files": [
        {
          "path": "registry/particular/ui/command.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "context-menu",
      "type": "registry:ui",
      "title": "Context menu",
      "description": "Right-click menu for contextual actions.",
      "categories": [
        "overlays"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/context-menu.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "copy-button",
      "type": "registry:ui",
      "title": "Copy button",
      "description": "Copies a value to the clipboard and confirms success or failure.",
      "categories": [
        "actions"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button",
        "@particular/use-copy-to-clipboard"
      ],
      "files": [
        {
          "path": "registry/particular/ui/copy-button.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "copyable-id",
      "type": "registry:ui",
      "title": "Copyable ID",
      "description": "Truncated resource ID with copy.",
      "categories": [
        "developer"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/copy-button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/copyable-id.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "create-organization",
      "type": "registry:block",
      "title": "Create organization",
      "description": "Name and URL slug form for a new organization.",
      "categories": [
        "blocks"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/alert",
        "@particular/button",
        "@particular/field",
        "@particular/input",
        "@particular/input-group",
        "@particular/spinner"
      ],
      "files": [
        {
          "path": "registry/particular/blocks/create-organization/create-organization-form.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "data-table",
      "type": "registry:ui",
      "title": "Data table",
      "description": "Sortable, searchable, paginated table with row selection (TanStack Table v9).",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "@tanstack/react-table@^9.2.4",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button",
        "@particular/checkbox",
        "@particular/input-group",
        "@particular/native-select",
        "@particular/table"
      ],
      "files": [
        {
          "path": "registry/particular/ui/data-table.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "deployments",
      "type": "registry:block",
      "title": "Deployments",
      "description": "Filterable deployment list with a build-log sheet.",
      "categories": [
        "blocks"
      ],
      "dependencies": [
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/alert",
        "@particular/badge",
        "@particular/button",
        "@particular/copyable-id",
        "@particular/empty",
        "@particular/input-group",
        "@particular/log-viewer",
        "@particular/native-select",
        "@particular/relative-time",
        "@particular/resource-row",
        "@particular/sheet",
        "@particular/skeleton",
        "@particular/status-indicator"
      ],
      "files": [
        {
          "path": "registry/particular/blocks/deployments/deployments.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "dialog",
      "type": "registry:ui",
      "title": "Dialog",
      "description": "Modal window for a focused task.",
      "categories": [
        "overlays"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/dialog.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "direction",
      "type": "registry:ui",
      "title": "Direction",
      "description": "Provides LTR or RTL direction to components.",
      "categories": [
        "layout"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/direction.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "drawer",
      "type": "registry:ui",
      "title": "Drawer",
      "description": "Panel that slides in from an edge, swipeable on touch.",
      "categories": [
        "overlays"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/drawer.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "dropdown-menu",
      "type": "registry:ui",
      "title": "Dropdown menu",
      "description": "Menu of actions opened from a trigger.",
      "categories": [
        "overlays"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/dropdown-menu.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "dropzone",
      "type": "registry:ui",
      "title": "Dropzone",
      "description": "Drag-and-drop file upload with type, size, and count validation.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/dropzone.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "empty",
      "type": "registry:ui",
      "title": "Empty",
      "description": "Empty state with media, copy, and next actions.",
      "categories": [
        "feedback"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/empty.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "env-parser",
      "type": "registry:lib",
      "title": "env-parser",
      "description": "Parse, serialize, and merge .env files.",
      "categories": [
        "utilities"
      ],
      "files": [
        {
          "path": "registry/particular/lib/env-parser.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "env-var-editor",
      "type": "registry:ui",
      "title": "Env var editor",
      "description": "Edit environment variables; paste a .env file to import.",
      "categories": [
        "developer"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button",
        "@particular/env-parser",
        "@particular/input",
        "@particular/secret-input"
      ],
      "files": [
        {
          "path": "registry/particular/ui/env-var-editor.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "env-variables",
      "type": "registry:block",
      "title": "Environment variables",
      "description": "Secret variables with per-row reveal, edit, delete, .env import, and download.",
      "categories": [
        "blocks"
      ],
      "dependencies": [
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/alert",
        "@particular/alert-dialog",
        "@particular/button",
        "@particular/copy-button",
        "@particular/dialog",
        "@particular/empty",
        "@particular/env-parser",
        "@particular/env-var-editor",
        "@particular/field",
        "@particular/input",
        "@particular/relative-time",
        "@particular/spinner",
        "@particular/table",
        "@particular/textarea"
      ],
      "files": [
        {
          "path": "registry/particular/blocks/env-variables/env-variables.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "field",
      "type": "registry:ui",
      "title": "Field",
      "description": "Label, description, and error wiring for form controls.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/label",
        "@particular/separator"
      ],
      "files": [
        {
          "path": "registry/particular/ui/field.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "hover-card",
      "type": "registry:ui",
      "title": "Hover card",
      "description": "Preview card shown on hover or focus.",
      "categories": [
        "overlays"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/hover-card.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "input",
      "type": "registry:ui",
      "title": "Input",
      "description": "Single-line text input.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/input.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "input-group",
      "type": "registry:ui",
      "title": "Input group",
      "description": "Input with inline or block addons, buttons, and text.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/button",
        "@particular/input",
        "@particular/textarea"
      ],
      "files": [
        {
          "path": "registry/particular/ui/input-group.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "input-otp",
      "type": "registry:ui",
      "title": "Input OTP",
      "description": "One-time passcode input with a slot per character.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "input-otp@^1.5.0",
        "lucide-react@^1.51.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/input-otp.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "install-command",
      "type": "registry:ui",
      "title": "Install command",
      "description": "One command shown for npm, pnpm, bun, and yarn; the choice persists.",
      "categories": [
        "developer"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/copy-button",
        "@particular/tabs"
      ],
      "files": [
        {
          "path": "registry/particular/ui/install-command.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "invitation",
      "type": "registry:block",
      "title": "Invitation",
      "description": "Accept or decline an invitation to join an organization.",
      "categories": [
        "blocks"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/alert",
        "@particular/avatar",
        "@particular/button",
        "@particular/spinner"
      ],
      "files": [
        {
          "path": "registry/particular/blocks/invitation/invitation-card.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "item",
      "type": "registry:ui",
      "title": "Item",
      "description": "Flexible row for lists, menus, and settings.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/separator"
      ],
      "files": [
        {
          "path": "registry/particular/ui/item.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "kbd",
      "type": "registry:ui",
      "title": "Kbd",
      "description": "Keyboard key and shortcut display.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/kbd.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "label",
      "type": "registry:ui",
      "title": "Label",
      "description": "Accessible label for a form control.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/label.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "log-viewer",
      "type": "registry:ui",
      "title": "Log viewer",
      "description": "Log lines with level filters, search, and follow mode.",
      "categories": [
        "developer"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button",
        "@particular/input-group",
        "@particular/toggle"
      ],
      "files": [
        {
          "path": "registry/particular/ui/log-viewer.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "logo",
      "type": "registry:component",
      "title": "Logo",
      "description": "The Particular.Tech mark and wordmark.",
      "categories": [
        "foundation"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/components/logo.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "marker",
      "type": "registry:ui",
      "title": "Marker",
      "description": "Inline label row with optional separator or border.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/marker.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "members",
      "type": "registry:block",
      "title": "Members",
      "description": "Organization members with roles, pending invitations with shareable links, and an invite dialog.",
      "categories": [
        "blocks"
      ],
      "dependencies": [
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/alert",
        "@particular/alert-dialog",
        "@particular/avatar",
        "@particular/badge",
        "@particular/button",
        "@particular/copy-button",
        "@particular/dialog",
        "@particular/field",
        "@particular/input",
        "@particular/input-group",
        "@particular/native-select",
        "@particular/relative-time",
        "@particular/spinner",
        "@particular/table"
      ],
      "files": [
        {
          "path": "registry/particular/blocks/members/members.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "menubar",
      "type": "registry:ui",
      "title": "Menubar",
      "description": "Desktop-style horizontal menu bar.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/dropdown-menu"
      ],
      "files": [
        {
          "path": "registry/particular/ui/menubar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "message",
      "type": "registry:ui",
      "title": "Message",
      "description": "Chat message with avatar, header, and footer.",
      "categories": [
        "chat"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/message.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "message-scroller",
      "type": "registry:ui",
      "title": "Message scroller",
      "description": "Scroll container that sticks to the newest message.",
      "categories": [
        "chat"
      ],
      "dependencies": [
        "@shadcn/react@^0.3.1",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/message-scroller.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "metric-card",
      "type": "registry:ui",
      "title": "Metric card",
      "description": "KPI value with change versus a previous period and a sparkline.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/card"
      ],
      "files": [
        {
          "path": "registry/particular/ui/metric-card.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "native-select",
      "type": "registry:ui",
      "title": "Native select",
      "description": "Styled native select element.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/native-select.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "navigation-menu",
      "type": "registry:ui",
      "title": "Navigation menu",
      "description": "Site navigation with dropdown panels.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/navigation-menu.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "oauth-consent",
      "type": "registry:block",
      "title": "OAuth consent",
      "description": "Consent screen for a third-party app requesting scopes on the user's account.",
      "categories": [
        "blocks"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/alert",
        "@particular/avatar",
        "@particular/button",
        "@particular/checkbox",
        "@particular/logo",
        "@particular/spinner"
      ],
      "files": [
        {
          "path": "registry/particular/blocks/oauth-consent/oauth-consent.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "page-header",
      "type": "registry:ui",
      "title": "Page header",
      "description": "Page title, description, and actions.",
      "categories": [
        "layout"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/page-header.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "pagination",
      "type": "registry:ui",
      "title": "Pagination",
      "description": "Navigation between pages of content.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/pagination.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "popover",
      "type": "registry:ui",
      "title": "Popover",
      "description": "Floating panel anchored to a trigger.",
      "categories": [
        "overlays"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/popover.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "pricing-table",
      "type": "registry:ui",
      "title": "Pricing table",
      "description": "Plans with monthly/yearly billing and a featured plan.",
      "categories": [
        "developer"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/badge",
        "@particular/button",
        "@particular/toggle-group"
      ],
      "files": [
        {
          "path": "registry/particular/ui/pricing-table.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "progress",
      "type": "registry:ui",
      "title": "Progress",
      "description": "Determinate progress bar with label and value.",
      "categories": [
        "feedback"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/progress.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "providers",
      "type": "registry:component",
      "title": "Providers",
      "description": "Theme, tooltip, and toast providers for the app root.",
      "categories": [
        "foundation"
      ],
      "dependencies": [
        "next-themes@^0.4.6"
      ],
      "registryDependencies": [
        "@particular/toast",
        "@particular/tooltip"
      ],
      "files": [
        {
          "path": "registry/particular/components/providers.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "questionnaire",
      "type": "registry:ui",
      "title": "Questionnaire",
      "description": "Multi-step question flow with choices, input, and progress.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "@shadcn/react@^0.3.1",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/questionnaire.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "radio-group",
      "type": "registry:ui",
      "title": "Radio group",
      "description": "Single choice from a set of options.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/radio-group.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "relative-time",
      "type": "registry:ui",
      "title": "Relative time",
      "description": "\"3 min ago\" that stays current, with the absolute time in a tooltip.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/tooltip"
      ],
      "files": [
        {
          "path": "registry/particular/ui/relative-time.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "resizable",
      "type": "registry:ui",
      "title": "Resizable",
      "description": "Panels separated by draggable handles.",
      "categories": [
        "layout"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "react-resizable-panels@^4.14.2"
      ],
      "files": [
        {
          "path": "registry/particular/ui/resizable.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "resource-row",
      "type": "registry:ui",
      "title": "Resource row",
      "description": "List row for a project, deployment, or database with status and metadata.",
      "categories": [
        "developer"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/item",
        "@particular/status-indicator"
      ],
      "files": [
        {
          "path": "registry/particular/ui/resource-row.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "scroll-area",
      "type": "registry:ui",
      "title": "Scroll area",
      "description": "Scroll container with styled scrollbars.",
      "categories": [
        "layout"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/scroll-area.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "secret-input",
      "type": "registry:ui",
      "title": "Secret input",
      "description": "Masked API key or secret field with reveal and copy.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/copy-button",
        "@particular/input-group"
      ],
      "files": [
        {
          "path": "registry/particular/ui/secret-input.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "select",
      "type": "registry:ui",
      "title": "Select",
      "description": "Pick one value from a list.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/select.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "separator",
      "type": "registry:ui",
      "title": "Separator",
      "description": "Visual divider between content.",
      "categories": [
        "layout"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/separator.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "sheet",
      "type": "registry:ui",
      "title": "Sheet",
      "description": "Side panel overlay for secondary tasks.",
      "categories": [
        "overlays"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/sheet.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "sidebar",
      "type": "registry:ui",
      "title": "Sidebar",
      "description": "Collapsible app sidebar with groups, menus, and a rail.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button",
        "@particular/input",
        "@particular/separator",
        "@particular/sheet",
        "@particular/skeleton",
        "@particular/tooltip",
        "@particular/use-mobile"
      ],
      "files": [
        {
          "path": "registry/particular/ui/sidebar.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "sign-in",
      "type": "registry:block",
      "title": "Sign in",
      "description": "Email and password, magic link, and OAuth sign-in form.",
      "categories": [
        "blocks"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/alert",
        "@particular/button",
        "@particular/field",
        "@particular/input",
        "@particular/logo",
        "@particular/spinner"
      ],
      "files": [
        {
          "path": "registry/particular/blocks/sign-in/sign-in-form.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "sign-up",
      "type": "registry:block",
      "title": "Sign up",
      "description": "Name, email, and password registration with optional OAuth providers.",
      "categories": [
        "blocks"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/alert",
        "@particular/button",
        "@particular/field",
        "@particular/input",
        "@particular/logo",
        "@particular/spinner"
      ],
      "files": [
        {
          "path": "registry/particular/blocks/sign-up/sign-up-form.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "skeleton",
      "type": "registry:ui",
      "title": "Skeleton",
      "description": "Placeholder shape while content loads.",
      "categories": [
        "feedback"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/skeleton.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "slider",
      "type": "registry:ui",
      "title": "Slider",
      "description": "Pick a value or range by dragging.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/slider.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "spinner",
      "type": "registry:ui",
      "title": "Spinner",
      "description": "Indeterminate loading indicator.",
      "categories": [
        "feedback"
      ],
      "dependencies": [
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/spinner.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "status-indicator",
      "type": "registry:ui",
      "title": "Status indicator",
      "description": "Dot and label for deployment and service states.",
      "categories": [
        "feedback"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/status-indicator.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "switch",
      "type": "registry:ui",
      "title": "Switch",
      "description": "On/off toggle for settings.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/switch.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "table",
      "type": "registry:ui",
      "title": "Table",
      "description": "Semantic table primitives.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/table.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "tabs",
      "type": "registry:ui",
      "title": "Tabs",
      "description": "Switch between related views.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/tabs.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "textarea",
      "type": "registry:ui",
      "title": "Textarea",
      "description": "Multi-line text input.",
      "categories": [
        "forms"
      ],
      "dependencies": [
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/textarea.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "theme-toggle",
      "type": "registry:component",
      "title": "Theme toggle",
      "description": "Light, dark, and system theme switcher.",
      "categories": [
        "foundation"
      ],
      "dependencies": [
        "lucide-react@^1.51.0",
        "next-themes@^0.4.6"
      ],
      "registryDependencies": [
        "@particular/button",
        "@particular/dropdown-menu"
      ],
      "files": [
        {
          "path": "registry/particular/components/theme-toggle.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "toast",
      "type": "registry:ui",
      "title": "Toast",
      "description": "Transient notifications with types and actions.",
      "categories": [
        "feedback"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0",
        "lucide-react@^1.51.0"
      ],
      "registryDependencies": [
        "@particular/button"
      ],
      "files": [
        {
          "path": "registry/particular/ui/toast.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "toggle",
      "type": "registry:ui",
      "title": "Toggle",
      "description": "Two-state button.",
      "categories": [
        "actions"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/toggle.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "toggle-group",
      "type": "registry:ui",
      "title": "Toggle group",
      "description": "Set of toggles with single or multiple selection.",
      "categories": [
        "actions"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "class-variance-authority@^0.7.1",
        "cn@^0.4.0"
      ],
      "registryDependencies": [
        "@particular/toggle"
      ],
      "files": [
        {
          "path": "registry/particular/ui/toggle-group.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "tooltip",
      "type": "registry:ui",
      "title": "Tooltip",
      "description": "Short label shown on hover or focus.",
      "categories": [
        "overlays"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/tooltip.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "usage-meter",
      "type": "registry:ui",
      "title": "Usage meter",
      "description": "Usage against a quota with warning and critical thresholds.",
      "categories": [
        "data-display"
      ],
      "dependencies": [
        "@base-ui/react@^1.8.0",
        "cn@^0.4.0"
      ],
      "files": [
        {
          "path": "registry/particular/ui/usage-meter.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "use-copy-to-clipboard",
      "type": "registry:hook",
      "title": "useCopyToClipboard",
      "description": "Clipboard write with copied/error status that resets.",
      "categories": [
        "utilities"
      ],
      "files": [
        {
          "path": "registry/particular/hooks/use-copy-to-clipboard.ts",
          "type": "registry:hook"
        }
      ]
    },
    {
      "name": "use-mobile",
      "type": "registry:hook",
      "title": "useIsMobile",
      "description": "Tracks whether the viewport is below the mobile breakpoint.",
      "categories": [
        "utilities"
      ],
      "files": [
        {
          "path": "registry/particular/hooks/use-mobile.ts",
          "type": "registry:hook"
        }
      ]
    }
  ]
}
