{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "select",
  "type": "registry:ui",
  "dependencies": [
    "class-variance-authority",
    "@radix-ui/react-select",
    "lucide-react"
  ],
  "registryDependencies": [
    "https://ui.getlyse.com/r/lyse-tokens.json"
  ],
  "files": [
    {
      "path": "registry/new-york/ui/select/select.tsx",
      "content": "import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Check, ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport \"./select.css\"\n\n/* ------------------------------------------------------------------ */\n/*  CVA                                                                */\n/* ------------------------------------------------------------------ */\n\nconst selectTriggerVariants = cva(\n  \"select-trigger inline-flex items-center justify-between gap-[var(--layout-gap-md)] rounded-[var(--layout-radius-lg)] px-[var(--layout-padding-md)] text-content-note font-accent\",\n  {\n    variants: {\n      variant: {\n        default: \"\",\n        destructive: \"select-trigger-destructive\",\n        success: \"select-trigger-success\",\n      },\n      size: {\n        sm: \"h-[var(--layout-size-lg)]\",\n        md: \"h-9\",\n        lg: \"h-[var(--layout-size-xl)]\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"md\",\n    },\n  }\n)\n\n/* ------------------------------------------------------------------ */\n/*  Select                                                             */\n/* ------------------------------------------------------------------ */\n\nfunction Select({\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n  return <SelectPrimitive.Root {...props} />\n}\n\n/* ------------------------------------------------------------------ */\n/*  SelectGroup                                                        */\n/* ------------------------------------------------------------------ */\n\nfunction SelectGroup({\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n  return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\n/* ------------------------------------------------------------------ */\n/*  SelectValue                                                        */\n/* ------------------------------------------------------------------ */\n\nfunction SelectValue({\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n  return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\n/* ------------------------------------------------------------------ */\n/*  SelectTrigger                                                      */\n/* ------------------------------------------------------------------ */\n\nfunction SelectTrigger({\n  className,\n  variant,\n  size,\n  children,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> &\n  VariantProps<typeof selectTriggerVariants>) {\n  return (\n    <SelectPrimitive.Trigger\n      data-slot=\"select-trigger\"\n      className={cn(selectTriggerVariants({ variant, size, className }))}\n      {...props}\n    >\n      {children}\n      <SelectPrimitive.Icon asChild>\n        <ChevronDown className=\"select-chevron h-[var(--layout-size-xs)] w-[var(--layout-size-xs)] shrink-0\" />\n      </SelectPrimitive.Icon>\n    </SelectPrimitive.Trigger>\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  SelectContent                                                      */\n/* ------------------------------------------------------------------ */\n\nfunction SelectContent({\n  className,\n  position = \"popper\",\n  sideOffset = 6,\n  children,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n  return (\n    <SelectPrimitive.Portal>\n      <SelectPrimitive.Content\n        data-slot=\"select-content\"\n        position={position}\n        sideOffset={sideOffset}\n        className={cn(\n          \"select-content z-50 min-w-[8rem] rounded-[var(--layout-radius-xl)] p-[var(--layout-padding-xs)] animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n          position === \"popper\" && \"max-h-[var(--radix-select-content-available-height)]\",\n          className\n        )}\n        {...props}\n      >\n        <SelectPrimitive.Viewport\n          data-slot=\"select-viewport\"\n          className={cn(\n            \"select-viewport overflow-y-auto\",\n            position === \"popper\" && \"w-full min-w-[var(--radix-select-trigger-width)] max-h-[var(--radix-select-content-available-height)]\"\n          )}\n        >\n          {children}\n        </SelectPrimitive.Viewport>\n      </SelectPrimitive.Content>\n    </SelectPrimitive.Portal>\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  SelectItem                                                         */\n/* ------------------------------------------------------------------ */\n\nfunction SelectItem({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n  return (\n    <SelectPrimitive.Item\n      data-slot=\"select-item\"\n      className={cn(\n        \"select-item flex items-center gap-[var(--layout-gap-md)] rounded-[var(--layout-radius-lg)] h-9 py-[var(--layout-padding-sm)] px-[var(--layout-padding-md)] text-content-note font-accent\",\n        className\n      )}\n      {...props}\n    >\n      <SelectPrimitive.ItemText className=\"flex-1\">{children}</SelectPrimitive.ItemText>\n      <SelectPrimitive.ItemIndicator className=\"select-item-indicator shrink-0 ml-auto\">\n        <Check className=\"h-[var(--layout-size-xs)] w-[var(--layout-size-xs)]\" />\n      </SelectPrimitive.ItemIndicator>\n    </SelectPrimitive.Item>\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  SelectLabel                                                        */\n/* ------------------------------------------------------------------ */\n\nfunction SelectLabel({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n  return (\n    <SelectPrimitive.Label\n      data-slot=\"select-label\"\n      className={cn(\n        \"select-label px-[var(--layout-padding-md)] py-[var(--layout-padding-sm)] text-content-caption font-accent\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  SelectSeparator                                                    */\n/* ------------------------------------------------------------------ */\n\nfunction SelectSeparator({\n  className,\n  ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n  return (\n    <SelectPrimitive.Separator\n      data-slot=\"select-separator\"\n      className={cn(\"select-separator my-[var(--layout-gap-xs)]\", className)}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Select,\n  SelectGroup,\n  SelectValue,\n  SelectTrigger,\n  SelectContent,\n  SelectItem,\n  SelectLabel,\n  SelectSeparator,\n  selectTriggerVariants,\n}\n",
      "type": "registry:ui"
    },
    {
      "path": "registry/new-york/ui/select/select.css",
      "content": "/* ================================================================\n * SELECT — Styles\n * Structure (flex, gap, padding, radius) lives in select.tsx via cva.\n * Theming (colors, borders, focus ring) lives here via tokens.\n * ================================================================ */\n\n/* --------------------------------\n * Trigger — base\n * -------------------------------- */\n.select-trigger {\n  background: var(--background-neutral-faint-default);\n  border: var(--layout-border-thin) solid var(--border-default);\n  color: var(--text-base-strong);\n  cursor: pointer;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  .select-trigger {\n    transition:\n      border-color 150ms ease,\n      box-shadow 150ms ease;\n  }\n}\n\n.select-trigger:hover {\n  background: var(--background-neutral-faint-hover);\n}\n\n.select-trigger:focus-visible,\n.select-trigger[data-state=\"open\"] {\n  outline: none;\n  box-shadow: 0 0 0 2px var(--shadow-brand-moderate);\n}\n\n/* --------------------------------\n * Trigger — placeholder\n * -------------------------------- */\n.select-trigger [data-placeholder] {\n  color: var(--text-base-moderate);\n}\n\n/* --------------------------------\n * Trigger — disabled\n * -------------------------------- */\n.select-trigger[data-disabled] {\n  background: var(--background-disabled);\n  color: var(--text-disabled);\n  cursor: not-allowed;\n  pointer-events: none;\n}\n\n.select-trigger[data-disabled] .select-chevron {\n  color: var(--text-disabled);\n}\n\n/* --------------------------------\n * Trigger — destructive variant\n * -------------------------------- */\n.select-trigger-destructive {\n  border-color: var(--border-danger-strong);\n}\n\n.select-trigger-destructive:focus-visible,\n.select-trigger-destructive[data-state=\"open\"] {\n  box-shadow: 0 0 0 2px var(--shadow-danger-moderate);\n}\n\n/* --------------------------------\n * Trigger — success variant\n * -------------------------------- */\n.select-trigger-success {\n  border-color: var(--border-success-strong);\n}\n\n.select-trigger-success:focus-visible,\n.select-trigger-success[data-state=\"open\"] {\n  box-shadow: 0 0 0 2px var(--shadow-success-moderate);\n}\n\n/* --------------------------------\n * Chevron\n * -------------------------------- */\n.select-chevron {\n  color: var(--icon-neutral-moderate);\n}\n\n/* --------------------------------\n * Content panel\n * -------------------------------- */\n.select-content {\n  background: var(--background-neutral-faint-default);\n  border: var(--layout-border-thin) solid var(--border-default);\n}\n\n/* --------------------------------\n * Item — base\n * -------------------------------- */\n.select-item {\n  color: var(--text-base-strong);\n  cursor: pointer;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  .select-item {\n    transition:\n      background 150ms ease,\n      color 150ms ease;\n  }\n}\n\n.select-item[data-highlighted] {\n  background: var(--background-neutral-faint-hover);\n  outline: none;\n}\n\n.select-item:focus-visible {\n  background: var(--background-neutral-faint-hover);\n  outline: none;\n}\n\n/* --------------------------------\n * Item — disabled\n * -------------------------------- */\n.select-item[data-disabled] {\n  color: var(--text-disabled);\n  cursor: not-allowed;\n  pointer-events: none;\n}\n\n/* --------------------------------\n * Item indicator (check)\n * -------------------------------- */\n.select-item-indicator {\n  color: var(--icon-brand-moderate);\n}\n\n/* --------------------------------\n * Label (group header)\n * -------------------------------- */\n.select-label {\n  color: var(--text-base-moderate);\n}\n\n/* --------------------------------\n * Viewport — scrollbar\n * Override Radix's injected [data-radix-select-viewport] styles\n * that force scrollbar-width:none and -webkit-scrollbar:display:none\n * -------------------------------- */\n[data-radix-select-viewport].select-viewport {\n  scrollbar-width: thin !important;\n  scrollbar-color: var(--border-default) transparent;\n}\n\n[data-radix-select-viewport].select-viewport::-webkit-scrollbar {\n  display: block !important;\n  width: 6px;\n}\n\n[data-radix-select-viewport].select-viewport::-webkit-scrollbar-track {\n  background: transparent;\n}\n\n[data-radix-select-viewport].select-viewport::-webkit-scrollbar-thumb {\n  background: var(--border-default);\n  border-radius: var(--layout-radius-full);\n}\n\n/* --------------------------------\n * Separator\n * -------------------------------- */\n.select-separator {\n  border-top: var(--layout-border-thin) solid var(--border-default);\n}\n",
      "type": "registry:ui"
    }
  ]
}