@nori-ui/core 1.5.0 → 1.6.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 (171) hide show
  1. package/dist/Table.shared-BymRgTnY.d.cts +54 -0
  2. package/dist/Table.shared-BymRgTnY.d.ts +54 -0
  3. package/dist/{chunk-ND7MRYW7.js → chunk-2HMQDJ22.js} +4 -4
  4. package/dist/{chunk-ND7MRYW7.js.map → chunk-2HMQDJ22.js.map} +1 -1
  5. package/dist/{chunk-KCLWPSV5.js → chunk-2RL6WCFC.js} +4 -4
  6. package/dist/{chunk-KCLWPSV5.js.map → chunk-2RL6WCFC.js.map} +1 -1
  7. package/dist/{chunk-FDBQOQMW.js → chunk-3BDDPFCI.js} +3 -3
  8. package/dist/{chunk-FDBQOQMW.js.map → chunk-3BDDPFCI.js.map} +1 -1
  9. package/dist/{chunk-WOF67PKT.js → chunk-3CEJ5TB4.js} +3 -3
  10. package/dist/{chunk-WOF67PKT.js.map → chunk-3CEJ5TB4.js.map} +1 -1
  11. package/dist/{chunk-BNDUQNG7.js → chunk-3OIWAS2P.js} +3 -3
  12. package/dist/{chunk-BNDUQNG7.js.map → chunk-3OIWAS2P.js.map} +1 -1
  13. package/dist/{chunk-6JVUVBZH.js → chunk-4PUPKWEP.js} +5 -5
  14. package/dist/{chunk-6JVUVBZH.js.map → chunk-4PUPKWEP.js.map} +1 -1
  15. package/dist/{chunk-6PO2IWB3.js → chunk-4UFAZLSZ.js} +5 -3
  16. package/dist/chunk-4UFAZLSZ.js.map +1 -0
  17. package/dist/{chunk-76FZF4GM.js → chunk-5PSC5HT4.js} +8 -125
  18. package/dist/chunk-5PSC5HT4.js.map +1 -0
  19. package/dist/{chunk-LWQZ257T.js → chunk-5XEGZFG5.js} +3 -3
  20. package/dist/{chunk-LWQZ257T.js.map → chunk-5XEGZFG5.js.map} +1 -1
  21. package/dist/{chunk-WAKKQROH.js → chunk-6AD6KCVB.js} +3 -3
  22. package/dist/{chunk-WAKKQROH.js.map → chunk-6AD6KCVB.js.map} +1 -1
  23. package/dist/chunk-73CUV7MW.js +125 -0
  24. package/dist/chunk-73CUV7MW.js.map +1 -0
  25. package/dist/{chunk-GRDVE3IR.js → chunk-BZLT6R62.js} +3 -3
  26. package/dist/{chunk-GRDVE3IR.js.map → chunk-BZLT6R62.js.map} +1 -1
  27. package/dist/{chunk-Y4ZRSW35.js → chunk-CCUXO2HN.js} +3 -3
  28. package/dist/{chunk-Y4ZRSW35.js.map → chunk-CCUXO2HN.js.map} +1 -1
  29. package/dist/{chunk-2UXKXUX2.js → chunk-CPIKN4BX.js} +3 -3
  30. package/dist/{chunk-2UXKXUX2.js.map → chunk-CPIKN4BX.js.map} +1 -1
  31. package/dist/{chunk-46OT4PA6.js → chunk-DDGMLLS3.js} +3 -3
  32. package/dist/{chunk-46OT4PA6.js.map → chunk-DDGMLLS3.js.map} +1 -1
  33. package/dist/{chunk-XP55RZ3D.js → chunk-FEPTH5RV.js} +3 -3
  34. package/dist/{chunk-XP55RZ3D.js.map → chunk-FEPTH5RV.js.map} +1 -1
  35. package/dist/{chunk-MJ4AGXS7.js → chunk-GJMHNEQ3.js} +3 -3
  36. package/dist/{chunk-MJ4AGXS7.js.map → chunk-GJMHNEQ3.js.map} +1 -1
  37. package/dist/{chunk-VCJF75T2.js → chunk-JQQ3FBN7.js} +3 -3
  38. package/dist/{chunk-VCJF75T2.js.map → chunk-JQQ3FBN7.js.map} +1 -1
  39. package/dist/{chunk-O4NMS3KB.js → chunk-JXLEMBDB.js} +3 -3
  40. package/dist/{chunk-O4NMS3KB.js.map → chunk-JXLEMBDB.js.map} +1 -1
  41. package/dist/{chunk-W3HMOOON.js → chunk-JZ774T7U.js} +3 -3
  42. package/dist/{chunk-W3HMOOON.js.map → chunk-JZ774T7U.js.map} +1 -1
  43. package/dist/{chunk-SINLREQV.js → chunk-MKSDYRWQ.js} +3 -3
  44. package/dist/{chunk-SINLREQV.js.map → chunk-MKSDYRWQ.js.map} +1 -1
  45. package/dist/{chunk-AFQIK6JI.js → chunk-MRJWPRCX.js} +3 -3
  46. package/dist/{chunk-AFQIK6JI.js.map → chunk-MRJWPRCX.js.map} +1 -1
  47. package/dist/{chunk-EFK7726V.js → chunk-NF7XG2FG.js} +3 -3
  48. package/dist/{chunk-EFK7726V.js.map → chunk-NF7XG2FG.js.map} +1 -1
  49. package/dist/{chunk-WTNDPO2V.js → chunk-NNFJKRXZ.js} +3 -3
  50. package/dist/{chunk-WTNDPO2V.js.map → chunk-NNFJKRXZ.js.map} +1 -1
  51. package/dist/{chunk-CGQIVFCN.js → chunk-NRYWNOG5.js} +3 -3
  52. package/dist/{chunk-CGQIVFCN.js.map → chunk-NRYWNOG5.js.map} +1 -1
  53. package/dist/{chunk-HTF6FDB6.js → chunk-OMU4R4Y5.js} +3 -3
  54. package/dist/{chunk-HTF6FDB6.js.map → chunk-OMU4R4Y5.js.map} +1 -1
  55. package/dist/{chunk-C6TRLHMW.js → chunk-PABG3IJ6.js} +3 -3
  56. package/dist/{chunk-C6TRLHMW.js.map → chunk-PABG3IJ6.js.map} +1 -1
  57. package/dist/{chunk-RM5TSXVE.js → chunk-PNP7L4TA.js} +3 -3
  58. package/dist/{chunk-RM5TSXVE.js.map → chunk-PNP7L4TA.js.map} +1 -1
  59. package/dist/{chunk-L5X4SYJ4.js → chunk-PZS4A4VQ.js} +3 -3
  60. package/dist/{chunk-L5X4SYJ4.js.map → chunk-PZS4A4VQ.js.map} +1 -1
  61. package/dist/{chunk-4I37QSEM.js → chunk-QJVS2VXS.js} +5 -5
  62. package/dist/{chunk-4I37QSEM.js.map → chunk-QJVS2VXS.js.map} +1 -1
  63. package/dist/{chunk-H7MFAFV4.js → chunk-RUWD35UI.js} +4 -4
  64. package/dist/{chunk-H7MFAFV4.js.map → chunk-RUWD35UI.js.map} +1 -1
  65. package/dist/{chunk-5BM6H2CD.js → chunk-SFNDR6DI.js} +3 -3
  66. package/dist/{chunk-5BM6H2CD.js.map → chunk-SFNDR6DI.js.map} +1 -1
  67. package/dist/{chunk-UF5OENHV.js → chunk-TLS54G6Y.js} +3 -3
  68. package/dist/{chunk-UF5OENHV.js.map → chunk-TLS54G6Y.js.map} +1 -1
  69. package/dist/{chunk-UUXWRDWW.js → chunk-UJWCEGQY.js} +3 -3
  70. package/dist/{chunk-UUXWRDWW.js.map → chunk-UJWCEGQY.js.map} +1 -1
  71. package/dist/{chunk-UJ5KFRDE.js → chunk-UZD77M3J.js} +3 -3
  72. package/dist/{chunk-UJ5KFRDE.js.map → chunk-UZD77M3J.js.map} +1 -1
  73. package/dist/chunk-VP7DRJUZ.js +3 -0
  74. package/dist/chunk-VP7DRJUZ.js.map +1 -0
  75. package/dist/{chunk-UPVNZPFV.js → chunk-VYRJ7OE5.js} +3 -3
  76. package/dist/{chunk-UPVNZPFV.js.map → chunk-VYRJ7OE5.js.map} +1 -1
  77. package/dist/{chunk-IGLMPAWE.js → chunk-WGT345SV.js} +3 -3
  78. package/dist/{chunk-IGLMPAWE.js.map → chunk-WGT345SV.js.map} +1 -1
  79. package/dist/{chunk-F7G6R373.js → chunk-WP2Z2ATO.js} +5 -5
  80. package/dist/{chunk-F7G6R373.js.map → chunk-WP2Z2ATO.js.map} +1 -1
  81. package/dist/chunk-WYPGQVDV.js +145 -0
  82. package/dist/chunk-WYPGQVDV.js.map +1 -0
  83. package/dist/{chunk-GELLSU64.js → chunk-XALU6LOT.js} +3 -3
  84. package/dist/{chunk-GELLSU64.js.map → chunk-XALU6LOT.js.map} +1 -1
  85. package/dist/{chunk-VMAGFYHG.js → chunk-Y5TJ7CAX.js} +3 -3
  86. package/dist/{chunk-VMAGFYHG.js.map → chunk-Y5TJ7CAX.js.map} +1 -1
  87. package/dist/chunk-YZ27OS2R.js +202 -0
  88. package/dist/chunk-YZ27OS2R.js.map +1 -0
  89. package/dist/client.cjs +449 -119
  90. package/dist/client.cjs.map +1 -1
  91. package/dist/client.d.cts +3 -0
  92. package/dist/client.d.ts +3 -0
  93. package/dist/client.js +50 -46
  94. package/dist/client.js.map +1 -1
  95. package/dist/components/Accordion/index.js +2 -2
  96. package/dist/components/Alert/index.js +2 -2
  97. package/dist/components/AlertDialog/index.js +2 -2
  98. package/dist/components/Avatar/index.js +2 -2
  99. package/dist/components/Badge/index.js +2 -2
  100. package/dist/components/Box/index.js +4 -4
  101. package/dist/components/Breadcrumb/index.cjs +3 -1
  102. package/dist/components/Breadcrumb/index.cjs.map +1 -1
  103. package/dist/components/Breadcrumb/index.js +5 -5
  104. package/dist/components/Button/index.js +2 -2
  105. package/dist/components/Calendar/index.cjs +3 -1
  106. package/dist/components/Calendar/index.cjs.map +1 -1
  107. package/dist/components/Calendar/index.js +5 -5
  108. package/dist/components/Card/index.js +2 -2
  109. package/dist/components/Checkbox/index.js +2 -2
  110. package/dist/components/Combobox/index.js +3 -3
  111. package/dist/components/ContextMenu/index.js +4 -4
  112. package/dist/components/DataTable/index.cjs +770 -0
  113. package/dist/components/DataTable/index.cjs.map +1 -0
  114. package/dist/components/DataTable/index.d.cts +53 -0
  115. package/dist/components/DataTable/index.d.ts +53 -0
  116. package/dist/components/DataTable/index.js +8 -0
  117. package/dist/components/DataTable/index.js.map +1 -0
  118. package/dist/components/DatePicker/index.cjs +3 -1
  119. package/dist/components/DatePicker/index.cjs.map +1 -1
  120. package/dist/components/DatePicker/index.js +7 -7
  121. package/dist/components/Dialog/index.js +2 -2
  122. package/dist/components/DropdownMenu/index.js +3 -3
  123. package/dist/components/Field/index.cjs +3 -1
  124. package/dist/components/Field/index.cjs.map +1 -1
  125. package/dist/components/Field/index.d.cts +2 -2
  126. package/dist/components/Field/index.d.ts +2 -2
  127. package/dist/components/Field/index.js +3 -3
  128. package/dist/components/FloatButton/index.cjs +3 -1
  129. package/dist/components/FloatButton/index.cjs.map +1 -1
  130. package/dist/components/FloatButton/index.js +5 -5
  131. package/dist/components/HStack/index.js +4 -4
  132. package/dist/components/InputGroup/index.js +2 -2
  133. package/dist/components/Label/index.cjs +3 -1
  134. package/dist/components/Label/index.cjs.map +1 -1
  135. package/dist/components/Label/index.js +3 -3
  136. package/dist/components/Pagination/index.cjs +3 -1
  137. package/dist/components/Pagination/index.cjs.map +1 -1
  138. package/dist/components/Pagination/index.js +6 -5
  139. package/dist/components/Popover/index.js +2 -2
  140. package/dist/components/Progress/index.js +2 -2
  141. package/dist/components/Radio/index.js +2 -2
  142. package/dist/components/SegmentedControl/index.js +2 -2
  143. package/dist/components/Select/index.js +2 -2
  144. package/dist/components/Sheet/index.js +2 -2
  145. package/dist/components/Switch/index.js +2 -2
  146. package/dist/components/Table/index.cjs +461 -0
  147. package/dist/components/Table/index.cjs.map +1 -0
  148. package/dist/components/Table/index.d.cts +16 -0
  149. package/dist/components/Table/index.d.ts +16 -0
  150. package/dist/components/Table/index.js +7 -0
  151. package/dist/components/Table/index.js.map +1 -0
  152. package/dist/components/Tabs/index.js +2 -2
  153. package/dist/components/Text/index.js +2 -2
  154. package/dist/components/TextArea/index.js +3 -3
  155. package/dist/components/TextInput/index.js +2 -2
  156. package/dist/components/Toggle/index.js +2 -2
  157. package/dist/components/Tooltip/index.js +2 -2
  158. package/dist/components/VStack/index.js +4 -4
  159. package/dist/i18n/index.cjs +3 -1
  160. package/dist/i18n/index.cjs.map +1 -1
  161. package/dist/i18n/index.js +1 -1
  162. package/dist/index.cjs +449 -119
  163. package/dist/index.cjs.map +1 -1
  164. package/dist/index.d.cts +3 -0
  165. package/dist/index.d.ts +3 -0
  166. package/dist/index.js +47 -43
  167. package/dist/slot/index.d.cts +2 -2
  168. package/dist/slot/index.d.ts +2 -2
  169. package/package.json +1 -1
  170. package/dist/chunk-6PO2IWB3.js.map +0 -1
  171. package/dist/chunk-76FZF4GM.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/i18n/default-dictionary.ts","../../../src/i18n/resolve.ts","../../../src/i18n/context.tsx","../../../src/i18n/use-translation.ts","../../../src/slot/compose-refs.ts","../../../src/slot/slot.tsx","../../../src/theme/px.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/utils/cn.ts","../../../src/icons/default-semantic-icons.tsx","../../../src/components/Select/Select.tsx","../../../src/components/Pagination/use-pagination.ts","../../../src/components/Pagination/Pagination.tsx"],"names":["createContext","useContext","forwardRef","Slot","isValidElement","Children","cloneElement","Platform","useState","Appearance","useEffect","isWeb","jsx","RNText","useId","useRef","useCallback","useMemo","id","useWindowDimensions","jsxs","View","Pressable","createPortal","Modal","ScrollView","next","Fragment","RNTextInput"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Dictionary } from './types';\n\n/**\n * Default English strings used by library components.\n *\n * Key naming convention:\n * <component>.<purpose>[_plural-form]\n *\n * Plural suffixes follow i18next: `_zero`, `_one`, `_two`, `_few`, `_many`, `_other`.\n * Interpolation uses `{{name}}` — double braces, no spaces, by convention.\n */\nexport const defaultDictionary: Dictionary = {\n // generic / shared\n 'common.cancel': 'Cancel',\n 'common.confirm': 'Confirm',\n 'common.close': 'Close',\n 'common.back': 'Back',\n 'common.loading': 'Loading',\n 'common.error': 'Something went wrong',\n 'common.retry': 'Try again',\n\n // breadcrumb\n 'breadcrumb.ariaLabel': 'Breadcrumb',\n 'breadcrumb.expandLabel': 'Show full path',\n 'breadcrumb.ellipsisLabel': 'More',\n 'breadcrumb.currentPageLabel': 'Current page',\n 'breadcrumb.siblingMenuLabel': 'Open sibling pages',\n\n // pagination\n 'pagination.ariaLabel': 'Pagination',\n 'pagination.previous': 'Previous page',\n 'pagination.next': 'Next page',\n 'pagination.first': 'First page',\n 'pagination.last': 'Last page',\n 'pagination.ellipsis': 'More pages',\n 'pagination.currentPage': 'Current page',\n 'pagination.gotoPage': 'Go to page {{page}}',\n 'pagination.range': 'Showing {{from}}–{{to}} of {{total}}',\n 'pagination.pageOf': 'Page {{page}} of {{total}}',\n 'pagination.pageSizeLabel': 'Items per page',\n 'pagination.jumperLabel': 'Go to page',\n 'pagination.jumperPlaceholder': '#',\n\n // floatButton\n 'floatButton.backToTop': 'Back to top',\n\n // calendar\n 'calendar.header.previous': 'Previous month',\n 'calendar.header.next': 'Next month',\n 'calendar.header.openMonthView': 'Open month picker',\n 'calendar.header.openYearView': 'Open year picker',\n 'calendar.header.openDayView': 'Open day picker',\n 'calendar.today': 'Today',\n 'calendar.clear': 'Clear',\n\n // button\n 'button.loadingLabel': 'Loading',\n\n // input\n 'input.clear': 'Clear',\n 'input.passwordShow': 'Show password',\n 'input.passwordHide': 'Hide password',\n\n // checkbox / switch\n 'checkbox.checked': 'Checked',\n 'checkbox.unchecked': 'Unchecked',\n 'switch.on': 'On',\n 'switch.off': 'Off',\n\n // field\n 'field.requiredIndicator': '*',\n 'field.requiredLabel': 'required',\n};\n","import type { Dictionary, I18nInput, I18nOptions, TranslateFn } from './types';\n\n/**\n * Normalizes the consumer's i18n input (undefined | dictionary | function) into a\n * uniform TranslateFn. Internal code only calls the returned function.\n *\n * Precedence for a given key lookup:\n * 1. consumer function (if provided) — called verbatim, no further fallback\n * 2. consumer dictionary (if provided)\n * 3. library defaults\n * 4. options.defaultValue\n * 5. the key itself (so missing strings are visible in dev, not silent)\n */\nexport function resolveI18n(input: I18nInput, defaults: Dictionary): TranslateFn {\n if (typeof input === 'function') {\n // Wrap so the consumer fn is always invoked with (key, options) — enables\n // Jest `toHaveBeenCalledWith(key, undefined)` assertions and mirrors i18next's\n // own call signature exactly.\n return (keyOrKeys, options) => input(keyOrKeys, options);\n }\n\n const dict = input ?? {};\n\n return (keyOrKeys, options) => {\n const keys = Array.isArray(keyOrKeys) ? keyOrKeys : [keyOrKeys];\n for (const rawKey of keys) {\n const key = pluralize(rawKey, options?.count);\n const template = dict[key] ?? defaults[key];\n if (template !== undefined) {\n return interpolate(template, options);\n }\n }\n // exhausted the key list\n const lastKey = keys[keys.length - 1];\n if (options?.defaultValue !== undefined) {\n return interpolate(options.defaultValue, options);\n }\n return lastKey ?? '';\n };\n}\n\nfunction pluralize(key: string, count: number | undefined): string {\n if (count === undefined) {\n return key;\n }\n // Minimal English pluralization — extend with ICU rules later if needed.\n if (count === 1) {\n return `${key}_one`;\n }\n return `${key}_other`;\n}\n\nfunction interpolate(template: string, options: I18nOptions | undefined): string {\n if (!options) {\n return template;\n }\n return template.replace(/\\{\\{\\s*([A-Za-z0-9_.-]+)\\s*\\}\\}/g, (_match, name: string) => {\n const value = options[name];\n return value === undefined || value === null ? '' : String(value);\n });\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext, useMemo } from 'react';\nimport { defaultDictionary } from './default-dictionary';\nimport { resolveI18n } from './resolve';\nimport type { I18nInput, TranslateFn } from './types';\n\nexport type I18nContextValue = {\n t: TranslateFn;\n};\n\n// Default context value uses the built-in English dictionary; consumers without\n// a provider still get a working t().\nconst defaultValue: I18nContextValue = {\n t: resolveI18n(undefined, defaultDictionary),\n};\n\nexport const I18nContext = createContext<I18nContextValue>(defaultValue);\nI18nContext.displayName = 'I18nContext';\n\nexport type I18nProviderProps = {\n i18n?: I18nInput;\n children?: ReactNode;\n};\n\nexport function I18nProvider({ i18n, children }: I18nProviderProps) {\n const value = useMemo<I18nContextValue>(() => ({ t: resolveI18n(i18n, defaultDictionary) }), [i18n]);\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n","'use client';\n\nimport { useContext } from 'react';\nimport { I18nContext, type I18nContextValue } from './context';\n\nexport function useTranslation(): I18nContextValue {\n return useContext(I18nContext);\n}\n","// composeRefs — merges multiple React refs (callback or object) into a single callback.\n// Derived from Radix UI's approach; reimplemented here so we don't take a Radix dependency.\n\nimport type { MutableRefObject, Ref, RefCallback } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\nexport function composeRefs<T>(...refs: Array<PossibleRef<T>>): RefCallback<T> {\n return (node: T | null) => {\n for (const ref of refs) {\n if (ref == null) {\n continue;\n }\n if (typeof ref === 'function') {\n ref(node);\n } else {\n // React's MutableRefObject typing — we assign .current directly.\n (ref as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n","import type { CSSProperties, ReactElement, Ref } from 'react';\nimport { Children, cloneElement, forwardRef, isValidElement } from 'react';\nimport { composeRefs } from './compose-refs';\n\ntype AnyProps = Record<string, unknown>;\n\nexport type SlotProps = {\n children?: React.ReactNode;\n} & AnyProps;\n\nexport const Slot = forwardRef<unknown, SlotProps>(function Slot(props, forwardedRef) {\n const { children, ...slotProps } = props;\n\n if (!isValidElement(children)) {\n return null;\n }\n\n // Assert that children is a single React element with props — we've narrowed above.\n const child = Children.only(children) as ReactElement<AnyProps> & { ref?: Ref<unknown> };\n const merged = mergeProps(slotProps, child.props);\n\n // Merge refs: Slot's forwarded ref + the child's own ref (if any).\n const childRef = (child as unknown as { ref?: Ref<unknown> }).ref;\n if (forwardedRef || childRef) {\n (merged as AnyProps).ref = composeRefs(forwardedRef, childRef);\n }\n\n return cloneElement(child, merged);\n});\nSlot.displayName = 'Slot';\n\nfunction mergeProps(outer: AnyProps, inner: AnyProps): AnyProps {\n // Inner (child) wins for everything except: className (concatenated), style (merged), and\n // event handlers (composed — outer runs first, then inner).\n const merged: AnyProps = { ...outer };\n\n for (const key of Object.keys(inner)) {\n const outerValue = outer[key];\n const innerValue = inner[key];\n\n if (key === 'className' || key === 'class') {\n merged[key] = joinClass(outerValue, innerValue);\n continue;\n }\n\n if (key === 'style') {\n merged[key] = {\n ...(outerValue as CSSProperties | undefined),\n ...(innerValue as CSSProperties | undefined),\n };\n continue;\n }\n\n if (isEventHandler(key, outerValue, innerValue)) {\n merged[key] = composeHandlers(outerValue as Fn, innerValue as Fn);\n continue;\n }\n\n merged[key] = innerValue;\n }\n\n return merged;\n}\n\nfunction joinClass(outer: unknown, inner: unknown): string | undefined {\n const a = typeof outer === 'string' ? outer : '';\n const b = typeof inner === 'string' ? inner : '';\n const joined = [a, b].filter(Boolean).join(' ');\n return joined.length > 0 ? joined : undefined;\n}\n\ntype Fn = (...args: unknown[]) => unknown;\n\nfunction isEventHandler(key: string, outer: unknown, inner: unknown): boolean {\n if (!key.startsWith('on') || key.length < 3) {\n return false;\n }\n if (key[2] !== key[2]?.toUpperCase()) {\n return false;\n }\n return typeof outer === 'function' && typeof inner === 'function';\n}\n\nfunction composeHandlers(outer: Fn, inner: Fn): Fn {\n return (...args: unknown[]) => {\n outer(...args);\n inner(...args);\n };\n}\n","/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#fafafa\",\n elevated: \"#ffffff\",\n subtle: \"#f4f4f5\",\n },\n border: {\n default: \"#e4e4e7\",\n strong: \"#d4d4d8\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#0d9488\",\n primaryHover: \"#0f766e\",\n primaryPressed: \"#115e59\",\n },\n text: {\n default: \"#18181b\",\n inverted: \"#fafafa\",\n muted: \"#52525b\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n\n// Dark mode overrides\n// Generated for dark mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const themeDark = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#18181b\",\n elevated: \"#3f3f46\",\n subtle: \"#27272a\",\n },\n border: {\n default: \"#3f3f46\",\n strong: \"#52525b\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#2dd4bf\",\n primaryHover: \"#5eead4\",\n primaryPressed: \"#99f6e4\",\n },\n text: {\n default: \"#fafafa\",\n inverted: \"#18181b\",\n muted: \"#a1a1aa\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\n","'use client';\n\nimport { themeDark as defaultDark, theme as defaultLight, type Theme } from '@nori-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\n\n/**\n * A `NoriTheme` is a paired light/dark palette. The active half is picked\n * by `useColorScheme()` so the same theme object covers both schemes.\n *\n * Build one yourself by spreading the defaults and overriding the colors\n * you care about, or pick a preset from `@nori-ui/core/themes` (see the\n * Theming docs for examples).\n */\nexport type NoriTheme = {\n light: Theme;\n dark: Theme;\n};\n\n/**\n * Default Nori palette — teal primary on a warm-paper light surface, and\n * teal-400 primary on a deep-zinc dark surface. Mirrors the `theme` /\n * `themeDark` exports from @nori-ui/tokens.\n */\nexport const defaultTheme: NoriTheme = {\n light: defaultLight,\n dark: defaultDark as unknown as Theme,\n};\n\n// Context value is the FULL pair, not the active half. `useThemeColors`\n// (the hook components reach for) resolves it to the right one based on\n// the current color scheme. Storing the pair means a parent only has to\n// declare the theme once — switching scheme is a separate concern.\nexport const ThemeContext = createContext<NoriTheme>(defaultTheme);\nThemeContext.displayName = 'ThemeContext';\n\nexport type ThemeProviderProps = {\n /**\n * The theme to apply to descendants. Pass either:\n * - a full `NoriTheme` (`{ light, dark }`) — both schemes covered\n * - a single `Theme` — used for both light and dark (rare; mostly\n * useful when you ONLY ever render in one scheme)\n * - omit — falls back to the Nori default (teal palette)\n */\n theme?: NoriTheme | Theme;\n children?: ReactNode;\n};\n\nconst isFullTheme = (t: NoriTheme | Theme): t is NoriTheme => 'light' in t && 'dark' in t;\n\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const value: NoriTheme =\n theme === undefined ? defaultTheme : isFullTheme(theme) ? theme : { light: theme, dark: theme };\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n","'use client';\n\nimport { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\nimport { Appearance, Platform } from 'react-native';\n\nexport type ColorScheme = 'light' | 'dark';\n\n// Override channel so a parent can force a scheme (e.g. an app shell with\n// hard-coded dark chrome that wants nested components to render against\n// the dark token half regardless of the OS Appearance). `null` means\n// \"no override — use the system signal\".\nconst ColorSchemeOverrideContext = createContext<ColorScheme | null>(null);\nColorSchemeOverrideContext.displayName = 'ColorSchemeOverrideContext';\n\nexport type ColorSchemeProviderProps = {\n /** Force a specific scheme for descendants. */\n value: ColorScheme;\n children?: ReactNode;\n};\n\n/**\n * Forces a color scheme for all descendants. Useful when a screen's chrome\n * is hard-coded to one scheme (e.g. a forced-dark editorial surface) and\n * you want library components inside it to follow that, not the OS.\n */\nexport function ColorSchemeProvider({ value, children }: ColorSchemeProviderProps) {\n return <ColorSchemeOverrideContext.Provider value={value}>{children}</ColorSchemeOverrideContext.Provider>;\n}\n\nconst isWeb = Platform.OS === 'web';\n\n// Web: a document is \"in dark mode\" when the root <html> element carries\n// the `dark` class (Tailwind / Fumadocs convention) OR a `data-theme=\"dark\"`\n// attribute (matches the `darkMode` selectors in our Tailwind preset).\n// We deliberately don't fall back to `prefers-color-scheme` — the app\n// usually owns that decision and writes it onto <html>; tracking the system\n// preference too would fight the app's chosen value.\nfunction readWebScheme(): ColorScheme {\n if (typeof document === 'undefined') {\n return 'light';\n }\n const root = document.documentElement;\n if (root.classList.contains('dark')) {\n return 'dark';\n }\n if (root.getAttribute('data-theme') === 'dark') {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Returns the current color scheme — `'light'` or `'dark'`.\n *\n * On web: observes the root `<html>` element's `class=\"dark\"` and\n * `data-theme=\"dark\"` attribute (the same signals our Tailwind preset\n * keys on). Updates live as those flip.\n *\n * On native: delegates to `react-native`'s `Appearance` API so the hook\n * tracks the OS preference without extra wiring.\n *\n * Components consume this indirectly via `useThemeColors()`; reach for\n * this directly when you need the raw scheme (e.g. to swap an icon).\n */\nexport function useColorScheme(): ColorScheme {\n // A `<ColorSchemeProvider value=\"dark\">` ancestor (or NoriProvider's\n // `colorScheme` prop, which mounts one) wins over the OS signal — the\n // app shell knows which scheme its chrome is locked to.\n const override = useContext(ColorSchemeOverrideContext);\n\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (isWeb) {\n return readWebScheme();\n }\n return (Appearance.getColorScheme() ?? 'light') as ColorScheme;\n });\n\n useEffect(() => {\n if (isWeb) {\n const root = document.documentElement;\n const update = () => setScheme(readWebScheme());\n const observer = new MutationObserver(update);\n observer.observe(root, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n // Sync once after mount in case SSR shipped a different value.\n update();\n return () => observer.disconnect();\n }\n\n const sub = Appearance.addChangeListener(({ colorScheme }) => {\n setScheme((colorScheme ?? 'light') as ColorScheme);\n });\n return () => sub.remove();\n }, []);\n\n return override ?? scheme;\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport { useContext } from 'react';\nimport { ThemeContext } from './context';\nimport { useColorScheme } from './use-color-scheme';\n\n/**\n * Returns the active token palette — `theme.light` in light mode,\n * `theme.dark` in dark mode. Resolves the theme via `ThemeContext` so\n * any ancestor `<ThemeProvider theme={...}>` flows through. With no\n * provider in the tree, the default Nori palette (teal) is used.\n *\n * Use this **inside a component** when you need a hex value for a React\n * Native `style` prop (`backgroundColor`, `borderColor`, etc.).\n *\n * Note: className-based styles (e.g. `bg-semantic-interactive-primary`)\n * compile against the @nori-ui/tokens palette at build time and don't\n * follow `<ThemeProvider>` overrides today. Inline styles via this hook\n * always do — and inline beats class on CSS specificity, so the visible\n * color you see is whatever the hook resolves to. CSS-variable theming\n * for the className path is a planned follow-up.\n */\nexport function useThemeColors(): Theme {\n const scheme = useColorScheme();\n const themePair = useContext(ThemeContext);\n return scheme === 'dark' ? themePair.dark : themePair.light;\n}\n","// cn — class-name merger. clsx-compatible shape.\n//\n// Intentionally does NOT deduplicate Tailwind conflicts (e.g. \"text-sm text-lg\").\n// That's `tailwind-merge`'s job; we defer adding it until a component actually\n// needs it, to keep the core tree-shakable and the runtime zero-dep.\n\nexport type ClassInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | ClassInput[]\n | Record<string, boolean | number | null | undefined>;\n\nexport function cn(...inputs: ClassInput[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n append(out, input);\n }\n return out.join(' ');\n}\n\nfunction append(out: string[], input: ClassInput): void {\n if (!input) {\n return;\n }\n if (typeof input === 'string') {\n if (input.length > 0) {\n out.push(input);\n }\n return;\n }\n if (typeof input === 'number') {\n return; // numbers are never class names\n }\n if (Array.isArray(input)) {\n for (const inner of input) {\n append(out, inner);\n }\n return;\n }\n if (typeof input === 'object') {\n for (const key of Object.keys(input)) {\n if (input[key]) {\n out.push(key);\n }\n }\n }\n}\n","'use client';\n\n// default-semantic-icons — minimal built-in icon placeholders for internal\n// library glyphs. Consumers can swap each one via the provider:\n//\n// <NoriProvider icons={{ checkmark: MyCheck, close: MyX }}>\n//\n// These defaults exist so the library renders usable UI out of the box even\n// when lucide-react(-native) or any other icon set is not installed. They are\n// NOT intended to compete with Lucide on style — override them in production.\n//\n// Web ships an SVG path identical to the historical lucide-style stroke. Native\n// ships a Unicode glyph wrapped in `<Text>` because raw `<svg><path>` doesn't\n// exist on the React Native runtime — the renderer treats lowercase host names\n// as native components and crashes with \"View config getter callback for\n// component `path` must be a function\". `react-native-svg` would solve this\n// but it's an extra peer dep this library deliberately doesn't require.\n//\n// Marked `'use client'` because the native render path reads\n// `useThemeColors()` to default the glyph color to the active theme's\n// text token when no explicit color is passed. Without this the native\n// glyph would render in RNText's default (black) regardless of scheme.\n\nimport type { ComponentType } from 'react';\nimport { Platform, Text as RNText } from 'react-native';\nimport { useThemeColors } from '../theme/use-theme-colors';\nimport type { IconComponentProps } from './icon';\n\ntype SemanticIcon = ComponentType<IconComponentProps>;\n\ntype IconRecipe = {\n /** SVG `path` data — used on the web. */\n path: string;\n /** Unicode glyph rendered in `<Text>` on native. */\n glyph: string;\n};\n\nconst isWeb = Platform.OS === 'web';\n\nconst make = ({ path, glyph }: IconRecipe): SemanticIcon =>\n function PlaceholderIcon({ size = 20, color = 'currentColor' }) {\n // Always call the hook — rules-of-hooks. The native branch is the\n // only consumer of the resolved colors, but pulling them on web is\n // a cheap context read.\n const colors = useThemeColors();\n if (isWeb) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n }\n // 'currentColor' is a CSS keyword without meaning on native — RNText\n // would render in its inherent default (~black). Resolve it against\n // the active theme so the glyph stays readable in both schemes.\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.default : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {glyph}\n </RNText>\n );\n };\n\nexport type SemanticIcons = {\n checkmark: SemanticIcon;\n close: SemanticIcon;\n eye: SemanticIcon;\n eyeOff: SemanticIcon;\n chevronDown: SemanticIcon;\n chevronUp: SemanticIcon;\n alertTriangle: SemanticIcon;\n info: SemanticIcon;\n check: SemanticIcon;\n x: SemanticIcon;\n};\n\nexport const defaultSemanticIcons: SemanticIcons = {\n checkmark: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n close: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n eye: make({\n path: 'M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z',\n glyph: '👁',\n }),\n eyeOff: make({\n path: 'M17.94 17.94A10 10 0 0 1 2 12s3.5-7 10-7c2 0 3.8.6 5.4 1.5 M1 1l22 22',\n glyph: '🙈',\n }),\n chevronDown: make({ path: 'm6 9 6 6 6-6', glyph: '⌄' }),\n chevronUp: make({ path: 'm18 15-6-6-6 6', glyph: '⌃' }),\n alertTriangle: make({\n path: 'M12 9v4 M12 17h.01 M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z',\n glyph: '⚠',\n }),\n info: make({\n path: 'M12 8h.01 M11 12h1v4h1 M12 22C6.48 22 2 17.52 2 12 2 6.48 6.48 2 12 2c5.52 0 10 4.48 10 10 0 5.52-4.48 10-10 10z',\n glyph: 'ⓘ',\n }),\n check: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n x: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n};\n","'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","'use client';\n\nimport { useCallback, useMemo, useRef, useState } from 'react';\n\nexport type PaginationItemType = 'page' | 'prev' | 'next' | 'first' | 'last' | 'ellipsis';\n\n/**\n * One slot in the rendered pagination row, as produced by `usePagination`.\n * `page` is set on `'page'` items only; ellipsis carries no number.\n */\nexport type PaginationItemDescriptor = {\n type: PaginationItemType;\n page?: number;\n selected?: boolean;\n disabled?: boolean;\n};\n\nexport type UsePaginationArgs = {\n /** Controlled current page (1-indexed). Omit for uncontrolled. */\n page?: number;\n /** Initial page when uncontrolled (1-indexed). @defaultValue 1 */\n defaultPage?: number;\n /** Total number of pages. */\n pageCount: number;\n /** Pages on each side of the current page. @defaultValue 1 */\n siblingCount?: number;\n /** Pages always visible at start/end. @defaultValue 1 */\n boundaryCount?: number;\n /** Include first/last items in the `pages` list. @defaultValue false */\n showFirstLast?: boolean;\n /** Include prev/next items in the `pages` list. @defaultValue true */\n showPrevNext?: boolean;\n /** Fired on every page change. */\n onPageChange?: (page: number) => void;\n};\n\nexport type UsePaginationReturn = {\n /** Current page (1-indexed), clamped to [1, max(1, pageCount)]. */\n page: number;\n /** Item descriptors in render order. */\n pages: ReadonlyArray<PaginationItemDescriptor>;\n canPrev: boolean;\n canNext: boolean;\n goToPage: (page: number) => void;\n prev: () => void;\n next: () => void;\n first: () => void;\n last: () => void;\n};\n\nconst range = (from: number, to: number): number[] => {\n if (to < from) {\n return [];\n }\n const out = new Array<number>(to - from + 1);\n for (let i = 0; i < out.length; i += 1) {\n out[i] = from + i;\n }\n return out;\n};\n\n/**\n * Headless pagination math + state. Returns the items to render and the\n * actions that drive them — without a single DOM/RN element. Use this\n * directly for fully custom paginators, or let `<Pagination>` use it\n * internally.\n *\n * The math mirrors MUI's `usePagination` algorithm so its behavior is\n * predictable for anyone who has used the React ecosystem before.\n *\n * @example\n * const p = usePagination({ pageCount: 12, defaultPage: 3 });\n * p.pages.map((item) => …);\n */\nexport function usePagination(args: UsePaginationArgs): UsePaginationReturn {\n const {\n page: controlledPage,\n defaultPage = 1,\n pageCount,\n siblingCount = 1,\n boundaryCount = 1,\n showFirstLast = false,\n showPrevNext = true,\n onPageChange,\n } = args;\n\n const isControlled = controlledPage !== undefined;\n const [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);\n\n // Latest-callback ref so `goToPage` can stay referentially stable.\n const onChangeRef = useRef(onPageChange);\n onChangeRef.current = onPageChange;\n\n const safePageCount = Math.max(1, Math.floor(pageCount));\n const rawPage = isControlled ? (controlledPage as number) : uncontrolledPage;\n const currentPage = Math.min(Math.max(1, Math.floor(rawPage)), safePageCount);\n\n const goToPage = useCallback(\n (next: number) => {\n const clamped = Math.min(Math.max(1, Math.floor(next)), Math.max(1, Math.floor(pageCount)));\n if (!isControlled) {\n setUncontrolledPage(clamped);\n }\n onChangeRef.current?.(clamped);\n },\n [isControlled, pageCount]\n );\n\n const prev = useCallback(() => goToPage(currentPage - 1), [goToPage, currentPage]);\n const next = useCallback(() => goToPage(currentPage + 1), [goToPage, currentPage]);\n const first = useCallback(() => goToPage(1), [goToPage]);\n const last = useCallback(() => goToPage(safePageCount), [goToPage, safePageCount]);\n\n const pages = useMemo<ReadonlyArray<PaginationItemDescriptor>>(() => {\n const items: PaginationItemDescriptor[] = [];\n const safeSibling = Math.max(0, Math.floor(siblingCount));\n const safeBoundary = Math.max(0, Math.floor(boundaryCount));\n\n // First / Prev\n if (showFirstLast) {\n items.push({ type: 'first', disabled: currentPage <= 1 });\n }\n if (showPrevNext) {\n items.push({ type: 'prev', disabled: currentPage <= 1 });\n }\n\n // Page numbers + ellipses\n const startPages = range(1, Math.min(safeBoundary, safePageCount));\n const endPages = range(Math.max(safePageCount - safeBoundary + 1, safeBoundary + 1), safePageCount);\n\n const siblingsStart = Math.max(\n Math.min(currentPage - safeSibling, safePageCount - safeBoundary - safeSibling * 2 - 1),\n safeBoundary + 2\n );\n const siblingsEnd = Math.min(\n Math.max(currentPage + safeSibling, safeBoundary + safeSibling * 2 + 2),\n endPages.length > 0 ? endPages[0]! - 2 : safePageCount - 1\n );\n\n const middle: Array<number | 'ellipsis'> = [];\n // Start ellipsis\n if (siblingsStart > safeBoundary + 2) {\n middle.push('ellipsis');\n } else if (safeBoundary + 1 < safePageCount - safeBoundary) {\n middle.push(safeBoundary + 1);\n }\n // Middle pages\n for (const p of range(siblingsStart, siblingsEnd)) {\n middle.push(p);\n }\n // End ellipsis\n if (siblingsEnd < safePageCount - safeBoundary - 1) {\n middle.push('ellipsis');\n } else if (safePageCount - safeBoundary > safeBoundary) {\n middle.push(safePageCount - safeBoundary);\n }\n\n const seen = new Set<number>();\n const pushPage = (n: number) => {\n if (n < 1 || n > safePageCount || seen.has(n)) {\n return;\n }\n seen.add(n);\n items.push({ type: 'page', page: n, selected: n === currentPage });\n };\n\n for (const n of startPages) {\n pushPage(n);\n }\n for (const m of middle) {\n if (m === 'ellipsis') {\n items.push({ type: 'ellipsis' });\n } else {\n pushPage(m);\n }\n }\n for (const n of endPages) {\n pushPage(n);\n }\n\n // Next / Last\n if (showPrevNext) {\n items.push({ type: 'next', disabled: currentPage >= safePageCount });\n }\n if (showFirstLast) {\n items.push({ type: 'last', disabled: currentPage >= safePageCount });\n }\n\n return items;\n }, [currentPage, safePageCount, siblingCount, boundaryCount, showFirstLast, showPrevNext]);\n\n return {\n page: currentPage,\n pages,\n canPrev: currentPage > 1,\n canNext: currentPage < safePageCount,\n goToPage,\n prev,\n next,\n first,\n last,\n };\n}\n","'use client';\n\nimport {\n type ComponentProps,\n createContext,\n type FC,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, TextInput as RNTextInput, useWindowDimensions, View } from 'react-native';\nimport { useTranslation } from '../../i18n/use-translation';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Select, type SelectOption } from '../Select';\nimport { type PaginationItemDescriptor, type PaginationItemType, usePagination } from './use-pagination';\n\n// =============================================================================\n// Public types\n// =============================================================================\n\nexport { type UsePaginationArgs, type UsePaginationReturn, usePagination } from './use-pagination';\nexport type { PaginationItemDescriptor, PaginationItemType };\n\nexport type PaginationVariant = 'auto' | 'numbered' | 'compact';\n\nexport type PaginationRenderItemArgs = {\n type: PaginationItemType;\n page?: number;\n selected: boolean;\n disabled: boolean;\n ariaLabel: string;\n ariaCurrent?: 'page';\n children: ReactNode;\n onPress: () => void;\n};\n\nexport type PaginationOnPageChange = (page: number, meta?: { pageSize?: number }) => void;\n\nexport type PaginationProps = {\n /** Controlled current page (1-indexed). */\n page?: number;\n /** Initial page when uncontrolled (1-indexed). @defaultValue 1 */\n defaultPage?: number;\n /** Total number of pages. Required. */\n pageCount: number;\n /** Pages on each side of the current page. @defaultValue 1 */\n siblingCount?: number;\n /** Pages always visible at start/end. @defaultValue 1 */\n boundaryCount?: number;\n /** Show first/last buttons. @defaultValue false */\n showFirstLast?: boolean;\n /** Hide the entire component when `pageCount <= 1`. @defaultValue true */\n hideOnSinglePage?: boolean;\n /**\n * Force a UI variant. `auto` swaps to `compact` on viewports under\n * `PAGINATION_COMPACT_BREAKPOINT` px wide.\n * @defaultValue 'auto'\n */\n variant?: PaginationVariant;\n /** Render the \"Showing X–Y of Z\" range automatically. @defaultValue false */\n showRange?: boolean;\n /** Total item count — needed by `Pagination.Range` and `Pagination.PageSize`. */\n itemCount?: number;\n /** Items per page — needed by `Pagination.Range` and `Pagination.PageSize`. */\n pageSize?: number;\n /** Fired on every page (or page-size) change. */\n onPageChange?: PaginationOnPageChange;\n /** Render-prop slot for each item. Same signature on web + native. */\n renderItem?: (args: PaginationRenderItemArgs) => ReactNode;\n /** RTL override. @defaultValue 'ltr' */\n dir?: 'ltr' | 'rtl';\n /** Override individual labels (otherwise sourced from `useTranslation`). */\n previousLabel?: string;\n nextLabel?: string;\n firstLabel?: string;\n lastLabel?: string;\n /** Override the nav landmark label. */\n ariaLabel?: string;\n className?: string;\n testID?: string;\n /** Provide compound children to opt out of the items-array shorthand. */\n children?: ReactNode;\n};\n\n/** Viewport width below which `variant=\"auto\"` switches to `compact`. */\nexport const PAGINATION_COMPACT_BREAKPOINT = 480;\n\n// =============================================================================\n// Context (used by both compound parts and the shorthand's internal layout)\n// =============================================================================\n\ntype PaginationContextValue = {\n page: number;\n pageCount: number;\n pageSize: number | undefined;\n itemCount: number | undefined;\n siblingCount: number;\n boundaryCount: number;\n showFirstLast: boolean;\n dir: 'ltr' | 'rtl';\n labels: {\n prev: string;\n next: string;\n first: string;\n last: string;\n gotoPage: (page: number) => string;\n ellipsis: string;\n currentPage: string;\n rangeFmt: (from: number, to: number, total: number) => string;\n pageOfFmt: (page: number, total: number) => string;\n pageSize: string;\n jumperLabel: string;\n jumperPlaceholder: string;\n };\n renderItem?: (args: PaginationRenderItemArgs) => ReactNode;\n goToPage: (page: number) => void;\n setPageSize: (next: number) => void;\n};\n\nconst PaginationContext = createContext<PaginationContextValue | null>(null);\n\nconst usePaginationContext = (label: string): PaginationContextValue => {\n const ctx = useContext(PaginationContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Pagination> or <Pagination.Root>.`);\n }\n return ctx;\n};\n\n// =============================================================================\n// Default item button (used when `renderItem` is not provided)\n// =============================================================================\n\ntype ItemButtonProps = {\n type: PaginationItemType;\n page?: number;\n selected: boolean;\n disabled: boolean;\n ariaLabel: string;\n ariaCurrent?: 'page';\n label: ReactNode;\n onPress: () => void;\n testID?: string;\n};\n\nconst ItemButton = ({ type, selected, disabled, ariaLabel, ariaCurrent, label, onPress, testID }: ItemButtonProps) => {\n const colors = useThemeColors();\n const isChevron = type === 'prev' || type === 'next' || type === 'first' || type === 'last';\n const isInteractive = !disabled && type !== 'ellipsis';\n const size = px(colors.spacing['8']); // 32px — minimum touch target\n\n if (type === 'ellipsis') {\n // Ellipsis is presentational; no button chrome, no padding — just a\n // balanced spacer that keeps the row's rhythm intact.\n return (\n <View\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n minWidth: size,\n minHeight: size,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n // Optical adjust so the dots sit on the row baseline.\n marginTop: -2,\n letterSpacing: 1,\n }}\n >\n {label}\n </RNText>\n </View>\n );\n }\n\n // Pre-compute the static style so the Pressable's function form only has\n // to overlay press/hover deltas. This is more robust on native, where\n // some renderers were observed to drop properties from the function-form\n // result intermittently — especially the selected pill's `backgroundColor`,\n // producing white text on a white background.\n const baseStyle: ViewStyle = {\n minWidth: size,\n height: size,\n paddingHorizontal: px(colors.spacing['2']),\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: px(colors.radius.md),\n // Selected: filled pill in primary. Default: transparent. Press/hover\n // deltas overlay this in the style fn below.\n backgroundColor: selected ? colors.semantic.interactive.primary : 'transparent',\n // A 1px transparent border is reserved on every item so the layout\n // stays stable when the selected one shows its accent border.\n borderWidth: 1,\n borderColor: selected ? colors.semantic.interactive.primary : 'transparent',\n opacity: disabled ? 0.35 : 1,\n };\n\n // Web-only CSS transitions; merged into the static base on web.\n const webExtras =\n Platform.OS === 'web'\n ? ({\n transitionProperty: 'background-color, color, border-color',\n transitionDuration: '120ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n } as unknown as ViewStyle)\n : null;\n const staticStyle: ViewStyle = { ...baseStyle, ...(webExtras ?? {}) };\n\n return (\n <Pressable\n {...(testID !== undefined ? { testID } : {})}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={ariaLabel}\n aria-label={ariaLabel}\n {...(ariaCurrent ? { 'aria-current': ariaCurrent } : {})}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n onPress={isInteractive ? onPress : undefined}\n // Use a function form ONLY on web so Pressable can read `hovered`.\n // On native the function form was observed to occasionally drop\n // its returned style block on iOS — so we pass a plain object,\n // which renders reliably.\n style={\n Platform.OS === 'web'\n ? (state) => {\n const { pressed, hovered } = state as { pressed: boolean; hovered?: boolean };\n const interactive =\n !selected && (pressed || hovered)\n ? colors.semantic.background.subtle\n : staticStyle.backgroundColor;\n return { ...staticStyle, backgroundColor: interactive };\n }\n : staticStyle\n }\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: isChevron ? px(colors.fontSize.md) : px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.md),\n color: selected\n ? colors.semantic.text.inverted\n : disabled\n ? colors.semantic.text.muted\n : colors.semantic.text.default,\n fontWeight: selected ? (colors.fontWeight.semibold as '600') : (colors.fontWeight.medium as '500'),\n fontVariant: ['tabular-nums'],\n // Chevron glyphs sit a hair high in most fonts.\n marginTop: isChevron ? -1 : 0,\n }}\n >\n {label}\n </RNText>\n </Pressable>\n );\n};\n\n// =============================================================================\n// Live region for screen readers (web only — RN announces via accessibilityLiveRegion)\n// =============================================================================\n\nconst LiveRegion = ({ message }: { message: string }) => {\n if (Platform.OS === 'web') {\n return (\n <View\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n opacity: 0,\n }}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic\n >\n <RNText accessibilityLiveRegion=\"polite\">{message}</RNText>\n </View>\n );\n }\n return (\n <View accessibilityLiveRegion=\"polite\" style={{ width: 0, height: 0 }}>\n <RNText>{message}</RNText>\n </View>\n );\n};\n\n// =============================================================================\n// Items renderer (the shorthand UI)\n// =============================================================================\n\ntype ItemsRendererProps = {\n items: ReadonlyArray<PaginationItemDescriptor>;\n onItemPress: (item: PaginationItemDescriptor) => void;\n};\n\nconst ItemsRenderer = ({ items, onItemPress }: ItemsRendererProps) => {\n const { labels, renderItem, dir } = usePaginationContext('Pagination.Items');\n\n const elements = items.map((item, idx) => {\n const key = `${item.type}-${item.page ?? idx}-${idx}`;\n const ariaLabel = ariaLabelFor(item, labels);\n const ariaCurrent = item.selected ? ('page' as const) : undefined;\n const display = displayLabelFor(item, labels, dir);\n const onPress = () => onItemPress(item);\n\n if (renderItem && item.type !== 'ellipsis') {\n return (\n <View key={key}>\n {renderItem({\n type: item.type,\n ...(item.page !== undefined ? { page: item.page } : {}),\n selected: item.selected ?? false,\n disabled: item.disabled ?? false,\n ariaLabel,\n ...(ariaCurrent ? { ariaCurrent } : {}),\n children: display,\n onPress,\n })}\n </View>\n );\n }\n\n return (\n <ItemButton\n key={key}\n type={item.type}\n {...(item.page !== undefined ? { page: item.page } : {})}\n selected={item.selected ?? false}\n disabled={item.disabled ?? false}\n ariaLabel={ariaLabel}\n {...(ariaCurrent ? { ariaCurrent } : {})}\n label={display}\n onPress={onPress}\n />\n );\n });\n\n return <>{elements}</>;\n};\n\nfunction ariaLabelFor(item: PaginationItemDescriptor, labels: PaginationContextValue['labels']): string {\n switch (item.type) {\n case 'first':\n return labels.first;\n case 'prev':\n return labels.prev;\n case 'next':\n return labels.next;\n case 'last':\n return labels.last;\n case 'ellipsis':\n return labels.ellipsis;\n case 'page':\n return item.selected ? labels.currentPage : labels.gotoPage(item.page ?? 0);\n }\n}\n\nfunction displayLabelFor(\n item: PaginationItemDescriptor,\n labels: PaginationContextValue['labels'],\n dir: 'ltr' | 'rtl'\n): ReactNode {\n const flip = dir === 'rtl';\n switch (item.type) {\n case 'first':\n return flip ? '»' : '«';\n case 'last':\n return flip ? '«' : '»';\n case 'prev':\n return flip ? '›' : '‹';\n case 'next':\n return flip ? '‹' : '›';\n case 'ellipsis':\n return '…';\n case 'page':\n return String(item.page ?? '');\n }\n}\n\n// =============================================================================\n// Compact variant\n// =============================================================================\n\nconst CompactView = ({\n onPrev,\n onNext,\n canPrev,\n canNext,\n pageLabel,\n}: {\n onPrev: () => void;\n onNext: () => void;\n canPrev: boolean;\n canNext: boolean;\n pageLabel: string;\n}) => {\n const colors = useThemeColors();\n const { labels, dir } = usePaginationContext('Pagination(compact)');\n const flip = dir === 'rtl';\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: px(colors.spacing['1']),\n flexGrow: 1,\n }}\n >\n <ItemButton\n type=\"prev\"\n selected={false}\n disabled={!canPrev}\n ariaLabel={labels.prev}\n label={flip ? '›' : '‹'}\n onPress={onPrev}\n />\n <View\n style={{\n flexGrow: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: px(colors.spacing['3']),\n }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n fontWeight: colors.fontWeight.medium as '500',\n fontVariant: ['tabular-nums'],\n }}\n >\n {pageLabel}\n </RNText>\n </View>\n <ItemButton\n type=\"next\"\n selected={false}\n disabled={!canNext}\n ariaLabel={labels.next}\n label={flip ? '‹' : '›'}\n onPress={onNext}\n />\n </View>\n );\n};\n\n// =============================================================================\n// Root (the `<Pagination>` symbol — also serves as the shorthand)\n// =============================================================================\n\nconst ANNOUNCE_DEBOUNCE_MS = 150;\n\nconst PaginationRoot = (props: PaginationProps) => {\n const {\n page: controlledPage,\n defaultPage = 1,\n pageCount,\n siblingCount = 1,\n boundaryCount = 1,\n showFirstLast = false,\n hideOnSinglePage = true,\n variant = 'auto',\n showRange = false,\n itemCount,\n pageSize: pageSizeProp,\n onPageChange,\n renderItem,\n dir = 'ltr',\n previousLabel,\n nextLabel,\n firstLabel,\n lastLabel,\n ariaLabel,\n className,\n testID,\n children,\n } = props;\n\n const { t } = useTranslation();\n const colors = useThemeColors();\n const { width } = useWindowDimensions();\n\n const [internalPageSize, setInternalPageSize] = useState<number | undefined>(pageSizeProp);\n useEffect(() => {\n setInternalPageSize(pageSizeProp);\n }, [pageSizeProp]);\n const effectivePageSize = pageSizeProp ?? internalPageSize;\n\n const labels = useMemo<PaginationContextValue['labels']>(\n () => ({\n prev: previousLabel ?? t('pagination.previous', { defaultValue: 'Previous page' }),\n next: nextLabel ?? t('pagination.next', { defaultValue: 'Next page' }),\n first: firstLabel ?? t('pagination.first', { defaultValue: 'First page' }),\n last: lastLabel ?? t('pagination.last', { defaultValue: 'Last page' }),\n ellipsis: t('pagination.ellipsis', { defaultValue: 'More pages' }),\n currentPage: t('pagination.currentPage', { defaultValue: 'Current page' }),\n gotoPage: (n) => t('pagination.gotoPage', { page: n, defaultValue: `Go to page ${n}` }),\n rangeFmt: (from, to, total) =>\n t('pagination.range', {\n from,\n to,\n total,\n defaultValue: `Showing ${from}–${to} of ${total}`,\n }),\n pageOfFmt: (p, total) => t('pagination.pageOf', { page: p, total, defaultValue: `Page ${p} of ${total}` }),\n pageSize: t('pagination.pageSizeLabel', { defaultValue: 'Items per page' }),\n jumperLabel: t('pagination.jumperLabel', { defaultValue: 'Go to page' }),\n jumperPlaceholder: t('pagination.jumperPlaceholder', { defaultValue: '#' }),\n }),\n [t, previousLabel, nextLabel, firstLabel, lastLabel]\n );\n\n // Live-region message — debounced so rapid clicks don't spam SR.\n const [announcement, setAnnouncement] = useState('');\n const announceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => {\n return () => {\n if (announceTimer.current) {\n clearTimeout(announceTimer.current);\n }\n };\n }, []);\n\n const handlePageChange = useCallback(\n (next: number) => {\n onPageChange?.(next, effectivePageSize !== undefined ? { pageSize: effectivePageSize } : undefined);\n if (announceTimer.current) {\n clearTimeout(announceTimer.current);\n }\n announceTimer.current = setTimeout(() => {\n setAnnouncement(labels.pageOfFmt(next, Math.max(1, pageCount)));\n }, ANNOUNCE_DEBOUNCE_MS);\n },\n [onPageChange, effectivePageSize, labels, pageCount]\n );\n\n const setPageSize = useCallback(\n (next: number) => {\n if (pageSizeProp === undefined) {\n setInternalPageSize(next);\n }\n onPageChange?.(1, { pageSize: next });\n },\n [onPageChange, pageSizeProp]\n );\n\n const pagination = usePagination({\n ...(controlledPage !== undefined ? { page: controlledPage } : {}),\n defaultPage,\n pageCount,\n siblingCount,\n boundaryCount,\n showFirstLast,\n onPageChange: handlePageChange,\n });\n\n if (hideOnSinglePage && Math.max(1, pageCount) <= 1) {\n return null;\n }\n\n const ctxValue: PaginationContextValue = {\n page: pagination.page,\n pageCount: Math.max(1, pageCount),\n pageSize: effectivePageSize,\n itemCount,\n siblingCount,\n boundaryCount,\n showFirstLast,\n dir,\n labels,\n ...(renderItem ? { renderItem } : {}),\n goToPage: pagination.goToPage,\n setPageSize,\n };\n\n // Compound mode — caller supplies the layout. We still wrap children in\n // a flex-row that wraps on overflow so a long compound chain\n // (Items + Range + PageSize + Jumper) doesn't blow off the right edge\n // of a phone-width container.\n if (children !== undefined) {\n return (\n <PaginationContext.Provider value={ctxValue}>\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessibilityLabel={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessible\n className={cn('flex-row items-center flex-wrap', className)}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n flexWrap: 'wrap',\n rowGap: px(colors.spacing['2']),\n columnGap: px(colors.spacing['1']),\n direction: dir as ViewStyle['direction'],\n }}\n >\n {children}\n </View>\n <LiveRegion message={announcement} />\n </PaginationContext.Provider>\n );\n }\n\n // Shorthand mode — pick variant + render the items row.\n const isCompact =\n variant === 'compact' || (variant === 'auto' && width > 0 && width < PAGINATION_COMPACT_BREAKPOINT);\n\n const onItemPress = (item: PaginationItemDescriptor) => {\n if (item.disabled) {\n return;\n }\n switch (item.type) {\n case 'first':\n pagination.first();\n return;\n case 'prev':\n pagination.prev();\n return;\n case 'next':\n pagination.next();\n return;\n case 'last':\n pagination.last();\n return;\n case 'page':\n if (item.page !== undefined) {\n pagination.goToPage(item.page);\n }\n return;\n case 'ellipsis':\n return;\n }\n };\n\n const showRangeBlock = showRange && itemCount !== undefined && effectivePageSize !== undefined;\n\n return (\n <PaginationContext.Provider value={ctxValue}>\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessibilityLabel={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessible\n className={cn(isCompact ? 'flex-col items-stretch' : 'flex-row items-center flex-wrap', className)}\n style={{\n // Compact mode lays out as a column so the Range/PageSize\n // block falls below the controls instead of overflowing\n // a phone-width row. Numbered mode wraps on overflow.\n flexDirection: isCompact ? 'column' : 'row',\n alignItems: isCompact ? 'stretch' : 'center',\n flexWrap: isCompact ? 'nowrap' : 'wrap',\n rowGap: px(colors.spacing['2']),\n columnGap: px(colors.spacing['1']),\n direction: dir as ViewStyle['direction'],\n }}\n >\n {isCompact ? (\n <CompactView\n onPrev={pagination.prev}\n onNext={pagination.next}\n canPrev={pagination.canPrev}\n canNext={pagination.canNext}\n pageLabel={labels.pageOfFmt(pagination.page, Math.max(1, pageCount))}\n />\n ) : (\n <ItemsRenderer items={pagination.pages} onItemPress={onItemPress} />\n )}\n {showRangeBlock ? <PaginationRange /> : null}\n </View>\n <LiveRegion message={announcement} />\n </PaginationContext.Provider>\n );\n};\n\n// =============================================================================\n// Compound parts\n// =============================================================================\n\ntype CompoundButtonProps = {\n asChild?: boolean;\n children?: ReactNode;\n testID?: string;\n};\n\nconst CompoundActionButton = ({\n actionType,\n asChild,\n children,\n testID,\n}: CompoundButtonProps & { actionType: 'prev' | 'next' | 'first' | 'last' }) => {\n const ctx = usePaginationContext(`Pagination.${actionType[0]!.toUpperCase() + actionType.slice(1)}`);\n const disabled = actionType === 'prev' || actionType === 'first' ? ctx.page <= 1 : ctx.page >= ctx.pageCount;\n const onPress = () => {\n if (disabled) {\n return;\n }\n switch (actionType) {\n case 'first':\n ctx.goToPage(1);\n return;\n case 'prev':\n ctx.goToPage(ctx.page - 1);\n return;\n case 'next':\n ctx.goToPage(ctx.page + 1);\n return;\n case 'last':\n ctx.goToPage(ctx.pageCount);\n return;\n }\n };\n const ariaLabel =\n actionType === 'prev'\n ? ctx.labels.prev\n : actionType === 'next'\n ? ctx.labels.next\n : actionType === 'first'\n ? ctx.labels.first\n : ctx.labels.last;\n\n if (asChild) {\n return (\n <Slot\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n onPress={onPress}\n onClick={onPress as unknown as ComponentProps<'button'>['onClick']}\n >\n {children}\n </Slot>\n );\n }\n const fallbackGlyph =\n actionType === 'prev' ? '‹' : actionType === 'next' ? '›' : actionType === 'first' ? '«' : '»';\n return (\n <ItemButton\n type={actionType}\n selected={false}\n disabled={disabled}\n ariaLabel={ariaLabel}\n label={children ?? fallbackGlyph}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n />\n );\n};\n\nconst PaginationPrev: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'prev',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationNext: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'next',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationFirst: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'first',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationLast: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'last',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\n\nconst PaginationItem: FC<{ page: number; asChild?: boolean; children?: ReactNode; testID?: string }> = ({\n page,\n asChild,\n children,\n testID,\n}) => {\n const ctx = usePaginationContext('Pagination.Item');\n const selected = page === ctx.page;\n const onPress = () => ctx.goToPage(page);\n const ariaLabel = selected ? ctx.labels.currentPage : ctx.labels.gotoPage(page);\n\n if (asChild) {\n return (\n <Slot\n aria-label={ariaLabel}\n {...(selected ? { 'aria-current': 'page' as const } : {})}\n onPress={onPress}\n onClick={onPress as unknown as ComponentProps<'button'>['onClick']}\n >\n {children}\n </Slot>\n );\n }\n return (\n <ItemButton\n type=\"page\"\n page={page}\n selected={selected}\n disabled={false}\n ariaLabel={ariaLabel}\n {...(selected ? { ariaCurrent: 'page' as const } : {})}\n label={children ?? String(page)}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n />\n );\n};\n\nconst PaginationItems: FC<{ children?: ReactNode }> = ({ children }) => {\n const ctx = usePaginationContext('Pagination.Items');\n // Always run the hook so React's call order is stable across renders;\n // the result is discarded when explicit `children` were supplied.\n const result = usePagination({\n page: ctx.page,\n pageCount: ctx.pageCount,\n siblingCount: ctx.siblingCount,\n boundaryCount: ctx.boundaryCount,\n showFirstLast: false,\n showPrevNext: false,\n });\n if (children !== undefined) {\n return <>{children}</>;\n }\n return (\n <ItemsRenderer\n items={result.pages}\n onItemPress={(item) => {\n if (item.type === 'page' && item.page !== undefined) {\n ctx.goToPage(item.page);\n }\n }}\n />\n );\n};\n\nconst PaginationEllipsis: FC<{ children?: ReactNode }> = ({ children }) => {\n const ctx = usePaginationContext('Pagination.Ellipsis');\n return (\n <ItemButton\n type=\"ellipsis\"\n selected={false}\n disabled\n label={children ?? '…'}\n ariaLabel={ctx.labels.ellipsis}\n onPress={() => {}}\n />\n );\n};\n\nconst PaginationRange: FC = () => {\n const ctx = usePaginationContext('Pagination.Range');\n const colors = useThemeColors();\n if (ctx.itemCount === undefined || ctx.pageSize === undefined) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('<Pagination.Range> requires both `itemCount` and `pageSize` on <Pagination>.');\n }\n return null;\n }\n const from = (ctx.page - 1) * ctx.pageSize + 1;\n const to = Math.min(ctx.itemCount, ctx.page * ctx.pageSize);\n const message = ctx.labels.rangeFmt(from, to, ctx.itemCount);\n return (\n <RNText\n role=\"status\"\n aria-live=\"polite\"\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n fontVariant: ['tabular-nums'],\n paddingHorizontal: px(colors.spacing['2']),\n // Sits on the same baseline as the 32px buttons.\n lineHeight: px(colors.spacing['8']),\n }}\n >\n {message}\n </RNText>\n );\n};\n\nconst PaginationPageSize: FC<{ options: ReadonlyArray<number>; testID?: string }> = ({ options, testID }) => {\n const ctx = usePaginationContext('Pagination.PageSize');\n const colors = useThemeColors();\n const value = ctx.pageSize !== undefined ? String(ctx.pageSize) : '';\n const selectOptions = useMemo<SelectOption[]>(\n () => options.map((n) => ({ value: String(n), label: String(n) })),\n [options]\n );\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['2']),\n }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n }}\n >\n {ctx.labels.pageSize}\n </RNText>\n <Select\n {...(testID !== undefined ? { testID } : {})}\n aria-label={ctx.labels.pageSize}\n options={selectOptions}\n value={value}\n onChange={(v) => {\n const n = Number(v);\n if (Number.isFinite(n) && n > 0) {\n ctx.setPageSize(n);\n }\n }}\n />\n </View>\n );\n};\n\ntype PaginationJumperProps = {\n /** Show a separate visible \"Go to page\" label before the input. The aria-label is always set regardless. @defaultValue false */\n showLabel?: boolean;\n /** Override the visible label / accessible name. */\n label?: string;\n /** Override the input placeholder. @defaultValue the localized \"Go to\" hint */\n placeholder?: string;\n /** Width of the input in px. @defaultValue 56 */\n inputWidth?: number;\n testID?: string;\n};\n\n/**\n * Compact, purpose-built jumper. Built directly from RN's `TextInput`\n * primitive so we can render the exact 32px-tall borderless-then-focused\n * treatment that fits in a pagination row, instead of inheriting the full\n * form-field chrome (label, helper text, error slot) of `<TextInput>`.\n */\nconst PaginationJumper: FC<PaginationJumperProps> = ({\n showLabel = false,\n label,\n placeholder,\n inputWidth = 56,\n testID,\n}) => {\n const ctx = usePaginationContext('Pagination.Jumper');\n const colors = useThemeColors();\n const [draft, setDraft] = useState('');\n const [focused, setFocused] = useState(false);\n const [hovered, setHovered] = useState(false);\n const visibleLabel = label ?? ctx.labels.jumperLabel;\n const placeholderText = placeholder ?? ctx.labels.jumperPlaceholder;\n\n const submit = () => {\n const trimmed = draft.trim();\n if (trimmed === '') {\n return;\n }\n const n = Number(trimmed);\n if (!Number.isFinite(n) || n < 1) {\n setDraft('');\n return;\n }\n const clamped = Math.min(Math.max(1, Math.floor(n)), ctx.pageCount);\n ctx.goToPage(clamped);\n setDraft('');\n };\n\n const borderColor = focused\n ? colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.border.strong\n : colors.semantic.border.default;\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['2']),\n }}\n >\n {showLabel ? (\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n }}\n >\n {visibleLabel}\n </RNText>\n ) : null}\n <View\n // The wrapper carries the visual chrome so the bare TextInput\n // can stay completely unstyled — it's just text + caret.\n onPointerEnter={Platform.OS === 'web' ? () => setHovered(true) : undefined}\n onPointerLeave={Platform.OS === 'web' ? () => setHovered(false) : undefined}\n style={\n {\n width: inputWidth,\n height: px(colors.spacing['8']),\n borderWidth: 1,\n borderColor,\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.background.elevated,\n paddingHorizontal: px(colors.spacing['2']),\n justifyContent: 'center',\n // Web-only properties (silently dropped on native).\n ...(focused\n ? {\n boxShadow: `0 0 0 3px ${withAlpha(colors.semantic.interactive.primary, 0.15)}`,\n }\n : null),\n transitionProperty: 'border-color, box-shadow',\n transitionDuration: '120ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n } as unknown as ViewStyle\n }\n >\n <RNTextInput\n {...(testID !== undefined ? { testID } : {})}\n value={draft}\n onChangeText={setDraft}\n onSubmitEditing={submit}\n onBlur={() => {\n setFocused(false);\n submit();\n }}\n onFocus={() => setFocused(true)}\n keyboardType=\"number-pad\"\n inputMode=\"numeric\"\n placeholder={placeholderText}\n placeholderTextColor={colors.semantic.text.muted}\n aria-label={visibleLabel}\n accessibilityLabel={visibleLabel}\n returnKeyType=\"go\"\n selectTextOnFocus\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n fontVariant: ['tabular-nums'],\n textAlign: 'center',\n // Strip the browser's default outline — we draw our own\n // focus ring on the wrapper.\n ...(Platform.OS === 'web' ? ({ outline: 'none' } as object) : null),\n }}\n />\n </View>\n </View>\n );\n};\n\n/**\n * Apply an alpha channel to any of our token color strings (hex / rgb / hsl).\n * Cheap, zero-dep helper just for the focus glow.\n */\nfunction withAlpha(color: string, alpha: number): string {\n if (color.startsWith('#') && (color.length === 7 || color.length === 4)) {\n const expanded =\n color.length === 4 ? `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` : color;\n const r = Number.parseInt(expanded.slice(1, 3), 16);\n const g = Number.parseInt(expanded.slice(3, 5), 16);\n const b = Number.parseInt(expanded.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return color;\n}\n\nexport type { PaginationJumperProps };\n\n// =============================================================================\n// Public symbol — Pagination + compound parts\n// =============================================================================\n\nexport const Pagination = Object.assign(PaginationRoot, {\n Items: PaginationItems,\n Item: PaginationItem,\n Prev: PaginationPrev,\n Next: PaginationNext,\n First: PaginationFirst,\n Last: PaginationLast,\n Ellipsis: PaginationEllipsis,\n Range: PaginationRange,\n PageSize: PaginationPageSize,\n Jumper: PaginationJumper,\n});\n\n// Suppress unused — ReactElement / KeyboardEvent are reserved for future kbd-nav extension.\ntype _Unused = ReactElement | KeyboardEvent;\n"]}
1
+ {"version":3,"sources":["../../../src/i18n/default-dictionary.ts","../../../src/i18n/resolve.ts","../../../src/i18n/context.tsx","../../../src/i18n/use-translation.ts","../../../src/slot/compose-refs.ts","../../../src/slot/slot.tsx","../../../src/theme/px.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/utils/cn.ts","../../../src/icons/default-semantic-icons.tsx","../../../src/components/Select/Select.tsx","../../../src/components/Pagination/use-pagination.ts","../../../src/components/Pagination/Pagination.tsx"],"names":["createContext","useContext","forwardRef","Slot","isValidElement","Children","cloneElement","Platform","useState","Appearance","useEffect","isWeb","jsx","RNText","useId","useRef","useCallback","useMemo","id","useWindowDimensions","jsxs","View","Pressable","createPortal","Modal","ScrollView","next","Fragment","RNTextInput"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Dictionary } from './types';\n\n/**\n * Default English strings used by library components.\n *\n * Key naming convention:\n * <component>.<purpose>[_plural-form]\n *\n * Plural suffixes follow i18next: `_zero`, `_one`, `_two`, `_few`, `_many`, `_other`.\n * Interpolation uses `{{name}}` — double braces, no spaces, by convention.\n */\nexport const defaultDictionary: Dictionary = {\n // generic / shared\n 'common.cancel': 'Cancel',\n 'common.confirm': 'Confirm',\n 'common.close': 'Close',\n 'common.back': 'Back',\n 'common.loading': 'Loading',\n 'common.error': 'Something went wrong',\n 'common.retry': 'Try again',\n\n // breadcrumb\n 'breadcrumb.ariaLabel': 'Breadcrumb',\n 'breadcrumb.expandLabel': 'Show full path',\n 'breadcrumb.ellipsisLabel': 'More',\n 'breadcrumb.currentPageLabel': 'Current page',\n 'breadcrumb.siblingMenuLabel': 'Open sibling pages',\n\n // pagination\n 'pagination.ariaLabel': 'Pagination',\n 'pagination.previous': 'Previous page',\n 'pagination.next': 'Next page',\n 'pagination.first': 'First page',\n 'pagination.last': 'Last page',\n 'pagination.ellipsis': 'More pages',\n 'pagination.currentPage': 'Current page',\n 'pagination.gotoPage': 'Go to page {{page}}',\n 'pagination.range': 'Showing {{from}}–{{to}} of {{total}}',\n 'pagination.pageOf': 'Page {{page}} of {{total}}',\n 'pagination.pageSizeLabel': 'Items per page',\n 'pagination.jumperLabel': 'Go to page',\n 'pagination.jumperPlaceholder': '#',\n\n // floatButton\n 'floatButton.backToTop': 'Back to top',\n\n // calendar\n 'calendar.header.previous': 'Previous month',\n 'calendar.header.next': 'Next month',\n 'calendar.header.openMonthView': 'Open month picker',\n 'calendar.header.openYearView': 'Open year picker',\n 'calendar.header.openDayView': 'Open day picker',\n 'calendar.today': 'Today',\n 'calendar.clear': 'Clear',\n\n // button\n 'button.loadingLabel': 'Loading',\n\n // input\n 'input.clear': 'Clear',\n 'input.passwordShow': 'Show password',\n 'input.passwordHide': 'Hide password',\n\n // checkbox / switch\n 'checkbox.checked': 'Checked',\n 'checkbox.unchecked': 'Unchecked',\n 'switch.on': 'On',\n 'switch.off': 'Off',\n\n // field\n 'field.requiredIndicator': '*',\n 'field.requiredLabel': 'required',\n\n // table / dataTable\n 'table.empty': 'No data',\n};\n","import type { Dictionary, I18nInput, I18nOptions, TranslateFn } from './types';\n\n/**\n * Normalizes the consumer's i18n input (undefined | dictionary | function) into a\n * uniform TranslateFn. Internal code only calls the returned function.\n *\n * Precedence for a given key lookup:\n * 1. consumer function (if provided) — called verbatim, no further fallback\n * 2. consumer dictionary (if provided)\n * 3. library defaults\n * 4. options.defaultValue\n * 5. the key itself (so missing strings are visible in dev, not silent)\n */\nexport function resolveI18n(input: I18nInput, defaults: Dictionary): TranslateFn {\n if (typeof input === 'function') {\n // Wrap so the consumer fn is always invoked with (key, options) — enables\n // Jest `toHaveBeenCalledWith(key, undefined)` assertions and mirrors i18next's\n // own call signature exactly.\n return (keyOrKeys, options) => input(keyOrKeys, options);\n }\n\n const dict = input ?? {};\n\n return (keyOrKeys, options) => {\n const keys = Array.isArray(keyOrKeys) ? keyOrKeys : [keyOrKeys];\n for (const rawKey of keys) {\n const key = pluralize(rawKey, options?.count);\n const template = dict[key] ?? defaults[key];\n if (template !== undefined) {\n return interpolate(template, options);\n }\n }\n // exhausted the key list\n const lastKey = keys[keys.length - 1];\n if (options?.defaultValue !== undefined) {\n return interpolate(options.defaultValue, options);\n }\n return lastKey ?? '';\n };\n}\n\nfunction pluralize(key: string, count: number | undefined): string {\n if (count === undefined) {\n return key;\n }\n // Minimal English pluralization — extend with ICU rules later if needed.\n if (count === 1) {\n return `${key}_one`;\n }\n return `${key}_other`;\n}\n\nfunction interpolate(template: string, options: I18nOptions | undefined): string {\n if (!options) {\n return template;\n }\n return template.replace(/\\{\\{\\s*([A-Za-z0-9_.-]+)\\s*\\}\\}/g, (_match, name: string) => {\n const value = options[name];\n return value === undefined || value === null ? '' : String(value);\n });\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext, useMemo } from 'react';\nimport { defaultDictionary } from './default-dictionary';\nimport { resolveI18n } from './resolve';\nimport type { I18nInput, TranslateFn } from './types';\n\nexport type I18nContextValue = {\n t: TranslateFn;\n};\n\n// Default context value uses the built-in English dictionary; consumers without\n// a provider still get a working t().\nconst defaultValue: I18nContextValue = {\n t: resolveI18n(undefined, defaultDictionary),\n};\n\nexport const I18nContext = createContext<I18nContextValue>(defaultValue);\nI18nContext.displayName = 'I18nContext';\n\nexport type I18nProviderProps = {\n i18n?: I18nInput;\n children?: ReactNode;\n};\n\nexport function I18nProvider({ i18n, children }: I18nProviderProps) {\n const value = useMemo<I18nContextValue>(() => ({ t: resolveI18n(i18n, defaultDictionary) }), [i18n]);\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n","'use client';\n\nimport { useContext } from 'react';\nimport { I18nContext, type I18nContextValue } from './context';\n\nexport function useTranslation(): I18nContextValue {\n return useContext(I18nContext);\n}\n","// composeRefs — merges multiple React refs (callback or object) into a single callback.\n// Derived from Radix UI's approach; reimplemented here so we don't take a Radix dependency.\n\nimport type { MutableRefObject, Ref, RefCallback } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\nexport function composeRefs<T>(...refs: Array<PossibleRef<T>>): RefCallback<T> {\n return (node: T | null) => {\n for (const ref of refs) {\n if (ref == null) {\n continue;\n }\n if (typeof ref === 'function') {\n ref(node);\n } else {\n // React's MutableRefObject typing — we assign .current directly.\n (ref as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n","import type { CSSProperties, ReactElement, Ref } from 'react';\nimport { Children, cloneElement, forwardRef, isValidElement } from 'react';\nimport { composeRefs } from './compose-refs';\n\ntype AnyProps = Record<string, unknown>;\n\nexport type SlotProps = {\n children?: React.ReactNode;\n} & AnyProps;\n\nexport const Slot = forwardRef<unknown, SlotProps>(function Slot(props, forwardedRef) {\n const { children, ...slotProps } = props;\n\n if (!isValidElement(children)) {\n return null;\n }\n\n // Assert that children is a single React element with props — we've narrowed above.\n const child = Children.only(children) as ReactElement<AnyProps> & { ref?: Ref<unknown> };\n const merged = mergeProps(slotProps, child.props);\n\n // Merge refs: Slot's forwarded ref + the child's own ref (if any).\n const childRef = (child as unknown as { ref?: Ref<unknown> }).ref;\n if (forwardedRef || childRef) {\n (merged as AnyProps).ref = composeRefs(forwardedRef, childRef);\n }\n\n return cloneElement(child, merged);\n});\nSlot.displayName = 'Slot';\n\nfunction mergeProps(outer: AnyProps, inner: AnyProps): AnyProps {\n // Inner (child) wins for everything except: className (concatenated), style (merged), and\n // event handlers (composed — outer runs first, then inner).\n const merged: AnyProps = { ...outer };\n\n for (const key of Object.keys(inner)) {\n const outerValue = outer[key];\n const innerValue = inner[key];\n\n if (key === 'className' || key === 'class') {\n merged[key] = joinClass(outerValue, innerValue);\n continue;\n }\n\n if (key === 'style') {\n merged[key] = {\n ...(outerValue as CSSProperties | undefined),\n ...(innerValue as CSSProperties | undefined),\n };\n continue;\n }\n\n if (isEventHandler(key, outerValue, innerValue)) {\n merged[key] = composeHandlers(outerValue as Fn, innerValue as Fn);\n continue;\n }\n\n merged[key] = innerValue;\n }\n\n return merged;\n}\n\nfunction joinClass(outer: unknown, inner: unknown): string | undefined {\n const a = typeof outer === 'string' ? outer : '';\n const b = typeof inner === 'string' ? inner : '';\n const joined = [a, b].filter(Boolean).join(' ');\n return joined.length > 0 ? joined : undefined;\n}\n\ntype Fn = (...args: unknown[]) => unknown;\n\nfunction isEventHandler(key: string, outer: unknown, inner: unknown): boolean {\n if (!key.startsWith('on') || key.length < 3) {\n return false;\n }\n if (key[2] !== key[2]?.toUpperCase()) {\n return false;\n }\n return typeof outer === 'function' && typeof inner === 'function';\n}\n\nfunction composeHandlers(outer: Fn, inner: Fn): Fn {\n return (...args: unknown[]) => {\n outer(...args);\n inner(...args);\n };\n}\n","/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#fafafa\",\n elevated: \"#ffffff\",\n subtle: \"#f4f4f5\",\n },\n border: {\n default: \"#e4e4e7\",\n strong: \"#d4d4d8\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#0d9488\",\n primaryHover: \"#0f766e\",\n primaryPressed: \"#115e59\",\n },\n text: {\n default: \"#18181b\",\n inverted: \"#fafafa\",\n muted: \"#52525b\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n\n// Dark mode overrides\n// Generated for dark mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const themeDark = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#18181b\",\n elevated: \"#3f3f46\",\n subtle: \"#27272a\",\n },\n border: {\n default: \"#3f3f46\",\n strong: \"#52525b\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#2dd4bf\",\n primaryHover: \"#5eead4\",\n primaryPressed: \"#99f6e4\",\n },\n text: {\n default: \"#fafafa\",\n inverted: \"#18181b\",\n muted: \"#a1a1aa\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\n","'use client';\n\nimport { themeDark as defaultDark, theme as defaultLight, type Theme } from '@nori-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\n\n/**\n * A `NoriTheme` is a paired light/dark palette. The active half is picked\n * by `useColorScheme()` so the same theme object covers both schemes.\n *\n * Build one yourself by spreading the defaults and overriding the colors\n * you care about, or pick a preset from `@nori-ui/core/themes` (see the\n * Theming docs for examples).\n */\nexport type NoriTheme = {\n light: Theme;\n dark: Theme;\n};\n\n/**\n * Default Nori palette — teal primary on a warm-paper light surface, and\n * teal-400 primary on a deep-zinc dark surface. Mirrors the `theme` /\n * `themeDark` exports from @nori-ui/tokens.\n */\nexport const defaultTheme: NoriTheme = {\n light: defaultLight,\n dark: defaultDark as unknown as Theme,\n};\n\n// Context value is the FULL pair, not the active half. `useThemeColors`\n// (the hook components reach for) resolves it to the right one based on\n// the current color scheme. Storing the pair means a parent only has to\n// declare the theme once — switching scheme is a separate concern.\nexport const ThemeContext = createContext<NoriTheme>(defaultTheme);\nThemeContext.displayName = 'ThemeContext';\n\nexport type ThemeProviderProps = {\n /**\n * The theme to apply to descendants. Pass either:\n * - a full `NoriTheme` (`{ light, dark }`) — both schemes covered\n * - a single `Theme` — used for both light and dark (rare; mostly\n * useful when you ONLY ever render in one scheme)\n * - omit — falls back to the Nori default (teal palette)\n */\n theme?: NoriTheme | Theme;\n children?: ReactNode;\n};\n\nconst isFullTheme = (t: NoriTheme | Theme): t is NoriTheme => 'light' in t && 'dark' in t;\n\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const value: NoriTheme =\n theme === undefined ? defaultTheme : isFullTheme(theme) ? theme : { light: theme, dark: theme };\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n","'use client';\n\nimport { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\nimport { Appearance, Platform } from 'react-native';\n\nexport type ColorScheme = 'light' | 'dark';\n\n// Override channel so a parent can force a scheme (e.g. an app shell with\n// hard-coded dark chrome that wants nested components to render against\n// the dark token half regardless of the OS Appearance). `null` means\n// \"no override — use the system signal\".\nconst ColorSchemeOverrideContext = createContext<ColorScheme | null>(null);\nColorSchemeOverrideContext.displayName = 'ColorSchemeOverrideContext';\n\nexport type ColorSchemeProviderProps = {\n /** Force a specific scheme for descendants. */\n value: ColorScheme;\n children?: ReactNode;\n};\n\n/**\n * Forces a color scheme for all descendants. Useful when a screen's chrome\n * is hard-coded to one scheme (e.g. a forced-dark editorial surface) and\n * you want library components inside it to follow that, not the OS.\n */\nexport function ColorSchemeProvider({ value, children }: ColorSchemeProviderProps) {\n return <ColorSchemeOverrideContext.Provider value={value}>{children}</ColorSchemeOverrideContext.Provider>;\n}\n\nconst isWeb = Platform.OS === 'web';\n\n// Web: a document is \"in dark mode\" when the root <html> element carries\n// the `dark` class (Tailwind / Fumadocs convention) OR a `data-theme=\"dark\"`\n// attribute (matches the `darkMode` selectors in our Tailwind preset).\n// We deliberately don't fall back to `prefers-color-scheme` — the app\n// usually owns that decision and writes it onto <html>; tracking the system\n// preference too would fight the app's chosen value.\nfunction readWebScheme(): ColorScheme {\n if (typeof document === 'undefined') {\n return 'light';\n }\n const root = document.documentElement;\n if (root.classList.contains('dark')) {\n return 'dark';\n }\n if (root.getAttribute('data-theme') === 'dark') {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Returns the current color scheme — `'light'` or `'dark'`.\n *\n * On web: observes the root `<html>` element's `class=\"dark\"` and\n * `data-theme=\"dark\"` attribute (the same signals our Tailwind preset\n * keys on). Updates live as those flip.\n *\n * On native: delegates to `react-native`'s `Appearance` API so the hook\n * tracks the OS preference without extra wiring.\n *\n * Components consume this indirectly via `useThemeColors()`; reach for\n * this directly when you need the raw scheme (e.g. to swap an icon).\n */\nexport function useColorScheme(): ColorScheme {\n // A `<ColorSchemeProvider value=\"dark\">` ancestor (or NoriProvider's\n // `colorScheme` prop, which mounts one) wins over the OS signal — the\n // app shell knows which scheme its chrome is locked to.\n const override = useContext(ColorSchemeOverrideContext);\n\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (isWeb) {\n return readWebScheme();\n }\n return (Appearance.getColorScheme() ?? 'light') as ColorScheme;\n });\n\n useEffect(() => {\n if (isWeb) {\n const root = document.documentElement;\n const update = () => setScheme(readWebScheme());\n const observer = new MutationObserver(update);\n observer.observe(root, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n // Sync once after mount in case SSR shipped a different value.\n update();\n return () => observer.disconnect();\n }\n\n const sub = Appearance.addChangeListener(({ colorScheme }) => {\n setScheme((colorScheme ?? 'light') as ColorScheme);\n });\n return () => sub.remove();\n }, []);\n\n return override ?? scheme;\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport { useContext } from 'react';\nimport { ThemeContext } from './context';\nimport { useColorScheme } from './use-color-scheme';\n\n/**\n * Returns the active token palette — `theme.light` in light mode,\n * `theme.dark` in dark mode. Resolves the theme via `ThemeContext` so\n * any ancestor `<ThemeProvider theme={...}>` flows through. With no\n * provider in the tree, the default Nori palette (teal) is used.\n *\n * Use this **inside a component** when you need a hex value for a React\n * Native `style` prop (`backgroundColor`, `borderColor`, etc.).\n *\n * Note: className-based styles (e.g. `bg-semantic-interactive-primary`)\n * compile against the @nori-ui/tokens palette at build time and don't\n * follow `<ThemeProvider>` overrides today. Inline styles via this hook\n * always do — and inline beats class on CSS specificity, so the visible\n * color you see is whatever the hook resolves to. CSS-variable theming\n * for the className path is a planned follow-up.\n */\nexport function useThemeColors(): Theme {\n const scheme = useColorScheme();\n const themePair = useContext(ThemeContext);\n return scheme === 'dark' ? themePair.dark : themePair.light;\n}\n","// cn — class-name merger. clsx-compatible shape.\n//\n// Intentionally does NOT deduplicate Tailwind conflicts (e.g. \"text-sm text-lg\").\n// That's `tailwind-merge`'s job; we defer adding it until a component actually\n// needs it, to keep the core tree-shakable and the runtime zero-dep.\n\nexport type ClassInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | ClassInput[]\n | Record<string, boolean | number | null | undefined>;\n\nexport function cn(...inputs: ClassInput[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n append(out, input);\n }\n return out.join(' ');\n}\n\nfunction append(out: string[], input: ClassInput): void {\n if (!input) {\n return;\n }\n if (typeof input === 'string') {\n if (input.length > 0) {\n out.push(input);\n }\n return;\n }\n if (typeof input === 'number') {\n return; // numbers are never class names\n }\n if (Array.isArray(input)) {\n for (const inner of input) {\n append(out, inner);\n }\n return;\n }\n if (typeof input === 'object') {\n for (const key of Object.keys(input)) {\n if (input[key]) {\n out.push(key);\n }\n }\n }\n}\n","'use client';\n\n// default-semantic-icons — minimal built-in icon placeholders for internal\n// library glyphs. Consumers can swap each one via the provider:\n//\n// <NoriProvider icons={{ checkmark: MyCheck, close: MyX }}>\n//\n// These defaults exist so the library renders usable UI out of the box even\n// when lucide-react(-native) or any other icon set is not installed. They are\n// NOT intended to compete with Lucide on style — override them in production.\n//\n// Web ships an SVG path identical to the historical lucide-style stroke. Native\n// ships a Unicode glyph wrapped in `<Text>` because raw `<svg><path>` doesn't\n// exist on the React Native runtime — the renderer treats lowercase host names\n// as native components and crashes with \"View config getter callback for\n// component `path` must be a function\". `react-native-svg` would solve this\n// but it's an extra peer dep this library deliberately doesn't require.\n//\n// Marked `'use client'` because the native render path reads\n// `useThemeColors()` to default the glyph color to the active theme's\n// text token when no explicit color is passed. Without this the native\n// glyph would render in RNText's default (black) regardless of scheme.\n\nimport type { ComponentType } from 'react';\nimport { Platform, Text as RNText } from 'react-native';\nimport { useThemeColors } from '../theme/use-theme-colors';\nimport type { IconComponentProps } from './icon';\n\ntype SemanticIcon = ComponentType<IconComponentProps>;\n\ntype IconRecipe = {\n /** SVG `path` data — used on the web. */\n path: string;\n /** Unicode glyph rendered in `<Text>` on native. */\n glyph: string;\n};\n\nconst isWeb = Platform.OS === 'web';\n\nconst make = ({ path, glyph }: IconRecipe): SemanticIcon =>\n function PlaceholderIcon({ size = 20, color = 'currentColor' }) {\n // Always call the hook — rules-of-hooks. The native branch is the\n // only consumer of the resolved colors, but pulling them on web is\n // a cheap context read.\n const colors = useThemeColors();\n if (isWeb) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n }\n // 'currentColor' is a CSS keyword without meaning on native — RNText\n // would render in its inherent default (~black). Resolve it against\n // the active theme so the glyph stays readable in both schemes.\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.default : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {glyph}\n </RNText>\n );\n };\n\nexport type SemanticIcons = {\n checkmark: SemanticIcon;\n close: SemanticIcon;\n eye: SemanticIcon;\n eyeOff: SemanticIcon;\n chevronDown: SemanticIcon;\n chevronUp: SemanticIcon;\n alertTriangle: SemanticIcon;\n info: SemanticIcon;\n check: SemanticIcon;\n x: SemanticIcon;\n};\n\nexport const defaultSemanticIcons: SemanticIcons = {\n checkmark: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n close: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n eye: make({\n path: 'M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z',\n glyph: '👁',\n }),\n eyeOff: make({\n path: 'M17.94 17.94A10 10 0 0 1 2 12s3.5-7 10-7c2 0 3.8.6 5.4 1.5 M1 1l22 22',\n glyph: '🙈',\n }),\n chevronDown: make({ path: 'm6 9 6 6 6-6', glyph: '⌄' }),\n chevronUp: make({ path: 'm18 15-6-6-6 6', glyph: '⌃' }),\n alertTriangle: make({\n path: 'M12 9v4 M12 17h.01 M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z',\n glyph: '⚠',\n }),\n info: make({\n path: 'M12 8h.01 M11 12h1v4h1 M12 22C6.48 22 2 17.52 2 12 2 6.48 6.48 2 12 2c5.52 0 10 4.48 10 10 0 5.52-4.48 10-10 10z',\n glyph: 'ⓘ',\n }),\n check: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n x: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n};\n","'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","'use client';\n\nimport { useCallback, useMemo, useRef, useState } from 'react';\n\nexport type PaginationItemType = 'page' | 'prev' | 'next' | 'first' | 'last' | 'ellipsis';\n\n/**\n * One slot in the rendered pagination row, as produced by `usePagination`.\n * `page` is set on `'page'` items only; ellipsis carries no number.\n */\nexport type PaginationItemDescriptor = {\n type: PaginationItemType;\n page?: number;\n selected?: boolean;\n disabled?: boolean;\n};\n\nexport type UsePaginationArgs = {\n /** Controlled current page (1-indexed). Omit for uncontrolled. */\n page?: number;\n /** Initial page when uncontrolled (1-indexed). @defaultValue 1 */\n defaultPage?: number;\n /** Total number of pages. */\n pageCount: number;\n /** Pages on each side of the current page. @defaultValue 1 */\n siblingCount?: number;\n /** Pages always visible at start/end. @defaultValue 1 */\n boundaryCount?: number;\n /** Include first/last items in the `pages` list. @defaultValue false */\n showFirstLast?: boolean;\n /** Include prev/next items in the `pages` list. @defaultValue true */\n showPrevNext?: boolean;\n /** Fired on every page change. */\n onPageChange?: (page: number) => void;\n};\n\nexport type UsePaginationReturn = {\n /** Current page (1-indexed), clamped to [1, max(1, pageCount)]. */\n page: number;\n /** Item descriptors in render order. */\n pages: ReadonlyArray<PaginationItemDescriptor>;\n canPrev: boolean;\n canNext: boolean;\n goToPage: (page: number) => void;\n prev: () => void;\n next: () => void;\n first: () => void;\n last: () => void;\n};\n\nconst range = (from: number, to: number): number[] => {\n if (to < from) {\n return [];\n }\n const out = new Array<number>(to - from + 1);\n for (let i = 0; i < out.length; i += 1) {\n out[i] = from + i;\n }\n return out;\n};\n\n/**\n * Headless pagination math + state. Returns the items to render and the\n * actions that drive them — without a single DOM/RN element. Use this\n * directly for fully custom paginators, or let `<Pagination>` use it\n * internally.\n *\n * The math mirrors MUI's `usePagination` algorithm so its behavior is\n * predictable for anyone who has used the React ecosystem before.\n *\n * @example\n * const p = usePagination({ pageCount: 12, defaultPage: 3 });\n * p.pages.map((item) => …);\n */\nexport function usePagination(args: UsePaginationArgs): UsePaginationReturn {\n const {\n page: controlledPage,\n defaultPage = 1,\n pageCount,\n siblingCount = 1,\n boundaryCount = 1,\n showFirstLast = false,\n showPrevNext = true,\n onPageChange,\n } = args;\n\n const isControlled = controlledPage !== undefined;\n const [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);\n\n // Latest-callback ref so `goToPage` can stay referentially stable.\n const onChangeRef = useRef(onPageChange);\n onChangeRef.current = onPageChange;\n\n const safePageCount = Math.max(1, Math.floor(pageCount));\n const rawPage = isControlled ? (controlledPage as number) : uncontrolledPage;\n const currentPage = Math.min(Math.max(1, Math.floor(rawPage)), safePageCount);\n\n const goToPage = useCallback(\n (next: number) => {\n const clamped = Math.min(Math.max(1, Math.floor(next)), Math.max(1, Math.floor(pageCount)));\n if (!isControlled) {\n setUncontrolledPage(clamped);\n }\n onChangeRef.current?.(clamped);\n },\n [isControlled, pageCount]\n );\n\n const prev = useCallback(() => goToPage(currentPage - 1), [goToPage, currentPage]);\n const next = useCallback(() => goToPage(currentPage + 1), [goToPage, currentPage]);\n const first = useCallback(() => goToPage(1), [goToPage]);\n const last = useCallback(() => goToPage(safePageCount), [goToPage, safePageCount]);\n\n const pages = useMemo<ReadonlyArray<PaginationItemDescriptor>>(() => {\n const items: PaginationItemDescriptor[] = [];\n const safeSibling = Math.max(0, Math.floor(siblingCount));\n const safeBoundary = Math.max(0, Math.floor(boundaryCount));\n\n // First / Prev\n if (showFirstLast) {\n items.push({ type: 'first', disabled: currentPage <= 1 });\n }\n if (showPrevNext) {\n items.push({ type: 'prev', disabled: currentPage <= 1 });\n }\n\n // Page numbers + ellipses\n const startPages = range(1, Math.min(safeBoundary, safePageCount));\n const endPages = range(Math.max(safePageCount - safeBoundary + 1, safeBoundary + 1), safePageCount);\n\n const siblingsStart = Math.max(\n Math.min(currentPage - safeSibling, safePageCount - safeBoundary - safeSibling * 2 - 1),\n safeBoundary + 2\n );\n const siblingsEnd = Math.min(\n Math.max(currentPage + safeSibling, safeBoundary + safeSibling * 2 + 2),\n endPages.length > 0 ? endPages[0]! - 2 : safePageCount - 1\n );\n\n const middle: Array<number | 'ellipsis'> = [];\n // Start ellipsis\n if (siblingsStart > safeBoundary + 2) {\n middle.push('ellipsis');\n } else if (safeBoundary + 1 < safePageCount - safeBoundary) {\n middle.push(safeBoundary + 1);\n }\n // Middle pages\n for (const p of range(siblingsStart, siblingsEnd)) {\n middle.push(p);\n }\n // End ellipsis\n if (siblingsEnd < safePageCount - safeBoundary - 1) {\n middle.push('ellipsis');\n } else if (safePageCount - safeBoundary > safeBoundary) {\n middle.push(safePageCount - safeBoundary);\n }\n\n const seen = new Set<number>();\n const pushPage = (n: number) => {\n if (n < 1 || n > safePageCount || seen.has(n)) {\n return;\n }\n seen.add(n);\n items.push({ type: 'page', page: n, selected: n === currentPage });\n };\n\n for (const n of startPages) {\n pushPage(n);\n }\n for (const m of middle) {\n if (m === 'ellipsis') {\n items.push({ type: 'ellipsis' });\n } else {\n pushPage(m);\n }\n }\n for (const n of endPages) {\n pushPage(n);\n }\n\n // Next / Last\n if (showPrevNext) {\n items.push({ type: 'next', disabled: currentPage >= safePageCount });\n }\n if (showFirstLast) {\n items.push({ type: 'last', disabled: currentPage >= safePageCount });\n }\n\n return items;\n }, [currentPage, safePageCount, siblingCount, boundaryCount, showFirstLast, showPrevNext]);\n\n return {\n page: currentPage,\n pages,\n canPrev: currentPage > 1,\n canNext: currentPage < safePageCount,\n goToPage,\n prev,\n next,\n first,\n last,\n };\n}\n","'use client';\n\nimport {\n type ComponentProps,\n createContext,\n type FC,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, TextInput as RNTextInput, useWindowDimensions, View } from 'react-native';\nimport { useTranslation } from '../../i18n/use-translation';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Select, type SelectOption } from '../Select';\nimport { type PaginationItemDescriptor, type PaginationItemType, usePagination } from './use-pagination';\n\n// =============================================================================\n// Public types\n// =============================================================================\n\nexport { type UsePaginationArgs, type UsePaginationReturn, usePagination } from './use-pagination';\nexport type { PaginationItemDescriptor, PaginationItemType };\n\nexport type PaginationVariant = 'auto' | 'numbered' | 'compact';\n\nexport type PaginationRenderItemArgs = {\n type: PaginationItemType;\n page?: number;\n selected: boolean;\n disabled: boolean;\n ariaLabel: string;\n ariaCurrent?: 'page';\n children: ReactNode;\n onPress: () => void;\n};\n\nexport type PaginationOnPageChange = (page: number, meta?: { pageSize?: number }) => void;\n\nexport type PaginationProps = {\n /** Controlled current page (1-indexed). */\n page?: number;\n /** Initial page when uncontrolled (1-indexed). @defaultValue 1 */\n defaultPage?: number;\n /** Total number of pages. Required. */\n pageCount: number;\n /** Pages on each side of the current page. @defaultValue 1 */\n siblingCount?: number;\n /** Pages always visible at start/end. @defaultValue 1 */\n boundaryCount?: number;\n /** Show first/last buttons. @defaultValue false */\n showFirstLast?: boolean;\n /** Hide the entire component when `pageCount <= 1`. @defaultValue true */\n hideOnSinglePage?: boolean;\n /**\n * Force a UI variant. `auto` swaps to `compact` on viewports under\n * `PAGINATION_COMPACT_BREAKPOINT` px wide.\n * @defaultValue 'auto'\n */\n variant?: PaginationVariant;\n /** Render the \"Showing X–Y of Z\" range automatically. @defaultValue false */\n showRange?: boolean;\n /** Total item count — needed by `Pagination.Range` and `Pagination.PageSize`. */\n itemCount?: number;\n /** Items per page — needed by `Pagination.Range` and `Pagination.PageSize`. */\n pageSize?: number;\n /** Fired on every page (or page-size) change. */\n onPageChange?: PaginationOnPageChange;\n /** Render-prop slot for each item. Same signature on web + native. */\n renderItem?: (args: PaginationRenderItemArgs) => ReactNode;\n /** RTL override. @defaultValue 'ltr' */\n dir?: 'ltr' | 'rtl';\n /** Override individual labels (otherwise sourced from `useTranslation`). */\n previousLabel?: string;\n nextLabel?: string;\n firstLabel?: string;\n lastLabel?: string;\n /** Override the nav landmark label. */\n ariaLabel?: string;\n className?: string;\n testID?: string;\n /** Provide compound children to opt out of the items-array shorthand. */\n children?: ReactNode;\n};\n\n/** Viewport width below which `variant=\"auto\"` switches to `compact`. */\nexport const PAGINATION_COMPACT_BREAKPOINT = 480;\n\n// =============================================================================\n// Context (used by both compound parts and the shorthand's internal layout)\n// =============================================================================\n\ntype PaginationContextValue = {\n page: number;\n pageCount: number;\n pageSize: number | undefined;\n itemCount: number | undefined;\n siblingCount: number;\n boundaryCount: number;\n showFirstLast: boolean;\n dir: 'ltr' | 'rtl';\n labels: {\n prev: string;\n next: string;\n first: string;\n last: string;\n gotoPage: (page: number) => string;\n ellipsis: string;\n currentPage: string;\n rangeFmt: (from: number, to: number, total: number) => string;\n pageOfFmt: (page: number, total: number) => string;\n pageSize: string;\n jumperLabel: string;\n jumperPlaceholder: string;\n };\n renderItem?: (args: PaginationRenderItemArgs) => ReactNode;\n goToPage: (page: number) => void;\n setPageSize: (next: number) => void;\n};\n\nconst PaginationContext = createContext<PaginationContextValue | null>(null);\n\nconst usePaginationContext = (label: string): PaginationContextValue => {\n const ctx = useContext(PaginationContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Pagination> or <Pagination.Root>.`);\n }\n return ctx;\n};\n\n// =============================================================================\n// Default item button (used when `renderItem` is not provided)\n// =============================================================================\n\ntype ItemButtonProps = {\n type: PaginationItemType;\n page?: number;\n selected: boolean;\n disabled: boolean;\n ariaLabel: string;\n ariaCurrent?: 'page';\n label: ReactNode;\n onPress: () => void;\n testID?: string;\n};\n\nconst ItemButton = ({ type, selected, disabled, ariaLabel, ariaCurrent, label, onPress, testID }: ItemButtonProps) => {\n const colors = useThemeColors();\n const isChevron = type === 'prev' || type === 'next' || type === 'first' || type === 'last';\n const isInteractive = !disabled && type !== 'ellipsis';\n const size = px(colors.spacing['8']); // 32px — minimum touch target\n\n if (type === 'ellipsis') {\n // Ellipsis is presentational; no button chrome, no padding — just a\n // balanced spacer that keeps the row's rhythm intact.\n return (\n <View\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n minWidth: size,\n minHeight: size,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n // Optical adjust so the dots sit on the row baseline.\n marginTop: -2,\n letterSpacing: 1,\n }}\n >\n {label}\n </RNText>\n </View>\n );\n }\n\n // Pre-compute the static style so the Pressable's function form only has\n // to overlay press/hover deltas. This is more robust on native, where\n // some renderers were observed to drop properties from the function-form\n // result intermittently — especially the selected pill's `backgroundColor`,\n // producing white text on a white background.\n const baseStyle: ViewStyle = {\n minWidth: size,\n height: size,\n paddingHorizontal: px(colors.spacing['2']),\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: px(colors.radius.md),\n // Selected: filled pill in primary. Default: transparent. Press/hover\n // deltas overlay this in the style fn below.\n backgroundColor: selected ? colors.semantic.interactive.primary : 'transparent',\n // A 1px transparent border is reserved on every item so the layout\n // stays stable when the selected one shows its accent border.\n borderWidth: 1,\n borderColor: selected ? colors.semantic.interactive.primary : 'transparent',\n opacity: disabled ? 0.35 : 1,\n };\n\n // Web-only CSS transitions; merged into the static base on web.\n const webExtras =\n Platform.OS === 'web'\n ? ({\n transitionProperty: 'background-color, color, border-color',\n transitionDuration: '120ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n } as unknown as ViewStyle)\n : null;\n const staticStyle: ViewStyle = { ...baseStyle, ...(webExtras ?? {}) };\n\n return (\n <Pressable\n {...(testID !== undefined ? { testID } : {})}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={ariaLabel}\n aria-label={ariaLabel}\n {...(ariaCurrent ? { 'aria-current': ariaCurrent } : {})}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n onPress={isInteractive ? onPress : undefined}\n // Use a function form ONLY on web so Pressable can read `hovered`.\n // On native the function form was observed to occasionally drop\n // its returned style block on iOS — so we pass a plain object,\n // which renders reliably.\n style={\n Platform.OS === 'web'\n ? (state) => {\n const { pressed, hovered } = state as { pressed: boolean; hovered?: boolean };\n const interactive =\n !selected && (pressed || hovered)\n ? colors.semantic.background.subtle\n : staticStyle.backgroundColor;\n return { ...staticStyle, backgroundColor: interactive };\n }\n : staticStyle\n }\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: isChevron ? px(colors.fontSize.md) : px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.md),\n color: selected\n ? colors.semantic.text.inverted\n : disabled\n ? colors.semantic.text.muted\n : colors.semantic.text.default,\n fontWeight: selected ? (colors.fontWeight.semibold as '600') : (colors.fontWeight.medium as '500'),\n fontVariant: ['tabular-nums'],\n // Chevron glyphs sit a hair high in most fonts.\n marginTop: isChevron ? -1 : 0,\n }}\n >\n {label}\n </RNText>\n </Pressable>\n );\n};\n\n// =============================================================================\n// Live region for screen readers (web only — RN announces via accessibilityLiveRegion)\n// =============================================================================\n\nconst LiveRegion = ({ message }: { message: string }) => {\n if (Platform.OS === 'web') {\n return (\n <View\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n opacity: 0,\n }}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic\n >\n <RNText accessibilityLiveRegion=\"polite\">{message}</RNText>\n </View>\n );\n }\n return (\n <View accessibilityLiveRegion=\"polite\" style={{ width: 0, height: 0 }}>\n <RNText>{message}</RNText>\n </View>\n );\n};\n\n// =============================================================================\n// Items renderer (the shorthand UI)\n// =============================================================================\n\ntype ItemsRendererProps = {\n items: ReadonlyArray<PaginationItemDescriptor>;\n onItemPress: (item: PaginationItemDescriptor) => void;\n};\n\nconst ItemsRenderer = ({ items, onItemPress }: ItemsRendererProps) => {\n const { labels, renderItem, dir } = usePaginationContext('Pagination.Items');\n\n const elements = items.map((item, idx) => {\n const key = `${item.type}-${item.page ?? idx}-${idx}`;\n const ariaLabel = ariaLabelFor(item, labels);\n const ariaCurrent = item.selected ? ('page' as const) : undefined;\n const display = displayLabelFor(item, labels, dir);\n const onPress = () => onItemPress(item);\n\n if (renderItem && item.type !== 'ellipsis') {\n return (\n <View key={key}>\n {renderItem({\n type: item.type,\n ...(item.page !== undefined ? { page: item.page } : {}),\n selected: item.selected ?? false,\n disabled: item.disabled ?? false,\n ariaLabel,\n ...(ariaCurrent ? { ariaCurrent } : {}),\n children: display,\n onPress,\n })}\n </View>\n );\n }\n\n return (\n <ItemButton\n key={key}\n type={item.type}\n {...(item.page !== undefined ? { page: item.page } : {})}\n selected={item.selected ?? false}\n disabled={item.disabled ?? false}\n ariaLabel={ariaLabel}\n {...(ariaCurrent ? { ariaCurrent } : {})}\n label={display}\n onPress={onPress}\n />\n );\n });\n\n return <>{elements}</>;\n};\n\nfunction ariaLabelFor(item: PaginationItemDescriptor, labels: PaginationContextValue['labels']): string {\n switch (item.type) {\n case 'first':\n return labels.first;\n case 'prev':\n return labels.prev;\n case 'next':\n return labels.next;\n case 'last':\n return labels.last;\n case 'ellipsis':\n return labels.ellipsis;\n case 'page':\n return item.selected ? labels.currentPage : labels.gotoPage(item.page ?? 0);\n }\n}\n\nfunction displayLabelFor(\n item: PaginationItemDescriptor,\n labels: PaginationContextValue['labels'],\n dir: 'ltr' | 'rtl'\n): ReactNode {\n const flip = dir === 'rtl';\n switch (item.type) {\n case 'first':\n return flip ? '»' : '«';\n case 'last':\n return flip ? '«' : '»';\n case 'prev':\n return flip ? '›' : '‹';\n case 'next':\n return flip ? '‹' : '›';\n case 'ellipsis':\n return '…';\n case 'page':\n return String(item.page ?? '');\n }\n}\n\n// =============================================================================\n// Compact variant\n// =============================================================================\n\nconst CompactView = ({\n onPrev,\n onNext,\n canPrev,\n canNext,\n pageLabel,\n}: {\n onPrev: () => void;\n onNext: () => void;\n canPrev: boolean;\n canNext: boolean;\n pageLabel: string;\n}) => {\n const colors = useThemeColors();\n const { labels, dir } = usePaginationContext('Pagination(compact)');\n const flip = dir === 'rtl';\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: px(colors.spacing['1']),\n flexGrow: 1,\n }}\n >\n <ItemButton\n type=\"prev\"\n selected={false}\n disabled={!canPrev}\n ariaLabel={labels.prev}\n label={flip ? '›' : '‹'}\n onPress={onPrev}\n />\n <View\n style={{\n flexGrow: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: px(colors.spacing['3']),\n }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n fontWeight: colors.fontWeight.medium as '500',\n fontVariant: ['tabular-nums'],\n }}\n >\n {pageLabel}\n </RNText>\n </View>\n <ItemButton\n type=\"next\"\n selected={false}\n disabled={!canNext}\n ariaLabel={labels.next}\n label={flip ? '‹' : '›'}\n onPress={onNext}\n />\n </View>\n );\n};\n\n// =============================================================================\n// Root (the `<Pagination>` symbol — also serves as the shorthand)\n// =============================================================================\n\nconst ANNOUNCE_DEBOUNCE_MS = 150;\n\nconst PaginationRoot = (props: PaginationProps) => {\n const {\n page: controlledPage,\n defaultPage = 1,\n pageCount,\n siblingCount = 1,\n boundaryCount = 1,\n showFirstLast = false,\n hideOnSinglePage = true,\n variant = 'auto',\n showRange = false,\n itemCount,\n pageSize: pageSizeProp,\n onPageChange,\n renderItem,\n dir = 'ltr',\n previousLabel,\n nextLabel,\n firstLabel,\n lastLabel,\n ariaLabel,\n className,\n testID,\n children,\n } = props;\n\n const { t } = useTranslation();\n const colors = useThemeColors();\n const { width } = useWindowDimensions();\n\n const [internalPageSize, setInternalPageSize] = useState<number | undefined>(pageSizeProp);\n useEffect(() => {\n setInternalPageSize(pageSizeProp);\n }, [pageSizeProp]);\n const effectivePageSize = pageSizeProp ?? internalPageSize;\n\n const labels = useMemo<PaginationContextValue['labels']>(\n () => ({\n prev: previousLabel ?? t('pagination.previous', { defaultValue: 'Previous page' }),\n next: nextLabel ?? t('pagination.next', { defaultValue: 'Next page' }),\n first: firstLabel ?? t('pagination.first', { defaultValue: 'First page' }),\n last: lastLabel ?? t('pagination.last', { defaultValue: 'Last page' }),\n ellipsis: t('pagination.ellipsis', { defaultValue: 'More pages' }),\n currentPage: t('pagination.currentPage', { defaultValue: 'Current page' }),\n gotoPage: (n) => t('pagination.gotoPage', { page: n, defaultValue: `Go to page ${n}` }),\n rangeFmt: (from, to, total) =>\n t('pagination.range', {\n from,\n to,\n total,\n defaultValue: `Showing ${from}–${to} of ${total}`,\n }),\n pageOfFmt: (p, total) => t('pagination.pageOf', { page: p, total, defaultValue: `Page ${p} of ${total}` }),\n pageSize: t('pagination.pageSizeLabel', { defaultValue: 'Items per page' }),\n jumperLabel: t('pagination.jumperLabel', { defaultValue: 'Go to page' }),\n jumperPlaceholder: t('pagination.jumperPlaceholder', { defaultValue: '#' }),\n }),\n [t, previousLabel, nextLabel, firstLabel, lastLabel]\n );\n\n // Live-region message — debounced so rapid clicks don't spam SR.\n const [announcement, setAnnouncement] = useState('');\n const announceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => {\n return () => {\n if (announceTimer.current) {\n clearTimeout(announceTimer.current);\n }\n };\n }, []);\n\n const handlePageChange = useCallback(\n (next: number) => {\n onPageChange?.(next, effectivePageSize !== undefined ? { pageSize: effectivePageSize } : undefined);\n if (announceTimer.current) {\n clearTimeout(announceTimer.current);\n }\n announceTimer.current = setTimeout(() => {\n setAnnouncement(labels.pageOfFmt(next, Math.max(1, pageCount)));\n }, ANNOUNCE_DEBOUNCE_MS);\n },\n [onPageChange, effectivePageSize, labels, pageCount]\n );\n\n const setPageSize = useCallback(\n (next: number) => {\n if (pageSizeProp === undefined) {\n setInternalPageSize(next);\n }\n onPageChange?.(1, { pageSize: next });\n },\n [onPageChange, pageSizeProp]\n );\n\n const pagination = usePagination({\n ...(controlledPage !== undefined ? { page: controlledPage } : {}),\n defaultPage,\n pageCount,\n siblingCount,\n boundaryCount,\n showFirstLast,\n onPageChange: handlePageChange,\n });\n\n if (hideOnSinglePage && Math.max(1, pageCount) <= 1) {\n return null;\n }\n\n const ctxValue: PaginationContextValue = {\n page: pagination.page,\n pageCount: Math.max(1, pageCount),\n pageSize: effectivePageSize,\n itemCount,\n siblingCount,\n boundaryCount,\n showFirstLast,\n dir,\n labels,\n ...(renderItem ? { renderItem } : {}),\n goToPage: pagination.goToPage,\n setPageSize,\n };\n\n // Compound mode — caller supplies the layout. We still wrap children in\n // a flex-row that wraps on overflow so a long compound chain\n // (Items + Range + PageSize + Jumper) doesn't blow off the right edge\n // of a phone-width container.\n if (children !== undefined) {\n return (\n <PaginationContext.Provider value={ctxValue}>\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessibilityLabel={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessible\n className={cn('flex-row items-center flex-wrap', className)}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n flexWrap: 'wrap',\n rowGap: px(colors.spacing['2']),\n columnGap: px(colors.spacing['1']),\n direction: dir as ViewStyle['direction'],\n }}\n >\n {children}\n </View>\n <LiveRegion message={announcement} />\n </PaginationContext.Provider>\n );\n }\n\n // Shorthand mode — pick variant + render the items row.\n const isCompact =\n variant === 'compact' || (variant === 'auto' && width > 0 && width < PAGINATION_COMPACT_BREAKPOINT);\n\n const onItemPress = (item: PaginationItemDescriptor) => {\n if (item.disabled) {\n return;\n }\n switch (item.type) {\n case 'first':\n pagination.first();\n return;\n case 'prev':\n pagination.prev();\n return;\n case 'next':\n pagination.next();\n return;\n case 'last':\n pagination.last();\n return;\n case 'page':\n if (item.page !== undefined) {\n pagination.goToPage(item.page);\n }\n return;\n case 'ellipsis':\n return;\n }\n };\n\n const showRangeBlock = showRange && itemCount !== undefined && effectivePageSize !== undefined;\n\n return (\n <PaginationContext.Provider value={ctxValue}>\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessibilityLabel={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessible\n className={cn(isCompact ? 'flex-col items-stretch' : 'flex-row items-center flex-wrap', className)}\n style={{\n // Compact mode lays out as a column so the Range/PageSize\n // block falls below the controls instead of overflowing\n // a phone-width row. Numbered mode wraps on overflow.\n flexDirection: isCompact ? 'column' : 'row',\n alignItems: isCompact ? 'stretch' : 'center',\n flexWrap: isCompact ? 'nowrap' : 'wrap',\n rowGap: px(colors.spacing['2']),\n columnGap: px(colors.spacing['1']),\n direction: dir as ViewStyle['direction'],\n }}\n >\n {isCompact ? (\n <CompactView\n onPrev={pagination.prev}\n onNext={pagination.next}\n canPrev={pagination.canPrev}\n canNext={pagination.canNext}\n pageLabel={labels.pageOfFmt(pagination.page, Math.max(1, pageCount))}\n />\n ) : (\n <ItemsRenderer items={pagination.pages} onItemPress={onItemPress} />\n )}\n {showRangeBlock ? <PaginationRange /> : null}\n </View>\n <LiveRegion message={announcement} />\n </PaginationContext.Provider>\n );\n};\n\n// =============================================================================\n// Compound parts\n// =============================================================================\n\ntype CompoundButtonProps = {\n asChild?: boolean;\n children?: ReactNode;\n testID?: string;\n};\n\nconst CompoundActionButton = ({\n actionType,\n asChild,\n children,\n testID,\n}: CompoundButtonProps & { actionType: 'prev' | 'next' | 'first' | 'last' }) => {\n const ctx = usePaginationContext(`Pagination.${actionType[0]!.toUpperCase() + actionType.slice(1)}`);\n const disabled = actionType === 'prev' || actionType === 'first' ? ctx.page <= 1 : ctx.page >= ctx.pageCount;\n const onPress = () => {\n if (disabled) {\n return;\n }\n switch (actionType) {\n case 'first':\n ctx.goToPage(1);\n return;\n case 'prev':\n ctx.goToPage(ctx.page - 1);\n return;\n case 'next':\n ctx.goToPage(ctx.page + 1);\n return;\n case 'last':\n ctx.goToPage(ctx.pageCount);\n return;\n }\n };\n const ariaLabel =\n actionType === 'prev'\n ? ctx.labels.prev\n : actionType === 'next'\n ? ctx.labels.next\n : actionType === 'first'\n ? ctx.labels.first\n : ctx.labels.last;\n\n if (asChild) {\n return (\n <Slot\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n onPress={onPress}\n onClick={onPress as unknown as ComponentProps<'button'>['onClick']}\n >\n {children}\n </Slot>\n );\n }\n const fallbackGlyph =\n actionType === 'prev' ? '‹' : actionType === 'next' ? '›' : actionType === 'first' ? '«' : '»';\n return (\n <ItemButton\n type={actionType}\n selected={false}\n disabled={disabled}\n ariaLabel={ariaLabel}\n label={children ?? fallbackGlyph}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n />\n );\n};\n\nconst PaginationPrev: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'prev',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationNext: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'next',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationFirst: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'first',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationLast: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'last',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\n\nconst PaginationItem: FC<{ page: number; asChild?: boolean; children?: ReactNode; testID?: string }> = ({\n page,\n asChild,\n children,\n testID,\n}) => {\n const ctx = usePaginationContext('Pagination.Item');\n const selected = page === ctx.page;\n const onPress = () => ctx.goToPage(page);\n const ariaLabel = selected ? ctx.labels.currentPage : ctx.labels.gotoPage(page);\n\n if (asChild) {\n return (\n <Slot\n aria-label={ariaLabel}\n {...(selected ? { 'aria-current': 'page' as const } : {})}\n onPress={onPress}\n onClick={onPress as unknown as ComponentProps<'button'>['onClick']}\n >\n {children}\n </Slot>\n );\n }\n return (\n <ItemButton\n type=\"page\"\n page={page}\n selected={selected}\n disabled={false}\n ariaLabel={ariaLabel}\n {...(selected ? { ariaCurrent: 'page' as const } : {})}\n label={children ?? String(page)}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n />\n );\n};\n\nconst PaginationItems: FC<{ children?: ReactNode }> = ({ children }) => {\n const ctx = usePaginationContext('Pagination.Items');\n // Always run the hook so React's call order is stable across renders;\n // the result is discarded when explicit `children` were supplied.\n const result = usePagination({\n page: ctx.page,\n pageCount: ctx.pageCount,\n siblingCount: ctx.siblingCount,\n boundaryCount: ctx.boundaryCount,\n showFirstLast: false,\n showPrevNext: false,\n });\n if (children !== undefined) {\n return <>{children}</>;\n }\n return (\n <ItemsRenderer\n items={result.pages}\n onItemPress={(item) => {\n if (item.type === 'page' && item.page !== undefined) {\n ctx.goToPage(item.page);\n }\n }}\n />\n );\n};\n\nconst PaginationEllipsis: FC<{ children?: ReactNode }> = ({ children }) => {\n const ctx = usePaginationContext('Pagination.Ellipsis');\n return (\n <ItemButton\n type=\"ellipsis\"\n selected={false}\n disabled\n label={children ?? '…'}\n ariaLabel={ctx.labels.ellipsis}\n onPress={() => {}}\n />\n );\n};\n\nconst PaginationRange: FC = () => {\n const ctx = usePaginationContext('Pagination.Range');\n const colors = useThemeColors();\n if (ctx.itemCount === undefined || ctx.pageSize === undefined) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('<Pagination.Range> requires both `itemCount` and `pageSize` on <Pagination>.');\n }\n return null;\n }\n const from = (ctx.page - 1) * ctx.pageSize + 1;\n const to = Math.min(ctx.itemCount, ctx.page * ctx.pageSize);\n const message = ctx.labels.rangeFmt(from, to, ctx.itemCount);\n return (\n <RNText\n role=\"status\"\n aria-live=\"polite\"\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n fontVariant: ['tabular-nums'],\n paddingHorizontal: px(colors.spacing['2']),\n // Sits on the same baseline as the 32px buttons.\n lineHeight: px(colors.spacing['8']),\n }}\n >\n {message}\n </RNText>\n );\n};\n\nconst PaginationPageSize: FC<{ options: ReadonlyArray<number>; testID?: string }> = ({ options, testID }) => {\n const ctx = usePaginationContext('Pagination.PageSize');\n const colors = useThemeColors();\n const value = ctx.pageSize !== undefined ? String(ctx.pageSize) : '';\n const selectOptions = useMemo<SelectOption[]>(\n () => options.map((n) => ({ value: String(n), label: String(n) })),\n [options]\n );\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['2']),\n }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n }}\n >\n {ctx.labels.pageSize}\n </RNText>\n <Select\n {...(testID !== undefined ? { testID } : {})}\n aria-label={ctx.labels.pageSize}\n options={selectOptions}\n value={value}\n onChange={(v) => {\n const n = Number(v);\n if (Number.isFinite(n) && n > 0) {\n ctx.setPageSize(n);\n }\n }}\n />\n </View>\n );\n};\n\ntype PaginationJumperProps = {\n /** Show a separate visible \"Go to page\" label before the input. The aria-label is always set regardless. @defaultValue false */\n showLabel?: boolean;\n /** Override the visible label / accessible name. */\n label?: string;\n /** Override the input placeholder. @defaultValue the localized \"Go to\" hint */\n placeholder?: string;\n /** Width of the input in px. @defaultValue 56 */\n inputWidth?: number;\n testID?: string;\n};\n\n/**\n * Compact, purpose-built jumper. Built directly from RN's `TextInput`\n * primitive so we can render the exact 32px-tall borderless-then-focused\n * treatment that fits in a pagination row, instead of inheriting the full\n * form-field chrome (label, helper text, error slot) of `<TextInput>`.\n */\nconst PaginationJumper: FC<PaginationJumperProps> = ({\n showLabel = false,\n label,\n placeholder,\n inputWidth = 56,\n testID,\n}) => {\n const ctx = usePaginationContext('Pagination.Jumper');\n const colors = useThemeColors();\n const [draft, setDraft] = useState('');\n const [focused, setFocused] = useState(false);\n const [hovered, setHovered] = useState(false);\n const visibleLabel = label ?? ctx.labels.jumperLabel;\n const placeholderText = placeholder ?? ctx.labels.jumperPlaceholder;\n\n const submit = () => {\n const trimmed = draft.trim();\n if (trimmed === '') {\n return;\n }\n const n = Number(trimmed);\n if (!Number.isFinite(n) || n < 1) {\n setDraft('');\n return;\n }\n const clamped = Math.min(Math.max(1, Math.floor(n)), ctx.pageCount);\n ctx.goToPage(clamped);\n setDraft('');\n };\n\n const borderColor = focused\n ? colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.border.strong\n : colors.semantic.border.default;\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['2']),\n }}\n >\n {showLabel ? (\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n }}\n >\n {visibleLabel}\n </RNText>\n ) : null}\n <View\n // The wrapper carries the visual chrome so the bare TextInput\n // can stay completely unstyled — it's just text + caret.\n onPointerEnter={Platform.OS === 'web' ? () => setHovered(true) : undefined}\n onPointerLeave={Platform.OS === 'web' ? () => setHovered(false) : undefined}\n style={\n {\n width: inputWidth,\n height: px(colors.spacing['8']),\n borderWidth: 1,\n borderColor,\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.background.elevated,\n paddingHorizontal: px(colors.spacing['2']),\n justifyContent: 'center',\n // Web-only properties (silently dropped on native).\n ...(focused\n ? {\n boxShadow: `0 0 0 3px ${withAlpha(colors.semantic.interactive.primary, 0.15)}`,\n }\n : null),\n transitionProperty: 'border-color, box-shadow',\n transitionDuration: '120ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n } as unknown as ViewStyle\n }\n >\n <RNTextInput\n {...(testID !== undefined ? { testID } : {})}\n value={draft}\n onChangeText={setDraft}\n onSubmitEditing={submit}\n onBlur={() => {\n setFocused(false);\n submit();\n }}\n onFocus={() => setFocused(true)}\n keyboardType=\"number-pad\"\n inputMode=\"numeric\"\n placeholder={placeholderText}\n placeholderTextColor={colors.semantic.text.muted}\n aria-label={visibleLabel}\n accessibilityLabel={visibleLabel}\n returnKeyType=\"go\"\n selectTextOnFocus\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n fontVariant: ['tabular-nums'],\n textAlign: 'center',\n // Strip the browser's default outline — we draw our own\n // focus ring on the wrapper.\n ...(Platform.OS === 'web' ? ({ outline: 'none' } as object) : null),\n }}\n />\n </View>\n </View>\n );\n};\n\n/**\n * Apply an alpha channel to any of our token color strings (hex / rgb / hsl).\n * Cheap, zero-dep helper just for the focus glow.\n */\nfunction withAlpha(color: string, alpha: number): string {\n if (color.startsWith('#') && (color.length === 7 || color.length === 4)) {\n const expanded =\n color.length === 4 ? `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` : color;\n const r = Number.parseInt(expanded.slice(1, 3), 16);\n const g = Number.parseInt(expanded.slice(3, 5), 16);\n const b = Number.parseInt(expanded.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return color;\n}\n\nexport type { PaginationJumperProps };\n\n// =============================================================================\n// Public symbol — Pagination + compound parts\n// =============================================================================\n\nexport const Pagination = Object.assign(PaginationRoot, {\n Items: PaginationItems,\n Item: PaginationItem,\n Prev: PaginationPrev,\n Next: PaginationNext,\n First: PaginationFirst,\n Last: PaginationLast,\n Ellipsis: PaginationEllipsis,\n Range: PaginationRange,\n PageSize: PaginationPageSize,\n Jumper: PaginationJumper,\n});\n\n// Suppress unused — ReactElement / KeyboardEvent are reserved for future kbd-nav extension.\ntype _Unused = ReactElement | KeyboardEvent;\n"]}