{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "liqui",
  "homepage": "https://liqui.design",
  "items": [
    {
      "name": "liqui",
      "type": "registry:style",
      "title": "liqui",
      "description": "Liquid glass surfaces for Base UI. Installs the refraction kernel and the glass design tokens.",
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "utils"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "lq-radius": "16px"
        },
        "light": {
          "lq-text": "rgba(28, 28, 40, 0.95)",
          "lq-text-dim": "rgba(28, 28, 40, 0.55)",
          "lq-tint": "rgba(255, 255, 255, 0.48)",
          "lq-tint-deep": "rgba(255, 255, 255, 0.14)",
          "lq-rim-hi": "rgba(255, 255, 255, 0.85)",
          "lq-rim-lo": "rgba(255, 255, 255, 0.28)",
          "lq-shadow": "0 24px 60px rgba(10, 15, 40, 0.35), 0 4px 14px rgba(10, 15, 40, 0.18)",
          "lq-highlight": "rgba(255, 255, 255, 0.5)",
          "lq-accent": "#2f6bff",
          "lq-danger": "#e5484d",
          "lq-danger-text": "#c1272c",
          "lq-scrim": "rgba(12, 14, 28, 0.32)"
        },
        "dark": {
          "lq-text": "rgba(245, 246, 255, 0.96)",
          "lq-text-dim": "rgba(245, 246, 255, 0.55)",
          "lq-tint": "rgba(30, 32, 46, 0.62)",
          "lq-tint-deep": "rgba(18, 20, 32, 0.4)",
          "lq-rim-hi": "rgba(255, 255, 255, 0.5)",
          "lq-rim-lo": "rgba(255, 255, 255, 0.12)",
          "lq-shadow": "0 24px 60px rgba(0, 0, 5, 0.55), 0 4px 14px rgba(0, 0, 5, 0.35)",
          "lq-highlight": "rgba(255, 255, 255, 0.18)",
          "lq-accent": "#6f9dff",
          "lq-danger": "#ff7076",
          "lq-danger-text": "#ff7076",
          "lq-scrim": "rgba(0, 0, 6, 0.48)"
        }
      },
      "docs": "liqui's refraction only renders in Chromium today; Safari and Firefox fall back to frosted blur automatically. Glass needs something to refract — put surfaces over imagery or a gradient, not a flat fill."
    },
    {
      "name": "utils",
      "type": "registry:lib",
      "title": "cn",
      "description": "clsx + tailwind-merge class combiner.",
      "dependencies": [
        "clsx",
        "tailwind-merge"
      ],
      "files": [
        {
          "path": "registry/liqui/lib/utils.ts",
          "type": "registry:lib",
          "target": "@lib/utils.ts"
        }
      ]
    },
    {
      "name": "lens",
      "type": "registry:lib",
      "title": "Lens kernel",
      "description": "Refraction kernel for the small controls: glass profiles, displacement and specular maps, the SVG filter chain, and a spring integrator.",
      "dependencies": [],
      "files": [
        {
          "path": "registry/liqui/lib/lens.tsx",
          "type": "registry:lib",
          "target": "@lib/lens.tsx"
        }
      ]
    },
    {
      "name": "button",
      "type": "registry:ui",
      "title": "Glass Button",
      "description": "A button rendered as a refracting glass surface, with accent and danger tints.",
      "meta": {
        "added": "2026-08-06"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/button.tsx",
          "type": "registry:ui",
          "target": "@ui/button.tsx"
        }
      ]
    },
    {
      "name": "checkbox",
      "type": "registry:ui",
      "title": "Glass Checkbox",
      "description": "A checkbox whose glass fills with accent when checked, keeping the bezel and rim light.",
      "meta": {
        "added": "2026-08-06"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/checkbox.tsx",
          "type": "registry:ui",
          "target": "@ui/checkbox.tsx"
        }
      ]
    },
    {
      "name": "field",
      "type": "registry:ui",
      "title": "Glass Field",
      "description": "A labelled form field whose control sits on its own glass surface.",
      "meta": {
        "added": "2026-08-06"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/field.tsx",
          "type": "registry:ui",
          "target": "@ui/field.tsx"
        }
      ]
    },
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Glass Accordion",
      "description": "Collapsible panels where each item is its own resizing glass surface.",
      "meta": {
        "added": "2026-08-06"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/accordion.tsx",
          "type": "registry:ui",
          "target": "@ui/accordion.tsx"
        }
      ]
    },
    {
      "name": "alert-dialog",
      "type": "registry:ui",
      "title": "Glass Alert Dialog",
      "description": "A modal confirmation dialog on the library's largest glass surface.",
      "meta": {
        "added": "2026-08-06"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/alert-dialog.tsx",
          "type": "registry:ui",
          "target": "@ui/alert-dialog.tsx"
        }
      ]
    },
    {
      "name": "context-menu",
      "type": "registry:ui",
      "title": "Glass Context Menu",
      "description": "A right-click menu with submenus, checkbox and radio items, on a keep-mounted glass popup.",
      "meta": {
        "added": "2026-08-06"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/context-menu.tsx",
          "type": "registry:ui",
          "target": "@ui/context-menu.tsx"
        }
      ]
    },
    {
      "name": "dialog",
      "type": "registry:ui",
      "title": "Glass Dialog",
      "description": "A dismissible modal on glass, with a corner dismiss that stays flat.",
      "meta": {
        "added": "2026-08-13"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/dialog.tsx",
          "type": "registry:ui",
          "target": "@ui/dialog.tsx"
        }
      ]
    },
    {
      "name": "popover",
      "type": "registry:ui",
      "title": "Glass Popover",
      "description": "A glass panel anchored to a trigger, with a drawn tail.",
      "meta": {
        "added": "2026-08-13"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/popover.tsx",
          "type": "registry:ui",
          "target": "@ui/popover.tsx"
        }
      ]
    },
    {
      "name": "tooltip",
      "type": "registry:ui",
      "title": "Glass Tooltip",
      "description": "The smallest floating surface, frosted harder so it stays readable.",
      "meta": {
        "added": "2026-08-13"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/tooltip.tsx",
          "type": "registry:ui",
          "target": "@ui/tooltip.tsx"
        }
      ]
    },
    {
      "name": "switch",
      "type": "registry:ui",
      "title": "Glass Switch",
      "description": "A lip-bezel lens: an opaque white pill at rest that swells out of its track and turns to glass under your finger.",
      "meta": {
        "added": "2026-08-10"
      },
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils",
        "lens"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/switch.tsx",
          "type": "registry:ui",
          "target": "@ui/switch.tsx"
        }
      ]
    },
    {
      "name": "slider",
      "type": "registry:ui",
      "title": "Glass Slider",
      "description": "A convex-lens thumb that magnifies the rail it rides, swelling out of it when grabbed.",
      "meta": {
        "added": "2026-08-10"
      },
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils",
        "lens"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/slider.tsx",
          "type": "registry:ui",
          "target": "@ui/slider.tsx"
        }
      ]
    },
    {
      "name": "select",
      "type": "registry:ui",
      "title": "Glass Select",
      "description": "A select with a glass trigger and a glass popup, kept from overlapping each other.",
      "meta": {
        "added": "2026-08-10"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/select.tsx",
          "type": "registry:ui",
          "target": "@ui/select.tsx"
        }
      ]
    },
    {
      "name": "tabs",
      "type": "registry:ui",
      "title": "Glass Tabs",
      "description": "A segmented control whose indicator is the refracting surface, sliding along a flat groove.",
      "meta": {
        "added": "2026-08-14"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/tabs.tsx",
          "type": "registry:ui",
          "target": "@ui/tabs.tsx"
        }
      ]
    },
    {
      "name": "tab-bar",
      "type": "registry:ui",
      "title": "Glass Tab Bar",
      "description": "The iOS floating tab bar: the bar is the lens, and the selection pill stretches as it travels.",
      "meta": {
        "added": "2026-09-05"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils",
        "lens"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/tab-bar.tsx",
          "type": "registry:ui",
          "target": "@ui/tab-bar.tsx"
        }
      ]
    },
    {
      "name": "toggle",
      "type": "registry:ui",
      "title": "Glass Toggle",
      "description": "A two-state button whose glass fills with accent while it is on.",
      "meta": {
        "added": "2026-08-14"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/toggle.tsx",
          "type": "registry:ui",
          "target": "@ui/toggle.tsx"
        }
      ]
    },
    {
      "name": "toggle-group",
      "type": "registry:ui",
      "title": "Glass Toggle Group",
      "description": "One glass strip holding several toggles, which flatten so the strip keeps the lens.",
      "meta": {
        "added": "2026-08-14"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "https://liqui.design/r/toggle.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/toggle-group.tsx",
          "type": "registry:ui",
          "target": "@ui/toggle-group.tsx"
        }
      ]
    },
    {
      "name": "menu",
      "type": "registry:ui",
      "title": "Glass Menu",
      "description": "A dropdown menu with submenus, checkbox and radio items, on a keep-mounted glass popup.",
      "meta": {
        "added": "2026-08-20"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/menu.tsx",
          "type": "registry:ui",
          "target": "@ui/menu.tsx"
        }
      ]
    },
    {
      "name": "radio-group",
      "type": "registry:ui",
      "title": "Glass Radio Group",
      "description": "A list of options, each its own glass surface, carrying an opaque dot.",
      "meta": {
        "added": "2026-08-20"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/radio-group.tsx",
          "type": "registry:ui",
          "target": "@ui/radio-group.tsx"
        }
      ]
    },
    {
      "name": "progress",
      "type": "registry:ui",
      "title": "Glass Progress",
      "description": "A progress bar whose track is the refracting surface, filled by a wash of accent.",
      "meta": {
        "added": "2026-08-20"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/progress.tsx",
          "type": "registry:ui",
          "target": "@ui/progress.tsx"
        }
      ]
    },
    {
      "name": "menubar",
      "type": "registry:ui",
      "title": "Glass Menubar",
      "description": "One glass strip holding several menus, whose triggers flatten inside it.",
      "meta": {
        "added": "2026-08-21"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "https://liqui.design/r/menu.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/menubar.tsx",
          "type": "registry:ui",
          "target": "@ui/menubar.tsx"
        }
      ]
    },
    {
      "name": "number-field",
      "type": "registry:ui",
      "title": "Glass Number Field",
      "description": "One glass group holding a numeric input and two flattened steppers.",
      "meta": {
        "added": "2026-08-21"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/number-field.tsx",
          "type": "registry:ui",
          "target": "@ui/number-field.tsx"
        }
      ]
    },
    {
      "name": "toast",
      "type": "registry:ui",
      "title": "Glass Toast",
      "description": "Notifications laid out in a column, so every surface keeps the page behind it.",
      "meta": {
        "added": "2026-08-21"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/toast.tsx",
          "type": "registry:ui",
          "target": "@ui/toast.tsx"
        }
      ]
    },
    {
      "name": "separator",
      "type": "registry:ui",
      "title": "Glass Separator",
      "description": "A hairline groove cut into the surface, lit the way the kernel lights an edge.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/separator.tsx",
          "type": "registry:ui",
          "target": "@ui/separator.tsx"
        }
      ]
    },
    {
      "name": "avatar",
      "type": "registry:ui",
      "title": "Glass Avatar",
      "description": "A lens with a picture set into it, inset by the width of its own bezel.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/avatar.tsx",
          "type": "registry:ui",
          "target": "@ui/avatar.tsx"
        }
      ]
    },
    {
      "name": "collapsible",
      "type": "registry:ui",
      "title": "Glass Collapsible",
      "description": "A lens on the trigger, frost on the panel — the box that grows has no map to rebuild.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/collapsible.tsx",
          "type": "registry:ui",
          "target": "@ui/collapsible.tsx"
        }
      ]
    },
    {
      "name": "meter",
      "type": "registry:ui",
      "title": "Glass Meter",
      "description": "A reading on a refracting track, with a wash that changes colour but never slides.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/meter.tsx",
          "type": "registry:ui",
          "target": "@ui/meter.tsx"
        }
      ]
    },
    {
      "name": "input",
      "type": "registry:ui",
      "title": "Glass Input",
      "description": "A transparent input inside a glass surface, with slots that stay on the same lens.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/input.tsx",
          "type": "registry:ui",
          "target": "@ui/input.tsx"
        }
      ]
    },
    {
      "name": "fieldset",
      "type": "registry:ui",
      "title": "Glass Fieldset",
      "description": "A legend and a gap — the container deliberately isn't a surface.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/fieldset.tsx",
          "type": "registry:ui",
          "target": "@ui/fieldset.tsx"
        }
      ]
    },
    {
      "name": "form",
      "type": "registry:ui",
      "title": "Glass Form",
      "description": "Server errors routed to the field they belong to, and no surface of its own.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/form.tsx",
          "type": "registry:ui",
          "target": "@ui/form.tsx"
        }
      ]
    },
    {
      "name": "checkbox-group",
      "type": "registry:ui",
      "title": "Glass Checkbox Group",
      "description": "Shared state for a stack of checkboxes, with a parent box that goes mixed rather than dim.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "https://liqui.design/r/checkbox.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/checkbox-group.tsx",
          "type": "registry:ui",
          "target": "@ui/checkbox-group.tsx"
        }
      ]
    },
    {
      "name": "scroll-area",
      "type": "registry:ui",
      "title": "Glass Scroll Area",
      "description": "An overlay scrollbar whose thumb is the smallest lens in the library, and no track behind it.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/scroll-area.tsx",
          "type": "registry:ui",
          "target": "@ui/scroll-area.tsx"
        }
      ]
    },
    {
      "name": "toolbar",
      "type": "registry:ui",
      "title": "Glass Toolbar",
      "description": "One strip of glass with flat controls on it — ToggleGroup's rule, generalised.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "https://liqui.design/r/toggle.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/toolbar.tsx",
          "type": "registry:ui",
          "target": "@ui/toolbar.tsx"
        }
      ]
    },
    {
      "name": "preview-card",
      "type": "registry:ui",
      "title": "Glass Preview Card",
      "description": "Popover's surface with the frost turned up, because this one lands on a sentence.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/preview-card.tsx",
          "type": "registry:ui",
          "target": "@ui/preview-card.tsx"
        }
      ]
    },
    {
      "name": "navigation-menu",
      "type": "registry:ui",
      "title": "Glass Navigation Menu",
      "description": "One panel that moves between triggers and snaps to size, because resizing rebuilds the map.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/navigation-menu.tsx",
          "type": "registry:ui",
          "target": "@ui/navigation-menu.tsx"
        }
      ]
    },
    {
      "name": "combobox",
      "type": "registry:ui",
      "title": "Glass Combobox",
      "description": "A glass field and popup whose height snaps as you filter, because every height is a map.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/combobox.tsx",
          "type": "registry:ui",
          "target": "@ui/combobox.tsx"
        }
      ]
    },
    {
      "name": "autocomplete",
      "type": "registry:ui",
      "title": "Glass Autocomplete",
      "description": "Combobox's surfaces on a field whose value is the text you typed.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/autocomplete.tsx",
          "type": "registry:ui",
          "target": "@ui/autocomplete.tsx"
        }
      ]
    },
    {
      "name": "drawer",
      "type": "registry:ui",
      "title": "Glass Drawer",
      "description": "The largest surface in the library, dragged on one cached map.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/drawer.tsx",
          "type": "registry:ui",
          "target": "@ui/drawer.tsx"
        }
      ]
    },
    {
      "name": "otp-field",
      "type": "registry:ui",
      "title": "Glass OTP Field",
      "description": "Six identical surfaces that cost one, because the map cache is keyed on size and optics.",
      "meta": {
        "added": "2026-08-29"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/ui/otp-field.tsx",
          "type": "registry:ui",
          "target": "@ui/otp-field.tsx"
        }
      ]
    },
    {
      "name": "button-demo",
      "type": "registry:example",
      "title": "Button",
      "description": "A single glass button.",
      "registryDependencies": [
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/button-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "button-variants",
      "type": "registry:example",
      "title": "Variants",
      "description": "Variants retint the glass instead of painting over it.",
      "registryDependencies": [
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/button-variants.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "button-glass-dial",
      "type": "registry:example",
      "title": "Tuning the glass",
      "description": "The glass prop reaches the surface underneath the button.",
      "registryDependencies": [
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/button-glass-dial.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "button-disabled",
      "type": "registry:example",
      "title": "Disabled",
      "description": "Disabled buttons drop the hover wash and dim the whole surface.",
      "registryDependencies": [
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/button-disabled.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "checkbox-demo",
      "type": "registry:example",
      "title": "Checkbox",
      "description": "Checked, unchecked, indeterminate and disabled.",
      "registryDependencies": [
        "https://liqui.design/r/checkbox.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/checkbox-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "field-demo",
      "type": "registry:example",
      "title": "Field",
      "description": "Label, control and description.",
      "registryDependencies": [
        "https://liqui.design/r/field.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/field-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "field-validation",
      "type": "registry:example",
      "title": "Validation",
      "description": "The invalid ring lives on the surface, not the input.",
      "registryDependencies": [
        "https://liqui.design/r/field.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/field-validation.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "accordion-demo",
      "type": "registry:example",
      "title": "Accordion",
      "description": "Each item is its own glass surface, resizing with its panel.",
      "registryDependencies": [
        "https://liqui.design/r/accordion.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/accordion-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "alert-dialog-demo",
      "type": "registry:example",
      "title": "Alert Dialog",
      "description": "A destructive confirmation over a dimmed scrim.",
      "registryDependencies": [
        "https://liqui.design/r/alert-dialog.json",
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/alert-dialog-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "context-menu-demo",
      "type": "registry:example",
      "title": "Context Menu",
      "description": "Submenus, checkbox and radio items, shortcuts and a destructive action.",
      "registryDependencies": [
        "https://liqui.design/r/context-menu.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/context-menu-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "switch-demo",
      "type": "registry:example",
      "title": "Switch",
      "description": "A settings list: on, off and disabled.",
      "registryDependencies": [
        "https://liqui.design/r/switch.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/switch-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "slider-demo",
      "type": "registry:example",
      "title": "Slider",
      "description": "A glass thumb travelling along a flat rail.",
      "registryDependencies": [
        "https://liqui.design/r/slider.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/slider-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "slider-range",
      "type": "registry:example",
      "title": "Range",
      "description": "Two thumbs on one rail, sharing a single cached map.",
      "registryDependencies": [
        "https://liqui.design/r/slider.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/slider-range.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "select-demo",
      "type": "registry:example",
      "title": "Select",
      "description": "Grouped options on a glass popup below the trigger.",
      "registryDependencies": [
        "https://liqui.design/r/select.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/select-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "dialog-demo",
      "type": "registry:example",
      "title": "Dialog",
      "description": "A dismissible modal over a dimmed scrim.",
      "registryDependencies": [
        "https://liqui.design/r/dialog.json",
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/dialog-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "popover-demo",
      "type": "registry:example",
      "title": "Popover",
      "description": "A panel of controls, each one flattened so the panel keeps the lens.",
      "registryDependencies": [
        "https://liqui.design/r/popover.json",
        "https://liqui.design/r/button.json",
        "https://liqui.design/r/switch.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/popover-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "tooltip-demo",
      "type": "registry:example",
      "title": "Tooltip",
      "description": "A toolbar sharing one delay, so the group reads as one control.",
      "registryDependencies": [
        "https://liqui.design/r/tooltip.json",
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/tooltip-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "tooltip-sides",
      "type": "registry:example",
      "title": "Sides",
      "description": "All four placements, pinned open.",
      "registryDependencies": [
        "https://liqui.design/r/tooltip.json",
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/tooltip-sides.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "tabs-demo",
      "type": "registry:example",
      "title": "Tabs",
      "description": "A glass pill travelling along a flat groove.",
      "registryDependencies": [
        "https://liqui.design/r/tabs.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/tabs-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "tab-bar-demo",
      "type": "registry:example",
      "title": "Tab Bar",
      "description": "A floating tab bar over a scrolling list.",
      "registryDependencies": [
        "https://liqui.design/r/tab-bar.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/tab-bar-demo.tsx",
          "type": "registry:example",
          "target": "@example/tab-bar-demo.tsx"
        }
      ]
    },
    {
      "name": "tabs-vertical",
      "type": "registry:example",
      "title": "Vertical",
      "description": "The same indicator, travelling down instead of across.",
      "registryDependencies": [
        "https://liqui.design/r/tabs.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/tabs-vertical.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "toggle-demo",
      "type": "registry:example",
      "title": "Toggle",
      "description": "Three independent surfaces: on, off and disabled.",
      "registryDependencies": [
        "https://liqui.design/r/toggle.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/toggle-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "toggle-group-demo",
      "type": "registry:example",
      "title": "Toggle Group",
      "description": "One strip, one lens, and toggles that flatten inside it.",
      "registryDependencies": [
        "https://liqui.design/r/toggle-group.json",
        "https://liqui.design/r/toggle.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/toggle-group-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "toggle-group-multiple",
      "type": "registry:example",
      "title": "Multiple",
      "description": "Several toggles lit at once — the case with no single surface to move.",
      "registryDependencies": [
        "https://liqui.design/r/toggle-group.json",
        "https://liqui.design/r/toggle.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/toggle-group-multiple.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "menu-demo",
      "type": "registry:example",
      "title": "Menu",
      "description": "A glass trigger and a glass popup that never overlap, with a submenu inside.",
      "registryDependencies": [
        "https://liqui.design/r/menu.json",
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/menu-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "radio-group-demo",
      "type": "registry:example",
      "title": "Radio Group",
      "description": "One lens per option, and a disabled one that keeps its rim.",
      "registryDependencies": [
        "https://liqui.design/r/radio-group.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/radio-group-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "progress-demo",
      "type": "registry:example",
      "title": "Progress",
      "description": "Three bars at different fills, refracting along their whole length.",
      "registryDependencies": [
        "https://liqui.design/r/progress.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/progress-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "progress-indeterminate",
      "type": "registry:example",
      "title": "Indeterminate",
      "description": "No value to show, so the wash covers the track and breathes instead.",
      "registryDependencies": [
        "https://liqui.design/r/progress.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/progress-indeterminate.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "menubar-demo",
      "type": "registry:example",
      "title": "Menubar",
      "description": "Three menus in one strip, with a submenu, checkbox and radio items.",
      "registryDependencies": [
        "https://liqui.design/r/menubar.json",
        "https://liqui.design/r/menu.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/menubar-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "number-field-demo",
      "type": "registry:example",
      "title": "Number Field",
      "description": "A scrubbable label over a glass group with two flat steppers.",
      "registryDependencies": [
        "https://liqui.design/r/number-field.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/number-field-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "number-field-format",
      "type": "registry:example",
      "title": "Formatting",
      "description": "The same field as a percentage, formatted through Intl.NumberFormat.",
      "registryDependencies": [
        "https://liqui.design/r/number-field.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/number-field-format.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "toast-demo",
      "type": "registry:example",
      "title": "Toast",
      "description": "A column of notifications, each with the page behind it.",
      "registryDependencies": [
        "https://liqui.design/r/toast.json",
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/toast-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "separator-demo",
      "type": "registry:example",
      "title": "Separator",
      "description": "Hairline grooves splitting a glass panel into rows.",
      "dependencies": [
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/separator.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/separator-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "separator-vertical",
      "type": "registry:example",
      "title": "Vertical",
      "description": "The same cut turned upright, with the highlight on the other wall.",
      "dependencies": [
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/separator.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/separator-vertical.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "avatar-demo",
      "type": "registry:example",
      "title": "Avatar",
      "description": "A picture that loads, one that fails, and one that was never given.",
      "registryDependencies": [
        "https://liqui.design/r/avatar.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/avatar-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "avatar-sizes",
      "type": "registry:example",
      "title": "Sizes",
      "description": "One ratio at five diameters, so the smallest disc is still the material.",
      "registryDependencies": [
        "https://liqui.design/r/avatar.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/avatar-sizes.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "collapsible-demo",
      "type": "registry:example",
      "title": "Collapsible",
      "description": "A refracting trigger over a frosted panel that grows for free.",
      "registryDependencies": [
        "https://liqui.design/r/collapsible.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/collapsible-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "collapsible-search",
      "type": "registry:example",
      "title": "Found by search",
      "description": "hiddenUntilFound, so the browser's own find-in-page opens the section.",
      "registryDependencies": [
        "https://liqui.design/r/collapsible.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/collapsible-search.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "meter-demo",
      "type": "registry:example",
      "title": "Meter",
      "description": "Three readings of things that already are, so nothing animates into place.",
      "registryDependencies": [
        "https://liqui.design/r/meter.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/meter-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "meter-thresholds",
      "type": "registry:example",
      "title": "Thresholds",
      "description": "The fill reads --lq-accent, so a threshold is a token override rather than a prop.",
      "registryDependencies": [
        "https://liqui.design/r/meter.json",
        "https://liqui.design/r/slider.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/meter-thresholds.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "input-demo",
      "type": "registry:example",
      "title": "Input",
      "description": "Three inputs whose every visible pixel belongs to the surface around them.",
      "registryDependencies": [
        "https://liqui.design/r/input.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/input-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "input-slots",
      "type": "registry:example",
      "title": "Slots",
      "description": "A glyph and a unit sharing the input's content layer instead of getting their own.",
      "registryDependencies": [
        "https://liqui.design/r/input.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/input-slots.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "fieldset-demo",
      "type": "registry:example",
      "title": "Fieldset",
      "description": "Three fields under one legend, with no box drawn around them.",
      "registryDependencies": [
        "https://liqui.design/r/fieldset.json",
        "https://liqui.design/r/field.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/fieldset-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "form-demo",
      "type": "registry:example",
      "title": "Form",
      "description": "A server rejection landing on the field it belongs to, and clearing as you type.",
      "registryDependencies": [
        "https://liqui.design/r/form.json",
        "https://liqui.design/r/field.json",
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/form-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "checkbox-group-demo",
      "type": "registry:example",
      "title": "Checkbox Group",
      "description": "Four lenses in a stack, with the page still behind every one of them.",
      "registryDependencies": [
        "https://liqui.design/r/checkbox-group.json",
        "https://liqui.design/r/checkbox.json",
        "https://liqui.design/r/fieldset.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/checkbox-group-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "checkbox-group-parent",
      "type": "registry:example",
      "title": "Parent checkbox",
      "description": "The mixed state as a different mark on the same material.",
      "registryDependencies": [
        "https://liqui.design/r/checkbox-group.json",
        "https://liqui.design/r/checkbox.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/checkbox-group-parent.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "scroll-area-demo",
      "type": "registry:example",
      "title": "Scroll Area",
      "description": "A refracting thumb over the page, and content that fades where it leaves the box.",
      "registryDependencies": [
        "https://liqui.design/r/scroll-area.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/scroll-area-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "scroll-area-on-panel",
      "type": "registry:example",
      "title": "Inside a panel",
      "description": "The same thumb with and without its lens, on a surface that leaves it nothing to bend.",
      "dependencies": [
        "@liqui-design/glass"
      ],
      "registryDependencies": [
        "https://liqui.design/r/scroll-area.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/scroll-area-on-panel.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "toolbar-demo",
      "type": "registry:example",
      "title": "Toolbar",
      "description": "Eight controls on one lens, including toggles that flatten themselves.",
      "registryDependencies": [
        "https://liqui.design/r/toolbar.json",
        "https://liqui.design/r/toggle.json",
        "https://liqui.design/r/menu.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/toolbar-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "toolbar-vertical",
      "type": "registry:example",
      "title": "Vertical",
      "description": "The strip turned upright, with the separator's lit wall changing sides.",
      "registryDependencies": [
        "https://liqui.design/r/toolbar.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/toolbar-vertical.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "preview-card-demo",
      "type": "registry:example",
      "title": "Preview Card",
      "description": "A card that opens on a link and has to stay readable over the paragraph under it.",
      "registryDependencies": [
        "https://liqui.design/r/preview-card.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/preview-card-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "preview-card-delay",
      "type": "registry:example",
      "title": "Delay",
      "description": "100ms against the default 600ms, and why the slower one is also the cheaper one.",
      "registryDependencies": [
        "https://liqui.design/r/preview-card.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/preview-card-delay.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "navigation-menu-demo",
      "type": "registry:example",
      "title": "Navigation Menu",
      "description": "One panel gliding between triggers, snapping to each item's size.",
      "registryDependencies": [
        "https://liqui.design/r/navigation-menu.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/navigation-menu-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "combobox-demo",
      "type": "registry:example",
      "title": "Combobox",
      "description": "A filtered list that snaps between a small set of repeating heights.",
      "registryDependencies": [
        "https://liqui.design/r/combobox.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/combobox-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "combobox-multiple",
      "type": "registry:example",
      "title": "Multiple",
      "description": "Flat chips inside the field's lens, because a chip with a bezel would refract the field.",
      "registryDependencies": [
        "https://liqui.design/r/combobox.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/combobox-multiple.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "autocomplete-demo",
      "type": "registry:example",
      "title": "Autocomplete",
      "description": "Suggestions with no check gutter, because nothing in the list is the current one.",
      "registryDependencies": [
        "https://liqui.design/r/autocomplete.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/autocomplete-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "drawer-demo",
      "type": "registry:example",
      "title": "Drawer",
      "description": "A bottom sheet dragged to dismiss, with no filter rebuilt on the way.",
      "registryDependencies": [
        "https://liqui.design/r/drawer.json",
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/drawer-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "drawer-side",
      "type": "registry:example",
      "title": "From the side",
      "description": "The same sheet against a different edge, on the same cached map.",
      "registryDependencies": [
        "https://liqui.design/r/drawer.json",
        "https://liqui.design/r/button.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/drawer-side.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "otp-field-demo",
      "type": "registry:example",
      "title": "OTP Field",
      "description": "Six slots sharing one displacement map, with filled digits retinting rather than filling.",
      "registryDependencies": [
        "https://liqui.design/r/otp-field.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/otp-field-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "otp-field-grouped",
      "type": "registry:example",
      "title": "Grouped",
      "description": "123-456, with the separator cut short so it does not read as an empty slot.",
      "registryDependencies": [
        "https://liqui.design/r/otp-field.json"
      ],
      "files": [
        {
          "path": "registry/liqui/examples/otp-field-grouped.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "media-player",
      "type": "registry:block",
      "title": "Media Player",
      "description": "A full-screen player: cover art, transport, library and sound settings, built so that changing track changes what every surface refracts.",
      "categories": [
        "template"
      ],
      "meta": {
        "entry": "registry/liqui/components/media-player/media-player.tsx"
      },
      "dependencies": [
        "@base-ui/react",
        "@liqui-design/glass",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://liqui.design/r/liqui.json",
        "https://liqui.design/r/button.json",
        "https://liqui.design/r/context-menu.json",
        "https://liqui.design/r/field.json",
        "https://liqui.design/r/popover.json",
        "https://liqui.design/r/select.json",
        "https://liqui.design/r/slider.json",
        "https://liqui.design/r/switch.json",
        "https://liqui.design/r/tabs.json",
        "https://liqui.design/r/toggle.json",
        "https://liqui.design/r/tooltip.json",
        "utils"
      ],
      "files": [
        {
          "path": "registry/liqui/components/media-player/media-player.tsx",
          "type": "registry:block",
          "target": "@components/media-player/media-player.tsx"
        },
        {
          "path": "registry/liqui/components/media-player/library-panel.tsx",
          "type": "registry:component",
          "target": "@components/media-player/library-panel.tsx"
        },
        {
          "path": "registry/liqui/components/media-player/on-panel.ts",
          "type": "registry:component",
          "target": "@components/media-player/on-panel.ts"
        },
        {
          "path": "registry/liqui/components/media-player/now-playing.tsx",
          "type": "registry:component",
          "target": "@components/media-player/now-playing.tsx"
        },
        {
          "path": "registry/liqui/components/media-player/player-backdrop.tsx",
          "type": "registry:component",
          "target": "@components/media-player/player-backdrop.tsx"
        },
        {
          "path": "registry/liqui/components/media-player/transport-bar.tsx",
          "type": "registry:component",
          "target": "@components/media-player/transport-bar.tsx"
        },
        {
          "path": "registry/liqui/lib/media-player-data.ts",
          "type": "registry:lib",
          "target": "@lib/media-player-data.ts"
        }
      ],
      "docs": "MediaPlayer fills its container — give the element you render it into a real height (h-dvh for a full page). Cover art is generated in CSS, so there are no image files to copy and nothing to 404; swap coverArt() in lib/media-player-data.ts for your own artwork when you wire up real audio."
    }
  ]
}
