{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "uqudo",
  "homepage": "https://ui-components.dev.uqudo.io",
  "items": [
    {
      "name": "registry-ignore",
      "type": "registry:lib",
      "title": "Registry ignore helper",
      "description": "Reads `.registry/*.json` and returns the paths each installed item owns, so ESLint and Prettier can ignore them after a one-time hook.",
      "files": [
        {
          "path": ".registry/ignore.mjs",
          "type": "registry:file",
          "target": ".registry/ignore.mjs"
        },
        {
          "path": ".registry/registry-ignore.json",
          "type": "registry:file",
          "target": ".registry/registry-ignore.json"
        }
      ]
    },
    {
      "name": "theme",
      "type": "registry:item",
      "title": "Theme",
      "description": "The Uqudo design tokens — colours, radius, fonts and shadows for light and dark mode — as a single CSS file imported from globals.css.",
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "app/uqudo-theme.css",
          "type": "registry:file",
          "target": "app/uqudo-theme.css"
        },
        {
          "path": ".registry/theme.json",
          "type": "registry:file",
          "target": ".registry/theme.json"
        }
      ],
      "css": {
        "@import \"./uqudo-theme.css\"": {}
      },
      "docs": "The theme is now imported at the top of your globals.css. Delete the generated :root and .dark blocks from globals.css — they come after the import, so they would override the Uqudo tokens. Keep @custom-variant dark and @layer base. Add a --font-inter variable (e.g. next/font Inter) so --font-sans resolves. To update later, re-run with --overwrite."
    },
    {
      "name": "init-uqudo-ui",
      "type": "registry:base",
      "title": "Init Uqudo UI",
      "description": "Preset that configures components.json (radix-rhea, lucide, RTL), registers the @uqudo namespace and installs the Uqudo theme. Use with `shadcn init --preset` or `shadcn apply`.",
      "config": {
        "style": "radix-rhea",
        "rsc": true,
        "tsx": true,
        "tailwind": {
          "baseColor": "neutral",
          "cssVariables": true,
          "prefix": ""
        },
        "iconLibrary": "lucide",
        "rtl": true,
        "menuColor": "default",
        "menuAccent": "subtle",
        "registries": {
          "@uqudo": "https://ui-components.dev.uqudo.io/r/{name}.json"
        }
      },
      "registryDependencies": [
        "https://ui-components.dev.uqudo.io/r/theme.json",
        "https://ui-components.dev.uqudo.io/r/registry-ignore.json"
      ],
      "files": [
        {
          "path": ".registry/init-uqudo-ui.json",
          "type": "registry:file",
          "target": ".registry/init-uqudo-ui.json"
        }
      ],
      "docs": "components.json now uses the Uqudo style and knows the @uqudo namespace. Delete the :root and .dark blocks from globals.css (the imported uqudo-theme.css replaces them), then install components with: npx shadcn@latest add @uqudo/button"
    },
    {
      "name": "utils",
      "type": "registry:lib",
      "title": "Utils",
      "description": "Shared cn() class-name helper used by every Uqudo component.",
      "dependencies": ["clsx", "tailwind-merge"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "lib/utils.ts",
          "type": "registry:lib"
        },
        {
          "path": ".registry/utils.json",
          "type": "registry:file",
          "target": ".registry/utils.json"
        }
      ]
    },
    {
      "name": "logger",
      "type": "registry:lib",
      "title": "Logger & OpenTelemetry",
      "description": "Drop-in observability for Next.js. Captures server errors, client errors, unhandled rejections and console output as structured JSON, correlates them with OpenTelemetry traces, and exports over OTLP to the platform collector.",
      "categories": ["observability", "logging", "opentelemetry"],
      "dependencies": [
        "@vercel/otel@^2.1.3",
        "@opentelemetry/api@^1.9.1",
        "@opentelemetry/api-logs@^0.221.0",
        "@opentelemetry/sdk-logs@^0.221.0",
        "@opentelemetry/instrumentation@^0.221.0",
        "@opentelemetry/resources@^2.10.0",
        "@opentelemetry/sdk-trace-base@^2.10.0",
        "@opentelemetry/sdk-metrics@^2.10.0",
        "@opentelemetry/semantic-conventions@^1.43.0",
        "@opentelemetry/exporter-trace-otlp-proto@^0.221.0",
        "@opentelemetry/exporter-logs-otlp-proto@^0.221.0",
        "@opentelemetry/exporter-metrics-otlp-proto@^0.221.0",
        "@opentelemetry/host-metrics@^0.39.0",
        "prom-client@^15.1.3"
      ],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "envVars": {
        "OTEL_SERVICE_NAME": "",
        "OTEL_EXPORTER_OTLP_ENDPOINT": "http://otel-gateway-opentelemetry-collector.monitoring.svc.cluster.local:4318",
        "OBSERVABILITY_EXPORT_TRACES": "false",
        "OBSERVABILITY_EXPORT_LOGS": "false"
      },
      "files": [
        {
          "path": "lib/observability/types.ts",
          "type": "registry:lib",
          "target": "@lib/observability/types.ts"
        },
        {
          "path": "lib/observability/config.ts",
          "type": "registry:lib",
          "target": "@lib/observability/config.ts"
        },
        {
          "path": "lib/observability/redact.ts",
          "type": "registry:lib",
          "target": "@lib/observability/redact.ts"
        },
        {
          "path": "lib/observability/serialize.ts",
          "type": "registry:lib",
          "target": "@lib/observability/serialize.ts"
        },
        {
          "path": "lib/observability/logger.ts",
          "type": "registry:lib",
          "target": "@lib/observability/logger.ts"
        },
        {
          "path": "lib/observability/client-transport.ts",
          "type": "registry:lib",
          "target": "@lib/observability/client-transport.ts"
        },
        {
          "path": "lib/observability/console-patch.ts",
          "type": "registry:lib",
          "target": "@lib/observability/console-patch.ts"
        },
        {
          "path": "lib/observability/tracing.ts",
          "type": "registry:lib",
          "target": "@lib/observability/tracing.ts"
        },
        {
          "path": "lib/observability/otel-node.ts",
          "type": "registry:lib",
          "target": "@lib/observability/otel-node.ts"
        },
        {
          "path": "lib/observability/prometheus.ts",
          "type": "registry:lib",
          "target": "@lib/observability/prometheus.ts"
        },
        {
          "path": "lib/observability/prometheus-bridge.ts",
          "type": "registry:lib",
          "target": "@lib/observability/prometheus-bridge.ts"
        },
        {
          "path": "lib/observability/index.ts",
          "type": "registry:lib",
          "target": "@lib/observability/index.ts"
        },
        {
          "path": "lib/observability/README.md",
          "type": "registry:file",
          "target": "@lib/observability/README.md"
        },
        {
          "path": "components/uqudo/observability-provider.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/observability-provider.tsx"
        },
        {
          "path": "instrumentation.ts",
          "type": "registry:lib",
          "target": "instrumentation.ts"
        },
        {
          "path": "instrumentation-client.ts",
          "type": "registry:lib",
          "target": "instrumentation-client.ts"
        },
        {
          "path": "app/api/telemetry/route.ts",
          "type": "registry:lib",
          "target": "app/api/telemetry/route.ts"
        },
        {
          "path": "app/api/metrics/route.ts",
          "type": "registry:lib",
          "target": "app/api/metrics/route.ts"
        },
        {
          "path": ".registry/logger.json",
          "type": "registry:file",
          "target": ".registry/logger.json"
        }
      ],
      "docs": "Two steps. First, wrap your root layout in <ObservabilityProvider> from @/components/uqudo/observability-provider. Second, set OTEL_SERVICE_NAME to this application's name — it is the only variable that differs per project, and without it every service reports as 'nextjs-app' and they cannot be told apart. The other three are written with working values: OTEL_EXPORTER_OTLP_ENDPOINT already points at the platform collector, and OBSERVABILITY_EXPORT_TRACES and OBSERVABILITY_EXPORT_LOGS are false because logs already reach the backend over stdout and there is no traces pipeline yet. Flipping either to true is the only change needed when the platform adds those, so leave them in place. That is all: server errors, client errors, unhandled rejections, React render errors and console output are then captured automatically, with no per-error code anywhere, and request-rate, error-rate, duration and Node.js runtime metrics are pushed to the collector. One thing to check before installing: this item writes instrumentation.ts, instrumentation-client.ts, app/api/telemetry/route.ts and app/api/metrics/route.ts, so back up and merge afterwards if the project already has any of them. If your project has its own app/error.tsx or global-error.tsx, add <ObservabilityErrorReporter /> to it, since Next.js calls the nearest error boundary and would otherwise catch those render errors before the kit sees them. See lib/observability/README.md for the full reference."
    },
    {
      "name": "use-mobile",
      "type": "registry:hook",
      "title": "useIsMobile",
      "description": "Hook that reports whether the viewport is below the 768px mobile breakpoint. Used by Sidebar.",
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "hooks/use-mobile.ts",
          "type": "registry:hook",
          "target": "@hooks/use-mobile.ts"
        },
        {
          "path": ".registry/use-mobile.json",
          "type": "registry:file",
          "target": ".registry/use-mobile.json"
        }
      ]
    },
    {
      "name": "accordion",
      "type": "registry:component",
      "title": "Accordion",
      "description": "A vertically stacked set of interactive headings that each reveal a section of content.",
      "dependencies": ["cn", "lucide-react", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/accordion.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/accordion.tsx"
        },
        {
          "path": ".registry/accordion.json",
          "type": "registry:file",
          "target": ".registry/accordion.json"
        }
      ]
    },
    {
      "name": "alert-dialog",
      "type": "registry:component",
      "title": "Alert Dialog",
      "description": "A modal dialog that interrupts the user with important content and expects a response.",
      "dependencies": ["cn", "radix-ui"],
      "registryDependencies": ["@uqudo/button", "@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/alert-dialog.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/alert-dialog.tsx"
        },
        {
          "path": ".registry/alert-dialog.json",
          "type": "registry:file",
          "target": ".registry/alert-dialog.json"
        }
      ]
    },
    {
      "name": "alert",
      "type": "registry:component",
      "title": "Alert",
      "description": "Displays a callout for user attention.",
      "dependencies": ["class-variance-authority", "cn"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/alert.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/alert.tsx"
        },
        {
          "path": ".registry/alert.json",
          "type": "registry:file",
          "target": ".registry/alert.json"
        }
      ]
    },
    {
      "name": "aspect-ratio",
      "type": "registry:component",
      "title": "Aspect Ratio",
      "description": "Displays content within a desired ratio.",
      "dependencies": ["radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/aspect-ratio.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/aspect-ratio.tsx"
        },
        {
          "path": ".registry/aspect-ratio.json",
          "type": "registry:file",
          "target": ".registry/aspect-ratio.json"
        }
      ]
    },
    {
      "name": "attachment",
      "type": "registry:component",
      "title": "Attachment",
      "description": "Displays a file attachment with media, title, description and actions.",
      "dependencies": ["class-variance-authority", "cn", "radix-ui"],
      "registryDependencies": ["@uqudo/button", "@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/attachment.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/attachment.tsx"
        },
        {
          "path": ".registry/attachment.json",
          "type": "registry:file",
          "target": ".registry/attachment.json"
        }
      ]
    },
    {
      "name": "avatar",
      "type": "registry:component",
      "title": "Avatar",
      "description": "An image element with a fallback for representing the user.",
      "dependencies": ["cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/avatar.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/avatar.tsx"
        },
        {
          "path": ".registry/avatar.json",
          "type": "registry:file",
          "target": ".registry/avatar.json"
        }
      ]
    },
    {
      "name": "badge",
      "type": "registry:component",
      "title": "Badge",
      "description": "Displays a badge or a component that looks like a badge.",
      "dependencies": ["class-variance-authority", "cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/badge.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/badge.tsx"
        },
        {
          "path": ".registry/badge.json",
          "type": "registry:file",
          "target": ".registry/badge.json"
        }
      ]
    },
    {
      "name": "breadcrumb",
      "type": "registry:component",
      "title": "Breadcrumb",
      "description": "Displays the path to the current resource using a hierarchy of links.",
      "dependencies": ["cn", "lucide-react", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/breadcrumb.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/breadcrumb.tsx"
        },
        {
          "path": ".registry/breadcrumb.json",
          "type": "registry:file",
          "target": ".registry/breadcrumb.json"
        }
      ]
    },
    {
      "name": "button-group",
      "type": "registry:component",
      "title": "Button Group",
      "description": "Groups related buttons together with consistent spacing and borders.",
      "dependencies": ["class-variance-authority", "cn", "radix-ui"],
      "registryDependencies": ["@uqudo/separator", "@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/button-group.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/button-group.tsx"
        },
        {
          "path": ".registry/button-group.json",
          "type": "registry:file",
          "target": ".registry/button-group.json"
        }
      ]
    },
    {
      "name": "button",
      "type": "registry:component",
      "title": "Button",
      "description": "Displays a button, or any element that should look and behave like one.",
      "dependencies": ["class-variance-authority", "cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/button.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/button.tsx"
        },
        {
          "path": ".registry/button.json",
          "type": "registry:file",
          "target": ".registry/button.json"
        }
      ]
    },
    {
      "name": "calendar",
      "type": "registry:component",
      "title": "Calendar",
      "description": "A date field component that lets users enter and edit dates.",
      "dependencies": ["cn", "lucide-react", "react-day-picker"],
      "registryDependencies": ["@uqudo/button", "@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/calendar.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/calendar.tsx"
        },
        {
          "path": ".registry/calendar.json",
          "type": "registry:file",
          "target": ".registry/calendar.json"
        }
      ]
    },
    {
      "name": "card",
      "type": "registry:component",
      "title": "Card",
      "description": "Displays a card with header, content and footer.",
      "dependencies": ["cn"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/card.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/card.tsx"
        },
        {
          "path": ".registry/card.json",
          "type": "registry:file",
          "target": ".registry/card.json"
        }
      ]
    },
    {
      "name": "chart",
      "type": "registry:component",
      "title": "Chart",
      "description": "Beautiful charts built with Recharts. Copy and paste into your apps.",
      "dependencies": ["cn", "recharts"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/chart.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/chart.tsx"
        },
        {
          "path": ".registry/chart.json",
          "type": "registry:file",
          "target": ".registry/chart.json"
        }
      ]
    },
    {
      "name": "checkbox",
      "type": "registry:component",
      "title": "Checkbox",
      "description": "A control that lets the user toggle between checked and not checked.",
      "dependencies": ["cn", "lucide-react", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/checkbox.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/checkbox.tsx"
        },
        {
          "path": ".registry/checkbox.json",
          "type": "registry:file",
          "target": ".registry/checkbox.json"
        }
      ]
    },
    {
      "name": "collapsible",
      "type": "registry:component",
      "title": "Collapsible",
      "description": "An interactive component that expands and collapses a panel.",
      "dependencies": ["radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/collapsible.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/collapsible.tsx"
        },
        {
          "path": ".registry/collapsible.json",
          "type": "registry:file",
          "target": ".registry/collapsible.json"
        }
      ]
    },
    {
      "name": "combobox",
      "type": "registry:component",
      "title": "Combobox",
      "description": "An autocomplete input with a list of suggestions.",
      "dependencies": ["@base-ui/react", "cn", "lucide-react"],
      "registryDependencies": [
        "@uqudo/button",
        "@uqudo/input-group",
        "@uqudo/registry-ignore"
      ],
      "files": [
        {
          "path": "components/uqudo/ui/combobox.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/combobox.tsx"
        },
        {
          "path": ".registry/combobox.json",
          "type": "registry:file",
          "target": ".registry/combobox.json"
        }
      ]
    },
    {
      "name": "command",
      "type": "registry:component",
      "title": "Command",
      "description": "Fast, composable, unstyled command menu for React.",
      "dependencies": ["cmdk", "cn", "lucide-react"],
      "registryDependencies": [
        "@uqudo/dialog",
        "@uqudo/input-group",
        "@uqudo/registry-ignore"
      ],
      "files": [
        {
          "path": "components/uqudo/ui/command.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/command.tsx"
        },
        {
          "path": ".registry/command.json",
          "type": "registry:file",
          "target": ".registry/command.json"
        }
      ]
    },
    {
      "name": "context-menu",
      "type": "registry:component",
      "title": "Context Menu",
      "description": "Displays a menu at the pointer, triggered by a right click or a long press.",
      "dependencies": ["cn", "lucide-react", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/context-menu.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/context-menu.tsx"
        },
        {
          "path": ".registry/context-menu.json",
          "type": "registry:file",
          "target": ".registry/context-menu.json"
        }
      ]
    },
    {
      "name": "dialog",
      "type": "registry:component",
      "title": "Dialog",
      "description": "A window overlaid on the primary window, rendering the content underneath inert.",
      "dependencies": ["cn", "lucide-react", "radix-ui"],
      "registryDependencies": ["@uqudo/button", "@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/dialog.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/dialog.tsx"
        },
        {
          "path": ".registry/dialog.json",
          "type": "registry:file",
          "target": ".registry/dialog.json"
        }
      ]
    },
    {
      "name": "direction",
      "type": "registry:component",
      "title": "Direction",
      "description": "Sets the reading direction (LTR or RTL) for every Radix-based component beneath it.",
      "dependencies": ["radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/direction.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/direction.tsx"
        },
        {
          "path": ".registry/direction.json",
          "type": "registry:file",
          "target": ".registry/direction.json"
        }
      ]
    },
    {
      "name": "dropdown-menu",
      "type": "registry:component",
      "title": "Dropdown Menu",
      "description": "Displays a menu to the user, triggered by a button.",
      "dependencies": ["cn", "lucide-react", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/dropdown-menu.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/dropdown-menu.tsx"
        },
        {
          "path": ".registry/dropdown-menu.json",
          "type": "registry:file",
          "target": ".registry/dropdown-menu.json"
        }
      ]
    },
    {
      "name": "field",
      "type": "registry:component",
      "title": "Field",
      "description": "Form field primitives: label, description, error and layout.",
      "dependencies": ["class-variance-authority", "cn"],
      "registryDependencies": [
        "@uqudo/label",
        "@uqudo/separator",
        "@uqudo/registry-ignore"
      ],
      "files": [
        {
          "path": "components/uqudo/ui/field.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/field.tsx"
        },
        {
          "path": ".registry/field.json",
          "type": "registry:file",
          "target": ".registry/field.json"
        }
      ]
    },
    {
      "name": "hover-card",
      "type": "registry:component",
      "title": "Hover Card",
      "description": "For sighted users to preview content available behind a link.",
      "dependencies": ["cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/hover-card.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/hover-card.tsx"
        },
        {
          "path": ".registry/hover-card.json",
          "type": "registry:file",
          "target": ".registry/hover-card.json"
        }
      ]
    },
    {
      "name": "input-group",
      "type": "registry:component",
      "title": "Input Group",
      "description": "Combines an input with add-ons, buttons and text.",
      "dependencies": ["class-variance-authority", "cn"],
      "registryDependencies": [
        "@uqudo/button",
        "@uqudo/input",
        "@uqudo/textarea",
        "@uqudo/registry-ignore"
      ],
      "files": [
        {
          "path": "components/uqudo/ui/input-group.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/input-group.tsx"
        },
        {
          "path": ".registry/input-group.json",
          "type": "registry:file",
          "target": ".registry/input-group.json"
        }
      ]
    },
    {
      "name": "input-otp",
      "type": "registry:component",
      "title": "Input OTP",
      "description": "Accessible one-time password input with copy-paste support.",
      "dependencies": ["cn", "input-otp", "lucide-react"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/input-otp.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/input-otp.tsx"
        },
        {
          "path": ".registry/input-otp.json",
          "type": "registry:file",
          "target": ".registry/input-otp.json"
        }
      ]
    },
    {
      "name": "input",
      "type": "registry:component",
      "title": "Input",
      "description": "Displays a form input field.",
      "dependencies": ["cn"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/input.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/input.tsx"
        },
        {
          "path": ".registry/input.json",
          "type": "registry:file",
          "target": ".registry/input.json"
        }
      ]
    },
    {
      "name": "item",
      "type": "registry:component",
      "title": "Item",
      "description": "A flexible list-item layout with media, content and actions.",
      "dependencies": ["class-variance-authority", "cn", "radix-ui"],
      "registryDependencies": ["@uqudo/separator", "@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/item.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/item.tsx"
        },
        {
          "path": ".registry/item.json",
          "type": "registry:file",
          "target": ".registry/item.json"
        }
      ]
    },
    {
      "name": "kbd",
      "type": "registry:component",
      "title": "Kbd",
      "description": "Displays keyboard input or shortcuts.",
      "dependencies": ["cn"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/kbd.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/kbd.tsx"
        },
        {
          "path": ".registry/kbd.json",
          "type": "registry:file",
          "target": ".registry/kbd.json"
        }
      ]
    },
    {
      "name": "label",
      "type": "registry:component",
      "title": "Label",
      "description": "Renders an accessible label associated with a control.",
      "dependencies": ["cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/label.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/label.tsx"
        },
        {
          "path": ".registry/label.json",
          "type": "registry:file",
          "target": ".registry/label.json"
        }
      ]
    },
    {
      "name": "menubar",
      "type": "registry:component",
      "title": "Menubar",
      "description": "A persistent menu bar with dropdown menus, as seen in desktop applications.",
      "dependencies": ["cn", "lucide-react", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/menubar.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/menubar.tsx"
        },
        {
          "path": ".registry/menubar.json",
          "type": "registry:file",
          "target": ".registry/menubar.json"
        }
      ]
    },
    {
      "name": "navigation-menu",
      "type": "registry:component",
      "title": "Navigation Menu",
      "description": "A collection of links for navigating websites.",
      "dependencies": [
        "class-variance-authority",
        "cn",
        "lucide-react",
        "radix-ui"
      ],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/navigation-menu.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/navigation-menu.tsx"
        },
        {
          "path": ".registry/navigation-menu.json",
          "type": "registry:file",
          "target": ".registry/navigation-menu.json"
        }
      ]
    },
    {
      "name": "pagination",
      "type": "registry:component",
      "title": "Pagination",
      "description": "Pagination with page navigation, next and previous links.",
      "dependencies": ["cn", "lucide-react"],
      "registryDependencies": ["@uqudo/button", "@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/pagination.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/pagination.tsx"
        },
        {
          "path": ".registry/pagination.json",
          "type": "registry:file",
          "target": ".registry/pagination.json"
        }
      ]
    },
    {
      "name": "popover",
      "type": "registry:component",
      "title": "Popover",
      "description": "Displays rich content in a portal, triggered by a button.",
      "dependencies": ["cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/popover.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/popover.tsx"
        },
        {
          "path": ".registry/popover.json",
          "type": "registry:file",
          "target": ".registry/popover.json"
        }
      ]
    },
    {
      "name": "radio-group",
      "type": "registry:component",
      "title": "Radio Group",
      "description": "A set of checkable buttons where only one can be checked at a time.",
      "dependencies": ["cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/radio-group.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/radio-group.tsx"
        },
        {
          "path": ".registry/radio-group.json",
          "type": "registry:file",
          "target": ".registry/radio-group.json"
        }
      ]
    },
    {
      "name": "select",
      "type": "registry:component",
      "title": "Select",
      "description": "Displays a list of options for the user to pick from, triggered by a button.",
      "dependencies": ["cn", "lucide-react", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/select.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/select.tsx"
        },
        {
          "path": ".registry/select.json",
          "type": "registry:file",
          "target": ".registry/select.json"
        }
      ]
    },
    {
      "name": "separator",
      "type": "registry:component",
      "title": "Separator",
      "description": "Visually or semantically separates content.",
      "dependencies": ["cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/separator.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/separator.tsx"
        },
        {
          "path": ".registry/separator.json",
          "type": "registry:file",
          "target": ".registry/separator.json"
        }
      ]
    },
    {
      "name": "sheet",
      "type": "registry:component",
      "title": "Sheet",
      "description": "Extends the Dialog component to display content that slides in from the edge of the screen.",
      "dependencies": ["cn", "lucide-react", "radix-ui"],
      "registryDependencies": ["@uqudo/button", "@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/sheet.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/sheet.tsx"
        },
        {
          "path": ".registry/sheet.json",
          "type": "registry:file",
          "target": ".registry/sheet.json"
        }
      ]
    },
    {
      "name": "sidebar",
      "type": "registry:component",
      "title": "Sidebar",
      "description": "A composable, themeable and customizable sidebar component.",
      "dependencies": [
        "class-variance-authority",
        "cn",
        "lucide-react",
        "radix-ui"
      ],
      "registryDependencies": [
        "@uqudo/button",
        "@uqudo/input",
        "@uqudo/separator",
        "@uqudo/sheet",
        "@uqudo/skeleton",
        "@uqudo/tooltip",
        "@uqudo/use-mobile",
        "@uqudo/registry-ignore"
      ],
      "files": [
        {
          "path": "components/uqudo/ui/sidebar.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/sidebar.tsx"
        },
        {
          "path": ".registry/sidebar.json",
          "type": "registry:file",
          "target": ".registry/sidebar.json"
        }
      ]
    },
    {
      "name": "skeleton",
      "type": "registry:component",
      "title": "Skeleton",
      "description": "Use to show a placeholder while content is loading.",
      "dependencies": ["cn"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/skeleton.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/skeleton.tsx"
        },
        {
          "path": ".registry/skeleton.json",
          "type": "registry:file",
          "target": ".registry/skeleton.json"
        }
      ]
    },
    {
      "name": "sonner",
      "type": "registry:component",
      "title": "Sonner",
      "description": "An opinionated toast component for React.",
      "dependencies": ["lucide-react", "next-themes", "sonner"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/sonner.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/sonner.tsx"
        },
        {
          "path": ".registry/sonner.json",
          "type": "registry:file",
          "target": ".registry/sonner.json"
        }
      ]
    },
    {
      "name": "spinner",
      "type": "registry:component",
      "title": "Spinner",
      "description": "An indicator that something is loading.",
      "dependencies": ["cn", "lucide-react"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/spinner.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/spinner.tsx"
        },
        {
          "path": ".registry/spinner.json",
          "type": "registry:file",
          "target": ".registry/spinner.json"
        }
      ]
    },
    {
      "name": "switch",
      "type": "registry:component",
      "title": "Switch",
      "description": "A control that lets the user toggle between checked and not checked.",
      "dependencies": ["cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/switch.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/switch.tsx"
        },
        {
          "path": ".registry/switch.json",
          "type": "registry:file",
          "target": ".registry/switch.json"
        }
      ]
    },
    {
      "name": "table",
      "type": "registry:component",
      "title": "Table",
      "description": "A responsive table component.",
      "dependencies": ["cn"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/table.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/table.tsx"
        },
        {
          "path": ".registry/table.json",
          "type": "registry:file",
          "target": ".registry/table.json"
        }
      ]
    },
    {
      "name": "tabs",
      "type": "registry:component",
      "title": "Tabs",
      "description": "A set of layered sections of content that display one panel at a time.",
      "dependencies": ["class-variance-authority", "cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/tabs.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/tabs.tsx"
        },
        {
          "path": ".registry/tabs.json",
          "type": "registry:file",
          "target": ".registry/tabs.json"
        }
      ]
    },
    {
      "name": "textarea",
      "type": "registry:component",
      "title": "Textarea",
      "description": "Displays a form textarea.",
      "dependencies": ["cn"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/textarea.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/textarea.tsx"
        },
        {
          "path": ".registry/textarea.json",
          "type": "registry:file",
          "target": ".registry/textarea.json"
        }
      ]
    },
    {
      "name": "toggle-group",
      "type": "registry:component",
      "title": "Toggle Group",
      "description": "A set of two-state buttons that can be toggled on or off.",
      "dependencies": ["class-variance-authority", "cn", "radix-ui"],
      "registryDependencies": ["@uqudo/toggle", "@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/toggle-group.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/toggle-group.tsx"
        },
        {
          "path": ".registry/toggle-group.json",
          "type": "registry:file",
          "target": ".registry/toggle-group.json"
        }
      ]
    },
    {
      "name": "toggle",
      "type": "registry:component",
      "title": "Toggle",
      "description": "A two-state button that can be either on or off.",
      "dependencies": ["class-variance-authority", "cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/toggle.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/toggle.tsx"
        },
        {
          "path": ".registry/toggle.json",
          "type": "registry:file",
          "target": ".registry/toggle.json"
        }
      ]
    },
    {
      "name": "tooltip",
      "type": "registry:component",
      "title": "Tooltip",
      "description": "A popup that shows information related to an element on hover or focus.",
      "dependencies": ["cn", "radix-ui"],
      "registryDependencies": ["@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/ui/tooltip.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/ui/tooltip.tsx"
        },
        {
          "path": ".registry/tooltip.json",
          "type": "registry:file",
          "target": ".registry/tooltip.json"
        }
      ]
    },
    {
      "name": "data-table",
      "type": "registry:block",
      "title": "Data Table",
      "description": "Sortable, filterable, paginated table with column visibility, row selection, clickable rows and empty states — built on TanStack Table v8.",
      "dependencies": ["@tanstack/react-table@^8.21.3", "cn", "lucide-react"],
      "registryDependencies": [
        "@uqudo/button",
        "@uqudo/checkbox",
        "@uqudo/dropdown-menu",
        "@uqudo/input",
        "@uqudo/registry-ignore",
        "@uqudo/select",
        "@uqudo/table"
      ],
      "files": [
        {
          "path": "components/uqudo/blocks/data-table/datatable.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/blocks/data-table/datatable.tsx"
        },
        {
          "path": "components/uqudo/blocks/data-table/datatable-column-header.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/blocks/data-table/datatable-column-header.tsx"
        },
        {
          "path": "components/uqudo/blocks/data-table/datatable-empty-state.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/blocks/data-table/datatable-empty-state.tsx"
        },
        {
          "path": "components/uqudo/blocks/data-table/datatable-multi-select.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/blocks/data-table/datatable-multi-select.tsx"
        },
        {
          "path": "components/uqudo/blocks/data-table/datatable-pagination.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/blocks/data-table/datatable-pagination.tsx"
        },
        {
          "path": "components/uqudo/blocks/data-table/datatable-search-by.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/blocks/data-table/datatable-search-by.tsx"
        },
        {
          "path": "components/uqudo/blocks/data-table/datatable-view-options.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/blocks/data-table/datatable-view-options.tsx"
        },
        {
          "path": "components/uqudo/blocks/data-table/row-number-cell.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/blocks/data-table/row-number-cell.tsx"
        },
        {
          "path": ".registry/data-table.json",
          "type": "registry:file",
          "target": ".registry/data-table.json"
        }
      ]
    },
    {
      "name": "welcome-card",
      "type": "registry:block",
      "title": "Welcome Card",
      "description": "Example block showing how composed blocks are distributed via the registry.",
      "dependencies": ["lucide-react"],
      "registryDependencies": ["@uqudo/button", "@uqudo/registry-ignore"],
      "files": [
        {
          "path": "components/uqudo/welcome-card.tsx",
          "type": "registry:component",
          "target": "@components/uqudo/welcome-card.tsx"
        },
        {
          "path": ".registry/welcome-card.json",
          "type": "registry:file",
          "target": ".registry/welcome-card.json"
        }
      ]
    }
  ]
}
