@nori-ui/core 1.9.1 → 1.9.2
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.
- package/dist/{chunk-O6M3F7BZ.js → chunk-34TKMNID.js} +5 -5
- package/dist/{chunk-O6M3F7BZ.js.map → chunk-34TKMNID.js.map} +1 -1
- package/dist/{chunk-KLK7OMFT.js → chunk-35DVHUUE.js} +3 -3
- package/dist/{chunk-KLK7OMFT.js.map → chunk-35DVHUUE.js.map} +1 -1
- package/dist/{chunk-M4BI63P6.js → chunk-3FRCTNQH.js} +3 -3
- package/dist/{chunk-M4BI63P6.js.map → chunk-3FRCTNQH.js.map} +1 -1
- package/dist/{chunk-3CEJ5TB4.js → chunk-3H7LF45D.js} +4 -4
- package/dist/{chunk-3CEJ5TB4.js.map → chunk-3H7LF45D.js.map} +1 -1
- package/dist/{chunk-PJTCO76H.js → chunk-3KK2TXVY.js} +4 -4
- package/dist/{chunk-PJTCO76H.js.map → chunk-3KK2TXVY.js.map} +1 -1
- package/dist/{chunk-QB6RH6UU.js → chunk-3QQXYL5L.js} +4 -4
- package/dist/{chunk-QB6RH6UU.js.map → chunk-3QQXYL5L.js.map} +1 -1
- package/dist/{chunk-OELY6K44.js → chunk-3RNRVMNS.js} +3 -3
- package/dist/{chunk-OELY6K44.js.map → chunk-3RNRVMNS.js.map} +1 -1
- package/dist/{chunk-R5JMDDCB.js → chunk-3W2O4OBL.js} +4 -2
- package/dist/chunk-3W2O4OBL.js.map +1 -0
- package/dist/{chunk-MDOZGILD.js → chunk-4NBJW2JZ.js} +3 -3
- package/dist/{chunk-MDOZGILD.js.map → chunk-4NBJW2JZ.js.map} +1 -1
- package/dist/{chunk-ZGFXKYA5.js → chunk-57AVXG7D.js} +3 -3
- package/dist/{chunk-ZGFXKYA5.js.map → chunk-57AVXG7D.js.map} +1 -1
- package/dist/{chunk-HXCETKCC.js → chunk-7TESZOYQ.js} +3 -3
- package/dist/{chunk-HXCETKCC.js.map → chunk-7TESZOYQ.js.map} +1 -1
- package/dist/{chunk-TSWPHJIU.js → chunk-7UTQKMTE.js} +4 -4
- package/dist/{chunk-TSWPHJIU.js.map → chunk-7UTQKMTE.js.map} +1 -1
- package/dist/{chunk-U2ZKY2CP.js → chunk-AUNLIED3.js} +3 -3
- package/dist/{chunk-U2ZKY2CP.js.map → chunk-AUNLIED3.js.map} +1 -1
- package/dist/{chunk-J5LK2XHE.js → chunk-BBPKG3NI.js} +3 -3
- package/dist/{chunk-J5LK2XHE.js.map → chunk-BBPKG3NI.js.map} +1 -1
- package/dist/{chunk-IGBXSBF7.js → chunk-BCOXHHHC.js} +3 -3
- package/dist/{chunk-IGBXSBF7.js.map → chunk-BCOXHHHC.js.map} +1 -1
- package/dist/{chunk-L6VYDM7S.js → chunk-BJARVBFN.js} +3 -3
- package/dist/{chunk-L6VYDM7S.js.map → chunk-BJARVBFN.js.map} +1 -1
- package/dist/{chunk-BVLOX4A3.js → chunk-BJHMAGOQ.js} +3 -3
- package/dist/{chunk-BVLOX4A3.js.map → chunk-BJHMAGOQ.js.map} +1 -1
- package/dist/{chunk-VOF3S5I4.js → chunk-BOHLDAMY.js} +4 -4
- package/dist/{chunk-VOF3S5I4.js.map → chunk-BOHLDAMY.js.map} +1 -1
- package/dist/{chunk-3W3XYULK.js → chunk-C4HP2D46.js} +4 -4
- package/dist/{chunk-3W3XYULK.js.map → chunk-C4HP2D46.js.map} +1 -1
- package/dist/{chunk-C5HQPXRI.js → chunk-CMA3ZFCG.js} +4 -4
- package/dist/{chunk-C5HQPXRI.js.map → chunk-CMA3ZFCG.js.map} +1 -1
- package/dist/{chunk-EN4CLDGZ.js → chunk-D4J24WDF.js} +3 -3
- package/dist/{chunk-EN4CLDGZ.js.map → chunk-D4J24WDF.js.map} +1 -1
- package/dist/{chunk-MOAIQHR7.js → chunk-DJ3XX3CV.js} +3 -3
- package/dist/{chunk-MOAIQHR7.js.map → chunk-DJ3XX3CV.js.map} +1 -1
- package/dist/{chunk-IIVTPN62.js → chunk-DVO556JH.js} +3 -3
- package/dist/{chunk-IIVTPN62.js.map → chunk-DVO556JH.js.map} +1 -1
- package/dist/{chunk-2XJCLPNH.js → chunk-EC5TKCWA.js} +3 -3
- package/dist/{chunk-2XJCLPNH.js.map → chunk-EC5TKCWA.js.map} +1 -1
- package/dist/{chunk-VLZANXRZ.js → chunk-EMU3GXKM.js} +3 -3
- package/dist/{chunk-VLZANXRZ.js.map → chunk-EMU3GXKM.js.map} +1 -1
- package/dist/{chunk-F5UKI7XD.js → chunk-ENPBMEUW.js} +3 -3
- package/dist/{chunk-F5UKI7XD.js.map → chunk-ENPBMEUW.js.map} +1 -1
- package/dist/{chunk-V75O7QQO.js → chunk-FQDCPWLX.js} +3 -3
- package/dist/{chunk-V75O7QQO.js.map → chunk-FQDCPWLX.js.map} +1 -1
- package/dist/{chunk-3B345SQU.js → chunk-FRL5SLFT.js} +4 -4
- package/dist/{chunk-3B345SQU.js.map → chunk-FRL5SLFT.js.map} +1 -1
- package/dist/{chunk-5YHT252H.js → chunk-GTDDUPTE.js} +3 -3
- package/dist/{chunk-5YHT252H.js.map → chunk-GTDDUPTE.js.map} +1 -1
- package/dist/{chunk-OIHX5B4R.js → chunk-GYFX2I6B.js} +3 -3
- package/dist/{chunk-OIHX5B4R.js.map → chunk-GYFX2I6B.js.map} +1 -1
- package/dist/{chunk-PQW5LKAI.js → chunk-J2FSGJ2P.js} +3 -3
- package/dist/{chunk-PQW5LKAI.js.map → chunk-J2FSGJ2P.js.map} +1 -1
- package/dist/{chunk-C32XGHWO.js → chunk-KE2TP5XZ.js} +3 -3
- package/dist/{chunk-C32XGHWO.js.map → chunk-KE2TP5XZ.js.map} +1 -1
- package/dist/{chunk-USFXANEU.js → chunk-LWW3FJHF.js} +3 -3
- package/dist/{chunk-USFXANEU.js.map → chunk-LWW3FJHF.js.map} +1 -1
- package/dist/{chunk-3IIIHZHT.js → chunk-MQZXQOGY.js} +3 -3
- package/dist/{chunk-3IIIHZHT.js.map → chunk-MQZXQOGY.js.map} +1 -1
- package/dist/{chunk-BOMPFNM4.js → chunk-NSLVUCYP.js} +3 -3
- package/dist/{chunk-BOMPFNM4.js.map → chunk-NSLVUCYP.js.map} +1 -1
- package/dist/{chunk-7Z4NMNX6.js → chunk-O656K7OS.js} +3 -3
- package/dist/{chunk-7Z4NMNX6.js.map → chunk-O656K7OS.js.map} +1 -1
- package/dist/{chunk-S763GTIZ.js → chunk-PCUWBRNT.js} +3 -3
- package/dist/{chunk-S763GTIZ.js.map → chunk-PCUWBRNT.js.map} +1 -1
- package/dist/{chunk-MK57AOTI.js → chunk-QNYGQYAO.js} +5 -5
- package/dist/{chunk-MK57AOTI.js.map → chunk-QNYGQYAO.js.map} +1 -1
- package/dist/{chunk-UKDDK42K.js → chunk-QOVLTVJN.js} +3 -3
- package/dist/{chunk-UKDDK42K.js.map → chunk-QOVLTVJN.js.map} +1 -1
- package/dist/{chunk-PJXVLE24.js → chunk-QYA7HYFI.js} +5 -5
- package/dist/{chunk-PJXVLE24.js.map → chunk-QYA7HYFI.js.map} +1 -1
- package/dist/{chunk-SF6WPUC5.js → chunk-QZ6T4R44.js} +3 -3
- package/dist/{chunk-SF6WPUC5.js.map → chunk-QZ6T4R44.js.map} +1 -1
- package/dist/{chunk-7FSFJA33.js → chunk-SNGWMCZH.js} +3 -3
- package/dist/{chunk-7FSFJA33.js.map → chunk-SNGWMCZH.js.map} +1 -1
- package/dist/{chunk-XQNVWHMN.js → chunk-UHAI3QOA.js} +3 -3
- package/dist/{chunk-XQNVWHMN.js.map → chunk-UHAI3QOA.js.map} +1 -1
- package/dist/{chunk-OHWRTHGL.js → chunk-UHHW7GZ4.js} +4 -4
- package/dist/{chunk-OHWRTHGL.js.map → chunk-UHHW7GZ4.js.map} +1 -1
- package/dist/{chunk-PGYEIXCO.js → chunk-UKYSXWTI.js} +4 -4
- package/dist/{chunk-PGYEIXCO.js.map → chunk-UKYSXWTI.js.map} +1 -1
- package/dist/{chunk-IWM2XDXH.js → chunk-UPSNKESO.js} +3 -3
- package/dist/{chunk-IWM2XDXH.js.map → chunk-UPSNKESO.js.map} +1 -1
- package/dist/{chunk-BXZGCOKT.js → chunk-WEHUVESG.js} +4 -4
- package/dist/{chunk-BXZGCOKT.js.map → chunk-WEHUVESG.js.map} +1 -1
- package/dist/{chunk-ISCJST4P.js → chunk-WFR55YKL.js} +3 -3
- package/dist/{chunk-ISCJST4P.js.map → chunk-WFR55YKL.js.map} +1 -1
- package/dist/{chunk-MYBBBLYE.js → chunk-WKQUCDGP.js} +3 -3
- package/dist/{chunk-MYBBBLYE.js.map → chunk-WKQUCDGP.js.map} +1 -1
- package/dist/{chunk-STX5UKYT.js → chunk-XAXIQ55K.js} +3 -3
- package/dist/{chunk-STX5UKYT.js.map → chunk-XAXIQ55K.js.map} +1 -1
- package/dist/{chunk-H2LHWJ52.js → chunk-YHQFS4ZF.js} +4 -4
- package/dist/{chunk-H2LHWJ52.js.map → chunk-YHQFS4ZF.js.map} +1 -1
- package/dist/{chunk-VL2WNGPF.js → chunk-YUYYAMLE.js} +3 -3
- package/dist/{chunk-VL2WNGPF.js.map → chunk-YUYYAMLE.js.map} +1 -1
- package/dist/{chunk-CPIKN4BX.js → chunk-YYVL2FWF.js} +5 -5
- package/dist/{chunk-CPIKN4BX.js.map → chunk-YYVL2FWF.js.map} +1 -1
- package/dist/client.cjs +7 -5
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +56 -56
- package/dist/components/Accordion/index.cjs +2 -0
- package/dist/components/Accordion/index.cjs.map +1 -1
- package/dist/components/Accordion/index.js +3 -3
- package/dist/components/Alert/index.cjs +2 -0
- package/dist/components/Alert/index.cjs.map +1 -1
- package/dist/components/Alert/index.js +3 -3
- package/dist/components/AlertDialog/index.cjs +2 -0
- package/dist/components/AlertDialog/index.cjs.map +1 -1
- package/dist/components/AlertDialog/index.js +2 -2
- package/dist/components/Avatar/index.cjs +2 -0
- package/dist/components/Avatar/index.cjs.map +1 -1
- package/dist/components/Avatar/index.js +2 -2
- package/dist/components/Badge/index.cjs +2 -0
- package/dist/components/Badge/index.cjs.map +1 -1
- package/dist/components/Badge/index.js +2 -2
- package/dist/components/Box/index.cjs +2 -0
- package/dist/components/Box/index.cjs.map +1 -1
- package/dist/components/Box/index.js +4 -4
- package/dist/components/Breadcrumb/index.cjs +2 -0
- package/dist/components/Breadcrumb/index.cjs.map +1 -1
- package/dist/components/Breadcrumb/index.js +3 -3
- package/dist/components/Button/index.cjs +2 -0
- package/dist/components/Button/index.cjs.map +1 -1
- package/dist/components/Button/index.js +2 -2
- package/dist/components/Calendar/index.cjs +2 -0
- package/dist/components/Calendar/index.cjs.map +1 -1
- package/dist/components/Calendar/index.js +4 -4
- package/dist/components/Card/index.cjs +2 -0
- package/dist/components/Card/index.cjs.map +1 -1
- package/dist/components/Card/index.js +2 -2
- package/dist/components/Checkbox/index.cjs +2 -0
- package/dist/components/Checkbox/index.cjs.map +1 -1
- package/dist/components/Checkbox/index.js +3 -3
- package/dist/components/Collapsible/index.cjs +2 -0
- package/dist/components/Collapsible/index.cjs.map +1 -1
- package/dist/components/Collapsible/index.js +2 -2
- package/dist/components/Combobox/index.cjs +2 -0
- package/dist/components/Combobox/index.cjs.map +1 -1
- package/dist/components/Combobox/index.js +4 -4
- package/dist/components/Command/index.cjs +2 -0
- package/dist/components/Command/index.cjs.map +1 -1
- package/dist/components/Command/index.js +4 -4
- package/dist/components/ContextMenu/index.cjs +3 -1
- package/dist/components/ContextMenu/index.cjs.map +1 -1
- package/dist/components/ContextMenu/index.js +4 -4
- package/dist/components/DataTable/index.cjs +2 -0
- package/dist/components/DataTable/index.cjs.map +1 -1
- package/dist/components/DataTable/index.js +3 -3
- package/dist/components/DatePicker/index.cjs +2 -0
- package/dist/components/DatePicker/index.cjs.map +1 -1
- package/dist/components/DatePicker/index.js +6 -6
- package/dist/components/Dialog/index.cjs +2 -0
- package/dist/components/Dialog/index.cjs.map +1 -1
- package/dist/components/Dialog/index.js +3 -3
- package/dist/components/DropdownMenu/index.cjs +3 -1
- package/dist/components/DropdownMenu/index.cjs.map +1 -1
- package/dist/components/DropdownMenu/index.js +3 -3
- package/dist/components/Empty/index.cjs +2 -0
- package/dist/components/Empty/index.cjs.map +1 -1
- package/dist/components/Empty/index.js +2 -2
- package/dist/components/Field/index.cjs +4 -2
- package/dist/components/Field/index.cjs.map +1 -1
- package/dist/components/Field/index.js +2 -2
- package/dist/components/FloatButton/index.cjs +2 -0
- package/dist/components/FloatButton/index.cjs.map +1 -1
- package/dist/components/FloatButton/index.js +4 -4
- package/dist/components/HStack/index.cjs +2 -0
- package/dist/components/HStack/index.cjs.map +1 -1
- package/dist/components/HStack/index.js +4 -4
- package/dist/components/HoverCard/index.cjs +2 -0
- package/dist/components/HoverCard/index.cjs.map +1 -1
- package/dist/components/HoverCard/index.js +3 -3
- package/dist/components/InputGroup/index.cjs +3 -1
- package/dist/components/InputGroup/index.cjs.map +1 -1
- package/dist/components/InputGroup/index.js +2 -2
- package/dist/components/InputOTP/index.cjs +2 -0
- package/dist/components/InputOTP/index.cjs.map +1 -1
- package/dist/components/InputOTP/index.js +2 -2
- package/dist/components/Item/index.cjs +2 -0
- package/dist/components/Item/index.cjs.map +1 -1
- package/dist/components/Item/index.js +2 -2
- package/dist/components/Kbd/index.cjs +2 -0
- package/dist/components/Kbd/index.cjs.map +1 -1
- package/dist/components/Kbd/index.js +2 -2
- package/dist/components/Label/index.cjs +3 -1
- package/dist/components/Label/index.cjs.map +1 -1
- package/dist/components/Label/index.js +2 -2
- package/dist/components/Pagination/index.cjs +2 -0
- package/dist/components/Pagination/index.cjs.map +1 -1
- package/dist/components/Pagination/index.js +4 -4
- package/dist/components/Popover/index.cjs +2 -0
- package/dist/components/Popover/index.cjs.map +1 -1
- package/dist/components/Popover/index.js +2 -2
- package/dist/components/Progress/index.cjs +2 -0
- package/dist/components/Progress/index.cjs.map +1 -1
- package/dist/components/Progress/index.js +2 -2
- package/dist/components/Radio/index.cjs +2 -0
- package/dist/components/Radio/index.cjs.map +1 -1
- package/dist/components/Radio/index.js +2 -2
- package/dist/components/SegmentedControl/index.cjs +2 -0
- package/dist/components/SegmentedControl/index.cjs.map +1 -1
- package/dist/components/SegmentedControl/index.js +2 -2
- package/dist/components/Select/index.cjs +2 -0
- package/dist/components/Select/index.cjs.map +1 -1
- package/dist/components/Select/index.js +3 -3
- package/dist/components/Separator/index.cjs +2 -0
- package/dist/components/Separator/index.cjs.map +1 -1
- package/dist/components/Separator/index.js +2 -2
- package/dist/components/Sheet/index.cjs +2 -0
- package/dist/components/Sheet/index.cjs.map +1 -1
- package/dist/components/Sheet/index.js +2 -2
- package/dist/components/Sidebar/index.cjs +2 -0
- package/dist/components/Sidebar/index.cjs.map +1 -1
- package/dist/components/Sidebar/index.js +2 -2
- package/dist/components/Skeleton/index.cjs +2 -0
- package/dist/components/Skeleton/index.cjs.map +1 -1
- package/dist/components/Skeleton/index.js +2 -2
- package/dist/components/Slider/index.cjs +2 -0
- package/dist/components/Slider/index.cjs.map +1 -1
- package/dist/components/Slider/index.js +2 -2
- package/dist/components/Switch/index.cjs +2 -0
- package/dist/components/Switch/index.cjs.map +1 -1
- package/dist/components/Switch/index.js +2 -2
- package/dist/components/Table/index.cjs +2 -0
- package/dist/components/Table/index.cjs.map +1 -1
- package/dist/components/Table/index.js +2 -2
- package/dist/components/Tabs/index.cjs +2 -0
- package/dist/components/Tabs/index.cjs.map +1 -1
- package/dist/components/Tabs/index.js +2 -2
- package/dist/components/Text/index.cjs +2 -0
- package/dist/components/Text/index.cjs.map +1 -1
- package/dist/components/Text/index.js +2 -2
- package/dist/components/TextArea/index.cjs +2 -0
- package/dist/components/TextArea/index.cjs.map +1 -1
- package/dist/components/TextArea/index.js +3 -3
- package/dist/components/TextInput/index.cjs +2 -0
- package/dist/components/TextInput/index.cjs.map +1 -1
- package/dist/components/TextInput/index.js +2 -2
- package/dist/components/Toggle/index.cjs +2 -0
- package/dist/components/Toggle/index.cjs.map +1 -1
- package/dist/components/Toggle/index.js +2 -2
- package/dist/components/Tooltip/index.cjs +2 -0
- package/dist/components/Tooltip/index.cjs.map +1 -1
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/components/VStack/index.cjs +2 -0
- package/dist/components/VStack/index.cjs.map +1 -1
- package/dist/components/VStack/index.js +4 -4
- package/dist/icons/index.cjs +2 -0
- package/dist/icons/index.cjs.map +1 -1
- package/dist/icons/index.js +2 -2
- package/dist/index.cjs +7 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +53 -53
- package/dist/theme/index.cjs +2 -0
- package/dist/theme/index.cjs.map +1 -1
- package/dist/theme/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-R5JMDDCB.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/icons/default-semantic-icons.tsx","../../../src/theme/px.ts","../../../src/utils/cn.ts","../../../src/components/Select/Select.tsx"],"names":["createContext","Platform","useContext","useState","Appearance","useEffect","isWeb","jsx","RNText","useId","useRef","useCallback","useMemo","id","useWindowDimensions","jsxs","View","Pressable","createPortal","Modal","ScrollView"],"mappings":"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","file":"index.cjs","sourcesContent":["// 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","'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","/**\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","// 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\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type { NativeScrollEvent, NativeSyntheticEvent, ViewStyle } from 'react-native';\nimport { Modal, Platform, Pressable, Text as RNText, ScrollView, useWindowDimensions, View } from 'react-native';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type SelectOption<T = unknown> = {\n /** Unique value within the select. */\n value: string;\n /** Visible text. */\n label: string;\n /** Optional group label — items with the same `group` cluster together. */\n group?: string;\n disabled?: boolean;\n /** Arbitrary payload — surfaced to `renderOption` and `onChange`. */\n data?: T;\n};\n\nexport type LoadOptionsParams = {\n /** Current search input. */\n search: string;\n /** Number of items already loaded — start of the requested window. */\n offset: number;\n /** Page size requested. */\n limit: number;\n};\n\nexport type LoadOptionsResult<T = unknown> = {\n items: ReadonlyArray<SelectOption<T>>;\n /** Total available — the picker stops requesting when offset+items.length >= total. Optional; if omitted, requests stop when items.length < limit. */\n total?: number;\n};\n\nexport type SelectRenderOptionInfo = {\n /** This option matches the current value. */\n selected: boolean;\n /** This option is the keyboard focus target. */\n active: boolean;\n};\n\ntype SelectBaseProps<T = unknown> = {\n /** Static options. Mutually exclusive with `loadOptions`. */\n options?: ReadonlyArray<SelectOption<T>>;\n /**\n * Async loader. Called with `{ search, offset, limit }` whenever the\n * search input changes (debounced) or the user scrolls near the end of\n * the loaded list. Return more items + an optional total to stop the\n * pagination loop early.\n */\n loadOptions?: (params: LoadOptionsParams) => Promise<LoadOptionsResult<T>>;\n /** Page size for `loadOptions`. @defaultValue 50 */\n pageSize?: number;\n /** Show a search input above the list. @defaultValue auto-on for static options >= 10 items, always on for loadOptions */\n searchable?: boolean;\n /** Placeholder for the search input. */\n searchPlaceholder?: string;\n /** Override the default substring filter for static options. */\n filterOption?: (option: SelectOption<T>, search: string) => boolean;\n /** Custom item renderer. Called per option in the list. */\n renderOption?: (option: SelectOption<T>, info: SelectRenderOptionInfo) => ReactNode;\n /** Trigger placeholder when no value is selected. */\n placeholder?: string;\n /**\n * BCP 47 locale — drives `Intl.Collator` sorting of options when set.\n * Re-sorts on language switch so a German list reads alphabetically in\n * German vs the same list in English.\n */\n locale?: string;\n /** When `locale` is set, sort options alphabetically. @defaultValue true */\n sortByLocale?: boolean;\n /** Message shown in the popup when there are no matching options. */\n noOptionsMessage?: string;\n /** Message shown while async results are loading. */\n loadingMessage?: string;\n /** Disable interaction. */\n disabled?: boolean;\n /** RTL flips the popup alignment + text direction. */\n dir?: 'ltr' | 'rtl';\n /**\n * Virtualize the list — only DOM-render the visible window of items.\n * Auto-on when the list has more than 100 items.\n */\n virtualized?: boolean;\n /** Pixel height of a single item — required for virtualization math. @defaultValue 36 */\n itemHeight?: number;\n /** Max popup height in px. @defaultValue 320 */\n maxMenuHeight?: number;\n className?: string;\n testID?: string;\n id?: string;\n name?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n};\n\nexport type SelectSingleProps<T = unknown> = SelectBaseProps<T> & {\n /** Single-select mode (default — omit or pass `false`). */\n multiple?: false;\n /** Controlled value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n /** Fires when the user picks an option. */\n onChange?: (value: string, option: SelectOption<T> | undefined) => void;\n};\n\nexport type SelectMultiProps<T = unknown> = SelectBaseProps<T> & {\n /** Multi-select mode — value/onChange become array-typed. */\n multiple: true;\n /** Controlled values. */\n value?: ReadonlyArray<string>;\n /** Uncontrolled initial values. */\n defaultValue?: ReadonlyArray<string>;\n /** Fires when the selection changes. Receives the full new array of values + their resolved options. */\n onChange?: (values: ReadonlyArray<string>, options: ReadonlyArray<SelectOption<T>>) => void;\n /** Hard cap on selected count — extra picks are ignored. */\n maxSelected?: number;\n /** Max chips to render in the trigger before collapsing to \"N selected\". @defaultValue 3 */\n maxChips?: number;\n};\n\nexport type SelectProps<T = unknown> = SelectSingleProps<T> | SelectMultiProps<T>;\n\nconst DEFAULT_PAGE_SIZE = 50;\nconst DEFAULT_ITEM_HEIGHT = 36;\nconst DEFAULT_MAX_MENU = 320;\nconst SEARCH_DEBOUNCE_MS = 150;\nconst VIRTUAL_OVERSCAN = 4;\n// Reset window for the type-ahead buffer. Matches native <select> on macOS\n// closely enough that typing \"Sep\" lands on September even without a search\n// field. Shorter than the WAI-ARIA suggested 500ms feels jumpy on slow typists.\nconst TYPE_AHEAD_RESET_MS = 500;\n\nconst defaultFilter = <T,>(option: SelectOption<T>, search: string): boolean => {\n if (!search) {\n return true;\n }\n return option.label.toLowerCase().includes(search.toLowerCase());\n};\n\n/**\n * Searchable, async-capable, optionally virtualized select. Designed for the\n * \"I have 500 items behind a paginated API\" case as easily as the \"five\n * static items\" case.\n *\n * Modes:\n * - **Static** — pass `options`. The picker filters in-memory by a\n * substring match on `label` (override via `filterOption`).\n * - **Async** — pass `loadOptions(params)`. Called on search-input change\n * (debounced) and when the list scrolls near the bottom for the next\n * page. The picker manages the loaded list, so consumers don't have to.\n *\n * Other features:\n * - Custom item renderer via `renderOption`.\n * - i18n locale-aware sorting via `Intl.Collator` when `locale` is set —\n * re-sorts when the locale changes so a German list reads\n * alphabetically in German.\n * - OptGroup support — items with the same `group` field cluster in the\n * popup with a group header.\n * - Virtualized list when item count > 100 (or set `virtualized`\n * explicitly). Only the visible window is rendered.\n * - Keyboard navigation: ArrowDown / ArrowUp move the active option,\n * Home / End jump to the first / last, Enter selects, Escape closes,\n * Tab closes. Type-ahead works whether or not a search field is shown\n * (typing \"Sep\" lands on September; repeating a single char like\n * \"m\",\"m\" cycles through M-options).\n * - RTL alignment via `dir=\"rtl\"`.\n */\nexport const Select = <T = unknown>(props: SelectProps<T>) => {\n const {\n options: staticOptions,\n loadOptions,\n pageSize = DEFAULT_PAGE_SIZE,\n searchable: searchableProp,\n searchPlaceholder = 'Search…',\n filterOption,\n renderOption,\n placeholder = 'Select…',\n locale,\n sortByLocale = true,\n noOptionsMessage = 'No options',\n loadingMessage = 'Loading…',\n disabled = false,\n dir = 'ltr',\n virtualized: virtualizedProp,\n itemHeight = DEFAULT_ITEM_HEIGHT,\n maxMenuHeight = DEFAULT_MAX_MENU,\n className,\n testID,\n id,\n name,\n } = props;\n const ariaLabel = (props as { 'aria-label'?: string })['aria-label'];\n const ariaLabelledBy = (props as { 'aria-labelledby'?: string })['aria-labelledby'];\n const ariaDescribedBy = (props as { 'aria-describedby'?: string })['aria-describedby'];\n const ariaInvalid = (props as { 'aria-invalid'?: boolean })['aria-invalid'];\n const ariaRequired = (props as { 'aria-required'?: boolean })['aria-required'];\n const multiple = props.multiple === true;\n const maxSelected = multiple ? (props as SelectMultiProps<T>).maxSelected : undefined;\n const maxChips = multiple ? ((props as SelectMultiProps<T>).maxChips ?? 3) : undefined;\n\n const baseId = useId();\n const colors = useThemeColors();\n const [open, setOpen] = useState(false);\n\n // We always store values as a ReadonlyArray<string> internally so the\n // toggle / replace logic stays uniform; for single mode the array is\n // either empty or has exactly one element.\n const controlledValues: ReadonlyArray<string> | undefined = multiple\n ? (props.value as ReadonlyArray<string> | undefined)\n : props.value !== undefined\n ? [props.value as string]\n : undefined;\n const defaultValues: ReadonlyArray<string> = multiple\n ? (((props as SelectMultiProps<T>).defaultValue as ReadonlyArray<string> | undefined) ?? [])\n : (props as SelectSingleProps<T>).defaultValue !== undefined\n ? [(props as SelectSingleProps<T>).defaultValue as string]\n : [];\n const [innerValues, setInnerValues] = useState<ReadonlyArray<string>>(defaultValues);\n const isControlled = controlledValues !== undefined;\n const currentValues: ReadonlyArray<string> = isControlled\n ? (controlledValues as ReadonlyArray<string>)\n : innerValues;\n /** Single-mode legacy accessor — first selected value (or undefined). */\n const current: string | undefined = currentValues[0];\n\n const [searchInput, setSearchInput] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const [activeIndex, setActiveIndex] = useState(0);\n\n // Debounce the search input so loadOptions / filterOption don't fire on\n // every keystroke when the work is expensive.\n useEffect(() => {\n const t = setTimeout(() => setDebouncedSearch(searchInput), SEARCH_DEBOUNCE_MS);\n return () => clearTimeout(t);\n }, [searchInput]);\n\n // Async-mode internal cache of loaded options.\n const [asyncItems, setAsyncItems] = useState<SelectOption<T>[]>([]);\n const [asyncLoading, setAsyncLoading] = useState(false);\n const [asyncTotal, setAsyncTotal] = useState<number | undefined>(undefined);\n const asyncRequestId = useRef(0);\n\n const isAsync = loadOptions !== undefined;\n\n // When the search changes in async mode, reset the loaded list and\n // refetch from offset 0. The request id guards against stale resolution.\n useEffect(() => {\n if (!isAsync || !loadOptions || !open) {\n return;\n }\n const requestId = ++asyncRequestId.current;\n setAsyncLoading(true);\n setAsyncItems([]);\n setAsyncTotal(undefined);\n loadOptions({ search: debouncedSearch, offset: 0, limit: pageSize })\n .then((result) => {\n if (requestId !== asyncRequestId.current) {\n return;\n }\n setAsyncItems(result.items.slice());\n setAsyncTotal(result.total);\n })\n .catch(() => {\n // Swallow — consumers can wrap loadOptions to handle errors.\n })\n .finally(() => {\n if (requestId === asyncRequestId.current) {\n setAsyncLoading(false);\n }\n });\n }, [debouncedSearch, isAsync, loadOptions, pageSize, open]);\n\n // Helper to load the next page in async mode.\n const loadMore = useCallback(() => {\n if (!isAsync || !loadOptions || asyncLoading) {\n return;\n }\n const haveAll = asyncTotal !== undefined && asyncItems.length >= asyncTotal;\n if (haveAll) {\n return;\n }\n const requestId = ++asyncRequestId.current;\n setAsyncLoading(true);\n loadOptions({ search: debouncedSearch, offset: asyncItems.length, limit: pageSize })\n .then((result) => {\n if (requestId !== asyncRequestId.current) {\n return;\n }\n setAsyncItems((prev) => prev.concat(result.items));\n if (result.total !== undefined) {\n setAsyncTotal(result.total);\n }\n })\n .catch(() => undefined)\n .finally(() => {\n if (requestId === asyncRequestId.current) {\n setAsyncLoading(false);\n }\n });\n }, [asyncItems.length, asyncLoading, asyncTotal, debouncedSearch, isAsync, loadOptions, pageSize]);\n\n // Build the displayed option list — filter (static) or async items, then\n // optionally locale-sort.\n const visibleOptions = useMemo<SelectOption<T>[]>(() => {\n const source = isAsync ? asyncItems : (staticOptions ?? []);\n const filtered = isAsync\n ? source.slice() // async backend already handled search\n : source.filter((opt) => (filterOption ?? defaultFilter)(opt, debouncedSearch));\n if (locale && sortByLocale) {\n const collator = new Intl.Collator(locale, { sensitivity: 'base', numeric: true });\n // Group-aware sort: stable on group, then on label.\n return filtered.slice().sort((a, b) => {\n const ga = a.group ?? '';\n const gb = b.group ?? '';\n const groupDelta = collator.compare(ga, gb);\n if (groupDelta !== 0) {\n return groupDelta;\n }\n return collator.compare(a.label, b.label);\n });\n }\n return filtered;\n }, [isAsync, asyncItems, staticOptions, filterOption, debouncedSearch, locale, sortByLocale]);\n\n const selectedOption = useMemo(() => {\n const all = isAsync ? asyncItems : (staticOptions ?? []);\n return all.find((o) => o.value === current);\n }, [asyncItems, isAsync, staticOptions, current]);\n\n /** Multi-mode: resolved options for every currently-selected value, in selection order. */\n const selectedOptions = useMemo<ReadonlyArray<SelectOption<T>>>(() => {\n if (!multiple) {\n return [];\n }\n const all = isAsync ? asyncItems : (staticOptions ?? []);\n const map = new Map(all.map((o) => [o.value, o]));\n return currentValues.map((v) => map.get(v)).filter((o): o is SelectOption<T> => o !== undefined);\n }, [multiple, currentValues, asyncItems, isAsync, staticOptions]);\n\n const searchable = searchableProp ?? (isAsync || (staticOptions !== undefined && staticOptions.length >= 10));\n const virtualized = virtualizedProp ?? visibleOptions.length > 100;\n\n // Keep activeIndex in bounds.\n useEffect(() => {\n setActiveIndex((idx) => Math.min(Math.max(0, idx), Math.max(0, visibleOptions.length - 1)));\n }, [visibleOptions.length]);\n\n const onSelect = useCallback(\n (option: SelectOption<T>) => {\n if (option.disabled) {\n return;\n }\n if (multiple) {\n const has = currentValues.includes(option.value);\n let nextValues: string[];\n if (has) {\n nextValues = currentValues.filter((v) => v !== option.value);\n } else {\n if (maxSelected !== undefined && currentValues.length >= maxSelected) {\n return; // hit the cap\n }\n nextValues = [...currentValues, option.value];\n }\n if (!isControlled) {\n setInnerValues(nextValues);\n }\n // Resolve options for callback — preserves order of nextValues.\n const allOpts: ReadonlyArray<SelectOption<T>> = [\n ...(staticOptions ?? []),\n ...(asyncItems as ReadonlyArray<SelectOption<T>>),\n ];\n const optMap = new Map(allOpts.map((o) => [o.value, o]));\n const selectedOpts = nextValues\n .map((v) => optMap.get(v))\n .filter((o): o is SelectOption<T> => o !== undefined);\n (props as SelectMultiProps<T>).onChange?.(nextValues, selectedOpts);\n // Multi mode: keep the popup open, keep the search input — the\n // user is likely picking more than one in a row.\n return;\n }\n // Single mode — replace + close.\n if (!isControlled) {\n setInnerValues([option.value]);\n }\n (props as SelectSingleProps<T>).onChange?.(option.value, option);\n setOpen(false);\n setSearchInput('');\n },\n // biome-ignore lint/correctness/useExhaustiveDependencies: `props` is the discriminated union — destructuring it would defeat the narrowing; the asyncItems / staticOptions captures intentionally re-trigger the callback when the option pool changes\n [multiple, isControlled, currentValues, maxSelected, staticOptions, asyncItems, props]\n );\n\n /** Multi-mode helper to clear all selected values. */\n const clearAll = useCallback(() => {\n if (!isControlled) {\n setInnerValues([]);\n }\n (props as SelectMultiProps<T>).onChange?.([], []);\n // biome-ignore lint/correctness/useExhaustiveDependencies: same reason as above\n }, [isControlled, props]);\n\n const moveActive = useCallback(\n (delta: 1 | -1) => {\n setActiveIndex((idx) => {\n if (visibleOptions.length === 0) {\n return 0;\n }\n let next = (idx + delta + visibleOptions.length) % visibleOptions.length;\n // Skip disabled options.\n for (let attempts = 0; attempts < visibleOptions.length; attempts += 1) {\n if (!visibleOptions[next]?.disabled) {\n return next;\n }\n next = (next + delta + visibleOptions.length) % visibleOptions.length;\n }\n return idx;\n });\n },\n [visibleOptions]\n );\n\n // Type-ahead buffer — shared across the trigger (closed state) and the\n // popup container (open without search field). Mutable ref so we don't\n // re-render on every keystroke.\n const typeAheadRef = useRef<{ buffer: string; timer: ReturnType<typeof setTimeout> | null }>({\n buffer: '',\n timer: null,\n });\n useEffect(() => {\n // Clear any pending type-ahead timer on unmount so we don't leak it.\n return () => {\n if (typeAheadRef.current.timer) {\n clearTimeout(typeAheadRef.current.timer);\n typeAheadRef.current.timer = null;\n }\n };\n }, []);\n\n const handleTypeAhead = useCallback(\n (char: string) => {\n if (visibleOptions.length === 0) {\n return;\n }\n if (typeAheadRef.current.timer) {\n clearTimeout(typeAheadRef.current.timer);\n }\n const nextBuffer = typeAheadRef.current.buffer + char.toLowerCase();\n typeAheadRef.current.buffer = nextBuffer;\n typeAheadRef.current.timer = setTimeout(() => {\n typeAheadRef.current.buffer = '';\n typeAheadRef.current.timer = null;\n }, TYPE_AHEAD_RESET_MS);\n\n // Cycle mode: a single char OR repeated same char (e.g. \"aa\") cycles\n // through options whose label starts with that char, advancing past\n // the current activeIndex. Otherwise the buffer is treated as a\n // prefix and we search from the top — refining the match as the\n // user keeps typing (\"S\" → \"Se\" → \"Sep\" → September).\n const allSame = nextBuffer.length > 1 && nextBuffer.split('').every((c) => c === nextBuffer[0]);\n const cycleMode = nextBuffer.length === 1 || allSame;\n const needle = cycleMode ? nextBuffer.charAt(0) : nextBuffer;\n const len = visibleOptions.length;\n const startFrom = cycleMode ? (activeIndex + 1) % len : 0;\n for (let i = 0; i < len; i += 1) {\n const idx = (startFrom + i) % len;\n const opt = visibleOptions[idx];\n if (!opt || opt.disabled) {\n continue;\n }\n if (opt.label.toLowerCase().startsWith(needle)) {\n setActiveIndex(idx);\n return;\n }\n }\n },\n [visibleOptions, activeIndex]\n );\n\n // Shared list-navigation handler — used by the search input, the\n // popup container (when no search field is shown), and as the basis for\n // trigger handling. Returns true if the event was consumed so callers\n // can fall through to type-ahead handling for unhandled keys.\n const handleListKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>): boolean => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveActive(1);\n return true;\n case 'ArrowUp':\n event.preventDefault();\n moveActive(-1);\n return true;\n case 'Home': {\n event.preventDefault();\n const idx = visibleOptions.findIndex((o) => !o.disabled);\n if (idx >= 0) {\n setActiveIndex(idx);\n }\n return true;\n }\n case 'End': {\n event.preventDefault();\n for (let i = visibleOptions.length - 1; i >= 0; i -= 1) {\n if (!visibleOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n return true;\n }\n case 'Enter': {\n const opt = visibleOptions[activeIndex];\n if (opt) {\n event.preventDefault();\n onSelect(opt);\n }\n return true;\n }\n case 'Escape':\n event.preventDefault();\n setOpen(false);\n // Restore focus to the trigger so the next Tab keeps the\n // user inside the same widget instead of jumping to <body>.\n if (Platform.OS === 'web') {\n const trigger = triggerRef.current as unknown as { focus?: () => void } | null;\n trigger?.focus?.();\n }\n return true;\n case 'Tab':\n setOpen(false);\n return true;\n }\n return false;\n },\n [moveActive, activeIndex, visibleOptions, onSelect]\n );\n\n const handleSearchKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n handleListKeyDown(event);\n },\n [handleListKeyDown]\n );\n\n // Popup-container handler — only attached when there's no search input,\n // so we own type-ahead here. Falls through to the shared list handler\n // for arrow keys / Enter / Escape / Tab.\n const handlePopupKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (handleListKeyDown(event)) {\n return;\n }\n // Single printable character without modifiers → feed the\n // type-ahead buffer. Modifier-combos (Cmd-A, Ctrl-K) are left\n // alone so browser/OS shortcuts keep working.\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey && event.key !== ' ') {\n event.preventDefault();\n handleTypeAhead(event.key);\n }\n },\n [handleListKeyDown, handleTypeAhead]\n );\n\n const handleTriggerKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n switch (event.key) {\n case ' ':\n case 'Enter':\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n setOpen(true);\n return;\n }\n // Type-ahead on the closed trigger: open the popup and jump to\n // the matching option. Mirrors native <select> behaviour where\n // typing a letter while the control has focus changes the\n // highlighted choice without an explicit \"open\" gesture.\n if (!disabled && event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n event.preventDefault();\n setOpen(true);\n handleTypeAhead(event.key);\n }\n },\n [disabled, handleTypeAhead]\n );\n\n // Close when clicking outside (web only). The outside check considers\n // BOTH the container (trigger area) and the popup ref because the popup\n // portals out of the container's DOM subtree (position: fixed escapes\n // any overflow:hidden ancestor, but still belongs to the same logical\n // widget).\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const popupRef = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n if (\n Platform.OS !== 'web' ||\n typeof document === 'undefined' ||\n typeof document.addEventListener !== 'function'\n ) {\n return;\n }\n if (!open) {\n return;\n }\n const onDocClick = (event: MouseEvent) => {\n const node = containerRef.current;\n const popup = popupRef.current;\n const target = event.target as Node;\n if (node?.contains(target)) {\n return;\n }\n if (popup?.contains(target)) {\n return;\n }\n setOpen(false);\n };\n document.addEventListener('mousedown', onDocClick);\n return () => document.removeEventListener('mousedown', onDocClick);\n }, [open]);\n\n // Measure the trigger so the popup can render with `position: fixed` +\n // computed coords. position:fixed escapes any ancestor's overflow:hidden\n // (e.g. fumadocs Tabs panes, our Preview frame), which is the\n // single biggest source of \"the dropdown got cut off\" bugs.\n //\n // On native we ignore the web `position:fixed` path entirely and\n // measure via `View.measure(...)` to feed an RN `<Modal>` positioned\n // absolutely below the trigger.\n const [triggerRect, setTriggerRect] = useState<{ top: number; left: number; width: number; height: number } | null>(\n null\n );\n const measureTrigger = useCallback(() => {\n const node = triggerRef.current as unknown as {\n getBoundingClientRect?: () => DOMRect;\n measure?: (cb: (x: number, y: number, w: number, h: number, pageX: number, pageY: number) => void) => void;\n } | null;\n if (!node) {\n return;\n }\n if (Platform.OS === 'web' && typeof node.getBoundingClientRect === 'function') {\n const rect = node.getBoundingClientRect();\n setTriggerRect({ top: rect.top, left: rect.left, width: rect.width, height: rect.height });\n return;\n }\n // Native path — RN's measure() reports page-relative coords on the UI thread.\n if (typeof node.measure === 'function') {\n node.measure((_x, _y, w, h, pageX, pageY) => {\n setTriggerRect({ top: pageY, left: pageX, width: w, height: h });\n });\n }\n }, []);\n useEffect(() => {\n if (!open) {\n return;\n }\n // `window` is defined on RN's Hermes/JSC runtime but `addEventListener`\n // is web-only; gate on Platform.OS to avoid the runtime crash on native.\n if (Platform.OS !== 'web' || typeof window === 'undefined' || typeof window.addEventListener !== 'function') {\n return;\n }\n measureTrigger();\n window.addEventListener('scroll', measureTrigger, true);\n window.addEventListener('resize', measureTrigger);\n return () => {\n window.removeEventListener('scroll', measureTrigger, true);\n window.removeEventListener('resize', measureTrigger);\n };\n }, [open, measureTrigger]);\n\n // Auto-focus the popup container when it opens without a search field —\n // otherwise key events have nowhere to land and the user gets a popup\n // they can only operate with the mouse. With a search field, the input's\n // own auto-focus effect already handles this.\n useEffect(() => {\n if (!open || searchable || Platform.OS !== 'web') {\n return;\n }\n const id = requestAnimationFrame(() => {\n const node = popupRef.current as unknown as { focus?: () => void } | null;\n node?.focus?.();\n });\n return () => cancelAnimationFrame(id);\n }, [open, searchable]);\n\n // Scroll handler for async pagination. ScrollView's onScroll event shape\n // works across both react-native-web (HTMLDivElement under the hood) and\n // native (RCTScrollView), so we read offsets from `nativeEvent`.\n const onListScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (!isAsync) {\n return;\n }\n const { contentOffset, contentSize, layoutMeasurement } = event.nativeEvent;\n const remaining = contentSize.height - contentOffset.y - layoutMeasurement.height;\n if (remaining < itemHeight * 4) {\n loadMore();\n }\n },\n [isAsync, itemHeight, loadMore]\n );\n\n // ---------- visual styling ----------\n const triggerStyle: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n minHeight: 36, // component-density literal — not from theme\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.background.elevated,\n opacity: disabled ? 0.6 : 1,\n };\n\n // Web: position:fixed + computed coords from the trigger so the popup\n // can escape any ancestor with `overflow: hidden` (fumadocs Tabs, our\n // Preview frame, etc.). Width matches the trigger; widen to a 200px\n // floor for readability.\n //\n // Native: same coords, but on `position:'absolute'` inside the Modal —\n // RN doesn't have `position:'fixed'`, but Modal renders above all\n // content as a true overlay so absolute coords against the screen\n // window are correct.\n const winDims = useWindowDimensions();\n const popupStyle: ViewStyle = triggerRect\n ? {\n position: (Platform.OS === 'web' ? 'fixed' : 'absolute') as unknown as 'absolute',\n top: triggerRect.top + triggerRect.height + px(colors.spacing['1']),\n left: dir === 'rtl' ? undefined : triggerRect.left,\n right:\n dir === 'rtl'\n ? Platform.OS === 'web' && typeof window !== 'undefined'\n ? window.innerWidth - (triggerRect.left + triggerRect.width)\n : winDims.width - (triggerRect.left + triggerRect.width)\n : undefined,\n minWidth: Math.max(200, triggerRect.width),\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: px(colors.radius.lg),\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n // 2147483646 (max int32 - 1) so we sit above any third-party\n // chrome (toasts, modals, dev banners) without picking a fight\n // for the very top slot. Combined with portaling to body below,\n // this also dodges any ancestor stacking context that would\n // otherwise trap our z-index inside a sibling preview frame.\n zIndex: 2147483646,\n ...({ boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)' } as ViewStyle),\n }\n : {\n // Trigger not yet measured — render off-screen until the\n // first measurement lands. Avoids a one-frame flash at (0,0).\n position: (Platform.OS === 'web' ? 'fixed' : 'absolute') as unknown as 'absolute',\n top: -9999,\n left: -9999,\n };\n\n const containerProps: Record<string, unknown> = {\n ref: (node: HTMLDivElement | null) => {\n containerRef.current = node;\n },\n ...(testID !== undefined ? { testID } : {}),\n dir,\n };\n\n return (\n <View {...containerProps} className={cn('relative', className)} style={{ position: 'relative' }}>\n {/* RN's Pressable TS surface doesn't model onKeyDown / aria-haspopup; rn-web forwards them. Spread at the boundary. */}\n <Pressable\n ref={(node) => {\n triggerRef.current = node as unknown as HTMLElement | null;\n }}\n {...({\n onKeyDown: handleTriggerKeyDown,\n role: 'combobox',\n accessibilityRole: 'combobox',\n 'aria-expanded': open,\n 'aria-controls': `${baseId}-listbox`,\n 'aria-haspopup': 'listbox',\n tabIndex: disabled ? -1 : 0,\n ...(id !== undefined ? { id, nativeID: id } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(ariaLabel !== undefined ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n ...(ariaLabelledBy !== undefined\n ? { 'aria-labelledby': ariaLabelledBy, accessibilityLabelledBy: ariaLabelledBy }\n : {}),\n ...(ariaDescribedBy !== undefined\n ? { 'aria-describedby': ariaDescribedBy, accessibilityDescribedBy: ariaDescribedBy }\n : {}),\n ...(ariaInvalid === true ? { 'aria-invalid': true } : {}),\n ...(ariaRequired === true ? { 'aria-required': true } : {}),\n ...(disabled ? { 'aria-disabled': true, disabled: true } : {}),\n } as Record<string, unknown>)}\n onPress={() => {\n if (disabled) {\n return;\n }\n // Re-measure on every press so the popup picks up\n // post-scroll / rotation / keyboard-shifted positions.\n measureTrigger();\n setOpen((v) => !v);\n }}\n style={triggerStyle}\n >\n {multiple ? (\n <MultiTriggerLabel options={selectedOptions} placeholder={placeholder} maxChips={maxChips ?? 3} />\n ) : (\n <RNText\n style={{\n color: selectedOption ? colors.semantic.text.default : colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {selectedOption?.label ?? placeholder}\n </RNText>\n )}\n <defaultSemanticIcons.chevronDown size={16} color={colors.semantic.text.muted} />\n </Pressable>\n\n {open ? renderPopup() : null}\n </View>\n );\n\n // Local helper so we can portal to <body> on web. Why: even with\n // position:fixed, an ancestor with `transform`, `filter`, or `will-change`\n // creates a containing block that traps fixed positioning AND a stacking\n // context that traps z-index. The docs preview frames trip both. Portaling\n // to body removes all ambiguity — the popup is a top-level sibling of\n // <body>'s other children. On native, RN doesn't have a portal here, so\n // we render in place; native overflow is rarely a clipping problem\n // because RN doesn't have stacking-context-creating CSS properties.\n function renderPopup(): React.ReactNode {\n const popup = (\n <View\n ref={(node) => {\n popupRef.current = node as unknown as HTMLDivElement | null;\n }}\n {...({\n role: 'listbox',\n id: `${baseId}-listbox`,\n ...(multiple ? { 'aria-multiselectable': true } : {}),\n // Without a search field there's no input to capture\n // keystrokes — make the popup itself focusable and own\n // arrow / Enter / Escape / type-ahead. With a search\n // field these belong to the input below.\n ...(searchable ? {} : { tabIndex: -1, onKeyDown: handlePopupKeyDown }),\n } as Record<string, unknown>)}\n style={popupStyle}\n >\n {searchable ? (\n <SearchInput\n value={searchInput}\n onChange={setSearchInput}\n onKeyDown={handleSearchKeyDown}\n placeholder={searchPlaceholder}\n dir={dir}\n />\n ) : null}\n {multiple && currentValues.length > 0 ? (\n <MultiSelectionHeader count={currentValues.length} onClearAll={clearAll} />\n ) : null}\n <SelectList\n options={visibleOptions}\n activeIndex={activeIndex}\n currentValue={current}\n selectedValues={currentValues}\n multiple={multiple}\n onSelect={onSelect}\n onActiveChange={setActiveIndex}\n {...(renderOption !== undefined ? { renderOption } : {})}\n itemHeight={itemHeight}\n maxHeight={maxMenuHeight}\n virtualized={virtualized}\n loading={isAsync && asyncLoading}\n loadingMessage={loadingMessage}\n noOptionsMessage={noOptionsMessage}\n listboxId={`${baseId}-listbox`}\n onScroll={onListScroll}\n />\n </View>\n );\n if (Platform.OS === 'web' && typeof document !== 'undefined') {\n return createPortal(popup, document.body);\n }\n // Native: wrap in a transparent Modal so the popup renders above\n // all in-tree content (RN has no `position:'fixed'` and an\n // absolute child can't escape its parent's overflow). The\n // Modal's onRequestClose handles Android's hardware back button;\n // a transparent backdrop Pressable closes the popup on outside\n // tap (the equivalent of the document-mousedown handler on web).\n return (\n <Modal transparent visible animationType=\"fade\" onRequestClose={() => setOpen(false)} statusBarTranslucent>\n <Pressable\n onPress={() => setOpen(false)}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n }}\n />\n {popup}\n </Modal>\n );\n }\n};\n\n// ---------- search input (web-native input wrapped in a pressable container) ----------\n\ntype SearchInputProps = {\n value: string;\n onChange: (next: string) => void;\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => void;\n placeholder: string;\n dir: 'ltr' | 'rtl';\n};\n\nconst SearchInput = ({ value, onChange, onKeyDown, placeholder, dir }: SearchInputProps) => {\n const colors = useThemeColors();\n const inputRef = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n // Auto-focus when the popup opens so the user can start typing.\n inputRef.current?.focus?.();\n }, []);\n return (\n <View\n style={{\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: px(colors.spacing['2']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n dir={dir}\n aria-label=\"Search options\"\n style={{\n width: '100%',\n // Inline `padding: '6px 8px'` shorthand intentionally kept as a\n // string for the native HTML <input> — it's not an RN style prop.\n padding: `${px(colors.spacing['2']) - 2}px ${px(colors.spacing['2'])}px`,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n backgroundColor: colors.semantic.background.elevated,\n border: `1px solid ${colors.semantic.border.default}`,\n borderRadius: px(colors.radius.sm),\n outline: 'none',\n }}\n />\n </View>\n );\n};\n\n// ---------- list (with optional virtualization + group headers) ----------\n\ntype SelectListProps<T> = {\n options: ReadonlyArray<SelectOption<T>>;\n activeIndex: number;\n currentValue: string | undefined;\n selectedValues: ReadonlyArray<string>;\n multiple: boolean;\n onSelect: (option: SelectOption<T>) => void;\n onActiveChange: (index: number) => void;\n renderOption?: (option: SelectOption<T>, info: SelectRenderOptionInfo) => ReactNode;\n itemHeight: number;\n maxHeight: number;\n virtualized: boolean;\n loading: boolean;\n loadingMessage: string;\n noOptionsMessage: string;\n listboxId: string;\n onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n};\n\nconst SelectList = <T,>({\n options,\n activeIndex,\n currentValue,\n selectedValues,\n multiple,\n onSelect,\n onActiveChange,\n renderOption,\n itemHeight,\n maxHeight,\n virtualized,\n loading,\n loadingMessage,\n noOptionsMessage,\n listboxId,\n onScroll,\n}: SelectListProps<T>) => {\n const colors = useThemeColors();\n const [scrollTop, setScrollTop] = useState(0);\n\n const totalHeight = options.length * itemHeight;\n const visibleStart = virtualized ? Math.max(0, Math.floor(scrollTop / itemHeight) - VIRTUAL_OVERSCAN) : 0;\n const visibleEnd = virtualized\n ? Math.min(options.length, Math.ceil((scrollTop + maxHeight) / itemHeight) + VIRTUAL_OVERSCAN)\n : options.length;\n\n const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (virtualized) {\n setScrollTop(event.nativeEvent.contentOffset.y);\n }\n onScroll(event);\n };\n\n if (loading && options.length === 0) {\n return (\n <View style={{ padding: px(colors.spacing['4']), alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {loadingMessage}\n </RNText>\n </View>\n );\n }\n if (options.length === 0) {\n return (\n <View style={{ padding: px(colors.spacing['4']), alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {noOptionsMessage}\n </RNText>\n </View>\n );\n }\n\n // Group headers: when consecutive options change `group`, insert a header.\n // For virtualized mode we still respect groups by including any header\n // that precedes the visible window's first item.\n const items: ReactNode[] = [];\n let lastGroup: string | undefined;\n for (let i = visibleStart; i < visibleEnd; i += 1) {\n const opt = options[i];\n if (!opt) {\n continue;\n }\n if (opt.group !== lastGroup && opt.group !== undefined) {\n items.push(\n <View\n // biome-ignore lint/suspicious/noArrayIndexKey: group header position is stable for current visible window\n key={`grp-${i}-${opt.group}`}\n style={{\n paddingHorizontal: px(colors.spacing['3']),\n paddingTop: px(colors.spacing['2']),\n paddingBottom: px(colors.spacing['1']),\n position: virtualized ? 'absolute' : 'relative',\n top: virtualized ? i * itemHeight - px(colors.spacing['4']) : undefined,\n left: 0,\n right: 0,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: 11, // group header — component-density literal — not from theme (smaller than xs)\n fontWeight: colors.fontWeight.semibold as '600',\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n }}\n >\n {opt.group}\n </RNText>\n </View>\n );\n lastGroup = opt.group;\n }\n const selected = multiple ? selectedValues.includes(opt.value) : opt.value === currentValue;\n const active = i === activeIndex;\n const itemNode = renderOption ? (\n renderOption(opt, { selected, active })\n ) : (\n <DefaultOptionRow option={opt} selected={selected} active={active} multiple={multiple} />\n );\n items.push(\n <Pressable\n // biome-ignore lint/suspicious/noArrayIndexKey: option position is stable in the visible window\n key={`opt-${i}-${opt.value}`}\n {...({\n role: 'option',\n accessibilityRole: 'none',\n 'aria-selected': selected,\n onMouseEnter: () => onActiveChange(i),\n ...(opt.disabled ? { 'aria-disabled': true, disabled: true } : {}),\n } as Record<string, unknown>)}\n onPress={() => onSelect(opt)}\n style={{\n position: virtualized ? 'absolute' : 'relative',\n top: virtualized ? i * itemHeight : undefined,\n left: 0,\n right: 0,\n height: itemHeight,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: px(colors.spacing['3']),\n backgroundColor: active ? colors.semantic.background.subtle : 'transparent',\n opacity: opt.disabled ? 0.5 : 1,\n }}\n >\n {itemNode}\n </Pressable>\n );\n }\n\n // ScrollView is the cross-platform container — react-native-web emits\n // scroll events with the same `nativeEvent.contentOffset` shape as\n // native, so the handler is identical on both. Web also gets the\n // `nativeID` prop mapped to the underlying div's `id` for a11y.\n return (\n <ScrollView\n nativeID={listboxId}\n onScroll={handleScroll}\n scrollEventThrottle={16}\n style={{ maxHeight }}\n contentContainerStyle={virtualized ? { height: totalHeight, position: 'relative' } : undefined}\n >\n {items}\n </ScrollView>\n );\n};\n\nconst DefaultOptionRow = <T,>({\n option,\n selected,\n active,\n multiple = false,\n}: {\n option: SelectOption<T>;\n selected: boolean;\n active: boolean;\n multiple?: boolean;\n}) => {\n const colors = useThemeColors();\n return (\n <View style={{ flexDirection: 'row', alignItems: 'center', flex: 1, gap: px(colors.spacing['2']) }}>\n {multiple ? (\n // Inline checkbox-style indicator. We don't reuse <Checkbox>\n // here because the row is already a Pressable — nesting two\n // pressable surfaces breaks tap handling on native; this\n // is purely visual (the Pressable parent owns the toggle).\n <View\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n width: 18,\n height: 18,\n borderWidth: 1,\n borderRadius: px(colors.radius.sm),\n borderColor: selected ? colors.semantic.interactive.primary : colors.semantic.border.strong,\n backgroundColor: selected ? colors.semantic.interactive.primary : 'transparent',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {selected ? <defaultSemanticIcons.check size={12} color={colors.semantic.text.inverted} /> : null}\n </View>\n ) : null}\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: selected ? (colors.fontWeight.semibold as '600') : (colors.fontWeight.regular as '400'),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {option.label}\n </RNText>\n {selected && !multiple ? (\n <defaultSemanticIcons.check size={16} color={colors.semantic.interactive.primary} />\n ) : null}\n {/* keep `active` referenced — it's part of the public API consumers see via renderOption */}\n {active ? null : null}\n </View>\n );\n};\n\n// ---------- multi-select trigger label (chips with overflow) ----------\n\nconst MultiTriggerLabel = <T,>({\n options,\n placeholder,\n maxChips,\n}: {\n options: ReadonlyArray<SelectOption<T>>;\n placeholder: string;\n maxChips: number;\n}) => {\n const colors = useThemeColors();\n if (options.length === 0) {\n return (\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {placeholder}\n </RNText>\n );\n }\n // When the selection grows beyond `maxChips`, collapse to a counter so\n // the trigger height stays stable on narrow screens.\n if (options.length > maxChips) {\n return (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n fontVariant: ['tabular-nums'],\n flex: 1,\n }}\n numberOfLines={1}\n >\n {options.length} selected\n </RNText>\n );\n }\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n flexWrap: 'wrap',\n rowGap: px(colors.spacing['1']),\n columnGap: px(colors.spacing['1']),\n flex: 1,\n }}\n >\n {options.map((opt) => (\n <View\n key={`chip-${opt.value}`}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 2,\n borderRadius: px(colors.radius.sm),\n backgroundColor: colors.semantic.background.subtle,\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n numberOfLines={1}\n >\n {opt.label}\n </RNText>\n </View>\n ))}\n </View>\n );\n};\n\n// ---------- multi-select popup header with \"Clear all\" affordance ----------\n\nconst MultiSelectionHeader = ({ count, onClearAll }: { count: number; onClearAll: () => void }) => {\n const colors = useThemeColors();\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontVariant: ['tabular-nums'],\n }}\n >\n {count} selected\n </RNText>\n <Pressable\n role=\"button\"\n accessibilityRole=\"button\"\n aria-label=\"Clear all\"\n accessibilityLabel=\"Clear all\"\n onPress={onClearAll}\n style={({ pressed }) => ({\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 2,\n borderRadius: px(colors.radius.sm),\n opacity: pressed ? 0.6 : 1,\n })}\n >\n <RNText\n style={{\n color: colors.semantic.interactive.primary,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n Clear all\n </RNText>\n </Pressable>\n </View>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/icons/default-semantic-icons.tsx","../../../src/theme/px.ts","../../../src/utils/cn.ts","../../../src/components/Select/Select.tsx"],"names":["createContext","Platform","useContext","useState","Appearance","useEffect","isWeb","jsx","RNText","useId","useRef","useCallback","useMemo","id","useWindowDimensions","jsxs","View","Pressable","createPortal","Modal","ScrollView"],"mappings":"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","file":"index.cjs","sourcesContent":["// 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 dangerText: \"#b91c1c\",\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 dangerText: \"#b91c1c\",\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","'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","/**\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","// 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\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"]}
|