@nori-ui/core 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/dist/{chunk-7UKRN73P.js → chunk-2XJCLPNH.js} +3 -3
  2. package/dist/{chunk-7UKRN73P.js.map → chunk-2XJCLPNH.js.map} +1 -1
  3. package/dist/{chunk-5PSC5HT4.js → chunk-3B345SQU.js} +5 -5
  4. package/dist/{chunk-5PSC5HT4.js.map → chunk-3B345SQU.js.map} +1 -1
  5. package/dist/{chunk-JSAG5YO7.js → chunk-3IIIHZHT.js} +3 -3
  6. package/dist/{chunk-JSAG5YO7.js.map → chunk-3IIIHZHT.js.map} +1 -1
  7. package/dist/{chunk-DDGMLLS3.js → chunk-3W3XYULK.js} +3 -3
  8. package/dist/{chunk-DDGMLLS3.js.map → chunk-3W3XYULK.js.map} +1 -1
  9. package/dist/{chunk-WYPGQVDV.js → chunk-5YHT252H.js} +3 -3
  10. package/dist/{chunk-WYPGQVDV.js.map → chunk-5YHT252H.js.map} +1 -1
  11. package/dist/{chunk-ZMSIYLSI.js → chunk-7FSFJA33.js} +3 -3
  12. package/dist/{chunk-ZMSIYLSI.js.map → chunk-7FSFJA33.js.map} +1 -1
  13. package/dist/chunk-BOMPFNM4.js +165 -0
  14. package/dist/chunk-BOMPFNM4.js.map +1 -0
  15. package/dist/chunk-BVLOX4A3.js +256 -0
  16. package/dist/chunk-BVLOX4A3.js.map +1 -0
  17. package/dist/{chunk-YZ27OS2R.js → chunk-C32XGHWO.js} +3 -3
  18. package/dist/{chunk-YZ27OS2R.js.map → chunk-C32XGHWO.js.map} +1 -1
  19. package/dist/{chunk-UJWCEGQY.js → chunk-C5HQPXRI.js} +3 -3
  20. package/dist/{chunk-UJWCEGQY.js.map → chunk-C5HQPXRI.js.map} +1 -1
  21. package/dist/{chunk-XALU6LOT.js → chunk-EN4CLDGZ.js} +3 -3
  22. package/dist/{chunk-XALU6LOT.js.map → chunk-EN4CLDGZ.js.map} +1 -1
  23. package/dist/{chunk-6AD6KCVB.js → chunk-F5UKI7XD.js} +3 -3
  24. package/dist/{chunk-6AD6KCVB.js.map → chunk-F5UKI7XD.js.map} +1 -1
  25. package/dist/chunk-GTAXVTLF.js +43 -0
  26. package/dist/chunk-GTAXVTLF.js.map +1 -0
  27. package/dist/{chunk-NNFJKRXZ.js → chunk-H2LHWJ52.js} +3 -3
  28. package/dist/{chunk-NNFJKRXZ.js.map → chunk-H2LHWJ52.js.map} +1 -1
  29. package/dist/{chunk-PZS4A4VQ.js → chunk-HXCETKCC.js} +3 -3
  30. package/dist/{chunk-PZS4A4VQ.js.map → chunk-HXCETKCC.js.map} +1 -1
  31. package/dist/chunk-IGBXSBF7.js +71 -0
  32. package/dist/chunk-IGBXSBF7.js.map +1 -0
  33. package/dist/{chunk-JXLEMBDB.js → chunk-IIVTPN62.js} +3 -3
  34. package/dist/{chunk-JXLEMBDB.js.map → chunk-IIVTPN62.js.map} +1 -1
  35. package/dist/{chunk-PNP7L4TA.js → chunk-ISCJST4P.js} +3 -3
  36. package/dist/{chunk-PNP7L4TA.js.map → chunk-ISCJST4P.js.map} +1 -1
  37. package/dist/{chunk-TLS54G6Y.js → chunk-IWM2XDXH.js} +3 -3
  38. package/dist/{chunk-TLS54G6Y.js.map → chunk-IWM2XDXH.js.map} +1 -1
  39. package/dist/chunk-J5LK2XHE.js +118 -0
  40. package/dist/chunk-J5LK2XHE.js.map +1 -0
  41. package/dist/chunk-KFFGDET3.js +27 -0
  42. package/dist/chunk-KFFGDET3.js.map +1 -0
  43. package/dist/{chunk-MRJWPRCX.js → chunk-L6VYDM7S.js} +3 -3
  44. package/dist/{chunk-MRJWPRCX.js.map → chunk-L6VYDM7S.js.map} +1 -1
  45. package/dist/chunk-M4BI63P6.js +188 -0
  46. package/dist/chunk-M4BI63P6.js.map +1 -0
  47. package/dist/{chunk-RUWD35UI.js → chunk-MK57AOTI.js} +4 -4
  48. package/dist/{chunk-RUWD35UI.js.map → chunk-MK57AOTI.js.map} +1 -1
  49. package/dist/{chunk-3BDDPFCI.js → chunk-MOAIQHR7.js} +3 -3
  50. package/dist/{chunk-3BDDPFCI.js.map → chunk-MOAIQHR7.js.map} +1 -1
  51. package/dist/{chunk-5XEGZFG5.js → chunk-MYBBBLYE.js} +3 -3
  52. package/dist/{chunk-5XEGZFG5.js.map → chunk-MYBBBLYE.js.map} +1 -1
  53. package/dist/{chunk-WP2Z2ATO.js → chunk-O6M3F7BZ.js} +5 -5
  54. package/dist/{chunk-WP2Z2ATO.js.map → chunk-O6M3F7BZ.js.map} +1 -1
  55. package/dist/{chunk-FEPTH5RV.js → chunk-OELY6K44.js} +3 -3
  56. package/dist/{chunk-FEPTH5RV.js.map → chunk-OELY6K44.js.map} +1 -1
  57. package/dist/{chunk-BZLT6R62.js → chunk-OIHX5B4R.js} +3 -3
  58. package/dist/{chunk-BZLT6R62.js.map → chunk-OIHX5B4R.js.map} +1 -1
  59. package/dist/{chunk-QJVS2VXS.js → chunk-PGYEIXCO.js} +4 -4
  60. package/dist/{chunk-QJVS2VXS.js.map → chunk-PGYEIXCO.js.map} +1 -1
  61. package/dist/{chunk-UZD77M3J.js → chunk-PJTCO76H.js} +3 -3
  62. package/dist/{chunk-UZD77M3J.js.map → chunk-PJTCO76H.js.map} +1 -1
  63. package/dist/{chunk-4PUPKWEP.js → chunk-PJXVLE24.js} +4 -4
  64. package/dist/{chunk-4PUPKWEP.js.map → chunk-PJXVLE24.js.map} +1 -1
  65. package/dist/{chunk-WGT345SV.js → chunk-PLQPBMG2.js} +3 -3
  66. package/dist/{chunk-WGT345SV.js.map → chunk-PLQPBMG2.js.map} +1 -1
  67. package/dist/{chunk-OMU4R4Y5.js → chunk-PQW5LKAI.js} +3 -3
  68. package/dist/{chunk-OMU4R4Y5.js.map → chunk-PQW5LKAI.js.map} +1 -1
  69. package/dist/{chunk-Y5TJ7CAX.js → chunk-RI4Y2C5U.js} +3 -3
  70. package/dist/{chunk-Y5TJ7CAX.js.map → chunk-RI4Y2C5U.js.map} +1 -1
  71. package/dist/{chunk-3OIWAS2P.js → chunk-SF6WPUC5.js} +3 -3
  72. package/dist/{chunk-3OIWAS2P.js.map → chunk-SF6WPUC5.js.map} +1 -1
  73. package/dist/{chunk-MKSDYRWQ.js → chunk-STX5UKYT.js} +3 -3
  74. package/dist/{chunk-MKSDYRWQ.js.map → chunk-STX5UKYT.js.map} +1 -1
  75. package/dist/{chunk-2RL6WCFC.js → chunk-TSWPHJIU.js} +4 -4
  76. package/dist/{chunk-2RL6WCFC.js.map → chunk-TSWPHJIU.js.map} +1 -1
  77. package/dist/{chunk-SFNDR6DI.js → chunk-U2ZKY2CP.js} +3 -3
  78. package/dist/{chunk-SFNDR6DI.js.map → chunk-U2ZKY2CP.js.map} +1 -1
  79. package/dist/{chunk-PABG3IJ6.js → chunk-UKDDK42K.js} +3 -3
  80. package/dist/{chunk-PABG3IJ6.js.map → chunk-UKDDK42K.js.map} +1 -1
  81. package/dist/{chunk-VYRJ7OE5.js → chunk-USFXANEU.js} +3 -3
  82. package/dist/{chunk-VYRJ7OE5.js.map → chunk-USFXANEU.js.map} +1 -1
  83. package/dist/{chunk-CCUXO2HN.js → chunk-V5QSMDZL.js} +3 -3
  84. package/dist/{chunk-CCUXO2HN.js.map → chunk-V5QSMDZL.js.map} +1 -1
  85. package/dist/{chunk-NF7XG2FG.js → chunk-V75O7QQO.js} +3 -3
  86. package/dist/{chunk-NF7XG2FG.js.map → chunk-V75O7QQO.js.map} +1 -1
  87. package/dist/chunk-VFUV6XJR.js +257 -0
  88. package/dist/chunk-VFUV6XJR.js.map +1 -0
  89. package/dist/{chunk-NRYWNOG5.js → chunk-VL2WNGPF.js} +3 -3
  90. package/dist/{chunk-NRYWNOG5.js.map → chunk-VL2WNGPF.js.map} +1 -1
  91. package/dist/{chunk-JQQ3FBN7.js → chunk-VLZANXRZ.js} +3 -3
  92. package/dist/{chunk-JQQ3FBN7.js.map → chunk-VLZANXRZ.js.map} +1 -1
  93. package/dist/{chunk-2HMQDJ22.js → chunk-VOF3S5I4.js} +3 -3
  94. package/dist/{chunk-2HMQDJ22.js.map → chunk-VOF3S5I4.js.map} +1 -1
  95. package/dist/chunk-XQNVWHMN.js +60 -0
  96. package/dist/chunk-XQNVWHMN.js.map +1 -0
  97. package/dist/{chunk-JZ774T7U.js → chunk-ZGFXKYA5.js} +3 -3
  98. package/dist/{chunk-JZ774T7U.js.map → chunk-ZGFXKYA5.js.map} +1 -1
  99. package/dist/client.cjs +1106 -7
  100. package/dist/client.cjs.map +1 -1
  101. package/dist/client.d.cts +9 -0
  102. package/dist/client.d.ts +9 -0
  103. package/dist/client.js +56 -47
  104. package/dist/client.js.map +1 -1
  105. package/dist/components/Accordion/index.js +2 -2
  106. package/dist/components/Alert/index.js +2 -2
  107. package/dist/components/AlertDialog/index.js +2 -2
  108. package/dist/components/AspectRatio/index.cjs +67 -0
  109. package/dist/components/AspectRatio/index.cjs.map +1 -0
  110. package/dist/components/AspectRatio/index.d.cts +30 -0
  111. package/dist/components/AspectRatio/index.d.ts +30 -0
  112. package/dist/components/AspectRatio/index.js +5 -0
  113. package/dist/components/AspectRatio/index.js.map +1 -0
  114. package/dist/components/Avatar/index.js +2 -2
  115. package/dist/components/Badge/index.js +2 -2
  116. package/dist/components/Box/index.js +4 -4
  117. package/dist/components/Breadcrumb/index.js +3 -3
  118. package/dist/components/Button/index.js +2 -2
  119. package/dist/components/ButtonGroup/index.cjs +83 -0
  120. package/dist/components/ButtonGroup/index.cjs.map +1 -0
  121. package/dist/components/ButtonGroup/index.d.cts +45 -0
  122. package/dist/components/ButtonGroup/index.d.ts +45 -0
  123. package/dist/components/ButtonGroup/index.js +5 -0
  124. package/dist/components/ButtonGroup/index.js.map +1 -0
  125. package/dist/components/Calendar/index.js +3 -3
  126. package/dist/components/Card/index.js +2 -2
  127. package/dist/components/Carousel/index.cjs +297 -0
  128. package/dist/components/Carousel/index.cjs.map +1 -0
  129. package/dist/components/Carousel/index.d.cts +67 -0
  130. package/dist/components/Carousel/index.d.ts +67 -0
  131. package/dist/components/Carousel/index.js +5 -0
  132. package/dist/components/Carousel/index.js.map +1 -0
  133. package/dist/components/Checkbox/index.js +2 -2
  134. package/dist/components/Collapsible/index.cjs +512 -0
  135. package/dist/components/Collapsible/index.cjs.map +1 -0
  136. package/dist/components/Collapsible/index.d.cts +50 -0
  137. package/dist/components/Collapsible/index.d.ts +50 -0
  138. package/dist/components/Collapsible/index.js +7 -0
  139. package/dist/components/Collapsible/index.js.map +1 -0
  140. package/dist/components/Combobox/index.js +3 -3
  141. package/dist/components/ContextMenu/index.js +4 -4
  142. package/dist/components/DataTable/index.js +3 -3
  143. package/dist/components/DatePicker/index.js +5 -5
  144. package/dist/components/Dialog/index.js +2 -2
  145. package/dist/components/DropdownMenu/index.js +3 -3
  146. package/dist/components/Empty/index.cjs +385 -0
  147. package/dist/components/Empty/index.cjs.map +1 -0
  148. package/dist/components/Empty/index.d.cts +32 -0
  149. package/dist/components/Empty/index.d.ts +32 -0
  150. package/dist/components/Empty/index.js +7 -0
  151. package/dist/components/Empty/index.js.map +1 -0
  152. package/dist/components/FloatButton/index.js +3 -3
  153. package/dist/components/HStack/index.js +4 -4
  154. package/dist/components/HoverCard/index.cjs +894 -0
  155. package/dist/components/HoverCard/index.cjs.map +1 -0
  156. package/dist/components/HoverCard/index.d.cts +66 -0
  157. package/dist/components/HoverCard/index.d.ts +66 -0
  158. package/dist/components/HoverCard/index.js +9 -0
  159. package/dist/components/HoverCard/index.js.map +1 -0
  160. package/dist/components/InputGroup/index.js +2 -2
  161. package/dist/components/InputOTP/index.cjs +580 -0
  162. package/dist/components/InputOTP/index.cjs.map +1 -0
  163. package/dist/components/InputOTP/index.d.cts +49 -0
  164. package/dist/components/InputOTP/index.d.ts +49 -0
  165. package/dist/components/InputOTP/index.js +7 -0
  166. package/dist/components/InputOTP/index.js.map +1 -0
  167. package/dist/components/Item/index.cjs +443 -0
  168. package/dist/components/Item/index.cjs.map +1 -0
  169. package/dist/components/Item/index.d.cts +40 -0
  170. package/dist/components/Item/index.d.ts +40 -0
  171. package/dist/components/Item/index.js +7 -0
  172. package/dist/components/Item/index.js.map +1 -0
  173. package/dist/components/Kbd/index.cjs +396 -0
  174. package/dist/components/Kbd/index.cjs.map +1 -0
  175. package/dist/components/Kbd/index.d.cts +22 -0
  176. package/dist/components/Kbd/index.d.ts +22 -0
  177. package/dist/components/Kbd/index.js +7 -0
  178. package/dist/components/Kbd/index.js.map +1 -0
  179. package/dist/components/Pagination/index.js +4 -4
  180. package/dist/components/Popover/index.js +2 -2
  181. package/dist/components/Progress/index.js +2 -2
  182. package/dist/components/Radio/index.js +2 -2
  183. package/dist/components/SegmentedControl/index.js +2 -2
  184. package/dist/components/Select/index.js +2 -2
  185. package/dist/components/Separator/index.js +2 -2
  186. package/dist/components/Sheet/index.js +2 -2
  187. package/dist/components/Skeleton/index.js +2 -2
  188. package/dist/components/Slider/index.js +2 -2
  189. package/dist/components/Switch/index.js +2 -2
  190. package/dist/components/Table/index.js +2 -2
  191. package/dist/components/Tabs/index.js +2 -2
  192. package/dist/components/Text/index.js +2 -2
  193. package/dist/components/TextArea/index.js +3 -3
  194. package/dist/components/TextInput/index.js +2 -2
  195. package/dist/components/Toggle/index.js +2 -2
  196. package/dist/components/Tooltip/index.js +2 -2
  197. package/dist/components/VStack/index.js +4 -4
  198. package/dist/index.cjs +1106 -7
  199. package/dist/index.cjs.map +1 -1
  200. package/dist/index.d.cts +9 -0
  201. package/dist/index.d.ts +9 -0
  202. package/dist/index.js +54 -45
  203. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Select/Select.tsx"],"names":["id","RNText"],"mappings":"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","file":"chunk-UZD77M3J.js","sourcesContent":["'use client';\n\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type { NativeScrollEvent, NativeSyntheticEvent, ViewStyle } from 'react-native';\nimport { Modal, Platform, Pressable, Text as RNText, ScrollView, useWindowDimensions, View } from 'react-native';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type SelectOption<T = unknown> = {\n /** Unique value within the select. */\n value: string;\n /** Visible text. */\n label: string;\n /** Optional group label — items with the same `group` cluster together. */\n group?: string;\n disabled?: boolean;\n /** Arbitrary payload — surfaced to `renderOption` and `onChange`. */\n data?: T;\n};\n\nexport type LoadOptionsParams = {\n /** Current search input. */\n search: string;\n /** Number of items already loaded — start of the requested window. */\n offset: number;\n /** Page size requested. */\n limit: number;\n};\n\nexport type LoadOptionsResult<T = unknown> = {\n items: ReadonlyArray<SelectOption<T>>;\n /** Total available — the picker stops requesting when offset+items.length >= total. Optional; if omitted, requests stop when items.length < limit. */\n total?: number;\n};\n\nexport type SelectRenderOptionInfo = {\n /** This option matches the current value. */\n selected: boolean;\n /** This option is the keyboard focus target. */\n active: boolean;\n};\n\ntype SelectBaseProps<T = unknown> = {\n /** Static options. Mutually exclusive with `loadOptions`. */\n options?: ReadonlyArray<SelectOption<T>>;\n /**\n * Async loader. Called with `{ search, offset, limit }` whenever the\n * search input changes (debounced) or the user scrolls near the end of\n * the loaded list. Return more items + an optional total to stop the\n * pagination loop early.\n */\n loadOptions?: (params: LoadOptionsParams) => Promise<LoadOptionsResult<T>>;\n /** Page size for `loadOptions`. @defaultValue 50 */\n pageSize?: number;\n /** Show a search input above the list. @defaultValue auto-on for static options >= 10 items, always on for loadOptions */\n searchable?: boolean;\n /** Placeholder for the search input. */\n searchPlaceholder?: string;\n /** Override the default substring filter for static options. */\n filterOption?: (option: SelectOption<T>, search: string) => boolean;\n /** Custom item renderer. Called per option in the list. */\n renderOption?: (option: SelectOption<T>, info: SelectRenderOptionInfo) => ReactNode;\n /** Trigger placeholder when no value is selected. */\n placeholder?: string;\n /**\n * BCP 47 locale — drives `Intl.Collator` sorting of options when set.\n * Re-sorts on language switch so a German list reads alphabetically in\n * German vs the same list in English.\n */\n locale?: string;\n /** When `locale` is set, sort options alphabetically. @defaultValue true */\n sortByLocale?: boolean;\n /** Message shown in the popup when there are no matching options. */\n noOptionsMessage?: string;\n /** Message shown while async results are loading. */\n loadingMessage?: string;\n /** Disable interaction. */\n disabled?: boolean;\n /** RTL flips the popup alignment + text direction. */\n dir?: 'ltr' | 'rtl';\n /**\n * Virtualize the list — only DOM-render the visible window of items.\n * Auto-on when the list has more than 100 items.\n */\n virtualized?: boolean;\n /** Pixel height of a single item — required for virtualization math. @defaultValue 36 */\n itemHeight?: number;\n /** Max popup height in px. @defaultValue 320 */\n maxMenuHeight?: number;\n className?: string;\n testID?: string;\n id?: string;\n name?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n};\n\nexport type SelectSingleProps<T = unknown> = SelectBaseProps<T> & {\n /** Single-select mode (default — omit or pass `false`). */\n multiple?: false;\n /** Controlled value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n /** Fires when the user picks an option. */\n onChange?: (value: string, option: SelectOption<T> | undefined) => void;\n};\n\nexport type SelectMultiProps<T = unknown> = SelectBaseProps<T> & {\n /** Multi-select mode — value/onChange become array-typed. */\n multiple: true;\n /** Controlled values. */\n value?: ReadonlyArray<string>;\n /** Uncontrolled initial values. */\n defaultValue?: ReadonlyArray<string>;\n /** Fires when the selection changes. Receives the full new array of values + their resolved options. */\n onChange?: (values: ReadonlyArray<string>, options: ReadonlyArray<SelectOption<T>>) => void;\n /** Hard cap on selected count — extra picks are ignored. */\n maxSelected?: number;\n /** Max chips to render in the trigger before collapsing to \"N selected\". @defaultValue 3 */\n maxChips?: number;\n};\n\nexport type SelectProps<T = unknown> = SelectSingleProps<T> | SelectMultiProps<T>;\n\nconst DEFAULT_PAGE_SIZE = 50;\nconst DEFAULT_ITEM_HEIGHT = 36;\nconst DEFAULT_MAX_MENU = 320;\nconst SEARCH_DEBOUNCE_MS = 150;\nconst VIRTUAL_OVERSCAN = 4;\n// Reset window for the type-ahead buffer. Matches native <select> on macOS\n// closely enough that typing \"Sep\" lands on September even without a search\n// field. Shorter than the WAI-ARIA suggested 500ms feels jumpy on slow typists.\nconst TYPE_AHEAD_RESET_MS = 500;\n\nconst defaultFilter = <T,>(option: SelectOption<T>, search: string): boolean => {\n if (!search) {\n return true;\n }\n return option.label.toLowerCase().includes(search.toLowerCase());\n};\n\n/**\n * Searchable, async-capable, optionally virtualized select. Designed for the\n * \"I have 500 items behind a paginated API\" case as easily as the \"five\n * static items\" case.\n *\n * Modes:\n * - **Static** — pass `options`. The picker filters in-memory by a\n * substring match on `label` (override via `filterOption`).\n * - **Async** — pass `loadOptions(params)`. Called on search-input change\n * (debounced) and when the list scrolls near the bottom for the next\n * page. The picker manages the loaded list, so consumers don't have to.\n *\n * Other features:\n * - Custom item renderer via `renderOption`.\n * - i18n locale-aware sorting via `Intl.Collator` when `locale` is set —\n * re-sorts when the locale changes so a German list reads\n * alphabetically in German.\n * - OptGroup support — items with the same `group` field cluster in the\n * popup with a group header.\n * - Virtualized list when item count > 100 (or set `virtualized`\n * explicitly). Only the visible window is rendered.\n * - Keyboard navigation: ArrowDown / ArrowUp move the active option,\n * Home / End jump to the first / last, Enter selects, Escape closes,\n * Tab closes. Type-ahead works whether or not a search field is shown\n * (typing \"Sep\" lands on September; repeating a single char like\n * \"m\",\"m\" cycles through M-options).\n * - RTL alignment via `dir=\"rtl\"`.\n */\nexport const Select = <T = unknown>(props: SelectProps<T>) => {\n const {\n options: staticOptions,\n loadOptions,\n pageSize = DEFAULT_PAGE_SIZE,\n searchable: searchableProp,\n searchPlaceholder = 'Search…',\n filterOption,\n renderOption,\n placeholder = 'Select…',\n locale,\n sortByLocale = true,\n noOptionsMessage = 'No options',\n loadingMessage = 'Loading…',\n disabled = false,\n dir = 'ltr',\n virtualized: virtualizedProp,\n itemHeight = DEFAULT_ITEM_HEIGHT,\n maxMenuHeight = DEFAULT_MAX_MENU,\n className,\n testID,\n id,\n name,\n } = props;\n const ariaLabel = (props as { 'aria-label'?: string })['aria-label'];\n const ariaLabelledBy = (props as { 'aria-labelledby'?: string })['aria-labelledby'];\n const ariaDescribedBy = (props as { 'aria-describedby'?: string })['aria-describedby'];\n const ariaInvalid = (props as { 'aria-invalid'?: boolean })['aria-invalid'];\n const ariaRequired = (props as { 'aria-required'?: boolean })['aria-required'];\n const multiple = props.multiple === true;\n const maxSelected = multiple ? (props as SelectMultiProps<T>).maxSelected : undefined;\n const maxChips = multiple ? ((props as SelectMultiProps<T>).maxChips ?? 3) : undefined;\n\n const baseId = useId();\n const colors = useThemeColors();\n const [open, setOpen] = useState(false);\n\n // We always store values as a ReadonlyArray<string> internally so the\n // toggle / replace logic stays uniform; for single mode the array is\n // either empty or has exactly one element.\n const controlledValues: ReadonlyArray<string> | undefined = multiple\n ? (props.value as ReadonlyArray<string> | undefined)\n : props.value !== undefined\n ? [props.value as string]\n : undefined;\n const defaultValues: ReadonlyArray<string> = multiple\n ? (((props as SelectMultiProps<T>).defaultValue as ReadonlyArray<string> | undefined) ?? [])\n : (props as SelectSingleProps<T>).defaultValue !== undefined\n ? [(props as SelectSingleProps<T>).defaultValue as string]\n : [];\n const [innerValues, setInnerValues] = useState<ReadonlyArray<string>>(defaultValues);\n const isControlled = controlledValues !== undefined;\n const currentValues: ReadonlyArray<string> = isControlled\n ? (controlledValues as ReadonlyArray<string>)\n : innerValues;\n /** Single-mode legacy accessor — first selected value (or undefined). */\n const current: string | undefined = currentValues[0];\n\n const [searchInput, setSearchInput] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const [activeIndex, setActiveIndex] = useState(0);\n\n // Debounce the search input so loadOptions / filterOption don't fire on\n // every keystroke when the work is expensive.\n useEffect(() => {\n const t = setTimeout(() => setDebouncedSearch(searchInput), SEARCH_DEBOUNCE_MS);\n return () => clearTimeout(t);\n }, [searchInput]);\n\n // Async-mode internal cache of loaded options.\n const [asyncItems, setAsyncItems] = useState<SelectOption<T>[]>([]);\n const [asyncLoading, setAsyncLoading] = useState(false);\n const [asyncTotal, setAsyncTotal] = useState<number | undefined>(undefined);\n const asyncRequestId = useRef(0);\n\n const isAsync = loadOptions !== undefined;\n\n // When the search changes in async mode, reset the loaded list and\n // refetch from offset 0. The request id guards against stale resolution.\n useEffect(() => {\n if (!isAsync || !loadOptions || !open) {\n return;\n }\n const requestId = ++asyncRequestId.current;\n setAsyncLoading(true);\n setAsyncItems([]);\n setAsyncTotal(undefined);\n loadOptions({ search: debouncedSearch, offset: 0, limit: pageSize })\n .then((result) => {\n if (requestId !== asyncRequestId.current) {\n return;\n }\n setAsyncItems(result.items.slice());\n setAsyncTotal(result.total);\n })\n .catch(() => {\n // Swallow — consumers can wrap loadOptions to handle errors.\n })\n .finally(() => {\n if (requestId === asyncRequestId.current) {\n setAsyncLoading(false);\n }\n });\n }, [debouncedSearch, isAsync, loadOptions, pageSize, open]);\n\n // Helper to load the next page in async mode.\n const loadMore = useCallback(() => {\n if (!isAsync || !loadOptions || asyncLoading) {\n return;\n }\n const haveAll = asyncTotal !== undefined && asyncItems.length >= asyncTotal;\n if (haveAll) {\n return;\n }\n const requestId = ++asyncRequestId.current;\n setAsyncLoading(true);\n loadOptions({ search: debouncedSearch, offset: asyncItems.length, limit: pageSize })\n .then((result) => {\n if (requestId !== asyncRequestId.current) {\n return;\n }\n setAsyncItems((prev) => prev.concat(result.items));\n if (result.total !== undefined) {\n setAsyncTotal(result.total);\n }\n })\n .catch(() => undefined)\n .finally(() => {\n if (requestId === asyncRequestId.current) {\n setAsyncLoading(false);\n }\n });\n }, [asyncItems.length, asyncLoading, asyncTotal, debouncedSearch, isAsync, loadOptions, pageSize]);\n\n // Build the displayed option list — filter (static) or async items, then\n // optionally locale-sort.\n const visibleOptions = useMemo<SelectOption<T>[]>(() => {\n const source = isAsync ? asyncItems : (staticOptions ?? []);\n const filtered = isAsync\n ? source.slice() // async backend already handled search\n : source.filter((opt) => (filterOption ?? defaultFilter)(opt, debouncedSearch));\n if (locale && sortByLocale) {\n const collator = new Intl.Collator(locale, { sensitivity: 'base', numeric: true });\n // Group-aware sort: stable on group, then on label.\n return filtered.slice().sort((a, b) => {\n const ga = a.group ?? '';\n const gb = b.group ?? '';\n const groupDelta = collator.compare(ga, gb);\n if (groupDelta !== 0) {\n return groupDelta;\n }\n return collator.compare(a.label, b.label);\n });\n }\n return filtered;\n }, [isAsync, asyncItems, staticOptions, filterOption, debouncedSearch, locale, sortByLocale]);\n\n const selectedOption = useMemo(() => {\n const all = isAsync ? asyncItems : (staticOptions ?? []);\n return all.find((o) => o.value === current);\n }, [asyncItems, isAsync, staticOptions, current]);\n\n /** Multi-mode: resolved options for every currently-selected value, in selection order. */\n const selectedOptions = useMemo<ReadonlyArray<SelectOption<T>>>(() => {\n if (!multiple) {\n return [];\n }\n const all = isAsync ? asyncItems : (staticOptions ?? []);\n const map = new Map(all.map((o) => [o.value, o]));\n return currentValues.map((v) => map.get(v)).filter((o): o is SelectOption<T> => o !== undefined);\n }, [multiple, currentValues, asyncItems, isAsync, staticOptions]);\n\n const searchable = searchableProp ?? (isAsync || (staticOptions !== undefined && staticOptions.length >= 10));\n const virtualized = virtualizedProp ?? visibleOptions.length > 100;\n\n // Keep activeIndex in bounds.\n useEffect(() => {\n setActiveIndex((idx) => Math.min(Math.max(0, idx), Math.max(0, visibleOptions.length - 1)));\n }, [visibleOptions.length]);\n\n const onSelect = useCallback(\n (option: SelectOption<T>) => {\n if (option.disabled) {\n return;\n }\n if (multiple) {\n const has = currentValues.includes(option.value);\n let nextValues: string[];\n if (has) {\n nextValues = currentValues.filter((v) => v !== option.value);\n } else {\n if (maxSelected !== undefined && currentValues.length >= maxSelected) {\n return; // hit the cap\n }\n nextValues = [...currentValues, option.value];\n }\n if (!isControlled) {\n setInnerValues(nextValues);\n }\n // Resolve options for callback — preserves order of nextValues.\n const allOpts: ReadonlyArray<SelectOption<T>> = [\n ...(staticOptions ?? []),\n ...(asyncItems as ReadonlyArray<SelectOption<T>>),\n ];\n const optMap = new Map(allOpts.map((o) => [o.value, o]));\n const selectedOpts = nextValues\n .map((v) => optMap.get(v))\n .filter((o): o is SelectOption<T> => o !== undefined);\n (props as SelectMultiProps<T>).onChange?.(nextValues, selectedOpts);\n // Multi mode: keep the popup open, keep the search input — the\n // user is likely picking more than one in a row.\n return;\n }\n // Single mode — replace + close.\n if (!isControlled) {\n setInnerValues([option.value]);\n }\n (props as SelectSingleProps<T>).onChange?.(option.value, option);\n setOpen(false);\n setSearchInput('');\n },\n // biome-ignore lint/correctness/useExhaustiveDependencies: `props` is the discriminated union — destructuring it would defeat the narrowing; the asyncItems / staticOptions captures intentionally re-trigger the callback when the option pool changes\n [multiple, isControlled, currentValues, maxSelected, staticOptions, asyncItems, props]\n );\n\n /** Multi-mode helper to clear all selected values. */\n const clearAll = useCallback(() => {\n if (!isControlled) {\n setInnerValues([]);\n }\n (props as SelectMultiProps<T>).onChange?.([], []);\n // biome-ignore lint/correctness/useExhaustiveDependencies: same reason as above\n }, [isControlled, props]);\n\n const moveActive = useCallback(\n (delta: 1 | -1) => {\n setActiveIndex((idx) => {\n if (visibleOptions.length === 0) {\n return 0;\n }\n let next = (idx + delta + visibleOptions.length) % visibleOptions.length;\n // Skip disabled options.\n for (let attempts = 0; attempts < visibleOptions.length; attempts += 1) {\n if (!visibleOptions[next]?.disabled) {\n return next;\n }\n next = (next + delta + visibleOptions.length) % visibleOptions.length;\n }\n return idx;\n });\n },\n [visibleOptions]\n );\n\n // Type-ahead buffer — shared across the trigger (closed state) and the\n // popup container (open without search field). Mutable ref so we don't\n // re-render on every keystroke.\n const typeAheadRef = useRef<{ buffer: string; timer: ReturnType<typeof setTimeout> | null }>({\n buffer: '',\n timer: null,\n });\n useEffect(() => {\n // Clear any pending type-ahead timer on unmount so we don't leak it.\n return () => {\n if (typeAheadRef.current.timer) {\n clearTimeout(typeAheadRef.current.timer);\n typeAheadRef.current.timer = null;\n }\n };\n }, []);\n\n const handleTypeAhead = useCallback(\n (char: string) => {\n if (visibleOptions.length === 0) {\n return;\n }\n if (typeAheadRef.current.timer) {\n clearTimeout(typeAheadRef.current.timer);\n }\n const nextBuffer = typeAheadRef.current.buffer + char.toLowerCase();\n typeAheadRef.current.buffer = nextBuffer;\n typeAheadRef.current.timer = setTimeout(() => {\n typeAheadRef.current.buffer = '';\n typeAheadRef.current.timer = null;\n }, TYPE_AHEAD_RESET_MS);\n\n // Cycle mode: a single char OR repeated same char (e.g. \"aa\") cycles\n // through options whose label starts with that char, advancing past\n // the current activeIndex. Otherwise the buffer is treated as a\n // prefix and we search from the top — refining the match as the\n // user keeps typing (\"S\" → \"Se\" → \"Sep\" → September).\n const allSame = nextBuffer.length > 1 && nextBuffer.split('').every((c) => c === nextBuffer[0]);\n const cycleMode = nextBuffer.length === 1 || allSame;\n const needle = cycleMode ? nextBuffer.charAt(0) : nextBuffer;\n const len = visibleOptions.length;\n const startFrom = cycleMode ? (activeIndex + 1) % len : 0;\n for (let i = 0; i < len; i += 1) {\n const idx = (startFrom + i) % len;\n const opt = visibleOptions[idx];\n if (!opt || opt.disabled) {\n continue;\n }\n if (opt.label.toLowerCase().startsWith(needle)) {\n setActiveIndex(idx);\n return;\n }\n }\n },\n [visibleOptions, activeIndex]\n );\n\n // Shared list-navigation handler — used by the search input, the\n // popup container (when no search field is shown), and as the basis for\n // trigger handling. Returns true if the event was consumed so callers\n // can fall through to type-ahead handling for unhandled keys.\n const handleListKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>): boolean => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveActive(1);\n return true;\n case 'ArrowUp':\n event.preventDefault();\n moveActive(-1);\n return true;\n case 'Home': {\n event.preventDefault();\n const idx = visibleOptions.findIndex((o) => !o.disabled);\n if (idx >= 0) {\n setActiveIndex(idx);\n }\n return true;\n }\n case 'End': {\n event.preventDefault();\n for (let i = visibleOptions.length - 1; i >= 0; i -= 1) {\n if (!visibleOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n return true;\n }\n case 'Enter': {\n const opt = visibleOptions[activeIndex];\n if (opt) {\n event.preventDefault();\n onSelect(opt);\n }\n return true;\n }\n case 'Escape':\n event.preventDefault();\n setOpen(false);\n // Restore focus to the trigger so the next Tab keeps the\n // user inside the same widget instead of jumping to <body>.\n if (Platform.OS === 'web') {\n const trigger = triggerRef.current as unknown as { focus?: () => void } | null;\n trigger?.focus?.();\n }\n return true;\n case 'Tab':\n setOpen(false);\n return true;\n }\n return false;\n },\n [moveActive, activeIndex, visibleOptions, onSelect]\n );\n\n const handleSearchKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n handleListKeyDown(event);\n },\n [handleListKeyDown]\n );\n\n // Popup-container handler — only attached when there's no search input,\n // so we own type-ahead here. Falls through to the shared list handler\n // for arrow keys / Enter / Escape / Tab.\n const handlePopupKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (handleListKeyDown(event)) {\n return;\n }\n // Single printable character without modifiers → feed the\n // type-ahead buffer. Modifier-combos (Cmd-A, Ctrl-K) are left\n // alone so browser/OS shortcuts keep working.\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey && event.key !== ' ') {\n event.preventDefault();\n handleTypeAhead(event.key);\n }\n },\n [handleListKeyDown, handleTypeAhead]\n );\n\n const handleTriggerKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n switch (event.key) {\n case ' ':\n case 'Enter':\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n setOpen(true);\n return;\n }\n // Type-ahead on the closed trigger: open the popup and jump to\n // the matching option. Mirrors native <select> behaviour where\n // typing a letter while the control has focus changes the\n // highlighted choice without an explicit \"open\" gesture.\n if (!disabled && event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n event.preventDefault();\n setOpen(true);\n handleTypeAhead(event.key);\n }\n },\n [disabled, handleTypeAhead]\n );\n\n // Close when clicking outside (web only). The outside check considers\n // BOTH the container (trigger area) and the popup ref because the popup\n // portals out of the container's DOM subtree (position: fixed escapes\n // any overflow:hidden ancestor, but still belongs to the same logical\n // widget).\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const popupRef = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n if (\n Platform.OS !== 'web' ||\n typeof document === 'undefined' ||\n typeof document.addEventListener !== 'function'\n ) {\n return;\n }\n if (!open) {\n return;\n }\n const onDocClick = (event: MouseEvent) => {\n const node = containerRef.current;\n const popup = popupRef.current;\n const target = event.target as Node;\n if (node?.contains(target)) {\n return;\n }\n if (popup?.contains(target)) {\n return;\n }\n setOpen(false);\n };\n document.addEventListener('mousedown', onDocClick);\n return () => document.removeEventListener('mousedown', onDocClick);\n }, [open]);\n\n // Measure the trigger so the popup can render with `position: fixed` +\n // computed coords. position:fixed escapes any ancestor's overflow:hidden\n // (e.g. fumadocs Tabs panes, our Preview frame), which is the\n // single biggest source of \"the dropdown got cut off\" bugs.\n //\n // On native we ignore the web `position:fixed` path entirely and\n // measure via `View.measure(...)` to feed an RN `<Modal>` positioned\n // absolutely below the trigger.\n const [triggerRect, setTriggerRect] = useState<{ top: number; left: number; width: number; height: number } | null>(\n null\n );\n const measureTrigger = useCallback(() => {\n const node = triggerRef.current as unknown as {\n getBoundingClientRect?: () => DOMRect;\n measure?: (cb: (x: number, y: number, w: number, h: number, pageX: number, pageY: number) => void) => void;\n } | null;\n if (!node) {\n return;\n }\n if (Platform.OS === 'web' && typeof node.getBoundingClientRect === 'function') {\n const rect = node.getBoundingClientRect();\n setTriggerRect({ top: rect.top, left: rect.left, width: rect.width, height: rect.height });\n return;\n }\n // Native path — RN's measure() reports page-relative coords on the UI thread.\n if (typeof node.measure === 'function') {\n node.measure((_x, _y, w, h, pageX, pageY) => {\n setTriggerRect({ top: pageY, left: pageX, width: w, height: h });\n });\n }\n }, []);\n useEffect(() => {\n if (!open) {\n return;\n }\n // `window` is defined on RN's Hermes/JSC runtime but `addEventListener`\n // is web-only; gate on Platform.OS to avoid the runtime crash on native.\n if (Platform.OS !== 'web' || typeof window === 'undefined' || typeof window.addEventListener !== 'function') {\n return;\n }\n measureTrigger();\n window.addEventListener('scroll', measureTrigger, true);\n window.addEventListener('resize', measureTrigger);\n return () => {\n window.removeEventListener('scroll', measureTrigger, true);\n window.removeEventListener('resize', measureTrigger);\n };\n }, [open, measureTrigger]);\n\n // Auto-focus the popup container when it opens without a search field —\n // otherwise key events have nowhere to land and the user gets a popup\n // they can only operate with the mouse. With a search field, the input's\n // own auto-focus effect already handles this.\n useEffect(() => {\n if (!open || searchable || Platform.OS !== 'web') {\n return;\n }\n const id = requestAnimationFrame(() => {\n const node = popupRef.current as unknown as { focus?: () => void } | null;\n node?.focus?.();\n });\n return () => cancelAnimationFrame(id);\n }, [open, searchable]);\n\n // Scroll handler for async pagination. ScrollView's onScroll event shape\n // works across both react-native-web (HTMLDivElement under the hood) and\n // native (RCTScrollView), so we read offsets from `nativeEvent`.\n const onListScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (!isAsync) {\n return;\n }\n const { contentOffset, contentSize, layoutMeasurement } = event.nativeEvent;\n const remaining = contentSize.height - contentOffset.y - layoutMeasurement.height;\n if (remaining < itemHeight * 4) {\n loadMore();\n }\n },\n [isAsync, itemHeight, loadMore]\n );\n\n // ---------- visual styling ----------\n const triggerStyle: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n minHeight: 36, // component-density literal — not from theme\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.background.elevated,\n opacity: disabled ? 0.6 : 1,\n };\n\n // Web: position:fixed + computed coords from the trigger so the popup\n // can escape any ancestor with `overflow: hidden` (fumadocs Tabs, our\n // Preview frame, etc.). Width matches the trigger; widen to a 200px\n // floor for readability.\n //\n // Native: same coords, but on `position:'absolute'` inside the Modal —\n // RN doesn't have `position:'fixed'`, but Modal renders above all\n // content as a true overlay so absolute coords against the screen\n // window are correct.\n const winDims = useWindowDimensions();\n const popupStyle: ViewStyle = triggerRect\n ? {\n position: (Platform.OS === 'web' ? 'fixed' : 'absolute') as unknown as 'absolute',\n top: triggerRect.top + triggerRect.height + px(colors.spacing['1']),\n left: dir === 'rtl' ? undefined : triggerRect.left,\n right:\n dir === 'rtl'\n ? Platform.OS === 'web' && typeof window !== 'undefined'\n ? window.innerWidth - (triggerRect.left + triggerRect.width)\n : winDims.width - (triggerRect.left + triggerRect.width)\n : undefined,\n minWidth: Math.max(200, triggerRect.width),\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: px(colors.radius.lg),\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n // 2147483646 (max int32 - 1) so we sit above any third-party\n // chrome (toasts, modals, dev banners) without picking a fight\n // for the very top slot. Combined with portaling to body below,\n // this also dodges any ancestor stacking context that would\n // otherwise trap our z-index inside a sibling preview frame.\n zIndex: 2147483646,\n ...({ boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)' } as ViewStyle),\n }\n : {\n // Trigger not yet measured — render off-screen until the\n // first measurement lands. Avoids a one-frame flash at (0,0).\n position: (Platform.OS === 'web' ? 'fixed' : 'absolute') as unknown as 'absolute',\n top: -9999,\n left: -9999,\n };\n\n const containerProps: Record<string, unknown> = {\n ref: (node: HTMLDivElement | null) => {\n containerRef.current = node;\n },\n ...(testID !== undefined ? { testID } : {}),\n dir,\n };\n\n return (\n <View {...containerProps} className={cn('relative', className)} style={{ position: 'relative' }}>\n {/* RN's Pressable TS surface doesn't model onKeyDown / aria-haspopup; rn-web forwards them. Spread at the boundary. */}\n <Pressable\n ref={(node) => {\n triggerRef.current = node as unknown as HTMLElement | null;\n }}\n {...({\n onKeyDown: handleTriggerKeyDown,\n role: 'combobox',\n accessibilityRole: 'combobox',\n 'aria-expanded': open,\n 'aria-controls': `${baseId}-listbox`,\n 'aria-haspopup': 'listbox',\n tabIndex: disabled ? -1 : 0,\n ...(id !== undefined ? { id, nativeID: id } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(ariaLabel !== undefined ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n ...(ariaLabelledBy !== undefined\n ? { 'aria-labelledby': ariaLabelledBy, accessibilityLabelledBy: ariaLabelledBy }\n : {}),\n ...(ariaDescribedBy !== undefined\n ? { 'aria-describedby': ariaDescribedBy, accessibilityDescribedBy: ariaDescribedBy }\n : {}),\n ...(ariaInvalid === true ? { 'aria-invalid': true } : {}),\n ...(ariaRequired === true ? { 'aria-required': true } : {}),\n ...(disabled ? { 'aria-disabled': true, disabled: true } : {}),\n } as Record<string, unknown>)}\n onPress={() => {\n if (disabled) {\n return;\n }\n // Re-measure on every press so the popup picks up\n // post-scroll / rotation / keyboard-shifted positions.\n measureTrigger();\n setOpen((v) => !v);\n }}\n style={triggerStyle}\n >\n {multiple ? (\n <MultiTriggerLabel options={selectedOptions} placeholder={placeholder} maxChips={maxChips ?? 3} />\n ) : (\n <RNText\n style={{\n color: selectedOption ? colors.semantic.text.default : colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {selectedOption?.label ?? placeholder}\n </RNText>\n )}\n <defaultSemanticIcons.chevronDown size={16} color={colors.semantic.text.muted} />\n </Pressable>\n\n {open ? renderPopup() : null}\n </View>\n );\n\n // Local helper so we can portal to <body> on web. Why: even with\n // position:fixed, an ancestor with `transform`, `filter`, or `will-change`\n // creates a containing block that traps fixed positioning AND a stacking\n // context that traps z-index. The docs preview frames trip both. Portaling\n // to body removes all ambiguity — the popup is a top-level sibling of\n // <body>'s other children. On native, RN doesn't have a portal here, so\n // we render in place; native overflow is rarely a clipping problem\n // because RN doesn't have stacking-context-creating CSS properties.\n function renderPopup(): React.ReactNode {\n const popup = (\n <View\n ref={(node) => {\n popupRef.current = node as unknown as HTMLDivElement | null;\n }}\n {...({\n role: 'listbox',\n id: `${baseId}-listbox`,\n ...(multiple ? { 'aria-multiselectable': true } : {}),\n // Without a search field there's no input to capture\n // keystrokes — make the popup itself focusable and own\n // arrow / Enter / Escape / type-ahead. With a search\n // field these belong to the input below.\n ...(searchable ? {} : { tabIndex: -1, onKeyDown: handlePopupKeyDown }),\n } as Record<string, unknown>)}\n style={popupStyle}\n >\n {searchable ? (\n <SearchInput\n value={searchInput}\n onChange={setSearchInput}\n onKeyDown={handleSearchKeyDown}\n placeholder={searchPlaceholder}\n dir={dir}\n />\n ) : null}\n {multiple && currentValues.length > 0 ? (\n <MultiSelectionHeader count={currentValues.length} onClearAll={clearAll} />\n ) : null}\n <SelectList\n options={visibleOptions}\n activeIndex={activeIndex}\n currentValue={current}\n selectedValues={currentValues}\n multiple={multiple}\n onSelect={onSelect}\n onActiveChange={setActiveIndex}\n {...(renderOption !== undefined ? { renderOption } : {})}\n itemHeight={itemHeight}\n maxHeight={maxMenuHeight}\n virtualized={virtualized}\n loading={isAsync && asyncLoading}\n loadingMessage={loadingMessage}\n noOptionsMessage={noOptionsMessage}\n listboxId={`${baseId}-listbox`}\n onScroll={onListScroll}\n />\n </View>\n );\n if (Platform.OS === 'web' && typeof document !== 'undefined') {\n return createPortal(popup, document.body);\n }\n // Native: wrap in a transparent Modal so the popup renders above\n // all in-tree content (RN has no `position:'fixed'` and an\n // absolute child can't escape its parent's overflow). The\n // Modal's onRequestClose handles Android's hardware back button;\n // a transparent backdrop Pressable closes the popup on outside\n // tap (the equivalent of the document-mousedown handler on web).\n return (\n <Modal transparent visible animationType=\"fade\" onRequestClose={() => setOpen(false)} statusBarTranslucent>\n <Pressable\n onPress={() => setOpen(false)}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n }}\n />\n {popup}\n </Modal>\n );\n }\n};\n\n// ---------- search input (web-native input wrapped in a pressable container) ----------\n\ntype SearchInputProps = {\n value: string;\n onChange: (next: string) => void;\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => void;\n placeholder: string;\n dir: 'ltr' | 'rtl';\n};\n\nconst SearchInput = ({ value, onChange, onKeyDown, placeholder, dir }: SearchInputProps) => {\n const colors = useThemeColors();\n const inputRef = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n // Auto-focus when the popup opens so the user can start typing.\n inputRef.current?.focus?.();\n }, []);\n return (\n <View\n style={{\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: px(colors.spacing['2']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n dir={dir}\n aria-label=\"Search options\"\n style={{\n width: '100%',\n // Inline `padding: '6px 8px'` shorthand intentionally kept as a\n // string for the native HTML <input> — it's not an RN style prop.\n padding: `${px(colors.spacing['2']) - 2}px ${px(colors.spacing['2'])}px`,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n backgroundColor: colors.semantic.background.elevated,\n border: `1px solid ${colors.semantic.border.default}`,\n borderRadius: px(colors.radius.sm),\n outline: 'none',\n }}\n />\n </View>\n );\n};\n\n// ---------- list (with optional virtualization + group headers) ----------\n\ntype SelectListProps<T> = {\n options: ReadonlyArray<SelectOption<T>>;\n activeIndex: number;\n currentValue: string | undefined;\n selectedValues: ReadonlyArray<string>;\n multiple: boolean;\n onSelect: (option: SelectOption<T>) => void;\n onActiveChange: (index: number) => void;\n renderOption?: (option: SelectOption<T>, info: SelectRenderOptionInfo) => ReactNode;\n itemHeight: number;\n maxHeight: number;\n virtualized: boolean;\n loading: boolean;\n loadingMessage: string;\n noOptionsMessage: string;\n listboxId: string;\n onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n};\n\nconst SelectList = <T,>({\n options,\n activeIndex,\n currentValue,\n selectedValues,\n multiple,\n onSelect,\n onActiveChange,\n renderOption,\n itemHeight,\n maxHeight,\n virtualized,\n loading,\n loadingMessage,\n noOptionsMessage,\n listboxId,\n onScroll,\n}: SelectListProps<T>) => {\n const colors = useThemeColors();\n const [scrollTop, setScrollTop] = useState(0);\n\n const totalHeight = options.length * itemHeight;\n const visibleStart = virtualized ? Math.max(0, Math.floor(scrollTop / itemHeight) - VIRTUAL_OVERSCAN) : 0;\n const visibleEnd = virtualized\n ? Math.min(options.length, Math.ceil((scrollTop + maxHeight) / itemHeight) + VIRTUAL_OVERSCAN)\n : options.length;\n\n const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (virtualized) {\n setScrollTop(event.nativeEvent.contentOffset.y);\n }\n onScroll(event);\n };\n\n if (loading && options.length === 0) {\n return (\n <View style={{ padding: px(colors.spacing['4']), alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {loadingMessage}\n </RNText>\n </View>\n );\n }\n if (options.length === 0) {\n return (\n <View style={{ padding: px(colors.spacing['4']), alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {noOptionsMessage}\n </RNText>\n </View>\n );\n }\n\n // Group headers: when consecutive options change `group`, insert a header.\n // For virtualized mode we still respect groups by including any header\n // that precedes the visible window's first item.\n const items: ReactNode[] = [];\n let lastGroup: string | undefined;\n for (let i = visibleStart; i < visibleEnd; i += 1) {\n const opt = options[i];\n if (!opt) {\n continue;\n }\n if (opt.group !== lastGroup && opt.group !== undefined) {\n items.push(\n <View\n // biome-ignore lint/suspicious/noArrayIndexKey: group header position is stable for current visible window\n key={`grp-${i}-${opt.group}`}\n style={{\n paddingHorizontal: px(colors.spacing['3']),\n paddingTop: px(colors.spacing['2']),\n paddingBottom: px(colors.spacing['1']),\n position: virtualized ? 'absolute' : 'relative',\n top: virtualized ? i * itemHeight - px(colors.spacing['4']) : undefined,\n left: 0,\n right: 0,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: 11, // group header — component-density literal — not from theme (smaller than xs)\n fontWeight: colors.fontWeight.semibold as '600',\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n }}\n >\n {opt.group}\n </RNText>\n </View>\n );\n lastGroup = opt.group;\n }\n const selected = multiple ? selectedValues.includes(opt.value) : opt.value === currentValue;\n const active = i === activeIndex;\n const itemNode = renderOption ? (\n renderOption(opt, { selected, active })\n ) : (\n <DefaultOptionRow option={opt} selected={selected} active={active} multiple={multiple} />\n );\n items.push(\n <Pressable\n // biome-ignore lint/suspicious/noArrayIndexKey: option position is stable in the visible window\n key={`opt-${i}-${opt.value}`}\n {...({\n role: 'option',\n accessibilityRole: 'none',\n 'aria-selected': selected,\n onMouseEnter: () => onActiveChange(i),\n ...(opt.disabled ? { 'aria-disabled': true, disabled: true } : {}),\n } as Record<string, unknown>)}\n onPress={() => onSelect(opt)}\n style={{\n position: virtualized ? 'absolute' : 'relative',\n top: virtualized ? i * itemHeight : undefined,\n left: 0,\n right: 0,\n height: itemHeight,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: px(colors.spacing['3']),\n backgroundColor: active ? colors.semantic.background.subtle : 'transparent',\n opacity: opt.disabled ? 0.5 : 1,\n }}\n >\n {itemNode}\n </Pressable>\n );\n }\n\n // ScrollView is the cross-platform container — react-native-web emits\n // scroll events with the same `nativeEvent.contentOffset` shape as\n // native, so the handler is identical on both. Web also gets the\n // `nativeID` prop mapped to the underlying div's `id` for a11y.\n return (\n <ScrollView\n nativeID={listboxId}\n onScroll={handleScroll}\n scrollEventThrottle={16}\n style={{ maxHeight }}\n contentContainerStyle={virtualized ? { height: totalHeight, position: 'relative' } : undefined}\n >\n {items}\n </ScrollView>\n );\n};\n\nconst DefaultOptionRow = <T,>({\n option,\n selected,\n active,\n multiple = false,\n}: {\n option: SelectOption<T>;\n selected: boolean;\n active: boolean;\n multiple?: boolean;\n}) => {\n const colors = useThemeColors();\n return (\n <View style={{ flexDirection: 'row', alignItems: 'center', flex: 1, gap: px(colors.spacing['2']) }}>\n {multiple ? (\n // Inline checkbox-style indicator. We don't reuse <Checkbox>\n // here because the row is already a Pressable — nesting two\n // pressable surfaces breaks tap handling on native; this\n // is purely visual (the Pressable parent owns the toggle).\n <View\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n width: 18,\n height: 18,\n borderWidth: 1,\n borderRadius: px(colors.radius.sm),\n borderColor: selected ? colors.semantic.interactive.primary : colors.semantic.border.strong,\n backgroundColor: selected ? colors.semantic.interactive.primary : 'transparent',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {selected ? <defaultSemanticIcons.check size={12} color={colors.semantic.text.inverted} /> : null}\n </View>\n ) : null}\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: selected ? (colors.fontWeight.semibold as '600') : (colors.fontWeight.regular as '400'),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {option.label}\n </RNText>\n {selected && !multiple ? (\n <defaultSemanticIcons.check size={16} color={colors.semantic.interactive.primary} />\n ) : null}\n {/* keep `active` referenced — it's part of the public API consumers see via renderOption */}\n {active ? null : null}\n </View>\n );\n};\n\n// ---------- multi-select trigger label (chips with overflow) ----------\n\nconst MultiTriggerLabel = <T,>({\n options,\n placeholder,\n maxChips,\n}: {\n options: ReadonlyArray<SelectOption<T>>;\n placeholder: string;\n maxChips: number;\n}) => {\n const colors = useThemeColors();\n if (options.length === 0) {\n return (\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {placeholder}\n </RNText>\n );\n }\n // When the selection grows beyond `maxChips`, collapse to a counter so\n // the trigger height stays stable on narrow screens.\n if (options.length > maxChips) {\n return (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n fontVariant: ['tabular-nums'],\n flex: 1,\n }}\n numberOfLines={1}\n >\n {options.length} selected\n </RNText>\n );\n }\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n flexWrap: 'wrap',\n rowGap: px(colors.spacing['1']),\n columnGap: px(colors.spacing['1']),\n flex: 1,\n }}\n >\n {options.map((opt) => (\n <View\n key={`chip-${opt.value}`}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 2,\n borderRadius: px(colors.radius.sm),\n backgroundColor: colors.semantic.background.subtle,\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n numberOfLines={1}\n >\n {opt.label}\n </RNText>\n </View>\n ))}\n </View>\n );\n};\n\n// ---------- multi-select popup header with \"Clear all\" affordance ----------\n\nconst MultiSelectionHeader = ({ count, onClearAll }: { count: number; onClearAll: () => void }) => {\n const colors = useThemeColors();\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontVariant: ['tabular-nums'],\n }}\n >\n {count} selected\n </RNText>\n <Pressable\n role=\"button\"\n accessibilityRole=\"button\"\n aria-label=\"Clear all\"\n accessibilityLabel=\"Clear all\"\n onPress={onClearAll}\n style={({ pressed }) => ({\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 2,\n borderRadius: px(colors.radius.sm),\n opacity: pressed ? 0.6 : 1,\n })}\n >\n <RNText\n style={{\n color: colors.semantic.interactive.primary,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n Clear all\n </RNText>\n </Pressable>\n </View>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Select/Select.tsx"],"names":["id","RNText"],"mappings":"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","file":"chunk-PJTCO76H.js","sourcesContent":["'use client';\n\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type { NativeScrollEvent, NativeSyntheticEvent, ViewStyle } from 'react-native';\nimport { Modal, Platform, Pressable, Text as RNText, ScrollView, useWindowDimensions, View } from 'react-native';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type SelectOption<T = unknown> = {\n /** Unique value within the select. */\n value: string;\n /** Visible text. */\n label: string;\n /** Optional group label — items with the same `group` cluster together. */\n group?: string;\n disabled?: boolean;\n /** Arbitrary payload — surfaced to `renderOption` and `onChange`. */\n data?: T;\n};\n\nexport type LoadOptionsParams = {\n /** Current search input. */\n search: string;\n /** Number of items already loaded — start of the requested window. */\n offset: number;\n /** Page size requested. */\n limit: number;\n};\n\nexport type LoadOptionsResult<T = unknown> = {\n items: ReadonlyArray<SelectOption<T>>;\n /** Total available — the picker stops requesting when offset+items.length >= total. Optional; if omitted, requests stop when items.length < limit. */\n total?: number;\n};\n\nexport type SelectRenderOptionInfo = {\n /** This option matches the current value. */\n selected: boolean;\n /** This option is the keyboard focus target. */\n active: boolean;\n};\n\ntype SelectBaseProps<T = unknown> = {\n /** Static options. Mutually exclusive with `loadOptions`. */\n options?: ReadonlyArray<SelectOption<T>>;\n /**\n * Async loader. Called with `{ search, offset, limit }` whenever the\n * search input changes (debounced) or the user scrolls near the end of\n * the loaded list. Return more items + an optional total to stop the\n * pagination loop early.\n */\n loadOptions?: (params: LoadOptionsParams) => Promise<LoadOptionsResult<T>>;\n /** Page size for `loadOptions`. @defaultValue 50 */\n pageSize?: number;\n /** Show a search input above the list. @defaultValue auto-on for static options >= 10 items, always on for loadOptions */\n searchable?: boolean;\n /** Placeholder for the search input. */\n searchPlaceholder?: string;\n /** Override the default substring filter for static options. */\n filterOption?: (option: SelectOption<T>, search: string) => boolean;\n /** Custom item renderer. Called per option in the list. */\n renderOption?: (option: SelectOption<T>, info: SelectRenderOptionInfo) => ReactNode;\n /** Trigger placeholder when no value is selected. */\n placeholder?: string;\n /**\n * BCP 47 locale — drives `Intl.Collator` sorting of options when set.\n * Re-sorts on language switch so a German list reads alphabetically in\n * German vs the same list in English.\n */\n locale?: string;\n /** When `locale` is set, sort options alphabetically. @defaultValue true */\n sortByLocale?: boolean;\n /** Message shown in the popup when there are no matching options. */\n noOptionsMessage?: string;\n /** Message shown while async results are loading. */\n loadingMessage?: string;\n /** Disable interaction. */\n disabled?: boolean;\n /** RTL flips the popup alignment + text direction. */\n dir?: 'ltr' | 'rtl';\n /**\n * Virtualize the list — only DOM-render the visible window of items.\n * Auto-on when the list has more than 100 items.\n */\n virtualized?: boolean;\n /** Pixel height of a single item — required for virtualization math. @defaultValue 36 */\n itemHeight?: number;\n /** Max popup height in px. @defaultValue 320 */\n maxMenuHeight?: number;\n className?: string;\n testID?: string;\n id?: string;\n name?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n};\n\nexport type SelectSingleProps<T = unknown> = SelectBaseProps<T> & {\n /** Single-select mode (default — omit or pass `false`). */\n multiple?: false;\n /** Controlled value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n /** Fires when the user picks an option. */\n onChange?: (value: string, option: SelectOption<T> | undefined) => void;\n};\n\nexport type SelectMultiProps<T = unknown> = SelectBaseProps<T> & {\n /** Multi-select mode — value/onChange become array-typed. */\n multiple: true;\n /** Controlled values. */\n value?: ReadonlyArray<string>;\n /** Uncontrolled initial values. */\n defaultValue?: ReadonlyArray<string>;\n /** Fires when the selection changes. Receives the full new array of values + their resolved options. */\n onChange?: (values: ReadonlyArray<string>, options: ReadonlyArray<SelectOption<T>>) => void;\n /** Hard cap on selected count — extra picks are ignored. */\n maxSelected?: number;\n /** Max chips to render in the trigger before collapsing to \"N selected\". @defaultValue 3 */\n maxChips?: number;\n};\n\nexport type SelectProps<T = unknown> = SelectSingleProps<T> | SelectMultiProps<T>;\n\nconst DEFAULT_PAGE_SIZE = 50;\nconst DEFAULT_ITEM_HEIGHT = 36;\nconst DEFAULT_MAX_MENU = 320;\nconst SEARCH_DEBOUNCE_MS = 150;\nconst VIRTUAL_OVERSCAN = 4;\n// Reset window for the type-ahead buffer. Matches native <select> on macOS\n// closely enough that typing \"Sep\" lands on September even without a search\n// field. Shorter than the WAI-ARIA suggested 500ms feels jumpy on slow typists.\nconst TYPE_AHEAD_RESET_MS = 500;\n\nconst defaultFilter = <T,>(option: SelectOption<T>, search: string): boolean => {\n if (!search) {\n return true;\n }\n return option.label.toLowerCase().includes(search.toLowerCase());\n};\n\n/**\n * Searchable, async-capable, optionally virtualized select. Designed for the\n * \"I have 500 items behind a paginated API\" case as easily as the \"five\n * static items\" case.\n *\n * Modes:\n * - **Static** — pass `options`. The picker filters in-memory by a\n * substring match on `label` (override via `filterOption`).\n * - **Async** — pass `loadOptions(params)`. Called on search-input change\n * (debounced) and when the list scrolls near the bottom for the next\n * page. The picker manages the loaded list, so consumers don't have to.\n *\n * Other features:\n * - Custom item renderer via `renderOption`.\n * - i18n locale-aware sorting via `Intl.Collator` when `locale` is set —\n * re-sorts when the locale changes so a German list reads\n * alphabetically in German.\n * - OptGroup support — items with the same `group` field cluster in the\n * popup with a group header.\n * - Virtualized list when item count > 100 (or set `virtualized`\n * explicitly). Only the visible window is rendered.\n * - Keyboard navigation: ArrowDown / ArrowUp move the active option,\n * Home / End jump to the first / last, Enter selects, Escape closes,\n * Tab closes. Type-ahead works whether or not a search field is shown\n * (typing \"Sep\" lands on September; repeating a single char like\n * \"m\",\"m\" cycles through M-options).\n * - RTL alignment via `dir=\"rtl\"`.\n */\nexport const Select = <T = unknown>(props: SelectProps<T>) => {\n const {\n options: staticOptions,\n loadOptions,\n pageSize = DEFAULT_PAGE_SIZE,\n searchable: searchableProp,\n searchPlaceholder = 'Search…',\n filterOption,\n renderOption,\n placeholder = 'Select…',\n locale,\n sortByLocale = true,\n noOptionsMessage = 'No options',\n loadingMessage = 'Loading…',\n disabled = false,\n dir = 'ltr',\n virtualized: virtualizedProp,\n itemHeight = DEFAULT_ITEM_HEIGHT,\n maxMenuHeight = DEFAULT_MAX_MENU,\n className,\n testID,\n id,\n name,\n } = props;\n const ariaLabel = (props as { 'aria-label'?: string })['aria-label'];\n const ariaLabelledBy = (props as { 'aria-labelledby'?: string })['aria-labelledby'];\n const ariaDescribedBy = (props as { 'aria-describedby'?: string })['aria-describedby'];\n const ariaInvalid = (props as { 'aria-invalid'?: boolean })['aria-invalid'];\n const ariaRequired = (props as { 'aria-required'?: boolean })['aria-required'];\n const multiple = props.multiple === true;\n const maxSelected = multiple ? (props as SelectMultiProps<T>).maxSelected : undefined;\n const maxChips = multiple ? ((props as SelectMultiProps<T>).maxChips ?? 3) : undefined;\n\n const baseId = useId();\n const colors = useThemeColors();\n const [open, setOpen] = useState(false);\n\n // We always store values as a ReadonlyArray<string> internally so the\n // toggle / replace logic stays uniform; for single mode the array is\n // either empty or has exactly one element.\n const controlledValues: ReadonlyArray<string> | undefined = multiple\n ? (props.value as ReadonlyArray<string> | undefined)\n : props.value !== undefined\n ? [props.value as string]\n : undefined;\n const defaultValues: ReadonlyArray<string> = multiple\n ? (((props as SelectMultiProps<T>).defaultValue as ReadonlyArray<string> | undefined) ?? [])\n : (props as SelectSingleProps<T>).defaultValue !== undefined\n ? [(props as SelectSingleProps<T>).defaultValue as string]\n : [];\n const [innerValues, setInnerValues] = useState<ReadonlyArray<string>>(defaultValues);\n const isControlled = controlledValues !== undefined;\n const currentValues: ReadonlyArray<string> = isControlled\n ? (controlledValues as ReadonlyArray<string>)\n : innerValues;\n /** Single-mode legacy accessor — first selected value (or undefined). */\n const current: string | undefined = currentValues[0];\n\n const [searchInput, setSearchInput] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const [activeIndex, setActiveIndex] = useState(0);\n\n // Debounce the search input so loadOptions / filterOption don't fire on\n // every keystroke when the work is expensive.\n useEffect(() => {\n const t = setTimeout(() => setDebouncedSearch(searchInput), SEARCH_DEBOUNCE_MS);\n return () => clearTimeout(t);\n }, [searchInput]);\n\n // Async-mode internal cache of loaded options.\n const [asyncItems, setAsyncItems] = useState<SelectOption<T>[]>([]);\n const [asyncLoading, setAsyncLoading] = useState(false);\n const [asyncTotal, setAsyncTotal] = useState<number | undefined>(undefined);\n const asyncRequestId = useRef(0);\n\n const isAsync = loadOptions !== undefined;\n\n // When the search changes in async mode, reset the loaded list and\n // refetch from offset 0. The request id guards against stale resolution.\n useEffect(() => {\n if (!isAsync || !loadOptions || !open) {\n return;\n }\n const requestId = ++asyncRequestId.current;\n setAsyncLoading(true);\n setAsyncItems([]);\n setAsyncTotal(undefined);\n loadOptions({ search: debouncedSearch, offset: 0, limit: pageSize })\n .then((result) => {\n if (requestId !== asyncRequestId.current) {\n return;\n }\n setAsyncItems(result.items.slice());\n setAsyncTotal(result.total);\n })\n .catch(() => {\n // Swallow — consumers can wrap loadOptions to handle errors.\n })\n .finally(() => {\n if (requestId === asyncRequestId.current) {\n setAsyncLoading(false);\n }\n });\n }, [debouncedSearch, isAsync, loadOptions, pageSize, open]);\n\n // Helper to load the next page in async mode.\n const loadMore = useCallback(() => {\n if (!isAsync || !loadOptions || asyncLoading) {\n return;\n }\n const haveAll = asyncTotal !== undefined && asyncItems.length >= asyncTotal;\n if (haveAll) {\n return;\n }\n const requestId = ++asyncRequestId.current;\n setAsyncLoading(true);\n loadOptions({ search: debouncedSearch, offset: asyncItems.length, limit: pageSize })\n .then((result) => {\n if (requestId !== asyncRequestId.current) {\n return;\n }\n setAsyncItems((prev) => prev.concat(result.items));\n if (result.total !== undefined) {\n setAsyncTotal(result.total);\n }\n })\n .catch(() => undefined)\n .finally(() => {\n if (requestId === asyncRequestId.current) {\n setAsyncLoading(false);\n }\n });\n }, [asyncItems.length, asyncLoading, asyncTotal, debouncedSearch, isAsync, loadOptions, pageSize]);\n\n // Build the displayed option list — filter (static) or async items, then\n // optionally locale-sort.\n const visibleOptions = useMemo<SelectOption<T>[]>(() => {\n const source = isAsync ? asyncItems : (staticOptions ?? []);\n const filtered = isAsync\n ? source.slice() // async backend already handled search\n : source.filter((opt) => (filterOption ?? defaultFilter)(opt, debouncedSearch));\n if (locale && sortByLocale) {\n const collator = new Intl.Collator(locale, { sensitivity: 'base', numeric: true });\n // Group-aware sort: stable on group, then on label.\n return filtered.slice().sort((a, b) => {\n const ga = a.group ?? '';\n const gb = b.group ?? '';\n const groupDelta = collator.compare(ga, gb);\n if (groupDelta !== 0) {\n return groupDelta;\n }\n return collator.compare(a.label, b.label);\n });\n }\n return filtered;\n }, [isAsync, asyncItems, staticOptions, filterOption, debouncedSearch, locale, sortByLocale]);\n\n const selectedOption = useMemo(() => {\n const all = isAsync ? asyncItems : (staticOptions ?? []);\n return all.find((o) => o.value === current);\n }, [asyncItems, isAsync, staticOptions, current]);\n\n /** Multi-mode: resolved options for every currently-selected value, in selection order. */\n const selectedOptions = useMemo<ReadonlyArray<SelectOption<T>>>(() => {\n if (!multiple) {\n return [];\n }\n const all = isAsync ? asyncItems : (staticOptions ?? []);\n const map = new Map(all.map((o) => [o.value, o]));\n return currentValues.map((v) => map.get(v)).filter((o): o is SelectOption<T> => o !== undefined);\n }, [multiple, currentValues, asyncItems, isAsync, staticOptions]);\n\n const searchable = searchableProp ?? (isAsync || (staticOptions !== undefined && staticOptions.length >= 10));\n const virtualized = virtualizedProp ?? visibleOptions.length > 100;\n\n // Keep activeIndex in bounds.\n useEffect(() => {\n setActiveIndex((idx) => Math.min(Math.max(0, idx), Math.max(0, visibleOptions.length - 1)));\n }, [visibleOptions.length]);\n\n const onSelect = useCallback(\n (option: SelectOption<T>) => {\n if (option.disabled) {\n return;\n }\n if (multiple) {\n const has = currentValues.includes(option.value);\n let nextValues: string[];\n if (has) {\n nextValues = currentValues.filter((v) => v !== option.value);\n } else {\n if (maxSelected !== undefined && currentValues.length >= maxSelected) {\n return; // hit the cap\n }\n nextValues = [...currentValues, option.value];\n }\n if (!isControlled) {\n setInnerValues(nextValues);\n }\n // Resolve options for callback — preserves order of nextValues.\n const allOpts: ReadonlyArray<SelectOption<T>> = [\n ...(staticOptions ?? []),\n ...(asyncItems as ReadonlyArray<SelectOption<T>>),\n ];\n const optMap = new Map(allOpts.map((o) => [o.value, o]));\n const selectedOpts = nextValues\n .map((v) => optMap.get(v))\n .filter((o): o is SelectOption<T> => o !== undefined);\n (props as SelectMultiProps<T>).onChange?.(nextValues, selectedOpts);\n // Multi mode: keep the popup open, keep the search input — the\n // user is likely picking more than one in a row.\n return;\n }\n // Single mode — replace + close.\n if (!isControlled) {\n setInnerValues([option.value]);\n }\n (props as SelectSingleProps<T>).onChange?.(option.value, option);\n setOpen(false);\n setSearchInput('');\n },\n // biome-ignore lint/correctness/useExhaustiveDependencies: `props` is the discriminated union — destructuring it would defeat the narrowing; the asyncItems / staticOptions captures intentionally re-trigger the callback when the option pool changes\n [multiple, isControlled, currentValues, maxSelected, staticOptions, asyncItems, props]\n );\n\n /** Multi-mode helper to clear all selected values. */\n const clearAll = useCallback(() => {\n if (!isControlled) {\n setInnerValues([]);\n }\n (props as SelectMultiProps<T>).onChange?.([], []);\n // biome-ignore lint/correctness/useExhaustiveDependencies: same reason as above\n }, [isControlled, props]);\n\n const moveActive = useCallback(\n (delta: 1 | -1) => {\n setActiveIndex((idx) => {\n if (visibleOptions.length === 0) {\n return 0;\n }\n let next = (idx + delta + visibleOptions.length) % visibleOptions.length;\n // Skip disabled options.\n for (let attempts = 0; attempts < visibleOptions.length; attempts += 1) {\n if (!visibleOptions[next]?.disabled) {\n return next;\n }\n next = (next + delta + visibleOptions.length) % visibleOptions.length;\n }\n return idx;\n });\n },\n [visibleOptions]\n );\n\n // Type-ahead buffer — shared across the trigger (closed state) and the\n // popup container (open without search field). Mutable ref so we don't\n // re-render on every keystroke.\n const typeAheadRef = useRef<{ buffer: string; timer: ReturnType<typeof setTimeout> | null }>({\n buffer: '',\n timer: null,\n });\n useEffect(() => {\n // Clear any pending type-ahead timer on unmount so we don't leak it.\n return () => {\n if (typeAheadRef.current.timer) {\n clearTimeout(typeAheadRef.current.timer);\n typeAheadRef.current.timer = null;\n }\n };\n }, []);\n\n const handleTypeAhead = useCallback(\n (char: string) => {\n if (visibleOptions.length === 0) {\n return;\n }\n if (typeAheadRef.current.timer) {\n clearTimeout(typeAheadRef.current.timer);\n }\n const nextBuffer = typeAheadRef.current.buffer + char.toLowerCase();\n typeAheadRef.current.buffer = nextBuffer;\n typeAheadRef.current.timer = setTimeout(() => {\n typeAheadRef.current.buffer = '';\n typeAheadRef.current.timer = null;\n }, TYPE_AHEAD_RESET_MS);\n\n // Cycle mode: a single char OR repeated same char (e.g. \"aa\") cycles\n // through options whose label starts with that char, advancing past\n // the current activeIndex. Otherwise the buffer is treated as a\n // prefix and we search from the top — refining the match as the\n // user keeps typing (\"S\" → \"Se\" → \"Sep\" → September).\n const allSame = nextBuffer.length > 1 && nextBuffer.split('').every((c) => c === nextBuffer[0]);\n const cycleMode = nextBuffer.length === 1 || allSame;\n const needle = cycleMode ? nextBuffer.charAt(0) : nextBuffer;\n const len = visibleOptions.length;\n const startFrom = cycleMode ? (activeIndex + 1) % len : 0;\n for (let i = 0; i < len; i += 1) {\n const idx = (startFrom + i) % len;\n const opt = visibleOptions[idx];\n if (!opt || opt.disabled) {\n continue;\n }\n if (opt.label.toLowerCase().startsWith(needle)) {\n setActiveIndex(idx);\n return;\n }\n }\n },\n [visibleOptions, activeIndex]\n );\n\n // Shared list-navigation handler — used by the search input, the\n // popup container (when no search field is shown), and as the basis for\n // trigger handling. Returns true if the event was consumed so callers\n // can fall through to type-ahead handling for unhandled keys.\n const handleListKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>): boolean => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveActive(1);\n return true;\n case 'ArrowUp':\n event.preventDefault();\n moveActive(-1);\n return true;\n case 'Home': {\n event.preventDefault();\n const idx = visibleOptions.findIndex((o) => !o.disabled);\n if (idx >= 0) {\n setActiveIndex(idx);\n }\n return true;\n }\n case 'End': {\n event.preventDefault();\n for (let i = visibleOptions.length - 1; i >= 0; i -= 1) {\n if (!visibleOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n return true;\n }\n case 'Enter': {\n const opt = visibleOptions[activeIndex];\n if (opt) {\n event.preventDefault();\n onSelect(opt);\n }\n return true;\n }\n case 'Escape':\n event.preventDefault();\n setOpen(false);\n // Restore focus to the trigger so the next Tab keeps the\n // user inside the same widget instead of jumping to <body>.\n if (Platform.OS === 'web') {\n const trigger = triggerRef.current as unknown as { focus?: () => void } | null;\n trigger?.focus?.();\n }\n return true;\n case 'Tab':\n setOpen(false);\n return true;\n }\n return false;\n },\n [moveActive, activeIndex, visibleOptions, onSelect]\n );\n\n const handleSearchKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n handleListKeyDown(event);\n },\n [handleListKeyDown]\n );\n\n // Popup-container handler — only attached when there's no search input,\n // so we own type-ahead here. Falls through to the shared list handler\n // for arrow keys / Enter / Escape / Tab.\n const handlePopupKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (handleListKeyDown(event)) {\n return;\n }\n // Single printable character without modifiers → feed the\n // type-ahead buffer. Modifier-combos (Cmd-A, Ctrl-K) are left\n // alone so browser/OS shortcuts keep working.\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey && event.key !== ' ') {\n event.preventDefault();\n handleTypeAhead(event.key);\n }\n },\n [handleListKeyDown, handleTypeAhead]\n );\n\n const handleTriggerKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n switch (event.key) {\n case ' ':\n case 'Enter':\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n setOpen(true);\n return;\n }\n // Type-ahead on the closed trigger: open the popup and jump to\n // the matching option. Mirrors native <select> behaviour where\n // typing a letter while the control has focus changes the\n // highlighted choice without an explicit \"open\" gesture.\n if (!disabled && event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n event.preventDefault();\n setOpen(true);\n handleTypeAhead(event.key);\n }\n },\n [disabled, handleTypeAhead]\n );\n\n // Close when clicking outside (web only). The outside check considers\n // BOTH the container (trigger area) and the popup ref because the popup\n // portals out of the container's DOM subtree (position: fixed escapes\n // any overflow:hidden ancestor, but still belongs to the same logical\n // widget).\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const popupRef = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n if (\n Platform.OS !== 'web' ||\n typeof document === 'undefined' ||\n typeof document.addEventListener !== 'function'\n ) {\n return;\n }\n if (!open) {\n return;\n }\n const onDocClick = (event: MouseEvent) => {\n const node = containerRef.current;\n const popup = popupRef.current;\n const target = event.target as Node;\n if (node?.contains(target)) {\n return;\n }\n if (popup?.contains(target)) {\n return;\n }\n setOpen(false);\n };\n document.addEventListener('mousedown', onDocClick);\n return () => document.removeEventListener('mousedown', onDocClick);\n }, [open]);\n\n // Measure the trigger so the popup can render with `position: fixed` +\n // computed coords. position:fixed escapes any ancestor's overflow:hidden\n // (e.g. fumadocs Tabs panes, our Preview frame), which is the\n // single biggest source of \"the dropdown got cut off\" bugs.\n //\n // On native we ignore the web `position:fixed` path entirely and\n // measure via `View.measure(...)` to feed an RN `<Modal>` positioned\n // absolutely below the trigger.\n const [triggerRect, setTriggerRect] = useState<{ top: number; left: number; width: number; height: number } | null>(\n null\n );\n const measureTrigger = useCallback(() => {\n const node = triggerRef.current as unknown as {\n getBoundingClientRect?: () => DOMRect;\n measure?: (cb: (x: number, y: number, w: number, h: number, pageX: number, pageY: number) => void) => void;\n } | null;\n if (!node) {\n return;\n }\n if (Platform.OS === 'web' && typeof node.getBoundingClientRect === 'function') {\n const rect = node.getBoundingClientRect();\n setTriggerRect({ top: rect.top, left: rect.left, width: rect.width, height: rect.height });\n return;\n }\n // Native path — RN's measure() reports page-relative coords on the UI thread.\n if (typeof node.measure === 'function') {\n node.measure((_x, _y, w, h, pageX, pageY) => {\n setTriggerRect({ top: pageY, left: pageX, width: w, height: h });\n });\n }\n }, []);\n useEffect(() => {\n if (!open) {\n return;\n }\n // `window` is defined on RN's Hermes/JSC runtime but `addEventListener`\n // is web-only; gate on Platform.OS to avoid the runtime crash on native.\n if (Platform.OS !== 'web' || typeof window === 'undefined' || typeof window.addEventListener !== 'function') {\n return;\n }\n measureTrigger();\n window.addEventListener('scroll', measureTrigger, true);\n window.addEventListener('resize', measureTrigger);\n return () => {\n window.removeEventListener('scroll', measureTrigger, true);\n window.removeEventListener('resize', measureTrigger);\n };\n }, [open, measureTrigger]);\n\n // Auto-focus the popup container when it opens without a search field —\n // otherwise key events have nowhere to land and the user gets a popup\n // they can only operate with the mouse. With a search field, the input's\n // own auto-focus effect already handles this.\n useEffect(() => {\n if (!open || searchable || Platform.OS !== 'web') {\n return;\n }\n const id = requestAnimationFrame(() => {\n const node = popupRef.current as unknown as { focus?: () => void } | null;\n node?.focus?.();\n });\n return () => cancelAnimationFrame(id);\n }, [open, searchable]);\n\n // Scroll handler for async pagination. ScrollView's onScroll event shape\n // works across both react-native-web (HTMLDivElement under the hood) and\n // native (RCTScrollView), so we read offsets from `nativeEvent`.\n const onListScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (!isAsync) {\n return;\n }\n const { contentOffset, contentSize, layoutMeasurement } = event.nativeEvent;\n const remaining = contentSize.height - contentOffset.y - layoutMeasurement.height;\n if (remaining < itemHeight * 4) {\n loadMore();\n }\n },\n [isAsync, itemHeight, loadMore]\n );\n\n // ---------- visual styling ----------\n const triggerStyle: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n minHeight: 36, // component-density literal — not from theme\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.background.elevated,\n opacity: disabled ? 0.6 : 1,\n };\n\n // Web: position:fixed + computed coords from the trigger so the popup\n // can escape any ancestor with `overflow: hidden` (fumadocs Tabs, our\n // Preview frame, etc.). Width matches the trigger; widen to a 200px\n // floor for readability.\n //\n // Native: same coords, but on `position:'absolute'` inside the Modal —\n // RN doesn't have `position:'fixed'`, but Modal renders above all\n // content as a true overlay so absolute coords against the screen\n // window are correct.\n const winDims = useWindowDimensions();\n const popupStyle: ViewStyle = triggerRect\n ? {\n position: (Platform.OS === 'web' ? 'fixed' : 'absolute') as unknown as 'absolute',\n top: triggerRect.top + triggerRect.height + px(colors.spacing['1']),\n left: dir === 'rtl' ? undefined : triggerRect.left,\n right:\n dir === 'rtl'\n ? Platform.OS === 'web' && typeof window !== 'undefined'\n ? window.innerWidth - (triggerRect.left + triggerRect.width)\n : winDims.width - (triggerRect.left + triggerRect.width)\n : undefined,\n minWidth: Math.max(200, triggerRect.width),\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: px(colors.radius.lg),\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n // 2147483646 (max int32 - 1) so we sit above any third-party\n // chrome (toasts, modals, dev banners) without picking a fight\n // for the very top slot. Combined with portaling to body below,\n // this also dodges any ancestor stacking context that would\n // otherwise trap our z-index inside a sibling preview frame.\n zIndex: 2147483646,\n ...({ boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)' } as ViewStyle),\n }\n : {\n // Trigger not yet measured — render off-screen until the\n // first measurement lands. Avoids a one-frame flash at (0,0).\n position: (Platform.OS === 'web' ? 'fixed' : 'absolute') as unknown as 'absolute',\n top: -9999,\n left: -9999,\n };\n\n const containerProps: Record<string, unknown> = {\n ref: (node: HTMLDivElement | null) => {\n containerRef.current = node;\n },\n ...(testID !== undefined ? { testID } : {}),\n dir,\n };\n\n return (\n <View {...containerProps} className={cn('relative', className)} style={{ position: 'relative' }}>\n {/* RN's Pressable TS surface doesn't model onKeyDown / aria-haspopup; rn-web forwards them. Spread at the boundary. */}\n <Pressable\n ref={(node) => {\n triggerRef.current = node as unknown as HTMLElement | null;\n }}\n {...({\n onKeyDown: handleTriggerKeyDown,\n role: 'combobox',\n accessibilityRole: 'combobox',\n 'aria-expanded': open,\n 'aria-controls': `${baseId}-listbox`,\n 'aria-haspopup': 'listbox',\n tabIndex: disabled ? -1 : 0,\n ...(id !== undefined ? { id, nativeID: id } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(ariaLabel !== undefined ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n ...(ariaLabelledBy !== undefined\n ? { 'aria-labelledby': ariaLabelledBy, accessibilityLabelledBy: ariaLabelledBy }\n : {}),\n ...(ariaDescribedBy !== undefined\n ? { 'aria-describedby': ariaDescribedBy, accessibilityDescribedBy: ariaDescribedBy }\n : {}),\n ...(ariaInvalid === true ? { 'aria-invalid': true } : {}),\n ...(ariaRequired === true ? { 'aria-required': true } : {}),\n ...(disabled ? { 'aria-disabled': true, disabled: true } : {}),\n } as Record<string, unknown>)}\n onPress={() => {\n if (disabled) {\n return;\n }\n // Re-measure on every press so the popup picks up\n // post-scroll / rotation / keyboard-shifted positions.\n measureTrigger();\n setOpen((v) => !v);\n }}\n style={triggerStyle}\n >\n {multiple ? (\n <MultiTriggerLabel options={selectedOptions} placeholder={placeholder} maxChips={maxChips ?? 3} />\n ) : (\n <RNText\n style={{\n color: selectedOption ? colors.semantic.text.default : colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {selectedOption?.label ?? placeholder}\n </RNText>\n )}\n <defaultSemanticIcons.chevronDown size={16} color={colors.semantic.text.muted} />\n </Pressable>\n\n {open ? renderPopup() : null}\n </View>\n );\n\n // Local helper so we can portal to <body> on web. Why: even with\n // position:fixed, an ancestor with `transform`, `filter`, or `will-change`\n // creates a containing block that traps fixed positioning AND a stacking\n // context that traps z-index. The docs preview frames trip both. Portaling\n // to body removes all ambiguity — the popup is a top-level sibling of\n // <body>'s other children. On native, RN doesn't have a portal here, so\n // we render in place; native overflow is rarely a clipping problem\n // because RN doesn't have stacking-context-creating CSS properties.\n function renderPopup(): React.ReactNode {\n const popup = (\n <View\n ref={(node) => {\n popupRef.current = node as unknown as HTMLDivElement | null;\n }}\n {...({\n role: 'listbox',\n id: `${baseId}-listbox`,\n ...(multiple ? { 'aria-multiselectable': true } : {}),\n // Without a search field there's no input to capture\n // keystrokes — make the popup itself focusable and own\n // arrow / Enter / Escape / type-ahead. With a search\n // field these belong to the input below.\n ...(searchable ? {} : { tabIndex: -1, onKeyDown: handlePopupKeyDown }),\n } as Record<string, unknown>)}\n style={popupStyle}\n >\n {searchable ? (\n <SearchInput\n value={searchInput}\n onChange={setSearchInput}\n onKeyDown={handleSearchKeyDown}\n placeholder={searchPlaceholder}\n dir={dir}\n />\n ) : null}\n {multiple && currentValues.length > 0 ? (\n <MultiSelectionHeader count={currentValues.length} onClearAll={clearAll} />\n ) : null}\n <SelectList\n options={visibleOptions}\n activeIndex={activeIndex}\n currentValue={current}\n selectedValues={currentValues}\n multiple={multiple}\n onSelect={onSelect}\n onActiveChange={setActiveIndex}\n {...(renderOption !== undefined ? { renderOption } : {})}\n itemHeight={itemHeight}\n maxHeight={maxMenuHeight}\n virtualized={virtualized}\n loading={isAsync && asyncLoading}\n loadingMessage={loadingMessage}\n noOptionsMessage={noOptionsMessage}\n listboxId={`${baseId}-listbox`}\n onScroll={onListScroll}\n />\n </View>\n );\n if (Platform.OS === 'web' && typeof document !== 'undefined') {\n return createPortal(popup, document.body);\n }\n // Native: wrap in a transparent Modal so the popup renders above\n // all in-tree content (RN has no `position:'fixed'` and an\n // absolute child can't escape its parent's overflow). The\n // Modal's onRequestClose handles Android's hardware back button;\n // a transparent backdrop Pressable closes the popup on outside\n // tap (the equivalent of the document-mousedown handler on web).\n return (\n <Modal transparent visible animationType=\"fade\" onRequestClose={() => setOpen(false)} statusBarTranslucent>\n <Pressable\n onPress={() => setOpen(false)}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n }}\n />\n {popup}\n </Modal>\n );\n }\n};\n\n// ---------- search input (web-native input wrapped in a pressable container) ----------\n\ntype SearchInputProps = {\n value: string;\n onChange: (next: string) => void;\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => void;\n placeholder: string;\n dir: 'ltr' | 'rtl';\n};\n\nconst SearchInput = ({ value, onChange, onKeyDown, placeholder, dir }: SearchInputProps) => {\n const colors = useThemeColors();\n const inputRef = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n // Auto-focus when the popup opens so the user can start typing.\n inputRef.current?.focus?.();\n }, []);\n return (\n <View\n style={{\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: px(colors.spacing['2']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n dir={dir}\n aria-label=\"Search options\"\n style={{\n width: '100%',\n // Inline `padding: '6px 8px'` shorthand intentionally kept as a\n // string for the native HTML <input> — it's not an RN style prop.\n padding: `${px(colors.spacing['2']) - 2}px ${px(colors.spacing['2'])}px`,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n backgroundColor: colors.semantic.background.elevated,\n border: `1px solid ${colors.semantic.border.default}`,\n borderRadius: px(colors.radius.sm),\n outline: 'none',\n }}\n />\n </View>\n );\n};\n\n// ---------- list (with optional virtualization + group headers) ----------\n\ntype SelectListProps<T> = {\n options: ReadonlyArray<SelectOption<T>>;\n activeIndex: number;\n currentValue: string | undefined;\n selectedValues: ReadonlyArray<string>;\n multiple: boolean;\n onSelect: (option: SelectOption<T>) => void;\n onActiveChange: (index: number) => void;\n renderOption?: (option: SelectOption<T>, info: SelectRenderOptionInfo) => ReactNode;\n itemHeight: number;\n maxHeight: number;\n virtualized: boolean;\n loading: boolean;\n loadingMessage: string;\n noOptionsMessage: string;\n listboxId: string;\n onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n};\n\nconst SelectList = <T,>({\n options,\n activeIndex,\n currentValue,\n selectedValues,\n multiple,\n onSelect,\n onActiveChange,\n renderOption,\n itemHeight,\n maxHeight,\n virtualized,\n loading,\n loadingMessage,\n noOptionsMessage,\n listboxId,\n onScroll,\n}: SelectListProps<T>) => {\n const colors = useThemeColors();\n const [scrollTop, setScrollTop] = useState(0);\n\n const totalHeight = options.length * itemHeight;\n const visibleStart = virtualized ? Math.max(0, Math.floor(scrollTop / itemHeight) - VIRTUAL_OVERSCAN) : 0;\n const visibleEnd = virtualized\n ? Math.min(options.length, Math.ceil((scrollTop + maxHeight) / itemHeight) + VIRTUAL_OVERSCAN)\n : options.length;\n\n const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (virtualized) {\n setScrollTop(event.nativeEvent.contentOffset.y);\n }\n onScroll(event);\n };\n\n if (loading && options.length === 0) {\n return (\n <View style={{ padding: px(colors.spacing['4']), alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {loadingMessage}\n </RNText>\n </View>\n );\n }\n if (options.length === 0) {\n return (\n <View style={{ padding: px(colors.spacing['4']), alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {noOptionsMessage}\n </RNText>\n </View>\n );\n }\n\n // Group headers: when consecutive options change `group`, insert a header.\n // For virtualized mode we still respect groups by including any header\n // that precedes the visible window's first item.\n const items: ReactNode[] = [];\n let lastGroup: string | undefined;\n for (let i = visibleStart; i < visibleEnd; i += 1) {\n const opt = options[i];\n if (!opt) {\n continue;\n }\n if (opt.group !== lastGroup && opt.group !== undefined) {\n items.push(\n <View\n // biome-ignore lint/suspicious/noArrayIndexKey: group header position is stable for current visible window\n key={`grp-${i}-${opt.group}`}\n style={{\n paddingHorizontal: px(colors.spacing['3']),\n paddingTop: px(colors.spacing['2']),\n paddingBottom: px(colors.spacing['1']),\n position: virtualized ? 'absolute' : 'relative',\n top: virtualized ? i * itemHeight - px(colors.spacing['4']) : undefined,\n left: 0,\n right: 0,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: 11, // group header — component-density literal — not from theme (smaller than xs)\n fontWeight: colors.fontWeight.semibold as '600',\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n }}\n >\n {opt.group}\n </RNText>\n </View>\n );\n lastGroup = opt.group;\n }\n const selected = multiple ? selectedValues.includes(opt.value) : opt.value === currentValue;\n const active = i === activeIndex;\n const itemNode = renderOption ? (\n renderOption(opt, { selected, active })\n ) : (\n <DefaultOptionRow option={opt} selected={selected} active={active} multiple={multiple} />\n );\n items.push(\n <Pressable\n // biome-ignore lint/suspicious/noArrayIndexKey: option position is stable in the visible window\n key={`opt-${i}-${opt.value}`}\n {...({\n role: 'option',\n accessibilityRole: 'none',\n 'aria-selected': selected,\n onMouseEnter: () => onActiveChange(i),\n ...(opt.disabled ? { 'aria-disabled': true, disabled: true } : {}),\n } as Record<string, unknown>)}\n onPress={() => onSelect(opt)}\n style={{\n position: virtualized ? 'absolute' : 'relative',\n top: virtualized ? i * itemHeight : undefined,\n left: 0,\n right: 0,\n height: itemHeight,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: px(colors.spacing['3']),\n backgroundColor: active ? colors.semantic.background.subtle : 'transparent',\n opacity: opt.disabled ? 0.5 : 1,\n }}\n >\n {itemNode}\n </Pressable>\n );\n }\n\n // ScrollView is the cross-platform container — react-native-web emits\n // scroll events with the same `nativeEvent.contentOffset` shape as\n // native, so the handler is identical on both. Web also gets the\n // `nativeID` prop mapped to the underlying div's `id` for a11y.\n return (\n <ScrollView\n nativeID={listboxId}\n onScroll={handleScroll}\n scrollEventThrottle={16}\n style={{ maxHeight }}\n contentContainerStyle={virtualized ? { height: totalHeight, position: 'relative' } : undefined}\n >\n {items}\n </ScrollView>\n );\n};\n\nconst DefaultOptionRow = <T,>({\n option,\n selected,\n active,\n multiple = false,\n}: {\n option: SelectOption<T>;\n selected: boolean;\n active: boolean;\n multiple?: boolean;\n}) => {\n const colors = useThemeColors();\n return (\n <View style={{ flexDirection: 'row', alignItems: 'center', flex: 1, gap: px(colors.spacing['2']) }}>\n {multiple ? (\n // Inline checkbox-style indicator. We don't reuse <Checkbox>\n // here because the row is already a Pressable — nesting two\n // pressable surfaces breaks tap handling on native; this\n // is purely visual (the Pressable parent owns the toggle).\n <View\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n width: 18,\n height: 18,\n borderWidth: 1,\n borderRadius: px(colors.radius.sm),\n borderColor: selected ? colors.semantic.interactive.primary : colors.semantic.border.strong,\n backgroundColor: selected ? colors.semantic.interactive.primary : 'transparent',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {selected ? <defaultSemanticIcons.check size={12} color={colors.semantic.text.inverted} /> : null}\n </View>\n ) : null}\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: selected ? (colors.fontWeight.semibold as '600') : (colors.fontWeight.regular as '400'),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {option.label}\n </RNText>\n {selected && !multiple ? (\n <defaultSemanticIcons.check size={16} color={colors.semantic.interactive.primary} />\n ) : null}\n {/* keep `active` referenced — it's part of the public API consumers see via renderOption */}\n {active ? null : null}\n </View>\n );\n};\n\n// ---------- multi-select trigger label (chips with overflow) ----------\n\nconst MultiTriggerLabel = <T,>({\n options,\n placeholder,\n maxChips,\n}: {\n options: ReadonlyArray<SelectOption<T>>;\n placeholder: string;\n maxChips: number;\n}) => {\n const colors = useThemeColors();\n if (options.length === 0) {\n return (\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {placeholder}\n </RNText>\n );\n }\n // When the selection grows beyond `maxChips`, collapse to a counter so\n // the trigger height stays stable on narrow screens.\n if (options.length > maxChips) {\n return (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n fontVariant: ['tabular-nums'],\n flex: 1,\n }}\n numberOfLines={1}\n >\n {options.length} selected\n </RNText>\n );\n }\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n flexWrap: 'wrap',\n rowGap: px(colors.spacing['1']),\n columnGap: px(colors.spacing['1']),\n flex: 1,\n }}\n >\n {options.map((opt) => (\n <View\n key={`chip-${opt.value}`}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 2,\n borderRadius: px(colors.radius.sm),\n backgroundColor: colors.semantic.background.subtle,\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n numberOfLines={1}\n >\n {opt.label}\n </RNText>\n </View>\n ))}\n </View>\n );\n};\n\n// ---------- multi-select popup header with \"Clear all\" affordance ----------\n\nconst MultiSelectionHeader = ({ count, onClearAll }: { count: number; onClearAll: () => void }) => {\n const colors = useThemeColors();\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontVariant: ['tabular-nums'],\n }}\n >\n {count} selected\n </RNText>\n <Pressable\n role=\"button\"\n accessibilityRole=\"button\"\n aria-label=\"Clear all\"\n accessibilityLabel=\"Clear all\"\n onPress={onClearAll}\n style={({ pressed }) => ({\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 2,\n borderRadius: px(colors.radius.sm),\n opacity: pressed ? 0.6 : 1,\n })}\n >\n <RNText\n style={{\n color: colors.semantic.interactive.primary,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n Clear all\n </RNText>\n </Pressable>\n </View>\n );\n};\n"]}
@@ -1,9 +1,9 @@
1
1
  import { useTranslation } from './chunk-GJMHNEQ3.js';
2
2
  import { defaultSemanticIcons } from './chunk-7Z4NMNX6.js';
3
- import { Badge } from './chunk-3BDDPFCI.js';
3
+ import { Badge } from './chunk-MOAIQHR7.js';
4
4
  import { px } from './chunk-5A2QOOVN.js';
5
- import { cn } from './chunk-CHXHRJNZ.js';
6
5
  import { useThemeColors } from './chunk-R5JMDDCB.js';
6
+ import { cn } from './chunk-CHXHRJNZ.js';
7
7
  import { __name } from './chunk-WCQVDF3K.js';
8
8
  import * as React from 'react';
9
9
  import { createContext, useContext, useState, useRef, useCallback, useMemo, useEffect, isValidElement, cloneElement } from 'react';
@@ -650,5 +650,5 @@ function withAlpha(color, alpha) {
650
650
  __name(withAlpha, "withAlpha");
651
651
 
652
652
  export { FloatButton };
653
- //# sourceMappingURL=chunk-4PUPKWEP.js.map
654
- //# sourceMappingURL=chunk-4PUPKWEP.js.map
653
+ //# sourceMappingURL=chunk-PJXVLE24.js.map
654
+ //# sourceMappingURL=chunk-PJXVLE24.js.map