{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "KaUI Shadcn Registry",
  "homepage": "https://kaui-shadcn.vercel.app",
  "items": [
    {
      "name": "use-async",
      "type": "registry:hook",
      "description": "A hook that owns the async action lifecycle — loading state, success, error, and settled callbacks",
      "registryDependencies": []
    },
    {
      "name": "async-button",
      "type": "registry:component",
      "description": "A button that performs async operations with a no-layout-shift loading state",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "utils",
        "button",
        "https://kaui-shadcn-registry.vercel.app/r/use-async.json"
      ]
    },
    {
      "name": "async-scope",
      "type": "registry:component",
      "description": "A coordination layer for async UI — decouple what fires an action from what reacts to it.",
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "utils",
        "button",
        "https://kaui-shadcn-registry.vercel.app/r/use-async.json"
      ]
    },
    {
      "name": "confirm-action",
      "type": "registry:component",
      "description": "A confirmation dialog that wraps an async action with loading state",
      "registryDependencies": [
        "alert-dialog",
        "https://kaui-shadcn-registry.vercel.app/r/async-button.json"
      ]
    },
    {
      "name": "use-debounce",
      "type": "registry:hook",
      "description": "A debounce hook that returns a stable { execute, cancel } object — safe to call without wrapping in useCallback",
      "registryDependencies": []
    },
    {
      "name": "use-controlled-state",
      "type": "registry:hook",
      "description": "Uncontrolled/controlled state bridge — use like useState but accepts optional value and onChange props for full controlled mode support",
      "registryDependencies": []
    },
    {
      "name": "combobox",
      "type": "registry:component",
      "description": "A single-select combobox with inline search, async loading support, and full controlled/uncontrolled API",
      "dependencies": [
        "cmdk",
        "lucide-react"
      ],
      "registryDependencies": [
        "popover",
        "command",
        "input",
        "skeleton",
        "utils",
        "https://kaui-shadcn-registry.vercel.app/r/use-controlled-state.json"
      ]
    },
    {
      "name": "input-group",
      "type": "registry:component",
      "description": "Compose inputs with inline addons, buttons, and labels in a styled container",
      "dependencies": [
        "class-variance-authority"
      ],
      "registryDependencies": [
        "utils",
        "input",
        "button",
        "textarea"
      ]
    },
    {
      "name": "multi-select",
      "type": "registry:component",
      "description": "A multi-select combobox with inline search, toggle-based selection, and full controlled/uncontrolled API",
      "dependencies": [
        "cmdk",
        "lucide-react"
      ],
      "registryDependencies": [
        "popover",
        "command",
        "input",
        "skeleton",
        "utils",
        "https://kaui-shadcn-registry.vercel.app/r/use-controlled-state.json"
      ]
    },
    {
      "name": "password-input",
      "type": "registry:component",
      "description": "A password input with show/hide toggle and an optional strength indicator",
      "dependencies": [
        "@zxcvbn-ts/core",
        "@zxcvbn-ts/language-common",
        "@zxcvbn-ts/language-en",
        "@zxcvbn-ts/language-de",
        "lucide-react"
      ],
      "registryDependencies": [
        "utils",
        "https://kaui-shadcn-registry.vercel.app/r/input-group.json"
      ]
    }
  ]
}