{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "select",
  "title": "TIS Select",
  "author": "TIS Experience Engineering",
  "description": "Select React single-value com typeahead, foco e teclado por Base UI, preservando o contrato visual do DS TIS.",
  "dependencies": [
    "@base-ui/react@1.6.0",
    "clsx@2.1.1",
    "lucide-react@1.28.0",
    "tailwind-merge@3.6.0",
    "ds-tis@github:tis-experience/ds-tis#dd4c906943847cb7664a72a0c7637a378b39adcc"
  ],
  "files": [
    {
      "path": "registry/tis/select.tsx",
      "content": "import * as React from \"react\"\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\"\nimport { CheckIcon, ChevronDownIcon, LanguagesIcon } from \"lucide-react\"\n\nimport { cn } from \"./tis-utils\"\n\ntype SelectSize = \"sm\" | \"md\" | \"lg\"\n\nfunction Select<Value, Multiple extends boolean | undefined = false>(\n  props: SelectPrimitive.Root.Props<Value, Multiple>,\n) {\n  return <SelectPrimitive.Root {...props} />\n}\n\nfunction SelectField({\n  className,\n  invalid = false,\n  ...props\n}: React.ComponentProps<\"div\"> & { invalid?: boolean }) {\n  return (\n    <div\n      className={cn(\"ds-field\", invalid && \"ds-field--error\", className)}\n      data-invalid={invalid || undefined}\n      data-slot=\"select-field\"\n      {...props}\n    />\n  )\n}\n\nfunction SelectLabel({ className, ...props }: SelectPrimitive.Label.Props) {\n  return (\n    <SelectPrimitive.Label\n      className={cn(\"ds-field__label\", className)}\n      data-slot=\"select-label\"\n      {...props}\n    />\n  )\n}\n\nfunction SelectTrigger({\n  className,\n  invalid = false,\n  size = \"md\",\n  ...props\n}: Omit<SelectPrimitive.Trigger.Props, \"className\"> & {\n  className?: string\n  invalid?: boolean\n  size?: SelectSize\n}) {\n  return (\n    <SelectPrimitive.Trigger\n      className={(state) => cn(\n        \"ds-select\",\n        `ds-select--${size}`,\n        \"ds-tis-select__trigger\",\n        !state.placeholder && \"ds-select--filled\",\n        state.disabled && \"ds-select--disabled\",\n        state.readOnly && \"ds-select--readonly\",\n        invalid && \"ds-select--error\",\n        className,\n      )}\n      data-slot=\"select-trigger\"\n      {...props}\n    />\n  )\n}\n\nfunction SelectLeadingIcon({ className, ...props }: React.ComponentProps<typeof LanguagesIcon>) {\n  return (\n    <LanguagesIcon\n      aria-hidden=\"true\"\n      className={cn(\"ds-select__icon ds-icon\", className)}\n      data-slot=\"select-leading-icon\"\n      {...props}\n    />\n  )\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n  return (\n    <SelectPrimitive.Value\n      className={cn(\"ds-tis-select__value\", className)}\n      data-slot=\"select-value\"\n      {...props}\n    />\n  )\n}\n\nfunction SelectIndicator({ className, ...props }: React.ComponentProps<typeof ChevronDownIcon>) {\n  return (\n    <ChevronDownIcon\n      aria-hidden=\"true\"\n      className={cn(\"ds-select__arrow\", className)}\n      data-slot=\"select-indicator\"\n      {...props}\n    />\n  )\n}\n\nfunction SelectPortal(props: SelectPrimitive.Portal.Props) {\n  return <SelectPrimitive.Portal data-slot=\"select-portal\" {...props} />\n}\n\nfunction SelectPositioner({\n  alignItemWithTrigger = false,\n  className,\n  sideOffset = 0,\n  ...props\n}: SelectPrimitive.Positioner.Props) {\n  return (\n    <SelectPrimitive.Positioner\n      alignItemWithTrigger={alignItemWithTrigger}\n      className={cn(\"ds-tis-select__positioner\", className)}\n      data-slot=\"select-positioner\"\n      sideOffset={sideOffset}\n      {...props}\n    />\n  )\n}\n\nfunction SelectContent({ className, ...props }: SelectPrimitive.Popup.Props) {\n  return (\n    <SelectPrimitive.Popup\n      className={cn(\"ds-menu ds-menu--full ds-tis-select__content\", className)}\n      data-slot=\"select-content\"\n      {...props}\n    />\n  )\n}\n\nfunction SelectList({ className, ...props }: SelectPrimitive.List.Props) {\n  return (\n    <SelectPrimitive.List\n      className={cn(\"ds-tis-select__list\", className)}\n      data-slot=\"select-list\"\n      {...props}\n    />\n  )\n}\n\nfunction SelectItem({ className, ...props }: SelectPrimitive.Item.Props) {\n  return (\n    <SelectPrimitive.Item\n      className={cn(\"ds-menu__item ds-tis-select__item\", className)}\n      data-slot=\"select-item\"\n      {...props}\n    />\n  )\n}\n\nfunction SelectItemIndicator({ className, ...props }: SelectPrimitive.ItemIndicator.Props) {\n  return (\n    <SelectPrimitive.ItemIndicator\n      className={cn(\"ds-menu__check\", className)}\n      data-slot=\"select-item-indicator\"\n      {...props}\n    >\n      <CheckIcon aria-hidden=\"true\" className=\"ds-icon\" />\n    </SelectPrimitive.ItemIndicator>\n  )\n}\n\nfunction SelectItemText({ className, ...props }: SelectPrimitive.ItemText.Props) {\n  return (\n    <SelectPrimitive.ItemText\n      className={cn(\"ds-menu__item-label\", className)}\n      data-slot=\"select-item-text\"\n      {...props}\n    />\n  )\n}\n\nexport {\n  Select,\n  SelectContent,\n  SelectField,\n  SelectIndicator,\n  SelectItem,\n  SelectItemIndicator,\n  SelectItemText,\n  SelectLabel,\n  SelectLeadingIcon,\n  SelectList,\n  SelectPortal,\n  SelectPositioner,\n  SelectTrigger,\n  SelectValue,\n}\n",
      "type": "registry:ui",
      "target": "@ui/select.tsx"
    },
    {
      "path": "registry/tis/tis-utils.ts",
      "content": "import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n",
      "type": "registry:lib",
      "target": "@ui/tis-utils.ts"
    }
  ],
  "css": {
    "@import \"ds-tis/css\"": {},
    ".ds-tis-select__trigger": {
      "inline-size": "100%",
      "justify-content": "flex-start",
      "margin": "0",
      "text-align": "start",
      "cursor": "pointer"
    },
    ".ds-tis-select__value": {
      "flex": "1",
      "min-inline-size": "0",
      "overflow": "hidden",
      "text-overflow": "ellipsis",
      "white-space": "nowrap"
    },
    ".ds-tis-select__value[data-placeholder]": {
      "color": "var(--ds-field-placeholder-color-default)"
    },
    ".ds-tis-select__trigger[data-popup-open] .ds-select__arrow": {
      "transform": "translateY(-50%) rotate(180deg)"
    },
    ".ds-tis-select__positioner": {
      "z-index": "var(--ds-z-tooltip)",
      "inline-size": "var(--anchor-width)",
      "max-inline-size": "var(--available-width)"
    },
    ".ds-tis-select__content": {
      "inline-size": "100%",
      "max-block-size": "min(var(--available-height), var(--ds-size-layout-md))",
      "overflow-y": "auto"
    },
    ".ds-tis-select__list": {
      "display": "flex",
      "flex-direction": "column",
      "gap": "var(--ds-menu-surface-gap-default)"
    },
    ".ds-tis-select__item[data-highlighted]": {
      "background": "var(--ds-menu-item-bg-focused)",
      "color": "var(--ds-menu-item-content-color-focused)"
    },
    ".ds-tis-select__item[data-disabled]": {
      "background": "var(--ds-menu-item-bg-disabled)",
      "color": "var(--ds-menu-item-content-color-disabled)",
      "cursor": "not-allowed"
    },
    ".ds-tis-select__item[data-selected] .ds-menu__check": {
      "visibility": "visible"
    }
  },
  "meta": {
    "provider": "Base UI",
    "providerRole": "output-provider",
    "status": "beta",
    "wave": "forms"
  },
  "docs": "Use Select para uma opção sem busca; mantenha @import \"ds-tis/css\" como o primeiro import do CSS global.",
  "type": "registry:ui"
}