{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "select",
  "title": "Pop-up Button",
  "description": "A pop-up button that opens a menu of options, in bordered and System Settings styles.",
  "dependencies": [
    "lucide-react",
    "@base-ui/react"
  ],
  "registryDependencies": [
    "@cupertinoui/macos-theme"
  ],
  "files": [
    {
      "path": "registry/macos/ui/select.tsx",
      "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n  CheckIcon,\n  ChevronDownIcon,\n  ChevronsUpDownIcon,\n  ChevronUpIcon,\n} from \"lucide-react\"\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\"\n\nimport { cn } from \"@/lib/utils\"\n\n// Pass `items` (value → label, or a list of { value, label }) so that\n// SelectValue shows the label of the chosen item rather than its value.\nconst Select = SelectPrimitive.Root\n\nfunction SelectGroup({ ...props }: SelectPrimitive.Group.Props) {\n  return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n  return (\n    <SelectPrimitive.Value\n      data-slot=\"select-value\"\n      className={cn(\"text-left\", className)}\n      {...props}\n    />\n  )\n}\n\n// A macOS pop-up button. `default` is a bordered button with up/down\n// chevrons; `borderless` is the System Settings style: the value followed by\n// chevrons in a small round chip.\nfunction SelectTrigger({\n  className,\n  size = \"default\",\n  variant = \"default\",\n  children,\n  ...props\n}: SelectPrimitive.Trigger.Props & {\n  size?: \"sm\" | \"default\" | \"lg\"\n  variant?: \"default\" | \"borderless\"\n}) {\n  return (\n    <SelectPrimitive.Trigger\n      data-slot=\"select-trigger\"\n      data-size={size}\n      data-variant={variant}\n      className={cn(\n        \"group/select-trigger flex w-fit cursor-default items-center justify-between font-medium whitespace-nowrap text-mac-label outline-none select-none focus-visible:mac-focus-ring data-disabled:cursor-not-allowed data-disabled:text-mac-label-tertiary aria-invalid:mac-focus-ring data-[placeholder]:text-mac-label-secondary *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n        variant === \"default\" &&\n          \"gap-0 bg-mac-control active:bg-mac-control-pressed data-disabled:bg-mac-control-disabled data-[size=default]:h-6 data-[size=default]:rounded-[6px] data-[size=default]:pl-3 data-[size=default]:text-mac-body data-[size=lg]:h-7 data-[size=lg]:rounded-full data-[size=lg]:pl-3.5 data-[size=lg]:text-mac-body data-[size=sm]:h-5 data-[size=sm]:rounded-[5px] data-[size=sm]:pl-2.5 data-[size=sm]:text-mac-subheadline\",\n        variant === \"borderless\" &&\n          \"h-5 gap-3 rounded-full bg-transparent pl-1 text-mac-body hover:*:data-[slot=select-chip]:bg-mac-control-pressed\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n      <SelectPrimitive.Icon\n        render={\n          variant === \"borderless\" ? (\n          <span\n            data-slot=\"select-chip\"\n            className=\"flex size-5 items-center justify-center rounded-full bg-mac-control text-mac-label\"\n          >\n            <ChevronsUpDownIcon className=\"size-3\" strokeWidth={2.25} />\n          </span>\n          ) : (\n          <span\n            data-slot=\"select-chevrons\"\n            className=\"flex aspect-square h-full items-center justify-center\"\n          >\n            <ChevronsUpDownIcon\n              className=\"size-3 group-data-[size=sm]/select-trigger:size-2.5\"\n              strokeWidth={2.5}\n            />\n          </span>\n          )\n        }\n      />\n    </SelectPrimitive.Trigger>\n  )\n}\n\n// The menu of a pop-up button. Like macOS, it opens over the trigger with\n// the chosen item on top of it; set alignItemWithTrigger={false} to drop it\n// below instead.\nfunction SelectContent({\n  className,\n  children,\n  side = \"bottom\",\n  sideOffset = 4,\n  align = \"center\",\n  alignOffset = 0,\n  alignItemWithTrigger = true,\n  ...props\n}: SelectPrimitive.Popup.Props &\n  Pick<\n    SelectPrimitive.Positioner.Props,\n    \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"alignItemWithTrigger\"\n  >) {\n  return (\n    <SelectPrimitive.Portal>\n      <SelectPrimitive.Positioner\n        side={side}\n        sideOffset={sideOffset}\n        align={align}\n        alignOffset={alignOffset}\n        alignItemWithTrigger={alignItemWithTrigger}\n        className=\"isolate z-50\"\n      >\n        <SelectPrimitive.Popup\n          data-slot=\"select-content\"\n          className={cn(\n            \"relative z-50 max-h-(--available-height) min-w-[max(8rem,var(--anchor-width))] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-mac-menu text-mac-label shadow-mac-menu mac-material-menu outline-none data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n            className\n          )}\n          {...props}\n        >\n          <SelectScrollUpButton />\n          <SelectPrimitive.List className=\"p-[5px]\">{children}</SelectPrimitive.List>\n          <SelectScrollDownButton />\n        </SelectPrimitive.Popup>\n      </SelectPrimitive.Positioner>\n    </SelectPrimitive.Portal>\n  )\n}\n\nfunction SelectLabel({\n  className,\n  ...props\n}: SelectPrimitive.GroupLabel.Props) {\n  return (\n    <SelectPrimitive.GroupLabel\n      data-slot=\"select-label\"\n      className={cn(\n        \"px-[11px] pt-[5px] pb-1 text-mac-subheadline font-semibold text-mac-label-secondary\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction SelectItem({\n  className,\n  children,\n  ...props\n}: SelectPrimitive.Item.Props) {\n  return (\n    <SelectPrimitive.Item\n      data-slot=\"select-item\"\n      className={cn(\n        \"relative flex h-6 w-full cursor-default items-center gap-2 rounded-mac-item pr-[14px] pl-[27px] text-mac-body outline-hidden select-none data-highlighted:bg-mac-menu-highlight data-highlighted:text-white data-disabled:pointer-events-none data-disabled:text-mac-label-tertiary [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-1.5\",\n        className\n      )}\n      {...props}\n    >\n      <span\n        data-slot=\"select-item-indicator\"\n        className=\"absolute left-[11px] flex size-3 items-center justify-center\"\n      >\n        <SelectPrimitive.ItemIndicator>\n          <CheckIcon className=\"size-3\" strokeWidth={3} />\n        </SelectPrimitive.ItemIndicator>\n      </span>\n      <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n    </SelectPrimitive.Item>\n  )\n}\n\nfunction SelectSeparator({\n  className,\n  ...props\n}: SelectPrimitive.Separator.Props) {\n  return (\n    <SelectPrimitive.Separator\n      data-slot=\"select-separator\"\n      className={cn(\n        \"pointer-events-none mx-[11px] my-[5px] h-px bg-mac-grid\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction SelectScrollUpButton({\n  className,\n  ...props\n}: SelectPrimitive.ScrollUpArrow.Props) {\n  return (\n    <SelectPrimitive.ScrollUpArrow\n      data-slot=\"select-scroll-up-button\"\n      className={cn(\n        \"absolute inset-x-0 z-10 flex h-4 cursor-default items-center justify-center data-[direction=up]:top-0 data-[direction=down]:bottom-0\",\n        className\n      )}\n      {...props}\n    >\n      <ChevronUpIcon className=\"size-3\" />\n    </SelectPrimitive.ScrollUpArrow>\n  )\n}\n\nfunction SelectScrollDownButton({\n  className,\n  ...props\n}: SelectPrimitive.ScrollDownArrow.Props) {\n  return (\n    <SelectPrimitive.ScrollDownArrow\n      data-slot=\"select-scroll-down-button\"\n      className={cn(\n        \"absolute inset-x-0 z-10 flex h-4 cursor-default items-center justify-center data-[direction=up]:top-0 data-[direction=down]:bottom-0\",\n        className\n      )}\n      {...props}\n    >\n      <ChevronDownIcon className=\"size-3\" />\n    </SelectPrimitive.ScrollDownArrow>\n  )\n}\n\nexport {\n  Select,\n  SelectContent,\n  SelectGroup,\n  SelectItem,\n  SelectLabel,\n  SelectScrollDownButton,\n  SelectScrollUpButton,\n  SelectSeparator,\n  SelectTrigger,\n  SelectValue,\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}