@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":["../../../src/i18n/locale.tsx","../../../src/theme/px.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/utils/cn.ts","../../../src/components/Calendar/scroll/ScrollBody.tsx","../../../src/components/Calendar/state/locale-utils.ts","../../../src/components/Calendar/state/use-calendar-keyboard.ts","../../../src/components/Calendar/state/constraints.ts","../../../src/components/Calendar/state/use-calendar-state.ts","../../../src/components/Calendar/state/use-range-state.ts","../../../src/i18n/default-dictionary.ts","../../../src/i18n/resolve.ts","../../../src/i18n/context.tsx","../../../src/i18n/use-translation.ts","../../../src/icons/default-semantic-icons.tsx","../../../src/components/Select/Select.tsx","../../../src/components/Calendar/state/use-caption.tsx","../../../src/components/Calendar/view/Caption.tsx","../../../src/components/Calendar/view/DayCell.tsx","../../../src/components/Calendar/view/DayGrid.tsx","../../../src/components/Calendar/view/Footer.tsx","../../../src/components/Calendar/view/MonthGrid.tsx","../../../src/components/Calendar/view/YearGrid.tsx","../../../src/components/Calendar/Calendar.tsx","../../../src/slot/compose-refs.ts","../../../src/slot/slot.tsx","../../../src/components/Popover/Popover.tsx","../../../src/components/DatePicker/DatePicker.tsx"],"names":["createContext","useContext","Platform","useState","Appearance","useEffect","useCallback","today","getLocalTimeZone","useMemo","isWeb","jsx","RNText","useId","useRef","id","useWindowDimensions","jsxs","View","Pressable","createPortal","Modal","ScrollView","Fragment","startOfMonth","ROW_KEYS","useLayoutEffect","CalendarDate","initialFocus","forwardRef","Slot","isValidElement","Children","cloneElement","content","Dimensions","date","defaultValue"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\n\nexport type LocaleInput = string | Intl.Locale;\n\n/**\n * Resolve the runtime's default locale. Works under Hermes (which ships\n * Intl on iOS via system ICU and on Android via bundled ICU) and any\n * browser. Returns a BCP 47 tag.\n */\nexport const detectLocale = (): string => {\n try {\n return new Intl.DateTimeFormat().resolvedOptions().locale;\n } catch {\n return 'en-US';\n }\n};\n\nconst toTag = (input: LocaleInput | undefined): string =>\n input === undefined ? detectLocale() : typeof input === 'string' ? input : input.toString();\n\nconst LocaleContext = createContext<string | null>(null);\nLocaleContext.displayName = 'LocaleContext';\n\nexport type LocaleProviderProps = {\n locale?: LocaleInput;\n children?: ReactNode;\n};\n\nexport const LocaleProvider = ({ locale, children }: LocaleProviderProps) => {\n const value = useMemo(() => toTag(locale), [locale]);\n return <LocaleContext.Provider value={value}>{children}</LocaleContext.Provider>;\n};\n\nexport const useLocale = (): string => {\n const ctx = useContext(LocaleContext);\n return ctx ?? detectLocale();\n};\n","/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#fafafa\",\n elevated: \"#ffffff\",\n subtle: \"#f4f4f5\",\n },\n border: {\n default: \"#e4e4e7\",\n strong: \"#d4d4d8\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#0d9488\",\n primaryHover: \"#0f766e\",\n primaryPressed: \"#115e59\",\n },\n text: {\n default: \"#18181b\",\n inverted: \"#fafafa\",\n muted: \"#52525b\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n\n// Dark mode overrides\n// Generated for dark mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const themeDark = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#18181b\",\n elevated: \"#3f3f46\",\n subtle: \"#27272a\",\n },\n border: {\n default: \"#3f3f46\",\n strong: \"#52525b\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#2dd4bf\",\n primaryHover: \"#5eead4\",\n primaryPressed: \"#99f6e4\",\n },\n text: {\n default: \"#fafafa\",\n inverted: \"#18181b\",\n muted: \"#a1a1aa\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\n","'use client';\n\nimport { themeDark as defaultDark, theme as defaultLight, type Theme } from '@nori-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\n\n/**\n * A `NoriTheme` is a paired light/dark palette. The active half is picked\n * by `useColorScheme()` so the same theme object covers both schemes.\n *\n * Build one yourself by spreading the defaults and overriding the colors\n * you care about, or pick a preset from `@nori-ui/core/themes` (see the\n * Theming docs for examples).\n */\nexport type NoriTheme = {\n light: Theme;\n dark: Theme;\n};\n\n/**\n * Default Nori palette — teal primary on a warm-paper light surface, and\n * teal-400 primary on a deep-zinc dark surface. Mirrors the `theme` /\n * `themeDark` exports from @nori-ui/tokens.\n */\nexport const defaultTheme: NoriTheme = {\n light: defaultLight,\n dark: defaultDark as unknown as Theme,\n};\n\n// Context value is the FULL pair, not the active half. `useThemeColors`\n// (the hook components reach for) resolves it to the right one based on\n// the current color scheme. Storing the pair means a parent only has to\n// declare the theme once — switching scheme is a separate concern.\nexport const ThemeContext = createContext<NoriTheme>(defaultTheme);\nThemeContext.displayName = 'ThemeContext';\n\nexport type ThemeProviderProps = {\n /**\n * The theme to apply to descendants. Pass either:\n * - a full `NoriTheme` (`{ light, dark }`) — both schemes covered\n * - a single `Theme` — used for both light and dark (rare; mostly\n * useful when you ONLY ever render in one scheme)\n * - omit — falls back to the Nori default (teal palette)\n */\n theme?: NoriTheme | Theme;\n children?: ReactNode;\n};\n\nconst isFullTheme = (t: NoriTheme | Theme): t is NoriTheme => 'light' in t && 'dark' in t;\n\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const value: NoriTheme =\n theme === undefined ? defaultTheme : isFullTheme(theme) ? theme : { light: theme, dark: theme };\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n","'use client';\n\nimport { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\nimport { Appearance, Platform } from 'react-native';\n\nexport type ColorScheme = 'light' | 'dark';\n\n// Override channel so a parent can force a scheme (e.g. an app shell with\n// hard-coded dark chrome that wants nested components to render against\n// the dark token half regardless of the OS Appearance). `null` means\n// \"no override — use the system signal\".\nconst ColorSchemeOverrideContext = createContext<ColorScheme | null>(null);\nColorSchemeOverrideContext.displayName = 'ColorSchemeOverrideContext';\n\nexport type ColorSchemeProviderProps = {\n /** Force a specific scheme for descendants. */\n value: ColorScheme;\n children?: ReactNode;\n};\n\n/**\n * Forces a color scheme for all descendants. Useful when a screen's chrome\n * is hard-coded to one scheme (e.g. a forced-dark editorial surface) and\n * you want library components inside it to follow that, not the OS.\n */\nexport function ColorSchemeProvider({ value, children }: ColorSchemeProviderProps) {\n return <ColorSchemeOverrideContext.Provider value={value}>{children}</ColorSchemeOverrideContext.Provider>;\n}\n\nconst isWeb = Platform.OS === 'web';\n\n// Web: a document is \"in dark mode\" when the root <html> element carries\n// the `dark` class (Tailwind / Fumadocs convention) OR a `data-theme=\"dark\"`\n// attribute (matches the `darkMode` selectors in our Tailwind preset).\n// We deliberately don't fall back to `prefers-color-scheme` — the app\n// usually owns that decision and writes it onto <html>; tracking the system\n// preference too would fight the app's chosen value.\nfunction readWebScheme(): ColorScheme {\n if (typeof document === 'undefined') {\n return 'light';\n }\n const root = document.documentElement;\n if (root.classList.contains('dark')) {\n return 'dark';\n }\n if (root.getAttribute('data-theme') === 'dark') {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Returns the current color scheme — `'light'` or `'dark'`.\n *\n * On web: observes the root `<html>` element's `class=\"dark\"` and\n * `data-theme=\"dark\"` attribute (the same signals our Tailwind preset\n * keys on). Updates live as those flip.\n *\n * On native: delegates to `react-native`'s `Appearance` API so the hook\n * tracks the OS preference without extra wiring.\n *\n * Components consume this indirectly via `useThemeColors()`; reach for\n * this directly when you need the raw scheme (e.g. to swap an icon).\n */\nexport function useColorScheme(): ColorScheme {\n // A `<ColorSchemeProvider value=\"dark\">` ancestor (or NoriProvider's\n // `colorScheme` prop, which mounts one) wins over the OS signal — the\n // app shell knows which scheme its chrome is locked to.\n const override = useContext(ColorSchemeOverrideContext);\n\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (isWeb) {\n return readWebScheme();\n }\n return (Appearance.getColorScheme() ?? 'light') as ColorScheme;\n });\n\n useEffect(() => {\n if (isWeb) {\n const root = document.documentElement;\n const update = () => setScheme(readWebScheme());\n const observer = new MutationObserver(update);\n observer.observe(root, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n // Sync once after mount in case SSR shipped a different value.\n update();\n return () => observer.disconnect();\n }\n\n const sub = Appearance.addChangeListener(({ colorScheme }) => {\n setScheme((colorScheme ?? 'light') as ColorScheme);\n });\n return () => sub.remove();\n }, []);\n\n return override ?? scheme;\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport { useContext } from 'react';\nimport { ThemeContext } from './context';\nimport { useColorScheme } from './use-color-scheme';\n\n/**\n * Returns the active token palette — `theme.light` in light mode,\n * `theme.dark` in dark mode. Resolves the theme via `ThemeContext` so\n * any ancestor `<ThemeProvider theme={...}>` flows through. With no\n * provider in the tree, the default Nori palette (teal) is used.\n *\n * Use this **inside a component** when you need a hex value for a React\n * Native `style` prop (`backgroundColor`, `borderColor`, etc.).\n *\n * Note: className-based styles (e.g. `bg-semantic-interactive-primary`)\n * compile against the @nori-ui/tokens palette at build time and don't\n * follow `<ThemeProvider>` overrides today. Inline styles via this hook\n * always do — and inline beats class on CSS specificity, so the visible\n * color you see is whatever the hook resolves to. CSS-variable theming\n * for the className path is a planned follow-up.\n */\nexport function useThemeColors(): Theme {\n const scheme = useColorScheme();\n const themePair = useContext(ThemeContext);\n return scheme === 'dark' ? themePair.dark : themePair.light;\n}\n","// cn — class-name merger. clsx-compatible shape.\n//\n// Intentionally does NOT deduplicate Tailwind conflicts (e.g. \"text-sm text-lg\").\n// That's `tailwind-merge`'s job; we defer adding it until a component actually\n// needs it, to keep the core tree-shakable and the runtime zero-dep.\n\nexport type ClassInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | ClassInput[]\n | Record<string, boolean | number | null | undefined>;\n\nexport function cn(...inputs: ClassInput[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n append(out, input);\n }\n return out.join(' ');\n}\n\nfunction append(out: string[], input: ClassInput): void {\n if (!input) {\n return;\n }\n if (typeof input === 'string') {\n if (input.length > 0) {\n out.push(input);\n }\n return;\n }\n if (typeof input === 'number') {\n return; // numbers are never class names\n }\n if (Array.isArray(input)) {\n for (const inner of input) {\n append(out, inner);\n }\n return;\n }\n if (typeof input === 'object') {\n for (const key of Object.keys(input)) {\n if (input[key]) {\n out.push(key);\n }\n }\n }\n}\n","import type { CalendarDate } from '@internationalized/date';\nimport type { ReactElement, ReactNode } from 'react';\nimport type { CalendarMode, CalendarValue, ChangeMeta, DateRange, DayContext } from '../Calendar.types';\nimport type { DayOfWeek } from '../state/locale-utils';\n\nexport type ScrollBodyProps<M extends CalendarMode> = {\n mode: M;\n locale: string;\n focusedDate: CalendarDate;\n onFocusedMonthChange: (anchor: CalendarDate, meta: ChangeMeta) => void;\n value: CalendarValue<M>;\n onSelectDate: (date: CalendarDate) => void;\n\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n\n showWeekNumbers?: boolean;\n highlightToday?: boolean;\n firstDayOfWeek: DayOfWeek;\n weekendDays: [DayOfWeek, DayOfWeek];\n\n renderDay?: (ctx: DayContext) => ReactNode;\n\n /** Range-only; undefined for single/multiple. */\n previewRange?: DateRange | null;\n};\n\n// Platform-extension fallback. Metro (native) picks `.native.tsx`; Vite/Webpack\n// (web) pick `.web.tsx`. Reaching this default means the bundler config is\n// broken — fail loudly rather than silently mounting an empty body.\nexport const ScrollBody = <M extends CalendarMode>(_props: ScrollBodyProps<M>): ReactElement => {\n throw new Error(\n '[Calendar] ScrollBody: no platform implementation resolved. ' +\n 'Ensure your bundler honors *.web.tsx / *.native.tsx extensions.'\n );\n};\n","import type { CalendarDate } from '@internationalized/date';\n\n/**\n * Day of week index where 0 = Sunday, 1 = Monday, ..., 6 = Saturday.\n * Matches `Date.prototype.getDay()` semantics.\n */\nexport type DayOfWeek = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n/**\n * The weekday a calendar week begins on for the given locale, per CLDR.\n * Examples: en-US → 0 (Sun), de-DE → 1 (Mon), fa-IR → 6 (Sat).\n *\n * Trusts `Intl.Locale#getWeekInfo` as the authoritative source. Falls back\n * to a small lookup only when CLDR data is unavailable (e.g. Hermes on\n * Android with bundled ICU gaps).\n */\nexport const getFirstDayOfWeek = (locale: string): DayOfWeek => {\n try {\n // biome-ignore lint/suspicious/noExplicitAny: weekInfo is in the spec but TS lib types lag\n const loc = new Intl.Locale(locale) as any;\n const info = loc.getWeekInfo?.() ?? loc.weekInfo;\n if (typeof info?.firstDay === 'number') {\n // CLDR uses 1=Mon..7=Sun; convert to 0=Sun..6=Sat.\n return (info.firstDay === 7 ? 0 : info.firstDay) as DayOfWeek;\n }\n } catch {\n // fall through\n }\n // Fallback for environments without CLDR weekInfo (e.g. some Hermes builds).\n return FIRST_DAY_FALLBACK[locale] ?? FIRST_DAY_FALLBACK[locale.split('-')[0] ?? ''] ?? 1;\n};\n\n/**\n * Last-resort lookup when `Intl.Locale#getWeekInfo` is unavailable. Values\n * are 0=Sun..6=Sat. Keep small — only enough to keep the calendar usable\n * if the runtime has no CLDR data at all.\n */\nconst FIRST_DAY_FALLBACK: Record<string, DayOfWeek> = {\n en: 0,\n 'en-US': 0,\n 'en-CA': 0,\n 'en-GB': 1,\n 'en-AU': 1,\n de: 1,\n fr: 1,\n ja: 0,\n ar: 0,\n he: 0,\n fa: 6,\n};\n\n/**\n * The two days CLDR considers weekend in this locale (e.g. [6, 0] for\n * en-US = Sat+Sun; [5, 6] for ar-SA = Fri+Sat).\n *\n * Falls back to a small lookup when `Intl.Locale#getWeekInfo` is unavailable\n * (notably Hermes Android in some configurations).\n */\nexport const getWeekendDays = (locale: string): [DayOfWeek, DayOfWeek] => {\n try {\n // biome-ignore lint/suspicious/noExplicitAny: weekInfo is in the spec but TS lib types lag\n const loc = new Intl.Locale(locale) as any;\n const info = loc.getWeekInfo?.() ?? loc.weekInfo;\n if (info?.weekend && Array.isArray(info.weekend) && info.weekend.length === 2) {\n // CLDR uses 1=Mon..7=Sun; convert to 0=Sun..6=Sat.\n const [a, b] = info.weekend.map((d: number) => (d === 7 ? 0 : d) as DayOfWeek);\n return [a, b];\n }\n } catch {\n // fall through\n }\n return WEEKEND_FALLBACK[locale] ?? WEEKEND_FALLBACK[locale.split('-')[0] ?? ''] ?? [6, 0];\n};\n\nconst WEEKEND_FALLBACK: Record<string, [DayOfWeek, DayOfWeek]> = {\n 'en-US': [6, 0],\n 'de-DE': [6, 0],\n 'fr-FR': [6, 0],\n 'ja-JP': [6, 0],\n 'ar-SA': [5, 6],\n 'ar-AE': [5, 6],\n 'he-IL': [5, 6],\n 'fa-IR': [4, 5],\n en: [6, 0],\n de: [6, 0],\n fr: [6, 0],\n ar: [5, 6],\n he: [5, 6],\n};\n\n/**\n * Seven weekday short names ordered to begin at the locale's firstDayOfWeek.\n * Use for the calendar grid header row.\n */\nexport const formatWeekdayNames = (locale: string, format: 'short' | 'narrow' = 'short'): string[] => {\n const fmt = new Intl.DateTimeFormat(locale, { weekday: format });\n const start = getFirstDayOfWeek(locale);\n // 2026-01-04 is a Sunday in Gregorian; offset from there.\n return Array.from({ length: 7 }, (_, i) => {\n const d = new Date(Date.UTC(2026, 0, 4 + ((start + i) % 7)));\n return fmt.format(d);\n });\n};\n\n/** \"May 2026\" / \"Mai 2026\" / \"mai 2026\" — for the calendar header. */\nexport const formatMonthYearTitle = (date: CalendarDate, locale: string): string => {\n const fmt = new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric' });\n return fmt.format(date.toDate('UTC'));\n};\n\n/** Twelve full month names in the active locale. */\nexport const formatMonthNames = (locale: string): string[] => {\n const fmt = new Intl.DateTimeFormat(locale, { month: 'long' });\n return Array.from({ length: 12 }, (_, m) => fmt.format(new Date(Date.UTC(2026, m, 15))));\n};\n\n/** \"May 5, 2026\" — for screen-reader announcements of the focused date. */\nexport const formatFullDate = (date: CalendarDate, locale: string): string => {\n const fmt = new Intl.DateTimeFormat(locale, { dateStyle: 'long' });\n return fmt.format(date.toDate('UTC'));\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { useCallback } from 'react';\nimport type { CalendarView, ChangeMeta } from '../Calendar.types';\nimport type { DayOfWeek } from './locale-utils';\nimport type { FocusDelta } from './use-calendar-state';\n\nexport type UseCalendarKeyboardProps = {\n focusedDate: CalendarDate;\n moveFocus: (delta: FocusDelta) => void;\n selectDate: (date: CalendarDate, source: ChangeMeta['source']) => void;\n setView: (view: CalendarView) => void;\n view: CalendarView;\n /** Default 0 (Sunday). Used by Home/End to compute week boundaries. */\n firstDayOfWeek?: DayOfWeek;\n};\n\nexport const useCalendarKeyboard = (props: UseCalendarKeyboardProps) => {\n const { focusedDate, moveFocus, selectDate, firstDayOfWeek = 0 } = props;\n\n const onKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n const focusedDow = focusedDate.toDate('UTC').getUTCDay() as DayOfWeek;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n moveFocus({ days: -1 });\n return;\n case 'ArrowRight':\n event.preventDefault();\n moveFocus({ days: 1 });\n return;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus({ weeks: -1 });\n return;\n case 'ArrowDown':\n event.preventDefault();\n moveFocus({ weeks: 1 });\n return;\n case 'PageUp':\n event.preventDefault();\n moveFocus(event.shiftKey ? { years: -1 } : { months: -1 });\n return;\n case 'PageDown':\n event.preventDefault();\n moveFocus(event.shiftKey ? { years: 1 } : { months: 1 });\n return;\n case 'Home': {\n event.preventDefault();\n const back = (focusedDow - firstDayOfWeek + 7) % 7;\n moveFocus({ days: -back });\n return;\n }\n case 'End': {\n event.preventDefault();\n const back = (focusedDow - firstDayOfWeek + 7) % 7;\n const forward = 6 - back;\n moveFocus({ days: forward });\n return;\n }\n case 'Enter':\n case ' ':\n event.preventDefault();\n selectDate(focusedDate, 'keyboard');\n return;\n default:\n return;\n }\n },\n [focusedDate, firstDayOfWeek, moveFocus, selectDate]\n );\n\n return { onKeyDown };\n};\n","import type { CalendarDate } from '@internationalized/date';\n\nexport type Constraints = {\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n};\n\nconst cmp = (a: CalendarDate, b: CalendarDate): number => a.compare(b);\n\nexport const isOutOfRange = (date: CalendarDate, bounds: Pick<Constraints, 'minValue' | 'maxValue'> = {}): boolean => {\n if (bounds.minValue && cmp(date, bounds.minValue) < 0) {\n return true;\n }\n if (bounds.maxValue && cmp(date, bounds.maxValue) > 0) {\n return true;\n }\n return false;\n};\n\n/**\n * Returns a single predicate that combines minValue/maxValue bounds and\n * a user-provided `isDateUnavailable`. The composed function is what every\n * view layer (DayCell, keyboard nav focus skip, scroll list) consults.\n */\nexport const composeUnavailable =\n (c: Constraints) =>\n (date: CalendarDate): boolean => {\n if (isOutOfRange(date, c)) {\n return true;\n }\n if (c.isDateUnavailable?.(date)) {\n return true;\n }\n return false;\n };\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { getLocalTimeZone, today } from '@internationalized/date';\nimport { useCallback, useMemo, useState } from 'react';\nimport type { CalendarMode, CalendarValue, CalendarView, ChangeMeta } from '../Calendar.types';\nimport { type Constraints, composeUnavailable } from './constraints';\n\nexport type FocusDelta = {\n days?: number;\n weeks?: number;\n months?: number;\n years?: number;\n};\n\nexport type UseCalendarStateProps<M extends CalendarMode> = Constraints & {\n mode?: M;\n locale: string;\n value?: CalendarValue<M>;\n defaultValue?: CalendarValue<M>;\n onChange?: (value: CalendarValue<M>, meta: ChangeMeta) => void;\n view?: CalendarView;\n defaultView?: CalendarView;\n onViewChange?: (view: CalendarView) => void;\n};\n\nexport type UseCalendarStateReturn<M extends CalendarMode> = {\n value: CalendarValue<M>;\n view: CalendarView;\n focusedDate: CalendarDate;\n setView: (next: CalendarView) => void;\n moveFocus: (delta: FocusDelta) => void;\n setFocusedDate: (date: CalendarDate) => void;\n selectDate: (date: CalendarDate, source: ChangeMeta['source']) => void;\n isUnavailable: (date: CalendarDate) => boolean;\n};\n\nconst initialFocus = <M extends CalendarMode>(\n mode: M,\n value: CalendarValue<M> | undefined,\n fallback: CalendarDate\n): CalendarDate => {\n if (!value) {\n return fallback;\n }\n if (mode === 'single') {\n return (value as CalendarDate | null) ?? fallback;\n }\n if (mode === 'range') {\n const r = value as { start: CalendarDate; end: CalendarDate | null };\n return r?.start ?? fallback;\n }\n const arr = value as CalendarDate[];\n return arr[0] ?? fallback;\n};\n\nexport const useCalendarState = <M extends CalendarMode = 'single'>(\n props: UseCalendarStateProps<M>\n): UseCalendarStateReturn<M> => {\n const mode = (props.mode ?? 'single') as M;\n const fallback = today(getLocalTimeZone());\n\n const [internalValue, setInternalValue] = useState<CalendarValue<M>>(() => {\n if (props.value !== undefined) {\n return props.value;\n }\n if (props.defaultValue !== undefined) {\n return props.defaultValue;\n }\n return (mode === 'multiple' ? [] : null) as CalendarValue<M>;\n });\n const isControlled = props.value !== undefined;\n const value = isControlled ? (props.value as CalendarValue<M>) : internalValue;\n\n const [internalView, setInternalView] = useState<CalendarView>(props.defaultView ?? 'day');\n const isViewControlled = props.view !== undefined;\n const view = isViewControlled ? (props.view as CalendarView) : internalView;\n\n const [focusedDate, setFocusedDate] = useState<CalendarDate>(() => initialFocus(mode, value, fallback));\n\n const isUnavailable = useMemo(\n () =>\n composeUnavailable({\n ...(props.minValue !== undefined ? { minValue: props.minValue } : {}),\n ...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {}),\n ...(props.isDateUnavailable !== undefined ? { isDateUnavailable: props.isDateUnavailable } : {}),\n }),\n [props.minValue, props.maxValue, props.isDateUnavailable]\n );\n\n const setView = useCallback(\n (next: CalendarView) => {\n if (!isViewControlled) {\n setInternalView(next);\n }\n props.onViewChange?.(next);\n },\n [isViewControlled, props.onViewChange]\n );\n\n const moveFocus = useCallback(\n (delta: FocusDelta) => {\n setFocusedDate((cur) => {\n let next = cur;\n if (delta.days) {\n next = next.add({ days: delta.days });\n }\n if (delta.weeks) {\n next = next.add({ weeks: delta.weeks });\n }\n if (delta.months) {\n next = next.add({ months: delta.months });\n }\n if (delta.years) {\n next = next.add({ years: delta.years });\n }\n if (!isUnavailable(next)) {\n return next;\n }\n // Target is disabled — scan in the direction of motion for\n // the next available date. Cap at ~100 days so a wide\n // disabled range doesn't loop forever; if nothing's\n // available within the cap, leave focus where it was.\n const totalDelta =\n (delta.days ?? 0) + (delta.weeks ?? 0) * 7 + (delta.months ?? 0) * 30 + (delta.years ?? 0) * 365;\n const sign = totalDelta >= 0 ? 1 : -1;\n for (let i = 1; i <= 100; i++) {\n const candidate = next.add({ days: sign * i });\n if (!isUnavailable(candidate)) {\n return candidate;\n }\n }\n return cur;\n });\n },\n [isUnavailable]\n );\n\n const selectDate = useCallback(\n (date: CalendarDate, source: ChangeMeta['source']) => {\n if (isUnavailable(date)) {\n return;\n }\n const meta: ChangeMeta = { view, source };\n let next: CalendarValue<M>;\n if (mode === 'single') {\n next = date as CalendarValue<M>;\n } else if (mode === 'multiple') {\n const arr = (value as CalendarDate[]) ?? [];\n const exists = arr.some((d) => d.compare(date) === 0);\n next = (exists ? arr.filter((d) => d.compare(date) !== 0) : [...arr, date]) as CalendarValue<M>;\n } else {\n // range mode is delegated to useRangeState\n return;\n }\n if (!isControlled) {\n setInternalValue(next);\n }\n props.onChange?.(next, meta);\n setFocusedDate(date);\n },\n [isControlled, isUnavailable, mode, props.onChange, value, view]\n );\n\n return {\n value,\n view,\n focusedDate,\n setView,\n moveFocus,\n setFocusedDate,\n selectDate,\n isUnavailable,\n };\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { useCallback, useMemo, useState } from 'react';\nimport type { ChangeMeta, DateRange } from '../Calendar.types';\nimport { type Constraints, composeUnavailable } from './constraints';\n\nexport type UseRangeStateProps = Constraints & {\n value?: DateRange | null;\n defaultValue?: DateRange | null;\n onChange?: (value: DateRange | null, meta: ChangeMeta) => void;\n minNights?: number;\n maxNights?: number;\n};\n\nexport type UseRangeStateReturn = {\n value: DateRange | null;\n previewRange: DateRange | null;\n hoveredDate: CalendarDate | null;\n selectDate: (date: CalendarDate, source?: ChangeMeta['source']) => void;\n setHoveredDate: (date: CalendarDate | null) => void;\n isUnavailable: (date: CalendarDate) => boolean;\n};\n\nconst order = (a: CalendarDate, b: CalendarDate): [CalendarDate, CalendarDate] => (a.compare(b) <= 0 ? [a, b] : [b, a]);\n\nconst nightsBetween = (a: CalendarDate, b: CalendarDate): number => {\n const [first, last] = order(a, b);\n return Math.round((last.toDate('UTC').getTime() - first.toDate('UTC').getTime()) / 86400000);\n};\n\nexport const useRangeState = (props: UseRangeStateProps): UseRangeStateReturn => {\n const [internal, setInternal] = useState<DateRange | null>(props.defaultValue ?? null);\n const isControlled = props.value !== undefined;\n const value = isControlled ? (props.value ?? null) : internal;\n\n const [hoveredDate, setHoveredDate] = useState<CalendarDate | null>(null);\n\n const isUnavailable = useMemo(\n () =>\n composeUnavailable({\n ...(props.minValue !== undefined ? { minValue: props.minValue } : {}),\n ...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {}),\n ...(props.isDateUnavailable !== undefined ? { isDateUnavailable: props.isDateUnavailable } : {}),\n }),\n [props.minValue, props.maxValue, props.isDateUnavailable]\n );\n\n const commit = useCallback(\n (next: DateRange | null, source: ChangeMeta['source']) => {\n if (!isControlled) {\n setInternal(next);\n }\n props.onChange?.(next, { view: 'day', source });\n },\n [isControlled, props.onChange]\n );\n\n const selectDate = useCallback(\n (date: CalendarDate, source: ChangeMeta['source'] = 'click') => {\n if (isUnavailable(date)) {\n return;\n }\n\n // No range yet, or both endpoints set → start a fresh selection.\n if (!value || value.end !== null) {\n commit({ start: date, end: null }, source);\n setHoveredDate(null);\n return;\n }\n\n // We have a pending start, no end yet.\n const nights = nightsBetween(value.start, date);\n if (props.minNights !== undefined && nights < props.minNights) {\n return;\n }\n if (props.maxNights !== undefined && nights > props.maxNights) {\n return;\n }\n\n const [start, end] = order(value.start, date);\n commit({ start, end }, source);\n setHoveredDate(null);\n },\n [commit, isUnavailable, props.maxNights, props.minNights, value]\n );\n\n const previewRange = useMemo<DateRange | null>(() => {\n if (!value || value.end !== null || !hoveredDate) {\n return null;\n }\n const [start, end] = order(value.start, hoveredDate);\n return { start, end };\n }, [hoveredDate, value]);\n\n return {\n value,\n previewRange,\n hoveredDate,\n selectDate,\n setHoveredDate,\n isUnavailable,\n };\n};\n","import type { Dictionary } from './types';\n\n/**\n * Default English strings used by library components.\n *\n * Key naming convention:\n * <component>.<purpose>[_plural-form]\n *\n * Plural suffixes follow i18next: `_zero`, `_one`, `_two`, `_few`, `_many`, `_other`.\n * Interpolation uses `{{name}}` — double braces, no spaces, by convention.\n */\nexport const defaultDictionary: Dictionary = {\n // generic / shared\n 'common.cancel': 'Cancel',\n 'common.confirm': 'Confirm',\n 'common.close': 'Close',\n 'common.back': 'Back',\n 'common.loading': 'Loading',\n 'common.error': 'Something went wrong',\n 'common.retry': 'Try again',\n\n // breadcrumb\n 'breadcrumb.ariaLabel': 'Breadcrumb',\n 'breadcrumb.expandLabel': 'Show full path',\n 'breadcrumb.ellipsisLabel': 'More',\n 'breadcrumb.currentPageLabel': 'Current page',\n 'breadcrumb.siblingMenuLabel': 'Open sibling pages',\n\n // pagination\n 'pagination.ariaLabel': 'Pagination',\n 'pagination.previous': 'Previous page',\n 'pagination.next': 'Next page',\n 'pagination.first': 'First page',\n 'pagination.last': 'Last page',\n 'pagination.ellipsis': 'More pages',\n 'pagination.currentPage': 'Current page',\n 'pagination.gotoPage': 'Go to page {{page}}',\n 'pagination.range': 'Showing {{from}}–{{to}} of {{total}}',\n 'pagination.pageOf': 'Page {{page}} of {{total}}',\n 'pagination.pageSizeLabel': 'Items per page',\n 'pagination.jumperLabel': 'Go to page',\n 'pagination.jumperPlaceholder': '#',\n\n // floatButton\n 'floatButton.backToTop': 'Back to top',\n\n // calendar\n 'calendar.header.previous': 'Previous month',\n 'calendar.header.next': 'Next month',\n 'calendar.header.openMonthView': 'Open month picker',\n 'calendar.header.openYearView': 'Open year picker',\n 'calendar.header.openDayView': 'Open day picker',\n 'calendar.today': 'Today',\n 'calendar.clear': 'Clear',\n\n // button\n 'button.loadingLabel': 'Loading',\n\n // input\n 'input.clear': 'Clear',\n 'input.passwordShow': 'Show password',\n 'input.passwordHide': 'Hide password',\n\n // checkbox / switch\n 'checkbox.checked': 'Checked',\n 'checkbox.unchecked': 'Unchecked',\n 'switch.on': 'On',\n 'switch.off': 'Off',\n\n // field\n 'field.requiredIndicator': '*',\n 'field.requiredLabel': 'required',\n\n // table / dataTable\n 'table.empty': 'No data',\n};\n","import type { Dictionary, I18nInput, I18nOptions, TranslateFn } from './types';\n\n/**\n * Normalizes the consumer's i18n input (undefined | dictionary | function) into a\n * uniform TranslateFn. Internal code only calls the returned function.\n *\n * Precedence for a given key lookup:\n * 1. consumer function (if provided) — called verbatim, no further fallback\n * 2. consumer dictionary (if provided)\n * 3. library defaults\n * 4. options.defaultValue\n * 5. the key itself (so missing strings are visible in dev, not silent)\n */\nexport function resolveI18n(input: I18nInput, defaults: Dictionary): TranslateFn {\n if (typeof input === 'function') {\n // Wrap so the consumer fn is always invoked with (key, options) — enables\n // Jest `toHaveBeenCalledWith(key, undefined)` assertions and mirrors i18next's\n // own call signature exactly.\n return (keyOrKeys, options) => input(keyOrKeys, options);\n }\n\n const dict = input ?? {};\n\n return (keyOrKeys, options) => {\n const keys = Array.isArray(keyOrKeys) ? keyOrKeys : [keyOrKeys];\n for (const rawKey of keys) {\n const key = pluralize(rawKey, options?.count);\n const template = dict[key] ?? defaults[key];\n if (template !== undefined) {\n return interpolate(template, options);\n }\n }\n // exhausted the key list\n const lastKey = keys[keys.length - 1];\n if (options?.defaultValue !== undefined) {\n return interpolate(options.defaultValue, options);\n }\n return lastKey ?? '';\n };\n}\n\nfunction pluralize(key: string, count: number | undefined): string {\n if (count === undefined) {\n return key;\n }\n // Minimal English pluralization — extend with ICU rules later if needed.\n if (count === 1) {\n return `${key}_one`;\n }\n return `${key}_other`;\n}\n\nfunction interpolate(template: string, options: I18nOptions | undefined): string {\n if (!options) {\n return template;\n }\n return template.replace(/\\{\\{\\s*([A-Za-z0-9_.-]+)\\s*\\}\\}/g, (_match, name: string) => {\n const value = options[name];\n return value === undefined || value === null ? '' : String(value);\n });\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext, useMemo } from 'react';\nimport { defaultDictionary } from './default-dictionary';\nimport { resolveI18n } from './resolve';\nimport type { I18nInput, TranslateFn } from './types';\n\nexport type I18nContextValue = {\n t: TranslateFn;\n};\n\n// Default context value uses the built-in English dictionary; consumers without\n// a provider still get a working t().\nconst defaultValue: I18nContextValue = {\n t: resolveI18n(undefined, defaultDictionary),\n};\n\nexport const I18nContext = createContext<I18nContextValue>(defaultValue);\nI18nContext.displayName = 'I18nContext';\n\nexport type I18nProviderProps = {\n i18n?: I18nInput;\n children?: ReactNode;\n};\n\nexport function I18nProvider({ i18n, children }: I18nProviderProps) {\n const value = useMemo<I18nContextValue>(() => ({ t: resolveI18n(i18n, defaultDictionary) }), [i18n]);\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n","'use client';\n\nimport { useContext } from 'react';\nimport { I18nContext, type I18nContextValue } from './context';\n\nexport function useTranslation(): I18nContextValue {\n return useContext(I18nContext);\n}\n","'use client';\n\n// default-semantic-icons — minimal built-in icon placeholders for internal\n// library glyphs. Consumers can swap each one via the provider:\n//\n// <NoriProvider icons={{ checkmark: MyCheck, close: MyX }}>\n//\n// These defaults exist so the library renders usable UI out of the box even\n// when lucide-react(-native) or any other icon set is not installed. They are\n// NOT intended to compete with Lucide on style — override them in production.\n//\n// Web ships an SVG path identical to the historical lucide-style stroke. Native\n// ships a Unicode glyph wrapped in `<Text>` because raw `<svg><path>` doesn't\n// exist on the React Native runtime — the renderer treats lowercase host names\n// as native components and crashes with \"View config getter callback for\n// component `path` must be a function\". `react-native-svg` would solve this\n// but it's an extra peer dep this library deliberately doesn't require.\n//\n// Marked `'use client'` because the native render path reads\n// `useThemeColors()` to default the glyph color to the active theme's\n// text token when no explicit color is passed. Without this the native\n// glyph would render in RNText's default (black) regardless of scheme.\n\nimport type { ComponentType } from 'react';\nimport { Platform, Text as RNText } from 'react-native';\nimport { useThemeColors } from '../theme/use-theme-colors';\nimport type { IconComponentProps } from './icon';\n\ntype SemanticIcon = ComponentType<IconComponentProps>;\n\ntype IconRecipe = {\n /** SVG `path` data — used on the web. */\n path: string;\n /** Unicode glyph rendered in `<Text>` on native. */\n glyph: string;\n};\n\nconst isWeb = Platform.OS === 'web';\n\nconst make = ({ path, glyph }: IconRecipe): SemanticIcon =>\n function PlaceholderIcon({ size = 20, color = 'currentColor' }) {\n // Always call the hook — rules-of-hooks. The native branch is the\n // only consumer of the resolved colors, but pulling them on web is\n // a cheap context read.\n const colors = useThemeColors();\n if (isWeb) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n }\n // 'currentColor' is a CSS keyword without meaning on native — RNText\n // would render in its inherent default (~black). Resolve it against\n // the active theme so the glyph stays readable in both schemes.\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.default : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {glyph}\n </RNText>\n );\n };\n\nexport type SemanticIcons = {\n checkmark: SemanticIcon;\n close: SemanticIcon;\n eye: SemanticIcon;\n eyeOff: SemanticIcon;\n chevronDown: SemanticIcon;\n chevronUp: SemanticIcon;\n alertTriangle: SemanticIcon;\n info: SemanticIcon;\n check: SemanticIcon;\n x: SemanticIcon;\n};\n\nexport const defaultSemanticIcons: SemanticIcons = {\n checkmark: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n close: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n eye: make({\n path: 'M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z',\n glyph: '👁',\n }),\n eyeOff: make({\n path: 'M17.94 17.94A10 10 0 0 1 2 12s3.5-7 10-7c2 0 3.8.6 5.4 1.5 M1 1l22 22',\n glyph: '🙈',\n }),\n chevronDown: make({ path: 'm6 9 6 6 6-6', glyph: '⌄' }),\n chevronUp: make({ path: 'm18 15-6-6-6 6', glyph: '⌃' }),\n alertTriangle: make({\n path: 'M12 9v4 M12 17h.01 M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z',\n glyph: '⚠',\n }),\n info: make({\n path: 'M12 8h.01 M11 12h1v4h1 M12 22C6.48 22 2 17.52 2 12 2 6.48 6.48 2 12 2c5.52 0 10 4.48 10 10 0 5.52-4.48 10-10 10z',\n glyph: 'ⓘ',\n }),\n check: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n x: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n};\n","'use client';\n\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type { NativeScrollEvent, NativeSyntheticEvent, ViewStyle } from 'react-native';\nimport { Modal, Platform, Pressable, Text as RNText, ScrollView, useWindowDimensions, View } from 'react-native';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type SelectOption<T = unknown> = {\n /** Unique value within the select. */\n value: string;\n /** Visible text. */\n label: string;\n /** Optional group label — items with the same `group` cluster together. */\n group?: string;\n disabled?: boolean;\n /** Arbitrary payload — surfaced to `renderOption` and `onChange`. */\n data?: T;\n};\n\nexport type LoadOptionsParams = {\n /** Current search input. */\n search: string;\n /** Number of items already loaded — start of the requested window. */\n offset: number;\n /** Page size requested. */\n limit: number;\n};\n\nexport type LoadOptionsResult<T = unknown> = {\n items: ReadonlyArray<SelectOption<T>>;\n /** Total available — the picker stops requesting when offset+items.length >= total. Optional; if omitted, requests stop when items.length < limit. */\n total?: number;\n};\n\nexport type SelectRenderOptionInfo = {\n /** This option matches the current value. */\n selected: boolean;\n /** This option is the keyboard focus target. */\n active: boolean;\n};\n\ntype SelectBaseProps<T = unknown> = {\n /** Static options. Mutually exclusive with `loadOptions`. */\n options?: ReadonlyArray<SelectOption<T>>;\n /**\n * Async loader. Called with `{ search, offset, limit }` whenever the\n * search input changes (debounced) or the user scrolls near the end of\n * the loaded list. Return more items + an optional total to stop the\n * pagination loop early.\n */\n loadOptions?: (params: LoadOptionsParams) => Promise<LoadOptionsResult<T>>;\n /** Page size for `loadOptions`. @defaultValue 50 */\n pageSize?: number;\n /** Show a search input above the list. @defaultValue auto-on for static options >= 10 items, always on for loadOptions */\n searchable?: boolean;\n /** Placeholder for the search input. */\n searchPlaceholder?: string;\n /** Override the default substring filter for static options. */\n filterOption?: (option: SelectOption<T>, search: string) => boolean;\n /** Custom item renderer. Called per option in the list. */\n renderOption?: (option: SelectOption<T>, info: SelectRenderOptionInfo) => ReactNode;\n /** Trigger placeholder when no value is selected. */\n placeholder?: string;\n /**\n * BCP 47 locale — drives `Intl.Collator` sorting of options when set.\n * Re-sorts on language switch so a German list reads alphabetically in\n * German vs the same list in English.\n */\n locale?: string;\n /** When `locale` is set, sort options alphabetically. @defaultValue true */\n sortByLocale?: boolean;\n /** Message shown in the popup when there are no matching options. */\n noOptionsMessage?: string;\n /** Message shown while async results are loading. */\n loadingMessage?: string;\n /** Disable interaction. */\n disabled?: boolean;\n /** RTL flips the popup alignment + text direction. */\n dir?: 'ltr' | 'rtl';\n /**\n * Virtualize the list — only DOM-render the visible window of items.\n * Auto-on when the list has more than 100 items.\n */\n virtualized?: boolean;\n /** Pixel height of a single item — required for virtualization math. @defaultValue 36 */\n itemHeight?: number;\n /** Max popup height in px. @defaultValue 320 */\n maxMenuHeight?: number;\n className?: string;\n testID?: string;\n id?: string;\n name?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n};\n\nexport type SelectSingleProps<T = unknown> = SelectBaseProps<T> & {\n /** Single-select mode (default — omit or pass `false`). */\n multiple?: false;\n /** Controlled value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n /** Fires when the user picks an option. */\n onChange?: (value: string, option: SelectOption<T> | undefined) => void;\n};\n\nexport type SelectMultiProps<T = unknown> = SelectBaseProps<T> & {\n /** Multi-select mode — value/onChange become array-typed. */\n multiple: true;\n /** Controlled values. */\n value?: ReadonlyArray<string>;\n /** Uncontrolled initial values. */\n defaultValue?: ReadonlyArray<string>;\n /** Fires when the selection changes. Receives the full new array of values + their resolved options. */\n onChange?: (values: ReadonlyArray<string>, options: ReadonlyArray<SelectOption<T>>) => void;\n /** Hard cap on selected count — extra picks are ignored. */\n maxSelected?: number;\n /** Max chips to render in the trigger before collapsing to \"N selected\". @defaultValue 3 */\n maxChips?: number;\n};\n\nexport type SelectProps<T = unknown> = SelectSingleProps<T> | SelectMultiProps<T>;\n\nconst DEFAULT_PAGE_SIZE = 50;\nconst DEFAULT_ITEM_HEIGHT = 36;\nconst DEFAULT_MAX_MENU = 320;\nconst SEARCH_DEBOUNCE_MS = 150;\nconst VIRTUAL_OVERSCAN = 4;\n// Reset window for the type-ahead buffer. Matches native <select> on macOS\n// closely enough that typing \"Sep\" lands on September even without a search\n// field. Shorter than the WAI-ARIA suggested 500ms feels jumpy on slow typists.\nconst TYPE_AHEAD_RESET_MS = 500;\n\nconst defaultFilter = <T,>(option: SelectOption<T>, search: string): boolean => {\n if (!search) {\n return true;\n }\n return option.label.toLowerCase().includes(search.toLowerCase());\n};\n\n/**\n * Searchable, async-capable, optionally virtualized select. Designed for the\n * \"I have 500 items behind a paginated API\" case as easily as the \"five\n * static items\" case.\n *\n * Modes:\n * - **Static** — pass `options`. The picker filters in-memory by a\n * substring match on `label` (override via `filterOption`).\n * - **Async** — pass `loadOptions(params)`. Called on search-input change\n * (debounced) and when the list scrolls near the bottom for the next\n * page. The picker manages the loaded list, so consumers don't have to.\n *\n * Other features:\n * - Custom item renderer via `renderOption`.\n * - i18n locale-aware sorting via `Intl.Collator` when `locale` is set —\n * re-sorts when the locale changes so a German list reads\n * alphabetically in German.\n * - OptGroup support — items with the same `group` field cluster in the\n * popup with a group header.\n * - Virtualized list when item count > 100 (or set `virtualized`\n * explicitly). Only the visible window is rendered.\n * - Keyboard navigation: ArrowDown / ArrowUp move the active option,\n * Home / End jump to the first / last, Enter selects, Escape closes,\n * Tab closes. Type-ahead works whether or not a search field is shown\n * (typing \"Sep\" lands on September; repeating a single char like\n * \"m\",\"m\" cycles through M-options).\n * - RTL alignment via `dir=\"rtl\"`.\n */\nexport const Select = <T = unknown>(props: SelectProps<T>) => {\n const {\n options: staticOptions,\n loadOptions,\n pageSize = DEFAULT_PAGE_SIZE,\n searchable: searchableProp,\n searchPlaceholder = 'Search…',\n filterOption,\n renderOption,\n placeholder = 'Select…',\n locale,\n sortByLocale = true,\n noOptionsMessage = 'No options',\n loadingMessage = 'Loading…',\n disabled = false,\n dir = 'ltr',\n virtualized: virtualizedProp,\n itemHeight = DEFAULT_ITEM_HEIGHT,\n maxMenuHeight = DEFAULT_MAX_MENU,\n className,\n testID,\n id,\n name,\n } = props;\n const ariaLabel = (props as { 'aria-label'?: string })['aria-label'];\n const ariaLabelledBy = (props as { 'aria-labelledby'?: string })['aria-labelledby'];\n const ariaDescribedBy = (props as { 'aria-describedby'?: string })['aria-describedby'];\n const ariaInvalid = (props as { 'aria-invalid'?: boolean })['aria-invalid'];\n const ariaRequired = (props as { 'aria-required'?: boolean })['aria-required'];\n const multiple = props.multiple === true;\n const maxSelected = multiple ? (props as SelectMultiProps<T>).maxSelected : undefined;\n const maxChips = multiple ? ((props as SelectMultiProps<T>).maxChips ?? 3) : undefined;\n\n const baseId = useId();\n const colors = useThemeColors();\n const [open, setOpen] = useState(false);\n\n // We always store values as a ReadonlyArray<string> internally so the\n // toggle / replace logic stays uniform; for single mode the array is\n // either empty or has exactly one element.\n const controlledValues: ReadonlyArray<string> | undefined = multiple\n ? (props.value as ReadonlyArray<string> | undefined)\n : props.value !== undefined\n ? [props.value as string]\n : undefined;\n const defaultValues: ReadonlyArray<string> = multiple\n ? (((props as SelectMultiProps<T>).defaultValue as ReadonlyArray<string> | undefined) ?? [])\n : (props as SelectSingleProps<T>).defaultValue !== undefined\n ? [(props as SelectSingleProps<T>).defaultValue as string]\n : [];\n const [innerValues, setInnerValues] = useState<ReadonlyArray<string>>(defaultValues);\n const isControlled = controlledValues !== undefined;\n const currentValues: ReadonlyArray<string> = isControlled\n ? (controlledValues as ReadonlyArray<string>)\n : innerValues;\n /** Single-mode legacy accessor — first selected value (or undefined). */\n const current: string | undefined = currentValues[0];\n\n const [searchInput, setSearchInput] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const [activeIndex, setActiveIndex] = useState(0);\n\n // Debounce the search input so loadOptions / filterOption don't fire on\n // every keystroke when the work is expensive.\n useEffect(() => {\n const t = setTimeout(() => setDebouncedSearch(searchInput), SEARCH_DEBOUNCE_MS);\n return () => clearTimeout(t);\n }, [searchInput]);\n\n // Async-mode internal cache of loaded options.\n const [asyncItems, setAsyncItems] = useState<SelectOption<T>[]>([]);\n const [asyncLoading, setAsyncLoading] = useState(false);\n const [asyncTotal, setAsyncTotal] = useState<number | undefined>(undefined);\n const asyncRequestId = useRef(0);\n\n const isAsync = loadOptions !== undefined;\n\n // When the search changes in async mode, reset the loaded list and\n // refetch from offset 0. The request id guards against stale resolution.\n useEffect(() => {\n if (!isAsync || !loadOptions || !open) {\n return;\n }\n const requestId = ++asyncRequestId.current;\n setAsyncLoading(true);\n setAsyncItems([]);\n setAsyncTotal(undefined);\n loadOptions({ search: debouncedSearch, offset: 0, limit: pageSize })\n .then((result) => {\n if (requestId !== asyncRequestId.current) {\n return;\n }\n setAsyncItems(result.items.slice());\n setAsyncTotal(result.total);\n })\n .catch(() => {\n // Swallow — consumers can wrap loadOptions to handle errors.\n })\n .finally(() => {\n if (requestId === asyncRequestId.current) {\n setAsyncLoading(false);\n }\n });\n }, [debouncedSearch, isAsync, loadOptions, pageSize, open]);\n\n // Helper to load the next page in async mode.\n const loadMore = useCallback(() => {\n if (!isAsync || !loadOptions || asyncLoading) {\n return;\n }\n const haveAll = asyncTotal !== undefined && asyncItems.length >= asyncTotal;\n if (haveAll) {\n return;\n }\n const requestId = ++asyncRequestId.current;\n setAsyncLoading(true);\n loadOptions({ search: debouncedSearch, offset: asyncItems.length, limit: pageSize })\n .then((result) => {\n if (requestId !== asyncRequestId.current) {\n return;\n }\n setAsyncItems((prev) => prev.concat(result.items));\n if (result.total !== undefined) {\n setAsyncTotal(result.total);\n }\n })\n .catch(() => undefined)\n .finally(() => {\n if (requestId === asyncRequestId.current) {\n setAsyncLoading(false);\n }\n });\n }, [asyncItems.length, asyncLoading, asyncTotal, debouncedSearch, isAsync, loadOptions, pageSize]);\n\n // Build the displayed option list — filter (static) or async items, then\n // optionally locale-sort.\n const visibleOptions = useMemo<SelectOption<T>[]>(() => {\n const source = isAsync ? asyncItems : (staticOptions ?? []);\n const filtered = isAsync\n ? source.slice() // async backend already handled search\n : source.filter((opt) => (filterOption ?? defaultFilter)(opt, debouncedSearch));\n if (locale && sortByLocale) {\n const collator = new Intl.Collator(locale, { sensitivity: 'base', numeric: true });\n // Group-aware sort: stable on group, then on label.\n return filtered.slice().sort((a, b) => {\n const ga = a.group ?? '';\n const gb = b.group ?? '';\n const groupDelta = collator.compare(ga, gb);\n if (groupDelta !== 0) {\n return groupDelta;\n }\n return collator.compare(a.label, b.label);\n });\n }\n return filtered;\n }, [isAsync, asyncItems, staticOptions, filterOption, debouncedSearch, locale, sortByLocale]);\n\n const selectedOption = useMemo(() => {\n const all = isAsync ? asyncItems : (staticOptions ?? []);\n return all.find((o) => o.value === current);\n }, [asyncItems, isAsync, staticOptions, current]);\n\n /** Multi-mode: resolved options for every currently-selected value, in selection order. */\n const selectedOptions = useMemo<ReadonlyArray<SelectOption<T>>>(() => {\n if (!multiple) {\n return [];\n }\n const all = isAsync ? asyncItems : (staticOptions ?? []);\n const map = new Map(all.map((o) => [o.value, o]));\n return currentValues.map((v) => map.get(v)).filter((o): o is SelectOption<T> => o !== undefined);\n }, [multiple, currentValues, asyncItems, isAsync, staticOptions]);\n\n const searchable = searchableProp ?? (isAsync || (staticOptions !== undefined && staticOptions.length >= 10));\n const virtualized = virtualizedProp ?? visibleOptions.length > 100;\n\n // Keep activeIndex in bounds.\n useEffect(() => {\n setActiveIndex((idx) => Math.min(Math.max(0, idx), Math.max(0, visibleOptions.length - 1)));\n }, [visibleOptions.length]);\n\n const onSelect = useCallback(\n (option: SelectOption<T>) => {\n if (option.disabled) {\n return;\n }\n if (multiple) {\n const has = currentValues.includes(option.value);\n let nextValues: string[];\n if (has) {\n nextValues = currentValues.filter((v) => v !== option.value);\n } else {\n if (maxSelected !== undefined && currentValues.length >= maxSelected) {\n return; // hit the cap\n }\n nextValues = [...currentValues, option.value];\n }\n if (!isControlled) {\n setInnerValues(nextValues);\n }\n // Resolve options for callback — preserves order of nextValues.\n const allOpts: ReadonlyArray<SelectOption<T>> = [\n ...(staticOptions ?? []),\n ...(asyncItems as ReadonlyArray<SelectOption<T>>),\n ];\n const optMap = new Map(allOpts.map((o) => [o.value, o]));\n const selectedOpts = nextValues\n .map((v) => optMap.get(v))\n .filter((o): o is SelectOption<T> => o !== undefined);\n (props as SelectMultiProps<T>).onChange?.(nextValues, selectedOpts);\n // Multi mode: keep the popup open, keep the search input — the\n // user is likely picking more than one in a row.\n return;\n }\n // Single mode — replace + close.\n if (!isControlled) {\n setInnerValues([option.value]);\n }\n (props as SelectSingleProps<T>).onChange?.(option.value, option);\n setOpen(false);\n setSearchInput('');\n },\n // biome-ignore lint/correctness/useExhaustiveDependencies: `props` is the discriminated union — destructuring it would defeat the narrowing; the asyncItems / staticOptions captures intentionally re-trigger the callback when the option pool changes\n [multiple, isControlled, currentValues, maxSelected, staticOptions, asyncItems, props]\n );\n\n /** Multi-mode helper to clear all selected values. */\n const clearAll = useCallback(() => {\n if (!isControlled) {\n setInnerValues([]);\n }\n (props as SelectMultiProps<T>).onChange?.([], []);\n // biome-ignore lint/correctness/useExhaustiveDependencies: same reason as above\n }, [isControlled, props]);\n\n const moveActive = useCallback(\n (delta: 1 | -1) => {\n setActiveIndex((idx) => {\n if (visibleOptions.length === 0) {\n return 0;\n }\n let next = (idx + delta + visibleOptions.length) % visibleOptions.length;\n // Skip disabled options.\n for (let attempts = 0; attempts < visibleOptions.length; attempts += 1) {\n if (!visibleOptions[next]?.disabled) {\n return next;\n }\n next = (next + delta + visibleOptions.length) % visibleOptions.length;\n }\n return idx;\n });\n },\n [visibleOptions]\n );\n\n // Type-ahead buffer — shared across the trigger (closed state) and the\n // popup container (open without search field). Mutable ref so we don't\n // re-render on every keystroke.\n const typeAheadRef = useRef<{ buffer: string; timer: ReturnType<typeof setTimeout> | null }>({\n buffer: '',\n timer: null,\n });\n useEffect(() => {\n // Clear any pending type-ahead timer on unmount so we don't leak it.\n return () => {\n if (typeAheadRef.current.timer) {\n clearTimeout(typeAheadRef.current.timer);\n typeAheadRef.current.timer = null;\n }\n };\n }, []);\n\n const handleTypeAhead = useCallback(\n (char: string) => {\n if (visibleOptions.length === 0) {\n return;\n }\n if (typeAheadRef.current.timer) {\n clearTimeout(typeAheadRef.current.timer);\n }\n const nextBuffer = typeAheadRef.current.buffer + char.toLowerCase();\n typeAheadRef.current.buffer = nextBuffer;\n typeAheadRef.current.timer = setTimeout(() => {\n typeAheadRef.current.buffer = '';\n typeAheadRef.current.timer = null;\n }, TYPE_AHEAD_RESET_MS);\n\n // Cycle mode: a single char OR repeated same char (e.g. \"aa\") cycles\n // through options whose label starts with that char, advancing past\n // the current activeIndex. Otherwise the buffer is treated as a\n // prefix and we search from the top — refining the match as the\n // user keeps typing (\"S\" → \"Se\" → \"Sep\" → September).\n const allSame = nextBuffer.length > 1 && nextBuffer.split('').every((c) => c === nextBuffer[0]);\n const cycleMode = nextBuffer.length === 1 || allSame;\n const needle = cycleMode ? nextBuffer.charAt(0) : nextBuffer;\n const len = visibleOptions.length;\n const startFrom = cycleMode ? (activeIndex + 1) % len : 0;\n for (let i = 0; i < len; i += 1) {\n const idx = (startFrom + i) % len;\n const opt = visibleOptions[idx];\n if (!opt || opt.disabled) {\n continue;\n }\n if (opt.label.toLowerCase().startsWith(needle)) {\n setActiveIndex(idx);\n return;\n }\n }\n },\n [visibleOptions, activeIndex]\n );\n\n // Shared list-navigation handler — used by the search input, the\n // popup container (when no search field is shown), and as the basis for\n // trigger handling. Returns true if the event was consumed so callers\n // can fall through to type-ahead handling for unhandled keys.\n const handleListKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>): boolean => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveActive(1);\n return true;\n case 'ArrowUp':\n event.preventDefault();\n moveActive(-1);\n return true;\n case 'Home': {\n event.preventDefault();\n const idx = visibleOptions.findIndex((o) => !o.disabled);\n if (idx >= 0) {\n setActiveIndex(idx);\n }\n return true;\n }\n case 'End': {\n event.preventDefault();\n for (let i = visibleOptions.length - 1; i >= 0; i -= 1) {\n if (!visibleOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n return true;\n }\n case 'Enter': {\n const opt = visibleOptions[activeIndex];\n if (opt) {\n event.preventDefault();\n onSelect(opt);\n }\n return true;\n }\n case 'Escape':\n event.preventDefault();\n setOpen(false);\n // Restore focus to the trigger so the next Tab keeps the\n // user inside the same widget instead of jumping to <body>.\n if (Platform.OS === 'web') {\n const trigger = triggerRef.current as unknown as { focus?: () => void } | null;\n trigger?.focus?.();\n }\n return true;\n case 'Tab':\n setOpen(false);\n return true;\n }\n return false;\n },\n [moveActive, activeIndex, visibleOptions, onSelect]\n );\n\n const handleSearchKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n handleListKeyDown(event);\n },\n [handleListKeyDown]\n );\n\n // Popup-container handler — only attached when there's no search input,\n // so we own type-ahead here. Falls through to the shared list handler\n // for arrow keys / Enter / Escape / Tab.\n const handlePopupKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (handleListKeyDown(event)) {\n return;\n }\n // Single printable character without modifiers → feed the\n // type-ahead buffer. Modifier-combos (Cmd-A, Ctrl-K) are left\n // alone so browser/OS shortcuts keep working.\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey && event.key !== ' ') {\n event.preventDefault();\n handleTypeAhead(event.key);\n }\n },\n [handleListKeyDown, handleTypeAhead]\n );\n\n const handleTriggerKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n switch (event.key) {\n case ' ':\n case 'Enter':\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n setOpen(true);\n return;\n }\n // Type-ahead on the closed trigger: open the popup and jump to\n // the matching option. Mirrors native <select> behaviour where\n // typing a letter while the control has focus changes the\n // highlighted choice without an explicit \"open\" gesture.\n if (!disabled && event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n event.preventDefault();\n setOpen(true);\n handleTypeAhead(event.key);\n }\n },\n [disabled, handleTypeAhead]\n );\n\n // Close when clicking outside (web only). The outside check considers\n // BOTH the container (trigger area) and the popup ref because the popup\n // portals out of the container's DOM subtree (position: fixed escapes\n // any overflow:hidden ancestor, but still belongs to the same logical\n // widget).\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const popupRef = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n if (\n Platform.OS !== 'web' ||\n typeof document === 'undefined' ||\n typeof document.addEventListener !== 'function'\n ) {\n return;\n }\n if (!open) {\n return;\n }\n const onDocClick = (event: MouseEvent) => {\n const node = containerRef.current;\n const popup = popupRef.current;\n const target = event.target as Node;\n if (node?.contains(target)) {\n return;\n }\n if (popup?.contains(target)) {\n return;\n }\n setOpen(false);\n };\n document.addEventListener('mousedown', onDocClick);\n return () => document.removeEventListener('mousedown', onDocClick);\n }, [open]);\n\n // Measure the trigger so the popup can render with `position: fixed` +\n // computed coords. position:fixed escapes any ancestor's overflow:hidden\n // (e.g. fumadocs Tabs panes, our Preview frame), which is the\n // single biggest source of \"the dropdown got cut off\" bugs.\n //\n // On native we ignore the web `position:fixed` path entirely and\n // measure via `View.measure(...)` to feed an RN `<Modal>` positioned\n // absolutely below the trigger.\n const [triggerRect, setTriggerRect] = useState<{ top: number; left: number; width: number; height: number } | null>(\n null\n );\n const measureTrigger = useCallback(() => {\n const node = triggerRef.current as unknown as {\n getBoundingClientRect?: () => DOMRect;\n measure?: (cb: (x: number, y: number, w: number, h: number, pageX: number, pageY: number) => void) => void;\n } | null;\n if (!node) {\n return;\n }\n if (Platform.OS === 'web' && typeof node.getBoundingClientRect === 'function') {\n const rect = node.getBoundingClientRect();\n setTriggerRect({ top: rect.top, left: rect.left, width: rect.width, height: rect.height });\n return;\n }\n // Native path — RN's measure() reports page-relative coords on the UI thread.\n if (typeof node.measure === 'function') {\n node.measure((_x, _y, w, h, pageX, pageY) => {\n setTriggerRect({ top: pageY, left: pageX, width: w, height: h });\n });\n }\n }, []);\n useEffect(() => {\n if (!open) {\n return;\n }\n // `window` is defined on RN's Hermes/JSC runtime but `addEventListener`\n // is web-only; gate on Platform.OS to avoid the runtime crash on native.\n if (Platform.OS !== 'web' || typeof window === 'undefined' || typeof window.addEventListener !== 'function') {\n return;\n }\n measureTrigger();\n window.addEventListener('scroll', measureTrigger, true);\n window.addEventListener('resize', measureTrigger);\n return () => {\n window.removeEventListener('scroll', measureTrigger, true);\n window.removeEventListener('resize', measureTrigger);\n };\n }, [open, measureTrigger]);\n\n // Auto-focus the popup container when it opens without a search field —\n // otherwise key events have nowhere to land and the user gets a popup\n // they can only operate with the mouse. With a search field, the input's\n // own auto-focus effect already handles this.\n useEffect(() => {\n if (!open || searchable || Platform.OS !== 'web') {\n return;\n }\n const id = requestAnimationFrame(() => {\n const node = popupRef.current as unknown as { focus?: () => void } | null;\n node?.focus?.();\n });\n return () => cancelAnimationFrame(id);\n }, [open, searchable]);\n\n // Scroll handler for async pagination. ScrollView's onScroll event shape\n // works across both react-native-web (HTMLDivElement under the hood) and\n // native (RCTScrollView), so we read offsets from `nativeEvent`.\n const onListScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (!isAsync) {\n return;\n }\n const { contentOffset, contentSize, layoutMeasurement } = event.nativeEvent;\n const remaining = contentSize.height - contentOffset.y - layoutMeasurement.height;\n if (remaining < itemHeight * 4) {\n loadMore();\n }\n },\n [isAsync, itemHeight, loadMore]\n );\n\n // ---------- visual styling ----------\n const triggerStyle: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n minHeight: 36, // component-density literal — not from theme\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.background.elevated,\n opacity: disabled ? 0.6 : 1,\n };\n\n // Web: position:fixed + computed coords from the trigger so the popup\n // can escape any ancestor with `overflow: hidden` (fumadocs Tabs, our\n // Preview frame, etc.). Width matches the trigger; widen to a 200px\n // floor for readability.\n //\n // Native: same coords, but on `position:'absolute'` inside the Modal —\n // RN doesn't have `position:'fixed'`, but Modal renders above all\n // content as a true overlay so absolute coords against the screen\n // window are correct.\n const winDims = useWindowDimensions();\n const popupStyle: ViewStyle = triggerRect\n ? {\n position: (Platform.OS === 'web' ? 'fixed' : 'absolute') as unknown as 'absolute',\n top: triggerRect.top + triggerRect.height + px(colors.spacing['1']),\n left: dir === 'rtl' ? undefined : triggerRect.left,\n right:\n dir === 'rtl'\n ? Platform.OS === 'web' && typeof window !== 'undefined'\n ? window.innerWidth - (triggerRect.left + triggerRect.width)\n : winDims.width - (triggerRect.left + triggerRect.width)\n : undefined,\n minWidth: Math.max(200, triggerRect.width),\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: px(colors.radius.lg),\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n // 2147483646 (max int32 - 1) so we sit above any third-party\n // chrome (toasts, modals, dev banners) without picking a fight\n // for the very top slot. Combined with portaling to body below,\n // this also dodges any ancestor stacking context that would\n // otherwise trap our z-index inside a sibling preview frame.\n zIndex: 2147483646,\n ...({ boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)' } as ViewStyle),\n }\n : {\n // Trigger not yet measured — render off-screen until the\n // first measurement lands. Avoids a one-frame flash at (0,0).\n position: (Platform.OS === 'web' ? 'fixed' : 'absolute') as unknown as 'absolute',\n top: -9999,\n left: -9999,\n };\n\n const containerProps: Record<string, unknown> = {\n ref: (node: HTMLDivElement | null) => {\n containerRef.current = node;\n },\n ...(testID !== undefined ? { testID } : {}),\n dir,\n };\n\n return (\n <View {...containerProps} className={cn('relative', className)} style={{ position: 'relative' }}>\n {/* RN's Pressable TS surface doesn't model onKeyDown / aria-haspopup; rn-web forwards them. Spread at the boundary. */}\n <Pressable\n ref={(node) => {\n triggerRef.current = node as unknown as HTMLElement | null;\n }}\n {...({\n onKeyDown: handleTriggerKeyDown,\n role: 'combobox',\n accessibilityRole: 'combobox',\n 'aria-expanded': open,\n 'aria-controls': `${baseId}-listbox`,\n 'aria-haspopup': 'listbox',\n tabIndex: disabled ? -1 : 0,\n ...(id !== undefined ? { id, nativeID: id } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(ariaLabel !== undefined ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n ...(ariaLabelledBy !== undefined\n ? { 'aria-labelledby': ariaLabelledBy, accessibilityLabelledBy: ariaLabelledBy }\n : {}),\n ...(ariaDescribedBy !== undefined\n ? { 'aria-describedby': ariaDescribedBy, accessibilityDescribedBy: ariaDescribedBy }\n : {}),\n ...(ariaInvalid === true ? { 'aria-invalid': true } : {}),\n ...(ariaRequired === true ? { 'aria-required': true } : {}),\n ...(disabled ? { 'aria-disabled': true, disabled: true } : {}),\n } as Record<string, unknown>)}\n onPress={() => {\n if (disabled) {\n return;\n }\n // Re-measure on every press so the popup picks up\n // post-scroll / rotation / keyboard-shifted positions.\n measureTrigger();\n setOpen((v) => !v);\n }}\n style={triggerStyle}\n >\n {multiple ? (\n <MultiTriggerLabel options={selectedOptions} placeholder={placeholder} maxChips={maxChips ?? 3} />\n ) : (\n <RNText\n style={{\n color: selectedOption ? colors.semantic.text.default : colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {selectedOption?.label ?? placeholder}\n </RNText>\n )}\n <defaultSemanticIcons.chevronDown size={16} color={colors.semantic.text.muted} />\n </Pressable>\n\n {open ? renderPopup() : null}\n </View>\n );\n\n // Local helper so we can portal to <body> on web. Why: even with\n // position:fixed, an ancestor with `transform`, `filter`, or `will-change`\n // creates a containing block that traps fixed positioning AND a stacking\n // context that traps z-index. The docs preview frames trip both. Portaling\n // to body removes all ambiguity — the popup is a top-level sibling of\n // <body>'s other children. On native, RN doesn't have a portal here, so\n // we render in place; native overflow is rarely a clipping problem\n // because RN doesn't have stacking-context-creating CSS properties.\n function renderPopup(): React.ReactNode {\n const popup = (\n <View\n ref={(node) => {\n popupRef.current = node as unknown as HTMLDivElement | null;\n }}\n {...({\n role: 'listbox',\n id: `${baseId}-listbox`,\n ...(multiple ? { 'aria-multiselectable': true } : {}),\n // Without a search field there's no input to capture\n // keystrokes — make the popup itself focusable and own\n // arrow / Enter / Escape / type-ahead. With a search\n // field these belong to the input below.\n ...(searchable ? {} : { tabIndex: -1, onKeyDown: handlePopupKeyDown }),\n } as Record<string, unknown>)}\n style={popupStyle}\n >\n {searchable ? (\n <SearchInput\n value={searchInput}\n onChange={setSearchInput}\n onKeyDown={handleSearchKeyDown}\n placeholder={searchPlaceholder}\n dir={dir}\n />\n ) : null}\n {multiple && currentValues.length > 0 ? (\n <MultiSelectionHeader count={currentValues.length} onClearAll={clearAll} />\n ) : null}\n <SelectList\n options={visibleOptions}\n activeIndex={activeIndex}\n currentValue={current}\n selectedValues={currentValues}\n multiple={multiple}\n onSelect={onSelect}\n onActiveChange={setActiveIndex}\n {...(renderOption !== undefined ? { renderOption } : {})}\n itemHeight={itemHeight}\n maxHeight={maxMenuHeight}\n virtualized={virtualized}\n loading={isAsync && asyncLoading}\n loadingMessage={loadingMessage}\n noOptionsMessage={noOptionsMessage}\n listboxId={`${baseId}-listbox`}\n onScroll={onListScroll}\n />\n </View>\n );\n if (Platform.OS === 'web' && typeof document !== 'undefined') {\n return createPortal(popup, document.body);\n }\n // Native: wrap in a transparent Modal so the popup renders above\n // all in-tree content (RN has no `position:'fixed'` and an\n // absolute child can't escape its parent's overflow). The\n // Modal's onRequestClose handles Android's hardware back button;\n // a transparent backdrop Pressable closes the popup on outside\n // tap (the equivalent of the document-mousedown handler on web).\n return (\n <Modal transparent visible animationType=\"fade\" onRequestClose={() => setOpen(false)} statusBarTranslucent>\n <Pressable\n onPress={() => setOpen(false)}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n }}\n />\n {popup}\n </Modal>\n );\n }\n};\n\n// ---------- search input (web-native input wrapped in a pressable container) ----------\n\ntype SearchInputProps = {\n value: string;\n onChange: (next: string) => void;\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => void;\n placeholder: string;\n dir: 'ltr' | 'rtl';\n};\n\nconst SearchInput = ({ value, onChange, onKeyDown, placeholder, dir }: SearchInputProps) => {\n const colors = useThemeColors();\n const inputRef = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n // Auto-focus when the popup opens so the user can start typing.\n inputRef.current?.focus?.();\n }, []);\n return (\n <View\n style={{\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: px(colors.spacing['2']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n dir={dir}\n aria-label=\"Search options\"\n style={{\n width: '100%',\n // Inline `padding: '6px 8px'` shorthand intentionally kept as a\n // string for the native HTML <input> — it's not an RN style prop.\n padding: `${px(colors.spacing['2']) - 2}px ${px(colors.spacing['2'])}px`,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n backgroundColor: colors.semantic.background.elevated,\n border: `1px solid ${colors.semantic.border.default}`,\n borderRadius: px(colors.radius.sm),\n outline: 'none',\n }}\n />\n </View>\n );\n};\n\n// ---------- list (with optional virtualization + group headers) ----------\n\ntype SelectListProps<T> = {\n options: ReadonlyArray<SelectOption<T>>;\n activeIndex: number;\n currentValue: string | undefined;\n selectedValues: ReadonlyArray<string>;\n multiple: boolean;\n onSelect: (option: SelectOption<T>) => void;\n onActiveChange: (index: number) => void;\n renderOption?: (option: SelectOption<T>, info: SelectRenderOptionInfo) => ReactNode;\n itemHeight: number;\n maxHeight: number;\n virtualized: boolean;\n loading: boolean;\n loadingMessage: string;\n noOptionsMessage: string;\n listboxId: string;\n onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n};\n\nconst SelectList = <T,>({\n options,\n activeIndex,\n currentValue,\n selectedValues,\n multiple,\n onSelect,\n onActiveChange,\n renderOption,\n itemHeight,\n maxHeight,\n virtualized,\n loading,\n loadingMessage,\n noOptionsMessage,\n listboxId,\n onScroll,\n}: SelectListProps<T>) => {\n const colors = useThemeColors();\n const [scrollTop, setScrollTop] = useState(0);\n\n const totalHeight = options.length * itemHeight;\n const visibleStart = virtualized ? Math.max(0, Math.floor(scrollTop / itemHeight) - VIRTUAL_OVERSCAN) : 0;\n const visibleEnd = virtualized\n ? Math.min(options.length, Math.ceil((scrollTop + maxHeight) / itemHeight) + VIRTUAL_OVERSCAN)\n : options.length;\n\n const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (virtualized) {\n setScrollTop(event.nativeEvent.contentOffset.y);\n }\n onScroll(event);\n };\n\n if (loading && options.length === 0) {\n return (\n <View style={{ padding: px(colors.spacing['4']), alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {loadingMessage}\n </RNText>\n </View>\n );\n }\n if (options.length === 0) {\n return (\n <View style={{ padding: px(colors.spacing['4']), alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {noOptionsMessage}\n </RNText>\n </View>\n );\n }\n\n // Group headers: when consecutive options change `group`, insert a header.\n // For virtualized mode we still respect groups by including any header\n // that precedes the visible window's first item.\n const items: ReactNode[] = [];\n let lastGroup: string | undefined;\n for (let i = visibleStart; i < visibleEnd; i += 1) {\n const opt = options[i];\n if (!opt) {\n continue;\n }\n if (opt.group !== lastGroup && opt.group !== undefined) {\n items.push(\n <View\n // biome-ignore lint/suspicious/noArrayIndexKey: group header position is stable for current visible window\n key={`grp-${i}-${opt.group}`}\n style={{\n paddingHorizontal: px(colors.spacing['3']),\n paddingTop: px(colors.spacing['2']),\n paddingBottom: px(colors.spacing['1']),\n position: virtualized ? 'absolute' : 'relative',\n top: virtualized ? i * itemHeight - px(colors.spacing['4']) : undefined,\n left: 0,\n right: 0,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: 11, // group header — component-density literal — not from theme (smaller than xs)\n fontWeight: colors.fontWeight.semibold as '600',\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n }}\n >\n {opt.group}\n </RNText>\n </View>\n );\n lastGroup = opt.group;\n }\n const selected = multiple ? selectedValues.includes(opt.value) : opt.value === currentValue;\n const active = i === activeIndex;\n const itemNode = renderOption ? (\n renderOption(opt, { selected, active })\n ) : (\n <DefaultOptionRow option={opt} selected={selected} active={active} multiple={multiple} />\n );\n items.push(\n <Pressable\n // biome-ignore lint/suspicious/noArrayIndexKey: option position is stable in the visible window\n key={`opt-${i}-${opt.value}`}\n {...({\n role: 'option',\n accessibilityRole: 'none',\n 'aria-selected': selected,\n onMouseEnter: () => onActiveChange(i),\n ...(opt.disabled ? { 'aria-disabled': true, disabled: true } : {}),\n } as Record<string, unknown>)}\n onPress={() => onSelect(opt)}\n style={{\n position: virtualized ? 'absolute' : 'relative',\n top: virtualized ? i * itemHeight : undefined,\n left: 0,\n right: 0,\n height: itemHeight,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: px(colors.spacing['3']),\n backgroundColor: active ? colors.semantic.background.subtle : 'transparent',\n opacity: opt.disabled ? 0.5 : 1,\n }}\n >\n {itemNode}\n </Pressable>\n );\n }\n\n // ScrollView is the cross-platform container — react-native-web emits\n // scroll events with the same `nativeEvent.contentOffset` shape as\n // native, so the handler is identical on both. Web also gets the\n // `nativeID` prop mapped to the underlying div's `id` for a11y.\n return (\n <ScrollView\n nativeID={listboxId}\n onScroll={handleScroll}\n scrollEventThrottle={16}\n style={{ maxHeight }}\n contentContainerStyle={virtualized ? { height: totalHeight, position: 'relative' } : undefined}\n >\n {items}\n </ScrollView>\n );\n};\n\nconst DefaultOptionRow = <T,>({\n option,\n selected,\n active,\n multiple = false,\n}: {\n option: SelectOption<T>;\n selected: boolean;\n active: boolean;\n multiple?: boolean;\n}) => {\n const colors = useThemeColors();\n return (\n <View style={{ flexDirection: 'row', alignItems: 'center', flex: 1, gap: px(colors.spacing['2']) }}>\n {multiple ? (\n // Inline checkbox-style indicator. We don't reuse <Checkbox>\n // here because the row is already a Pressable — nesting two\n // pressable surfaces breaks tap handling on native; this\n // is purely visual (the Pressable parent owns the toggle).\n <View\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n width: 18,\n height: 18,\n borderWidth: 1,\n borderRadius: px(colors.radius.sm),\n borderColor: selected ? colors.semantic.interactive.primary : colors.semantic.border.strong,\n backgroundColor: selected ? colors.semantic.interactive.primary : 'transparent',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {selected ? <defaultSemanticIcons.check size={12} color={colors.semantic.text.inverted} /> : null}\n </View>\n ) : null}\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: selected ? (colors.fontWeight.semibold as '600') : (colors.fontWeight.regular as '400'),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {option.label}\n </RNText>\n {selected && !multiple ? (\n <defaultSemanticIcons.check size={16} color={colors.semantic.interactive.primary} />\n ) : null}\n {/* keep `active` referenced — it's part of the public API consumers see via renderOption */}\n {active ? null : null}\n </View>\n );\n};\n\n// ---------- multi-select trigger label (chips with overflow) ----------\n\nconst MultiTriggerLabel = <T,>({\n options,\n placeholder,\n maxChips,\n}: {\n options: ReadonlyArray<SelectOption<T>>;\n placeholder: string;\n maxChips: number;\n}) => {\n const colors = useThemeColors();\n if (options.length === 0) {\n return (\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {placeholder}\n </RNText>\n );\n }\n // When the selection grows beyond `maxChips`, collapse to a counter so\n // the trigger height stays stable on narrow screens.\n if (options.length > maxChips) {\n return (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n fontVariant: ['tabular-nums'],\n flex: 1,\n }}\n numberOfLines={1}\n >\n {options.length} selected\n </RNText>\n );\n }\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n flexWrap: 'wrap',\n rowGap: px(colors.spacing['1']),\n columnGap: px(colors.spacing['1']),\n flex: 1,\n }}\n >\n {options.map((opt) => (\n <View\n key={`chip-${opt.value}`}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 2,\n borderRadius: px(colors.radius.sm),\n backgroundColor: colors.semantic.background.subtle,\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n numberOfLines={1}\n >\n {opt.label}\n </RNText>\n </View>\n ))}\n </View>\n );\n};\n\n// ---------- multi-select popup header with \"Clear all\" affordance ----------\n\nconst MultiSelectionHeader = ({ count, onClearAll }: { count: number; onClearAll: () => void }) => {\n const colors = useThemeColors();\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontVariant: ['tabular-nums'],\n }}\n >\n {count} selected\n </RNText>\n <Pressable\n role=\"button\"\n accessibilityRole=\"button\"\n aria-label=\"Clear all\"\n accessibilityLabel=\"Clear all\"\n onPress={onClearAll}\n style={({ pressed }) => ({\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 2,\n borderRadius: px(colors.radius.sm),\n opacity: pressed ? 0.6 : 1,\n })}\n >\n <RNText\n style={{\n color: colors.semantic.interactive.primary,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n Clear all\n </RNText>\n </Pressable>\n </View>\n );\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { createContext, type ReactNode, useContext } from 'react';\n\nexport type CaptionOption = {\n value: number;\n label: string;\n disabled: boolean;\n};\n\nexport type CaptionContextValue = {\n /** Currently displayed month, 1..12. */\n month: number;\n /** Currently displayed year. */\n year: number;\n visibleMonth: CalendarDate;\n /** All months a, optional disabled flag derived from min/max + isDateUnavailable. */\n monthOptions: ReadonlyArray<CaptionOption>;\n /** Years inside `yearRange`, optional disabled flag. */\n yearOptions: ReadonlyArray<CaptionOption>;\n /** Set the displayed month, 1..12. */\n setMonth: (month: number) => void;\n /** Set the displayed year. */\n setYear: (year: number) => void;\n /** Move to the previous month/year/decade depending on the current view. */\n goPrev: () => void;\n /** Move to the next month/year/decade depending on the current view. */\n goNext: () => void;\n};\n\nconst CaptionContext = createContext<CaptionContextValue | null>(null);\nCaptionContext.displayName = 'CalendarCaptionContext';\n\nexport type CaptionProviderProps = {\n value: CaptionContextValue;\n children?: ReactNode;\n};\n\nexport const CaptionProvider = ({ value, children }: CaptionProviderProps) => (\n <CaptionContext.Provider value={value}>{children}</CaptionContext.Provider>\n);\n\n/**\n * Returns the current caption state and setters for a Calendar. Use inside\n * a `<Calendar.Caption>` slot (or any direct child of a Calendar with\n * `caption=\"custom\"`) to render your own dropdowns / navigation.\n *\n * @throws if called outside a Calendar with `caption=\"custom\"`.\n */\nexport const useCalendarCaption = (): CaptionContextValue => {\n const ctx = useContext(CaptionContext);\n if (!ctx) {\n throw new Error('useCalendarCaption must be called inside a <Calendar caption=\"custom\"> subtree.');\n }\n return ctx;\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { type ReactNode, useMemo } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { useTranslation } from '../../../i18n/use-translation';\nimport { useThemeColors } from '../../../theme/use-theme-colors';\nimport { Select } from '../../Select';\nimport type { CalendarCaption, CalendarView } from '../Calendar.types';\nimport { formatMonthNames, formatMonthYearTitle } from '../state/locale-utils';\nimport { type CaptionContextValue, type CaptionOption, CaptionProvider } from '../state/use-caption';\n\nconst ARROW_BUTTON_GAP = 8;\n\ntype CaptionProps = {\n /** All visible months, leftmost first. Always length-1 for non-day views. */\n months: ReadonlyArray<CalendarDate>;\n locale: string;\n view: CalendarView;\n caption: CalendarCaption;\n /** Width of one month grid; titles align centered above each grid. */\n gridWidth: number;\n monthGap: number;\n /** Year-dropdown bounds. */\n yearRange: [min: number, max: number];\n /** Constraint for disabling out-of-bounds options. */\n isMonthDisabled?: (year: number, month: number) => boolean;\n isYearDisabled?: (year: number) => boolean;\n onPrev: () => void;\n onNext: () => void;\n onTitlePress: (clicked: CalendarDate) => void;\n /** Mutate the anchor month for a specific visible month index. */\n onSetMonth: (slotIndex: number, month: number) => void;\n onSetYear: (slotIndex: number, year: number) => void;\n /** Children for `caption=\"custom\"` mode. */\n children?: ReactNode;\n};\n\ntype NavButtonProps = {\n label: string;\n onPress: () => void;\n children: ReactNode;\n};\n\nconst NavButton = ({ label, onPress, children }: NavButtonProps) => {\n const colors = useThemeColors();\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n onPress={onPress}\n style={({ pressed, hovered, focused }: { pressed: boolean; hovered?: boolean; focused?: boolean }) => {\n const base: ViewStyle = {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 8,\n };\n const transition = {\n transitionProperty: 'background-color, border-color, transform',\n transitionDuration: '140ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n outlineStyle: 'none',\n } as unknown as ViewStyle;\n const bg = pressed\n ? colors.color.primary['200']\n : hovered\n ? colors.color.primary['100']\n : 'transparent';\n const border = focused\n ? { borderWidth: 2, borderColor: colors.semantic.interactive.primary }\n : { borderWidth: 0 };\n return [base, transition, { backgroundColor: bg, transform: [{ scale: pressed ? 0.94 : 1 }] }, border];\n }}\n >\n <RNText style={{ color: colors.semantic.text.default, fontSize: 16, lineHeight: 16, fontWeight: '500' }}>\n {children}\n </RNText>\n </Pressable>\n );\n};\n\nconst TitleButton = ({\n text,\n ariaLabel,\n onPress,\n drilldown,\n}: {\n text: string;\n ariaLabel: string;\n onPress?: () => void;\n drilldown: boolean;\n}) => {\n const colors = useThemeColors();\n if (!onPress) {\n return (\n <View style={{ paddingHorizontal: 12, paddingVertical: 6, alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontSize: 15,\n fontWeight: '600',\n letterSpacing: -0.1,\n }}\n >\n {text}\n </RNText>\n </View>\n );\n }\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={ariaLabel}\n onPress={onPress}\n style={({ pressed, hovered, focused }: { pressed: boolean; hovered?: boolean; focused?: boolean }) => {\n const base: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 8,\n };\n const transition = {\n transitionProperty: 'background-color, transform',\n transitionDuration: '140ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n outlineStyle: 'none',\n } as unknown as ViewStyle;\n const bg = pressed\n ? colors.color.primary['200']\n : hovered\n ? colors.color.primary['100']\n : 'transparent';\n const border = focused\n ? { borderWidth: 2, borderColor: colors.semantic.interactive.primary }\n : { borderWidth: 0 };\n return [base, transition, { backgroundColor: bg, transform: [{ scale: pressed ? 0.97 : 1 }] }, border];\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontSize: 15,\n fontWeight: '600',\n letterSpacing: -0.1,\n }}\n >\n {text}\n </RNText>\n {drilldown ? (\n <RNText aria-hidden style={{ color: colors.semantic.text.muted, fontSize: 10, opacity: 0.7 }}>\n ▾\n </RNText>\n ) : null}\n </Pressable>\n );\n};\n\nexport const Caption = ({\n months,\n locale,\n view,\n caption,\n gridWidth,\n monthGap,\n yearRange,\n isMonthDisabled,\n isYearDisabled,\n onPrev,\n onNext,\n onTitlePress,\n onSetMonth,\n onSetYear,\n children,\n}: CaptionProps) => {\n const { t } = useTranslation();\n\n const titleText = (m: CalendarDate) => {\n if (view === 'day') {\n return formatMonthYearTitle(m, locale);\n }\n if (view === 'month') {\n return String(m.year);\n }\n const start = m.year - (m.year % 10);\n return `${start} – ${start + 11}`;\n };\n\n const titleAriaKey =\n view === 'day'\n ? 'calendar.header.openMonthView'\n : view === 'month'\n ? 'calendar.header.openYearView'\n : 'calendar.header.openDayView';\n\n // Title row width — sized to the visible grids so titles align over them.\n const showMultiTitles = view === 'day' && months.length > 1;\n const titleRowWidth = showMultiTitles ? months.length * gridWidth + (months.length - 1) * monthGap : gridWidth;\n\n // Month and year option lists — used by the dropdown / custom modes.\n const monthNames = useMemo(() => formatMonthNames(locale), [locale]);\n\n // Custom mode: provide the context for slot consumers and render their JSX.\n // We use `months[0]` (focused leftmost month) for context — when consumers\n // need per-month dropdowns they can compose multiple `Calendar.Caption`s.\n const focused = months[0] ?? undefined;\n if (!focused) {\n return null;\n }\n const ctxValue: CaptionContextValue = {\n month: focused.month,\n year: focused.year,\n visibleMonth: focused,\n monthOptions: monthNames.map((label, i) => ({\n value: i + 1,\n label,\n disabled: isMonthDisabled?.(focused.year, i + 1) ?? false,\n })),\n yearOptions: Array.from({ length: yearRange[1] - yearRange[0] + 1 }, (_, i) => ({\n value: yearRange[0] + i,\n label: String(yearRange[0] + i),\n disabled: isYearDisabled?.(yearRange[0] + i) ?? false,\n })),\n setMonth: (m) => onSetMonth(0, m),\n setYear: (y) => onSetYear(0, y),\n goPrev: onPrev,\n goNext: onNext,\n };\n\n if (caption === 'custom') {\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingBottom: 10,\n gap: ARROW_BUTTON_GAP,\n alignSelf: 'center',\n }}\n >\n <CaptionProvider value={ctxValue}>{children}</CaptionProvider>\n </View>\n );\n }\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingBottom: 10,\n gap: ARROW_BUTTON_GAP,\n alignSelf: 'center',\n }}\n >\n <NavButton label={t('calendar.header.previous', { defaultValue: 'Previous month' })} onPress={onPrev}>\n ‹\n </NavButton>\n <View style={{ flexDirection: 'row', gap: monthGap, width: titleRowWidth }}>\n {showMultiTitles ? (\n months.map((m, i) => (\n <View key={`${m.year}-${m.month}`} style={{ width: gridWidth, alignItems: 'center' }}>\n {caption === 'dropdown' && view === 'day' ? (\n <DropdownPair\n month={m.month}\n year={m.year}\n monthOptions={monthNames.map((label, j) => ({\n value: j + 1,\n label,\n disabled: isMonthDisabled?.(m.year, j + 1) ?? false,\n }))}\n yearOptions={makeYearOptions(yearRange, isYearDisabled)}\n onMonthChange={(next) => onSetMonth(i, next)}\n onYearChange={(next) => onSetYear(i, next)}\n />\n ) : (\n <TitleButton\n text={titleText(m)}\n ariaLabel={t(titleAriaKey, { defaultValue: 'Change view' })}\n onPress={() => onTitlePress(m)}\n drilldown\n />\n )}\n </View>\n ))\n ) : (\n <View style={{ width: gridWidth, alignItems: 'center' }}>\n {caption === 'dropdown' && view === 'day' ? (\n <DropdownPair\n month={focused.month}\n year={focused.year}\n monthOptions={monthNames.map((label, j) => ({\n value: j + 1,\n label,\n disabled: isMonthDisabled?.(focused.year, j + 1) ?? false,\n }))}\n yearOptions={makeYearOptions(yearRange, isYearDisabled)}\n onMonthChange={(next) => onSetMonth(0, next)}\n onYearChange={(next) => onSetYear(0, next)}\n />\n ) : (\n <TitleButton\n text={titleText(focused)}\n ariaLabel={t(titleAriaKey, { defaultValue: 'Change view' })}\n onPress={() => onTitlePress(focused)}\n drilldown\n />\n )}\n </View>\n )}\n </View>\n <NavButton label={t('calendar.header.next', { defaultValue: 'Next month' })} onPress={onNext}>\n ›\n </NavButton>\n </View>\n );\n};\n\nconst makeYearOptions = (\n yearRange: [number, number],\n isYearDisabled?: (year: number) => boolean\n): ReadonlyArray<CaptionOption> =>\n Array.from({ length: yearRange[1] - yearRange[0] + 1 }, (_, i) => ({\n value: yearRange[0] + i,\n label: String(yearRange[0] + i),\n disabled: isYearDisabled?.(yearRange[0] + i) ?? false,\n }));\n\ntype DropdownPairProps = {\n month: number;\n year: number;\n monthOptions: ReadonlyArray<CaptionOption>;\n yearOptions: ReadonlyArray<CaptionOption>;\n onMonthChange: (m: number) => void;\n onYearChange: (y: number) => void;\n};\n\nconst DropdownPair = ({ month, year, monthOptions, yearOptions, onMonthChange, onYearChange }: DropdownPairProps) => {\n return (\n <View style={{ flexDirection: 'row', gap: 6 }}>\n <Select\n value={String(month)}\n onChange={(v) => onMonthChange(Number(v))}\n options={monthOptions.map((o) => ({\n value: String(o.value),\n label: o.label,\n disabled: o.disabled,\n }))}\n aria-label=\"Month\"\n searchable={false}\n />\n <Select\n value={String(year)}\n onChange={(v) => onYearChange(Number(v))}\n options={yearOptions.map((o) => ({\n value: String(o.value),\n label: o.label,\n disabled: o.disabled,\n }))}\n aria-label=\"Year\"\n searchable={false}\n />\n </View>\n );\n};\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport type { TextStyle, ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { useThemeColors } from '../../../theme/use-theme-colors';\nimport type { DayContext } from '../Calendar.types';\n\nexport type DayCellProps = {\n ctx: DayContext;\n onPress: () => void;\n onHoverIn?: () => void;\n onHoverOut?: () => void;\n /** When provided, the slot wins over default day rendering. */\n renderDay?: (ctx: DayContext) => ReactNode;\n /**\n * BCP-47 locale used to format the accessibility label\n * (e.g. \"Friday, May 8, 2026\"). Falls back to undefined (runtime default)\n * if not provided.\n */\n locale?: string;\n};\n\nexport const CELL_SIZE = 40;\n\n/**\n * Module-scope cache of Intl.DateTimeFormat instances keyed by locale.\n * Prior to caching, each DayCell instantiated a new formatter per render\n * (~420+ instantiations per scroll burst in scroll mode). The cache is\n * unbounded but the live locale set is also bounded — typically 1–2\n * entries per app — so no LRU is needed.\n */\nconst formatterCache = new Map<string, Intl.DateTimeFormat>();\nconst RUNTIME_DEFAULT_LOCALE_KEY = '__default__';\n\nconst getDayFormatter = (locale: string | undefined): Intl.DateTimeFormat | null => {\n const key = locale ?? RUNTIME_DEFAULT_LOCALE_KEY;\n const cached = formatterCache.get(key);\n if (cached) {\n return cached;\n }\n try {\n const fmt = new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n });\n formatterCache.set(key, fmt);\n return fmt;\n } catch {\n return null;\n }\n};\n\n/**\n * Builds the day cell's accessibility label. Format:\n * \"{weekday}, {Month} {day}, {year}\" + optional state suffixes,\n * e.g. \"Friday, May 8, 2026, today, selected\".\n *\n * Kept module-local so view tests / Profiler harnesses can match it\n * with a regex without depending on Intl output for the suffix.\n *\n * KNOWN LIMITATION: State suffixes (\"today\", \"selected\", \"in range\",\n * \"unavailable\") are hardcoded English. Non-English locales get\n * mixed-language output (e.g. \"2026年5月8日金曜日, today\"). Proper\n * fix routes these through the project's i18n provider; tracked as\n * a follow-up to be addressed alongside the broader i18n sweep.\n *\n * TODO(i18n): localize state suffixes.\n */\nconst formatDayLabel = (ctx: DayContext, locale?: string): string => {\n const jsDate = new Date(Date.UTC(ctx.date.year, ctx.date.month - 1, ctx.date.day));\n const fmt = getDayFormatter(locale);\n const base = fmt\n ? fmt.format(jsDate)\n : // Fallback if the runtime rejects the locale tag.\n `${ctx.date.month}/${ctx.date.day}/${ctx.date.year}`;\n\n const suffixes: string[] = [];\n if (ctx.isToday) {\n suffixes.push('today');\n }\n if (ctx.isSelected || ctx.isRangeStart || ctx.isRangeEnd) {\n suffixes.push('selected');\n }\n if (ctx.isInRange && !ctx.isRangeStart && !ctx.isRangeEnd) {\n suffixes.push('in range');\n }\n if (ctx.isUnavailable) {\n suffixes.push('unavailable');\n }\n\n return suffixes.length > 0 ? `${base}, ${suffixes.join(', ')}` : base;\n};\n\nexport const DayCell = ({ ctx, onPress, onHoverIn, onHoverOut, renderDay, locale }: DayCellProps) => {\n const colors = useThemeColors();\n const accessibilityLabel = formatDayLabel(ctx, locale);\n\n const isSelectedLike = ctx.isSelected || ctx.isRangeStart || ctx.isRangeEnd;\n\n // Range middle / preview cells get a flat background drawn by the\n // gridcell wrapper in DayGrid (so adjacent cells visually connect).\n // The DayCell itself is transparent in that case.\n const isInsideRange = ctx.isInRange || ctx.isInPreviewRange;\n const isRangeMiddle = isInsideRange && !isSelectedLike;\n\n const dataState = ctx.isSelected\n ? 'selected'\n : ctx.isRangeStart\n ? 'range-start'\n : ctx.isRangeEnd\n ? 'range-end'\n : ctx.isInPreviewRange\n ? 'preview'\n : ctx.isInRange\n ? 'in-range'\n : undefined;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ disabled: ctx.isUnavailable, selected: isSelectedLike }}\n disabled={ctx.isUnavailable}\n onPress={onPress}\n {...(onHoverIn ? { onHoverIn } : {})}\n {...(onHoverOut ? { onHoverOut } : {})}\n style={({ pressed, hovered, focused }: { pressed: boolean; hovered?: boolean; focused?: boolean }) => {\n const base: ViewStyle = {\n width: CELL_SIZE,\n height: CELL_SIZE,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 999, // perfect circle for endpoints/selected\n position: 'relative',\n };\n\n if (ctx.isUnavailable) {\n return [base, { opacity: 0.28 }];\n }\n\n let backgroundColor: string | undefined;\n let transform: ViewStyle['transform'];\n let borderWidth: number | undefined;\n let borderColor: string | undefined;\n\n if (isSelectedLike) {\n backgroundColor = colors.semantic.interactive.primary;\n if (pressed) {\n backgroundColor = colors.semantic.interactive.primaryPressed;\n } else if (hovered) {\n backgroundColor = colors.semantic.interactive.primaryHover;\n }\n transform = [{ scale: pressed ? 0.94 : 1 }];\n } else if (isRangeMiddle) {\n // Sits ON TOP of the gridcell range fill. Keep transparent\n // so the bar reads continuous across cells. On hover we\n // brighten with a soft circular halo.\n backgroundColor = hovered ? colors.color.primary['200'] : 'transparent';\n transform = [{ scale: pressed ? 0.94 : 1 }];\n } else {\n // Idle / hover / focus on a non-selected non-range cell.\n if (pressed) {\n backgroundColor = colors.color.primary['200'];\n } else if (hovered) {\n backgroundColor = colors.color.primary['100'];\n } else {\n backgroundColor = 'transparent';\n }\n transform = [{ scale: pressed ? 0.94 : 1 }];\n }\n\n if ((ctx.isFocused || focused) && !isSelectedLike) {\n borderWidth = 2;\n borderColor = colors.semantic.interactive.primary;\n }\n\n // RN-Web honors these as CSS transitions; native ignores silently.\n const transition: ViewStyle = {\n transitionProperty: 'background-color, transform, border-color, opacity',\n transitionDuration: '140ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n outlineStyle: 'none',\n } as unknown as ViewStyle;\n\n return [\n base,\n transition,\n {\n backgroundColor,\n ...(transform ? { transform } : {}),\n ...(borderWidth ? { borderWidth, borderColor } : {}),\n },\n ];\n }}\n {...({\n dataSet: {\n dayKey: `${ctx.date.year}-${ctx.date.month}-${ctx.date.day}`,\n ...(dataState ? { state: dataState } : {}),\n },\n } as unknown as { dataSet: Record<string, string> })}\n >\n {renderDay ? (\n renderDay(ctx)\n ) : (\n <>\n <RNText\n style={\n {\n color: isSelectedLike\n ? colors.semantic.text.inverted\n : ctx.isOutsideMonth\n ? colors.semantic.text.muted\n : colors.semantic.text.default,\n fontSize: 14,\n fontWeight: ctx.isToday ? '600' : '400',\n opacity: ctx.isOutsideMonth ? 0.55 : 1,\n transitionProperty: 'color',\n transitionDuration: '140ms',\n } as unknown as TextStyle\n }\n >\n {ctx.date.day}\n </RNText>\n {/* Today indicator: a 4px dot below the number, primary-colored,\n becomes white when the cell is selected. Subtler than a ring\n and never causes layout shift. */}\n {ctx.isToday ? (\n <View\n style={{\n position: 'absolute',\n bottom: 5,\n width: 4,\n height: 4,\n borderRadius: 999,\n backgroundColor: isSelectedLike\n ? colors.semantic.text.inverted\n : colors.semantic.interactive.primary,\n }}\n />\n ) : null}\n </>\n )}\n </Pressable>\n );\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { getLocalTimeZone, startOfMonth, today } from '@internationalized/date';\nimport { type ReactNode, useMemo } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { useThemeColors } from '../../../theme/use-theme-colors';\nimport type { CalendarMode, CalendarValue, DateRange, DayContext } from '../Calendar.types';\nimport { type DayOfWeek, formatWeekdayNames, getFirstDayOfWeek } from '../state/locale-utils';\nimport { CELL_SIZE, DayCell } from './DayCell';\n\ntype DayGridProps<M extends CalendarMode> = {\n visibleMonth: CalendarDate;\n locale: string;\n mode: M;\n value: CalendarValue<M>;\n previewRange?: DateRange | null;\n focusedDate: CalendarDate;\n isUnavailable: (date: CalendarDate) => boolean;\n weekendDays: [DayOfWeek, DayOfWeek];\n firstDayOfWeek?: DayOfWeek;\n onDayPress: (date: CalendarDate) => void;\n onDayHover?: (date: CalendarDate | null) => void;\n renderDay?: (ctx: DayContext) => ReactNode;\n};\n\nconst isInRange = (date: CalendarDate, range: DateRange | null | undefined): boolean => {\n if (!range?.end) {\n return false;\n }\n return date.compare(range.start) >= 0 && date.compare(range.end) <= 0;\n};\n\nconst buildContext = <M extends CalendarMode>(\n date: CalendarDate,\n args: {\n visibleMonth: CalendarDate;\n mode: M;\n value: CalendarValue<M>;\n previewRange?: DateRange | null;\n focusedDate: CalendarDate;\n isUnavailable: (date: CalendarDate) => boolean;\n weekendDays: [DayOfWeek, DayOfWeek];\n todayDate: CalendarDate;\n }\n): DayContext => {\n const isOutsideMonth = date.month !== args.visibleMonth.month;\n const isToday = date.compare(args.todayDate) === 0;\n const dow = date.toDate('UTC').getUTCDay() as DayOfWeek;\n const isWeekend = args.weekendDays.includes(dow);\n let isSelected = false;\n let isRangeStart = false;\n let isRangeEnd = false;\n let inRange = false;\n\n if (args.mode === 'single') {\n const v = args.value as CalendarDate | null;\n isSelected = !!v && v.compare(date) === 0;\n } else if (args.mode === 'range') {\n const r = args.value as DateRange | null;\n if (r) {\n isRangeStart = r.start.compare(date) === 0;\n isRangeEnd = r.end !== null && r.end.compare(date) === 0;\n inRange = isInRange(date, r);\n }\n } else {\n const arr = args.value as CalendarDate[];\n isSelected = arr.some((x) => x.compare(date) === 0);\n }\n\n return {\n date,\n isOutsideMonth,\n isToday,\n isSelected,\n isRangeStart,\n isRangeEnd,\n isInRange: inRange,\n isInPreviewRange: isInRange(date, args.previewRange ?? null),\n isUnavailable: args.isUnavailable(date),\n isFocused: args.focusedDate.compare(date) === 0,\n isWeekend,\n };\n};\n\n// Stable row keys for the 6-row grid — never reorder, never change count.\nconst ROW_KEYS = ['row-0', 'row-1', 'row-2', 'row-3', 'row-4', 'row-5'] as const;\n\nexport const DayGrid = <M extends CalendarMode>(props: DayGridProps<M>) => {\n const {\n visibleMonth,\n locale,\n mode,\n value,\n previewRange,\n focusedDate,\n isUnavailable,\n weekendDays,\n firstDayOfWeek,\n onDayPress,\n onDayHover,\n renderDay,\n } = props;\n\n const colors = useThemeColors();\n const fdow = firstDayOfWeek ?? getFirstDayOfWeek(locale);\n\n const cells = useMemo<CalendarDate[]>(() => {\n const start = startOfMonth(visibleMonth);\n const startDow = start.toDate('UTC').getUTCDay() as DayOfWeek;\n const back = (startDow - fdow + 7) % 7;\n const first = start.subtract({ days: back });\n const total = 42; // 6 rows × 7 — handles all month layouts\n return Array.from({ length: total }, (_, i) => first.add({ days: i }));\n }, [visibleMonth, fdow]);\n\n const weekdayNames = useMemo(() => formatWeekdayNames(locale), [locale]);\n const todayDate = useMemo(() => today(getLocalTimeZone()), []);\n\n const gridWidth = 7 * CELL_SIZE;\n\n return (\n <View role=\"grid\" style={{ width: gridWidth }}>\n <View role=\"row\" style={{ flexDirection: 'row', marginBottom: 4 }}>\n {weekdayNames.map((name) => (\n <View\n key={name}\n role=\"columnheader\"\n style={{ width: CELL_SIZE, alignItems: 'center', paddingVertical: 6 }}\n >\n <RNText\n style={{\n fontSize: 11,\n fontWeight: '500',\n letterSpacing: 0.6,\n color: colors.semantic.text.muted,\n textTransform: 'uppercase',\n }}\n >\n {name}\n </RNText>\n </View>\n ))}\n </View>\n {ROW_KEYS.map((rowKey, row) => (\n <View key={rowKey} role=\"row\" style={{ flexDirection: 'row' }}>\n {cells.slice(row * 7, row * 7 + 7).map((date) => {\n const ctx = buildContext(date, {\n visibleMonth,\n mode,\n value,\n ...(previewRange !== undefined ? { previewRange } : {}),\n focusedDate,\n isUnavailable,\n weekendDays,\n todayDate,\n });\n const isSelectedLike = ctx.isSelected || ctx.isRangeStart || ctx.isRangeEnd;\n const isInsideRange = ctx.isInRange || ctx.isInPreviewRange;\n\n // Range continuity: middle cells get a flat full-width\n // background. Endpoints get a half-fill on the side\n // facing the range so the bar visually connects with\n // the adjacent cell. Single-day ranges get no spillover.\n const wrapperStyle: ViewStyle = {\n width: CELL_SIZE,\n height: CELL_SIZE,\n position: 'relative',\n };\n const rangeFillTint = colors.color.primary['100'];\n let rangeFillStyle: ViewStyle | null = null;\n\n if (ctx.isRangeStart && !ctx.isRangeEnd) {\n rangeFillStyle = {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: '50%',\n right: 0,\n backgroundColor: rangeFillTint,\n };\n } else if (ctx.isRangeEnd && !ctx.isRangeStart) {\n rangeFillStyle = {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: '50%',\n backgroundColor: rangeFillTint,\n };\n } else if (isInsideRange && !isSelectedLike) {\n rangeFillStyle = {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: rangeFillTint,\n };\n }\n\n const gridcellProps = {\n role: 'gridcell' as 'cell',\n ...(isSelectedLike ? { 'aria-selected': true as const } : {}),\n };\n\n return (\n <View\n key={`${date.year}-${date.month}-${date.day}`}\n {...gridcellProps}\n style={wrapperStyle}\n >\n {rangeFillStyle ? <View style={rangeFillStyle} /> : null}\n <DayCell\n ctx={ctx}\n locale={locale}\n onPress={() => onDayPress(date)}\n {...(onDayHover\n ? {\n onHoverIn: () => onDayHover(date),\n onHoverOut: () => onDayHover(null),\n }\n : {})}\n {...(renderDay ? { renderDay } : {})}\n />\n </View>\n );\n })}\n </View>\n ))}\n </View>\n );\n};\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { View } from 'react-native';\n\nexport const Footer = ({ children }: { children?: ReactNode }) => <View style={{ paddingTop: 12 }}>{children}</View>;\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { useThemeColors } from '../../../theme/use-theme-colors';\nimport { formatMonthNames } from '../state/locale-utils';\n\ntype MonthGridProps = {\n visibleMonth: CalendarDate;\n locale: string;\n /** Width to fill (calendar inner width). Cells distribute across this. */\n availableWidth: number;\n onSelect: (month: number) => void; // 1..12\n};\n\nconst ROW_KEYS = ['r0', 'r1', 'r2', 'r3'] as const;\n\nexport const MonthGrid = ({ visibleMonth, locale, availableWidth, onSelect }: MonthGridProps) => {\n const colors = useThemeColors();\n const names = formatMonthNames(locale);\n const cellHeight = 56;\n\n return (\n <View style={{ width: availableWidth, paddingVertical: 8 }}>\n {ROW_KEYS.map((rowKey, row) => (\n <View key={rowKey} style={{ flexDirection: 'row', marginBottom: 4 }}>\n {[0, 1, 2].map((col) => {\n const idx = row * 3 + col;\n const monthNumber = idx + 1;\n const isCurrent = monthNumber === visibleMonth.month;\n const name = names[idx] ?? '';\n return (\n <View key={monthNumber} style={{ flex: 1, paddingHorizontal: 4 }}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={name}\n onPress={() => onSelect(monthNumber)}\n style={({\n pressed,\n hovered,\n focused,\n }: {\n pressed: boolean;\n hovered?: boolean;\n focused?: boolean;\n }) => {\n const base: ViewStyle = {\n height: cellHeight,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 10,\n };\n const transition = {\n transitionProperty: 'background-color, transform, border-color',\n transitionDuration: '140ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n outlineStyle: 'none',\n } as unknown as ViewStyle;\n let bg: string;\n if (isCurrent) {\n bg = pressed\n ? colors.semantic.interactive.primaryPressed\n : hovered\n ? colors.semantic.interactive.primaryHover\n : colors.semantic.interactive.primary;\n } else if (pressed) {\n bg = colors.color.primary['200'];\n } else if (hovered) {\n bg = colors.color.primary['100'];\n } else {\n bg = 'transparent';\n }\n const border =\n focused && !isCurrent\n ? { borderWidth: 2, borderColor: colors.semantic.interactive.primary }\n : { borderWidth: 0 };\n return [\n base,\n transition,\n { backgroundColor: bg, transform: [{ scale: pressed ? 0.96 : 1 }] },\n border,\n ];\n }}\n >\n <RNText\n style={{\n color: isCurrent\n ? colors.semantic.text.inverted\n : colors.semantic.text.default,\n fontSize: 14,\n fontWeight: isCurrent ? '600' : '500',\n }}\n >\n {name}\n </RNText>\n </Pressable>\n </View>\n );\n })}\n </View>\n ))}\n </View>\n );\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { useThemeColors } from '../../../theme/use-theme-colors';\n\ntype YearGridProps = {\n visibleMonth: CalendarDate;\n /** Width to fill (calendar inner width). */\n availableWidth: number;\n onSelect: (year: number) => void;\n};\n\nconst ROW_KEYS = ['r0', 'r1', 'r2'] as const;\n\nexport const YearGrid = ({ visibleMonth, availableWidth, onSelect }: YearGridProps) => {\n const colors = useThemeColors();\n const decadeStart = visibleMonth.year - (visibleMonth.year % 10);\n const years = Array.from({ length: 12 }, (_, i) => decadeStart + i - 1);\n const cellHeight = 60;\n\n return (\n <View style={{ width: availableWidth, paddingVertical: 8 }}>\n {ROW_KEYS.map((rowKey, row) => (\n <View key={rowKey} style={{ flexDirection: 'row', marginBottom: 4 }}>\n {[0, 1, 2, 3].map((col) => {\n const year = years[row * 4 + col];\n if (year === undefined) {\n return null;\n }\n const isCurrent = year === visibleMonth.year;\n const isAdjacentDecade = year < decadeStart || year >= decadeStart + 10;\n return (\n <View key={year} style={{ flex: 1, paddingHorizontal: 4 }}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={String(year)}\n onPress={() => onSelect(year)}\n style={({\n pressed,\n hovered,\n focused,\n }: {\n pressed: boolean;\n hovered?: boolean;\n focused?: boolean;\n }) => {\n const base: ViewStyle = {\n height: cellHeight,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 10,\n };\n const transition = {\n transitionProperty: 'background-color, transform, border-color',\n transitionDuration: '140ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n outlineStyle: 'none',\n } as unknown as ViewStyle;\n let bg: string;\n if (isCurrent) {\n bg = pressed\n ? colors.semantic.interactive.primaryPressed\n : hovered\n ? colors.semantic.interactive.primaryHover\n : colors.semantic.interactive.primary;\n } else if (pressed) {\n bg = colors.color.primary['200'];\n } else if (hovered) {\n bg = colors.color.primary['100'];\n } else {\n bg = 'transparent';\n }\n const border =\n focused && !isCurrent\n ? { borderWidth: 2, borderColor: colors.semantic.interactive.primary }\n : { borderWidth: 0 };\n return [\n base,\n transition,\n { backgroundColor: bg, transform: [{ scale: pressed ? 0.96 : 1 }] },\n border,\n ];\n }}\n >\n <RNText\n style={{\n color: isCurrent\n ? colors.semantic.text.inverted\n : colors.semantic.text.default,\n fontSize: 14,\n fontWeight: isCurrent ? '600' : '500',\n opacity: isAdjacentDecade ? 0.45 : 1,\n }}\n >\n {year}\n </RNText>\n </Pressable>\n </View>\n );\n })}\n </View>\n ))}\n </View>\n );\n};\n","'use client';\n\nimport { CalendarDate, getLocalTimeZone, today } from '@internationalized/date';\nimport { type ReactNode, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport type { LayoutChangeEvent, ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { useLocale } from '../../i18n/locale';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport type { CalendarBaseProps, CalendarMode, CalendarValue, CalendarView, DateRange } from './Calendar.types';\nimport { ScrollBody } from './scroll/ScrollBody';\nimport { type DayOfWeek, getFirstDayOfWeek, getWeekendDays } from './state/locale-utils';\nimport { useCalendarKeyboard } from './state/use-calendar-keyboard';\nimport { useCalendarState } from './state/use-calendar-state';\nimport { useRangeState } from './state/use-range-state';\nimport { Caption } from './view/Caption';\nimport { CELL_SIZE } from './view/DayCell';\nimport { DayGrid } from './view/DayGrid';\nimport { Footer } from './view/Footer';\nimport { MonthGrid } from './view/MonthGrid';\nimport { YearGrid } from './view/YearGrid';\n\n// Width constants used to compute the calendar's natural content width and\n// to pick a responsive `visibleMonths` based on the parent container width.\nconst GRID_WIDTH = 7 * CELL_SIZE; // single month grid (7 cols)\nconst MONTH_GAP = 16;\nconst ARROW_AREA = 32 + 8; // nav button width + gap to first/last grid edge\nconst SURFACE_PADDING = 16;\nconst SURFACE_BORDER = 1;\nconst requiredOuterWidth = (n: number) =>\n 2 * (ARROW_AREA + SURFACE_PADDING + SURFACE_BORDER) + n * GRID_WIDTH + (n - 1) * MONTH_GAP;\n\n// Body fade-up on view/month change. The wrapper's `key` flips on every\n// navigation (prev/next, drilldown), forcing a fresh mount; FadeIn starts\n// at opacity 0 + 4px down, then bumps to 1 / 0 in an effect so the inline\n// transition runs. RN-Web honors transition* style props; native ignores.\nconst focusDayCell = (root: HTMLElement | null, date: CalendarDate, force: boolean) => {\n if (!root) {\n return;\n }\n // DOM-only: keyboard focus management has no analog on native, where this\n // ref points at a RN View instead of HTMLElement. Bail out before touching\n // `document` so jest-expo / RN runtime don't ReferenceError.\n if (typeof document === 'undefined' || typeof root.contains !== 'function') {\n return;\n }\n if (!force && !root.contains(document.activeElement)) {\n return;\n }\n const sel = `[data-day-key=\"${date.year}-${date.month}-${date.day}\"]`;\n const cell = root.querySelector(sel) as HTMLElement | null;\n const isDisabled = (cell as HTMLButtonElement | null)?.disabled === true;\n if (cell && !isDisabled) {\n if (cell !== document.activeElement) {\n cell.focus();\n }\n return;\n }\n // Cell is missing or disabled — fall back to focusing the calendar root\n // so subsequent keyboard navigation continues to fire onKeyDown\n // (otherwise focus drops to <body> and arrow keys go to the page).\n if (force && !root.contains(document.activeElement)) {\n root.focus();\n }\n};\n\nconst FadeIn = ({ children }: { children: ReactNode }) => {\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n const id = requestAnimationFrame(() => setMounted(true));\n return () => cancelAnimationFrame(id);\n }, []);\n return (\n <View\n style={\n {\n opacity: mounted ? 1 : 0,\n transform: [{ translateY: mounted ? 0 : 4 }],\n transitionProperty: 'opacity, transform',\n transitionDuration: '220ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n } as ViewStyle\n }\n >\n {children}\n </View>\n );\n};\n\n/**\n * Picks a responsive number of visible months from a measured container\n * width. Used when the consumer doesn't pin `visibleMonths`. Falls back\n * to 1 month while measurement is in flight (initial render) so we never\n * overflow on first paint.\n */\nconst resolveYearRange = (\n input: [number, number] | undefined,\n minValue: import('@internationalized/date').CalendarDate | undefined,\n maxValue: import('@internationalized/date').CalendarDate | undefined,\n focusedYear: number\n): [number, number] => {\n if (input) {\n return input;\n }\n if (minValue && maxValue) {\n return [minValue.year, maxValue.year];\n }\n if (minValue) {\n return [minValue.year, Math.max(minValue.year, focusedYear + 10)];\n }\n if (maxValue) {\n return [Math.min(maxValue.year, focusedYear - 100), maxValue.year];\n }\n return [focusedYear - 100, focusedYear + 10];\n};\n\nconst pickVisibleMonths = (input: number | 'auto' | undefined, measuredWidth: number | null): number => {\n // `visibleMonths` is treated as a *maximum*: when the parent container\n // is too narrow to fit `target` months side-by-side, we drop to the\n // largest count that fits. `auto` defaults to 2.\n const target = typeof input === 'number' ? input : 2;\n if (measuredWidth == null || measuredWidth === 0) {\n // Pre-measurement (e.g. SSR / jsdom). Trust an explicit number;\n // fall back to 1 for `auto` so we don't overflow on first paint.\n return typeof input === 'number' ? input : 1;\n }\n for (let n = target; n >= 1; n--) {\n if (measuredWidth >= requiredOuterWidth(n)) {\n return n;\n }\n }\n return 1;\n};\n\n/**\n * Outer wrapper that measures the available container width and renders\n * the actual Calendar root once the measurement is in. Renders nothing on\n * the first paint to avoid the 1-month → 2-month flash; this is one\n * synchronous re-render after layout, imperceptible in practice.\n */\nconst CalendarRoot = <M extends CalendarMode = 'single'>(props: CalendarBaseProps<M>) => {\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n const onLayout = useCallback((e: LayoutChangeEvent) => {\n const next = e.nativeEvent.layout.width;\n setContainerWidth((prev) => (prev === next ? prev : next));\n }, []);\n\n return (\n <View onLayout={onLayout} style={{ width: '100%' }}>\n <CalendarSurface<M> containerWidth={containerWidth ?? 0} {...props} />\n </View>\n );\n};\n\nconst CalendarSurface = <M extends CalendarMode = 'single'>(\n props: CalendarBaseProps<M> & { containerWidth: number }\n) => {\n const providerLocale = useLocale();\n const locale = props.locale ?? providerLocale;\n\n if ((props.mode ?? 'single') === 'range') {\n return (\n <RangeCalendar\n {...(props as unknown as CalendarBaseProps<'range'> & { containerWidth: number })}\n locale={locale}\n />\n );\n }\n return (\n <SingleOrMultiCalendar\n {...(props as unknown as CalendarBaseProps<Exclude<CalendarMode, 'range'>> & { containerWidth: number })}\n locale={locale}\n />\n );\n};\n\n/**\n * Computes both the inner content width (for centering the body) and the\n * outer surface width (for the bordered card). Both depend on\n * visibleMonths only.\n */\nconst surfaceMetrics = (visibleMonths: number) => {\n const innerWidth = 2 * ARROW_AREA + visibleMonths * GRID_WIDTH + (visibleMonths - 1) * MONTH_GAP;\n return {\n innerWidth,\n // Body grids row width (excludes arrow area)\n gridsRowWidth: visibleMonths * GRID_WIDTH + (visibleMonths - 1) * MONTH_GAP,\n };\n};\n\nconst SingleOrMultiCalendar = <M extends Exclude<CalendarMode, 'range'>>(\n props: CalendarBaseProps<M> & { locale: string; containerWidth: number }\n) => {\n const { locale, renderDay, containerWidth } = props;\n const colors = useThemeColors();\n const firstDayOfWeek = props.firstDayOfWeek ?? getFirstDayOfWeek(locale);\n const weekendDays = (props.weekendDays as [DayOfWeek, DayOfWeek] | undefined) ?? getWeekendDays(locale);\n\n const visibleMonths = props.behavior === 'scroll' ? 1 : pickVisibleMonths(props.visibleMonths, containerWidth);\n const { innerWidth, gridsRowWidth } = surfaceMetrics(visibleMonths);\n\n useEffect(() => {\n if (\n process.env.NODE_ENV !== 'production' &&\n props.behavior === 'scroll' &&\n typeof props.visibleMonths === 'number' &&\n props.visibleMonths > 1\n ) {\n // biome-ignore lint/suspicious/noConsole: dev-mode developer warning\n console.warn('[Calendar] visibleMonths is ignored when behavior=\"scroll\"; falling back to single column.');\n }\n }, [props.behavior, props.visibleMonths]);\n\n // Anchor month: what the user sees. Decoupled from `state.focusedDate`\n // so selecting a day in the rightmost grid does NOT shift the view.\n // Prev/Next buttons mutate this anchor; selectDate does not.\n const containerRef = useRef<HTMLElement | null>(null);\n\n const state = useCalendarState<M>({\n ...(props.mode !== undefined ? { mode: props.mode } : {}),\n locale,\n ...(props.value !== undefined ? { value: props.value } : {}),\n ...(props.defaultValue !== undefined ? { defaultValue: props.defaultValue } : {}),\n ...(props.onChange !== undefined ? { onChange: props.onChange } : {}),\n ...(props.view !== undefined ? { view: props.view } : {}),\n ...(props.defaultView !== undefined ? { defaultView: props.defaultView } : {}),\n ...(props.onViewChange !== undefined ? { onViewChange: props.onViewChange } : {}),\n ...(props.minValue !== undefined ? { minValue: props.minValue } : {}),\n ...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {}),\n ...(props.isDateUnavailable !== undefined ? { isDateUnavailable: props.isDateUnavailable } : {}),\n });\n\n const [anchor, setAnchor] = useState<CalendarDate>(state.focusedDate);\n\n // Snap the anchor when the focused date moves OUTSIDE visible months\n // (only triggered by keyboard nav). We must not re-fire when the\n // anchor changes (prev/next), or arrow navigation would snap right\n // back to the focused month. anchorRef gives us the current value\n // without putting `anchor` in the dependency array.\n const anchorRef = useRef(anchor);\n useEffect(() => {\n anchorRef.current = anchor;\n }, [anchor]);\n useEffect(() => {\n const start = anchorRef.current;\n const end = start.add({ months: visibleMonths });\n if (state.focusedDate.compare(start) < 0 || state.focusedDate.compare(end) >= 0) {\n setAnchor(state.focusedDate);\n }\n }, [state.focusedDate, visibleMonths]);\n\n const keyboardNavRef = useRef(false);\n // biome-ignore lint/correctness/useExhaustiveDependencies: state.value is intentional — re-fire focus after a selection re-renders the cell\n useLayoutEffect(() => {\n focusDayCell(containerRef.current, state.focusedDate, keyboardNavRef.current);\n keyboardNavRef.current = false;\n }, [state.focusedDate, state.value]);\n\n const months = useMemo(\n () => Array.from({ length: visibleMonths }, (_, i) => anchor.add({ months: i })),\n [anchor, visibleMonths]\n );\n\n const keyboard = useCalendarKeyboard({\n focusedDate: state.focusedDate,\n moveFocus: (delta: import('./state/use-calendar-state').FocusDelta) => {\n state.moveFocus(delta);\n // PgDn/PgUp (months) and Shift+PgDn/PgUp (years) feel like\n // \"scroll the view by N\" — shift the anchor by the same delta so\n // the focused cell stays in its current slot. Day/week deltas\n // leave the anchor alone; the snap effect handles overflow.\n if (delta.months || delta.years) {\n setAnchor((a) => {\n let next = a;\n if (delta.months) {\n next = next.add({ months: delta.months });\n }\n if (delta.years) {\n next = next.add({ years: delta.years });\n }\n return next;\n });\n }\n },\n selectDate: state.selectDate,\n setView: state.setView,\n view: state.view,\n firstDayOfWeek,\n });\n\n const onPrev = () => {\n if (state.view === 'year') {\n setAnchor((a) => a.add({ years: -10 }));\n } else if (state.view === 'month') {\n setAnchor((a) => a.add({ years: -1 }));\n } else if (props.behavior === 'scroll') {\n state.moveFocus({ months: -1 });\n } else {\n setAnchor((a) => a.add({ months: -1 }));\n }\n };\n const onNext = () => {\n if (state.view === 'year') {\n setAnchor((a) => a.add({ years: 10 }));\n } else if (state.view === 'month') {\n setAnchor((a) => a.add({ years: 1 }));\n } else if (props.behavior === 'scroll') {\n state.moveFocus({ months: 1 });\n } else {\n setAnchor((a) => a.add({ months: 1 }));\n }\n };\n const onTitlePress = () => state.setView(state.view === 'day' ? 'month' : state.view === 'month' ? 'year' : 'day');\n\n return (\n <View\n ref={(node) => {\n containerRef.current = node as unknown as HTMLElement | null;\n if (typeof props.ref === 'function') {\n props.ref(node);\n } else if (props.ref) {\n (props.ref as { current: View | null }).current = node;\n }\n }}\n {...(props.testID !== undefined ? { testID: props.testID } : {})}\n // @ts-expect-error onKeyDown is supported by react-native-web on View\n onKeyDown={(e: React.KeyboardEvent) => {\n keyboardNavRef.current = true;\n keyboard.onKeyDown(e);\n }}\n tabIndex={0}\n style={{\n padding: SURFACE_PADDING,\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: 16,\n borderWidth: SURFACE_BORDER,\n borderColor: colors.semantic.border.default,\n shadowColor: '#000',\n shadowOpacity: 0.04,\n shadowRadius: 12,\n shadowOffset: { width: 0, height: 4 },\n width: innerWidth + 2 * SURFACE_PADDING + 2 * SURFACE_BORDER,\n maxWidth: '100%',\n alignSelf: 'center',\n }}\n >\n <Caption\n months={months}\n locale={locale}\n view={state.view}\n caption={props.caption ?? 'title'}\n gridWidth={GRID_WIDTH}\n monthGap={MONTH_GAP}\n yearRange={resolveYearRange(props.yearRange, props.minValue, props.maxValue, anchor.year)}\n onPrev={onPrev}\n onNext={onNext}\n onTitlePress={onTitlePress}\n onSetMonth={(slot, m) => {\n const picked = (months[slot] ?? anchor).set({ month: m, day: 1 });\n // Subtract slot offset so the picked month stays in the\n // SAME visible slot the user clicked (not the leftmost).\n setAnchor(picked.subtract({ months: slot }));\n }}\n onSetYear={(slot, y) => {\n const picked = (months[slot] ?? anchor).set({ year: y, day: 1 });\n setAnchor(picked.subtract({ months: slot }));\n }}\n >\n {props.children}\n </Caption>\n <FadeIn key={`smc-${state.view}`}>\n {state.view === 'day' &&\n (props.behavior === 'scroll' ? (\n <ScrollBody<M>\n mode={(props.mode ?? 'single') as M}\n locale={locale}\n focusedDate={state.focusedDate}\n onFocusedMonthChange={(next) => setAnchor(next)}\n value={state.value as CalendarValue<M>}\n onSelectDate={(date) => state.selectDate(date, 'click')}\n firstDayOfWeek={firstDayOfWeek}\n weekendDays={weekendDays}\n {...(props.minValue !== undefined ? { minValue: props.minValue } : {})}\n {...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {})}\n {...(props.isDateUnavailable !== undefined\n ? { isDateUnavailable: props.isDateUnavailable }\n : {})}\n {...(renderDay ? { renderDay } : {})}\n />\n ) : (\n <View\n style={{ flexDirection: 'row', gap: MONTH_GAP, alignSelf: 'center', width: gridsRowWidth }}\n >\n {months.map((m) => (\n <DayGrid<M>\n key={`${m.year}-${m.month}`}\n visibleMonth={m}\n locale={locale}\n mode={(props.mode ?? 'single') as M}\n value={state.value as CalendarValue<M>}\n focusedDate={state.focusedDate}\n isUnavailable={state.isUnavailable}\n weekendDays={weekendDays}\n firstDayOfWeek={firstDayOfWeek}\n onDayPress={(date) => state.selectDate(date, 'click')}\n {...(renderDay ? { renderDay } : {})}\n />\n ))}\n </View>\n ))}\n {state.view === 'month' && (\n <View style={{ alignItems: 'center' }}>\n <MonthGrid\n visibleMonth={anchor}\n locale={locale}\n availableWidth={gridsRowWidth}\n onSelect={(month) => {\n setAnchor(new CalendarDate(anchor.year, month, 1));\n state.setView('day');\n }}\n />\n </View>\n )}\n {state.view === 'year' && (\n <View style={{ alignItems: 'center' }}>\n <YearGrid\n visibleMonth={anchor}\n availableWidth={gridsRowWidth}\n onSelect={(year) => {\n setAnchor(new CalendarDate(year, anchor.month, 1));\n state.setView('month');\n }}\n />\n </View>\n )}\n {props.children && (props.caption ?? 'title') !== 'custom' ? <Footer>{props.children}</Footer> : null}\n </FadeIn>\n </View>\n );\n};\n\nconst RangeCalendar = (props: CalendarBaseProps<'range'> & { locale: string; containerWidth: number }) => {\n const { locale, renderDay, containerWidth } = props;\n const colors = useThemeColors();\n const firstDayOfWeek = props.firstDayOfWeek ?? getFirstDayOfWeek(locale);\n const weekendDays = (props.weekendDays as [DayOfWeek, DayOfWeek] | undefined) ?? getWeekendDays(locale);\n\n const visibleMonths = props.behavior === 'scroll' ? 1 : pickVisibleMonths(props.visibleMonths, containerWidth);\n const { innerWidth, gridsRowWidth } = surfaceMetrics(visibleMonths);\n\n useEffect(() => {\n if (\n process.env.NODE_ENV !== 'production' &&\n props.behavior === 'scroll' &&\n typeof props.visibleMonths === 'number' &&\n props.visibleMonths > 1\n ) {\n // biome-ignore lint/suspicious/noConsole: dev-mode developer warning\n console.warn('[Calendar] visibleMonths is ignored when behavior=\"scroll\"; falling back to single column.');\n }\n }, [props.behavior, props.visibleMonths]);\n\n const containerRef = useRef<HTMLElement | null>(null);\n\n const range = useRangeState({\n ...(props.value !== undefined ? { value: props.value } : {}),\n ...(props.defaultValue !== undefined ? { defaultValue: props.defaultValue } : {}),\n ...(props.onChange !== undefined ? { onChange: props.onChange } : {}),\n ...(props.minValue !== undefined ? { minValue: props.minValue } : {}),\n ...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {}),\n ...(props.isDateUnavailable !== undefined ? { isDateUnavailable: props.isDateUnavailable } : {}),\n ...(props.minNights !== undefined ? { minNights: props.minNights } : {}),\n ...(props.maxNights !== undefined ? { maxNights: props.maxNights } : {}),\n });\n\n const initialFocus = range.value?.start ?? today(getLocalTimeZone());\n const [focusedDate, setFocusedDate] = useState<CalendarDate>(initialFocus);\n const keyboardNavRef = useRef(false);\n // biome-ignore lint/correctness/useExhaustiveDependencies: range.value is intentional — re-fire focus after a selection re-renders the cell\n useLayoutEffect(() => {\n focusDayCell(containerRef.current, focusedDate, keyboardNavRef.current);\n keyboardNavRef.current = false;\n }, [focusedDate, range.value]);\n const [anchor, setAnchor] = useState<CalendarDate>(initialFocus);\n\n const [internalView, setInternalView] = useState<CalendarView>(props.defaultView ?? 'day');\n const isViewControlled = props.view !== undefined;\n const view: CalendarView = isViewControlled ? (props.view as CalendarView) : internalView;\n const setView = useCallback(\n (next: CalendarView) => {\n if (!isViewControlled) {\n setInternalView(next);\n }\n props.onViewChange?.(next);\n },\n [isViewControlled, props.onViewChange]\n );\n\n const months = useMemo(\n () => Array.from({ length: visibleMonths }, (_, i) => anchor.add({ months: i })),\n [anchor, visibleMonths]\n );\n\n const keyboard = useCalendarKeyboard({\n focusedDate,\n moveFocus: (delta) => {\n setFocusedDate((f) => {\n let next = f;\n if (delta.days) {\n next = next.add({ days: delta.days });\n }\n if (delta.weeks) {\n next = next.add({ weeks: delta.weeks });\n }\n if (delta.months) {\n next = next.add({ months: delta.months });\n }\n if (delta.years) {\n next = next.add({ years: delta.years });\n }\n return next;\n });\n if (delta.months || delta.years) {\n setAnchor((a) => {\n let next = a;\n if (delta.months) {\n next = next.add({ months: delta.months });\n }\n if (delta.years) {\n next = next.add({ years: delta.years });\n }\n return next;\n });\n }\n },\n selectDate: (date) => range.selectDate(date, 'keyboard'),\n setView,\n view,\n firstDayOfWeek,\n });\n\n const onPrev = () => {\n if (view === 'year') {\n setAnchor((a) => a.add({ years: -10 }));\n } else if (view === 'month') {\n setAnchor((a) => a.add({ years: -1 }));\n } else if (props.behavior === 'scroll') {\n setFocusedDate((f) => f.add({ months: -1 }));\n } else {\n setAnchor((a) => a.add({ months: -1 }));\n }\n };\n const onNext = () => {\n if (view === 'year') {\n setAnchor((a) => a.add({ years: 10 }));\n } else if (view === 'month') {\n setAnchor((a) => a.add({ years: 1 }));\n } else if (props.behavior === 'scroll') {\n setFocusedDate((f) => f.add({ months: 1 }));\n } else {\n setAnchor((a) => a.add({ months: 1 }));\n }\n };\n const [drilldownSlot, setDrilldownSlot] = useState(0);\n const onTitlePress = (clicked: CalendarDate) => {\n const slot = months.findIndex((m) => m.year === clicked.year && m.month === clicked.month);\n setDrilldownSlot(slot >= 0 ? slot : 0);\n if (clicked.compare(anchor) !== 0) {\n setAnchor(clicked);\n }\n setView(view === 'day' ? 'month' : view === 'month' ? 'year' : 'day');\n };\n\n return (\n <View\n ref={(node) => {\n containerRef.current = node as unknown as HTMLElement | null;\n if (typeof props.ref === 'function') {\n props.ref(node);\n } else if (props.ref) {\n (props.ref as { current: View | null }).current = node;\n }\n }}\n {...(props.testID !== undefined ? { testID: props.testID } : {})}\n // @ts-expect-error onKeyDown is supported by react-native-web on View\n onKeyDown={(e: React.KeyboardEvent) => {\n keyboardNavRef.current = true;\n keyboard.onKeyDown(e);\n }}\n tabIndex={0}\n style={{\n padding: SURFACE_PADDING,\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: 16,\n borderWidth: SURFACE_BORDER,\n borderColor: colors.semantic.border.default,\n shadowColor: '#000',\n shadowOpacity: 0.04,\n shadowRadius: 12,\n shadowOffset: { width: 0, height: 4 },\n width: innerWidth + 2 * SURFACE_PADDING + 2 * SURFACE_BORDER,\n maxWidth: '100%',\n alignSelf: 'center',\n }}\n >\n <Caption\n months={months}\n locale={locale}\n view={view}\n caption={props.caption ?? 'title'}\n gridWidth={GRID_WIDTH}\n monthGap={MONTH_GAP}\n yearRange={resolveYearRange(props.yearRange, props.minValue, props.maxValue, anchor.year)}\n onPrev={onPrev}\n onNext={onNext}\n onTitlePress={onTitlePress}\n onSetMonth={(slot, m) => {\n const picked = (months[slot] ?? anchor).set({ month: m, day: 1 });\n // Subtract slot offset so the picked month stays in the\n // SAME visible slot the user clicked (not the leftmost).\n setAnchor(picked.subtract({ months: slot }));\n }}\n onSetYear={(slot, y) => {\n const picked = (months[slot] ?? anchor).set({ year: y, day: 1 });\n setAnchor(picked.subtract({ months: slot }));\n }}\n >\n {props.children}\n </Caption>\n <FadeIn key={`range-${view}`}>\n {view === 'day' &&\n (props.behavior === 'scroll' ? (\n <ScrollBody<'range'>\n mode=\"range\"\n locale={locale}\n focusedDate={focusedDate}\n onFocusedMonthChange={(next) => setAnchor(next)}\n value={range.value as DateRange | null}\n previewRange={range.previewRange}\n onSelectDate={(date) => range.selectDate(date)}\n firstDayOfWeek={firstDayOfWeek}\n weekendDays={weekendDays}\n {...(props.minValue !== undefined ? { minValue: props.minValue } : {})}\n {...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {})}\n {...(props.isDateUnavailable !== undefined\n ? { isDateUnavailable: props.isDateUnavailable }\n : {})}\n {...(renderDay ? { renderDay } : {})}\n />\n ) : (\n <View\n style={{ flexDirection: 'row', gap: MONTH_GAP, alignSelf: 'center', width: gridsRowWidth }}\n >\n {months.map((m) => (\n <DayGrid<'range'>\n key={`${m.year}-${m.month}`}\n visibleMonth={m}\n locale={locale}\n mode=\"range\"\n value={range.value as DateRange | null}\n previewRange={range.previewRange}\n focusedDate={focusedDate}\n isUnavailable={range.isUnavailable}\n weekendDays={weekendDays}\n firstDayOfWeek={firstDayOfWeek}\n onDayPress={(date) => range.selectDate(date)}\n onDayHover={(date) => range.setHoveredDate(date)}\n {...(renderDay ? { renderDay } : {})}\n />\n ))}\n </View>\n ))}\n {view === 'month' && (\n <View style={{ alignItems: 'center' }}>\n <MonthGrid\n visibleMonth={anchor}\n locale={locale}\n availableWidth={gridsRowWidth}\n onSelect={(month) => {\n const picked = new CalendarDate(anchor.year, month, 1);\n setAnchor(picked.subtract({ months: drilldownSlot }));\n setView('day');\n }}\n />\n </View>\n )}\n {view === 'year' && (\n <View style={{ alignItems: 'center' }}>\n <YearGrid\n visibleMonth={anchor}\n availableWidth={gridsRowWidth}\n onSelect={(year) => {\n const picked = new CalendarDate(year, anchor.month, 1);\n setAnchor(picked.subtract({ months: drilldownSlot }));\n setView('month');\n }}\n />\n </View>\n )}\n {props.children && (props.caption ?? 'title') !== 'custom' ? <Footer>{props.children}</Footer> : null}\n </FadeIn>\n </View>\n );\n};\n\n/**\n * Slot wrapper for Calendar's `caption=\"custom\"` mode. Use it to mark the\n * subtree that renders your own month/year pickers (or any other header\n * UI). Inside, call {@link useCalendarCaption} to read the current\n * month/year and trigger changes.\n *\n * `<Calendar.Caption>` is a transparent passthrough — Calendar renders\n * any direct children when `caption=\"custom\"`. The wrapper exists to\n * make the intent explicit at call sites and to give static analysis\n * something to introspect.\n *\n * @example\n * ```tsx\n * <Calendar caption=\"custom\">\n * <Calendar.Caption>\n * <MyMonthSelect />\n * <MyYearSelect />\n * </Calendar.Caption>\n * </Calendar>\n * ```\n */\nexport const CalendarCaption = ({ children }: CalendarCaptionProps): ReactNode => <>{children}</>;\n// react-docgen-typescript keys the generated props table by displayName,\n// and dotted names like 'Calendar.Caption' would force odd index lookups\n// downstream. Keep the registered name flat; consumers still access it\n// at call sites as `Calendar.Caption`.\nCalendarCaption.displayName = 'CalendarCaption';\n\nexport type CalendarCaptionProps = {\n /** Custom caption content — typically your own month / year selects. */\n children?: ReactNode;\n};\n\ntype CalendarComponent = typeof CalendarRoot & { Caption: typeof CalendarCaption };\n\nexport const Calendar = CalendarRoot as CalendarComponent;\nCalendar.Caption = CalendarCaption;\n","// composeRefs — merges multiple React refs (callback or object) into a single callback.\n// Derived from Radix UI's approach; reimplemented here so we don't take a Radix dependency.\n\nimport type { MutableRefObject, Ref, RefCallback } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\nexport function composeRefs<T>(...refs: Array<PossibleRef<T>>): RefCallback<T> {\n return (node: T | null) => {\n for (const ref of refs) {\n if (ref == null) {\n continue;\n }\n if (typeof ref === 'function') {\n ref(node);\n } else {\n // React's MutableRefObject typing — we assign .current directly.\n (ref as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n","import type { CSSProperties, ReactElement, Ref } from 'react';\nimport { Children, cloneElement, forwardRef, isValidElement } from 'react';\nimport { composeRefs } from './compose-refs';\n\ntype AnyProps = Record<string, unknown>;\n\nexport type SlotProps = {\n children?: React.ReactNode;\n} & AnyProps;\n\nexport const Slot = forwardRef<unknown, SlotProps>(function Slot(props, forwardedRef) {\n const { children, ...slotProps } = props;\n\n if (!isValidElement(children)) {\n return null;\n }\n\n // Assert that children is a single React element with props — we've narrowed above.\n const child = Children.only(children) as ReactElement<AnyProps> & { ref?: Ref<unknown> };\n const merged = mergeProps(slotProps, child.props);\n\n // Merge refs: Slot's forwarded ref + the child's own ref (if any).\n const childRef = (child as unknown as { ref?: Ref<unknown> }).ref;\n if (forwardedRef || childRef) {\n (merged as AnyProps).ref = composeRefs(forwardedRef, childRef);\n }\n\n return cloneElement(child, merged);\n});\nSlot.displayName = 'Slot';\n\nfunction mergeProps(outer: AnyProps, inner: AnyProps): AnyProps {\n // Inner (child) wins for everything except: className (concatenated), style (merged), and\n // event handlers (composed — outer runs first, then inner).\n const merged: AnyProps = { ...outer };\n\n for (const key of Object.keys(inner)) {\n const outerValue = outer[key];\n const innerValue = inner[key];\n\n if (key === 'className' || key === 'class') {\n merged[key] = joinClass(outerValue, innerValue);\n continue;\n }\n\n if (key === 'style') {\n merged[key] = {\n ...(outerValue as CSSProperties | undefined),\n ...(innerValue as CSSProperties | undefined),\n };\n continue;\n }\n\n if (isEventHandler(key, outerValue, innerValue)) {\n merged[key] = composeHandlers(outerValue as Fn, innerValue as Fn);\n continue;\n }\n\n merged[key] = innerValue;\n }\n\n return merged;\n}\n\nfunction joinClass(outer: unknown, inner: unknown): string | undefined {\n const a = typeof outer === 'string' ? outer : '';\n const b = typeof inner === 'string' ? inner : '';\n const joined = [a, b].filter(Boolean).join(' ');\n return joined.length > 0 ? joined : undefined;\n}\n\ntype Fn = (...args: unknown[]) => unknown;\n\nfunction isEventHandler(key: string, outer: unknown, inner: unknown): boolean {\n if (!key.startsWith('on') || key.length < 3) {\n return false;\n }\n if (key[2] !== key[2]?.toUpperCase()) {\n return false;\n }\n return typeof outer === 'function' && typeof inner === 'function';\n}\n\nfunction composeHandlers(outer: Fn, inner: Fn): Fn {\n return (...args: unknown[]) => {\n outer(...args);\n inner(...args);\n };\n}\n","'use client';\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Dimensions, Modal, Platform, Pressable, Text as RNText, View } from 'react-native';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type PopoverSide = 'top' | 'right' | 'bottom' | 'left';\nexport type PopoverAlign = 'start' | 'center' | 'end';\n\ntype TriggerRect = { top: number; left: number; width: number; height: number };\n\ntype PopoverContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n contentId: string;\n triggerRef: { current: HTMLElement | null };\n contentRef: { current: HTMLDivElement | null };\n triggerRect: TriggerRect | null;\n measureTrigger: () => void;\n};\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null);\n\nconst usePopoverContext = (label: string): PopoverContextValue => {\n const ctx = useContext(PopoverContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Popover>.`);\n }\n return ctx;\n};\n\n/**\n * @internal — exposes the Popover context so higher-level overlay components\n * (DropdownMenu, ContextMenu) can interact with trigger measurement and open\n * state without going through PopoverTrigger.\n */\nexport { usePopoverContext };\n\nexport type PopoverProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n};\n\n/**\n * Non-modal floating panel anchored to a trigger element. Use for help\n * tooltips with rich content, color pickers, or profile previews.\n *\n * Composition: `Popover` (root, owns open state), `PopoverTrigger`\n * (forwards events to its child via Slot when `asChild`), `PopoverContent`\n * (the floating surface).\n *\n * Differences from `Dialog`: non-modal — does NOT trap focus or lock\n * scroll. Tab moves outside as normal. Differences from `Tooltip`: can\n * contain interactive content (buttons, inputs, links) and dismisses on\n * outside-click + Escape rather than mouse-leave.\n *\n * Behavior:\n * - Trigger click toggles open/close.\n * - Click outside the content (and outside the trigger) closes.\n * - Escape closes.\n *\n * Cross-platform: uses RN `<Modal>` as the visibility/portal primitive on\n * native (transparent backdrop, tap-outside-to-close). On web, the content\n * uses `position: fixed` + a measured trigger rect so it escapes any\n * ancestor `overflow: hidden`.\n */\nconst PopoverRoot = ({ open, defaultOpen = false, onOpenChange, children }: PopoverProps) => {\n const [inner, setInner] = useState<boolean>(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? open : inner;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const baseId = useId();\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n // Measure the trigger so the content 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 single\n // biggest source of \"the popup got cut off\" bugs.\n const [triggerRect, setTriggerRect] = useState<TriggerRect | null>(null);\n const measureTrigger = useCallback(() => {\n const node = triggerRef.current;\n if (!node || typeof node.getBoundingClientRect !== 'function') {\n return;\n }\n const rect = node.getBoundingClientRect();\n setTriggerRect({ top: rect.top, left: rect.left, width: rect.width, height: rect.height });\n }, []);\n\n const ctxValue: PopoverContextValue = {\n open: current,\n setOpen,\n contentId: `${baseId}-content`,\n triggerRef,\n contentRef,\n triggerRect,\n measureTrigger,\n };\n\n return <PopoverContext.Provider value={ctxValue}>{children}</PopoverContext.Provider>;\n};\n\nexport type PopoverTriggerProps = {\n /** Render the child as the trigger (Slot pattern). Default true — pass `false` for an inline pressable. */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Element that toggles the popover. Uses `asChild` by default so any\n * element (Button, Link, custom Pressable) becomes the trigger.\n *\n * The trigger element gets `aria-haspopup=\"dialog\"` and `aria-expanded`\n * so assistive tech announces the relationship.\n */\nexport const PopoverTrigger = ({ asChild = true, children, className, testID }: PopoverTriggerProps) => {\n const ctx = usePopoverContext('PopoverTrigger');\n const onPress = useCallback(() => {\n ctx.measureTrigger();\n ctx.setOpen(!ctx.open);\n }, [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n // Pass both onClick (web HTML buttons) AND onPress (RN Pressable /\n // our own Button) so the trigger fires regardless of which event\n // model the wrapped child speaks. The child's existing handler\n // runs first, then we toggle.\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.measureTrigger();\n ctx.setOpen(!ctx.open);\n };\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }}\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n aria-controls={ctx.contentId}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n ref={(node) => {\n ctx.triggerRef.current = node as unknown as HTMLElement | null;\n }}\n onPress={onPress}\n {...({\n 'aria-haspopup': 'dialog',\n 'aria-expanded': ctx.open,\n 'aria-controls': ctx.contentId,\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// On native, raw strings rendered as children of a non-Text component\n// throw \"Text strings must be rendered within a <Text> component\". On\n// web, react-native-web silently tolerates it. Wrap any string/number\n// children in an RNText so the same JSX renders cleanly on both\n// platforms. Non-string children are passed through unchanged.\nfunction wrapStringChildren(children: ReactNode): ReactNode {\n if (typeof children === 'string' || typeof children === 'number') {\n return <RNText>{children}</RNText>;\n }\n return children;\n}\n\nconst GAP = 4; // visual gap between trigger and content\nconst MIN_WIDTH = 200;\n// Margin reserved on each side so the popover never butts against the\n// viewport edge. Matches the 8px safe-area we use for native modal pads.\nconst VIEWPORT_MARGIN = 8;\n\nfunction computePosition(\n rect: TriggerRect,\n side: PopoverSide,\n align: PopoverAlign,\n contentSize: { width: number; height: number } | null\n): { top: number; left: number } {\n const cw = contentSize?.width ?? MIN_WIDTH;\n const ch = contentSize?.height ?? 0;\n\n let top = 0;\n let left = 0;\n\n switch (side) {\n case 'top':\n top = rect.top - GAP - ch;\n break;\n case 'bottom':\n top = rect.top + rect.height + GAP;\n break;\n case 'left':\n left = rect.left - GAP - cw;\n break;\n case 'right':\n left = rect.left + rect.width + GAP;\n break;\n }\n\n if (side === 'top' || side === 'bottom') {\n switch (align) {\n case 'start':\n left = rect.left;\n break;\n case 'center':\n left = rect.left + rect.width / 2 - cw / 2;\n break;\n case 'end':\n left = rect.left + rect.width - cw;\n break;\n }\n } else {\n switch (align) {\n case 'start':\n top = rect.top;\n break;\n case 'center':\n top = rect.top + rect.height / 2 - ch / 2;\n break;\n case 'end':\n top = rect.top + rect.height - ch;\n break;\n }\n }\n\n return { top, left };\n}\n\nexport type PopoverContentProps = {\n /** Side of the trigger to anchor on. @defaultValue 'bottom' */\n side?: PopoverSide;\n /** Alignment along the trigger edge. @defaultValue 'center' */\n align?: PopoverAlign;\n children?: ReactNode;\n className?: string;\n testID?: string;\n /** Accessible label when no visible heading is present. */\n 'aria-label'?: string;\n};\n\n/**\n * The floating popover surface. Renders only while open. On web uses\n * `position: fixed` with a measured trigger rect so it escapes any\n * ancestor `overflow: hidden`. Non-modal: focus is NOT trapped inside —\n * the user can tab back out as normal.\n *\n * ARIA: `role=\"dialog\"` (without `aria-modal`) so assistive tech\n * announces it as a grouping but doesn't suppress the rest of the page.\n */\nexport const PopoverContent = ({\n side = 'bottom',\n align = 'center',\n children,\n className,\n testID,\n ...rest\n}: PopoverContentProps) => {\n const ctx = usePopoverContext('PopoverContent');\n const colors = useThemeColors();\n const ariaLabel = rest['aria-label'];\n\n // Measure content size after first paint so we can anchor `top`-style\n // popups (which need to know content height to render above the trigger).\n const [contentSize, setContentSize] = useState<{ width: number; height: number } | null>(null);\n\n // Web-only side effects: outside-click close, Escape close, re-measure\n // on resize. RN Modal handles its own dismissal on native (tap-outside\n // is the transparent overlay's onPress).\n useEffect(() => {\n if (!ctx.open) {\n return;\n }\n if (Platform.OS !== 'web') {\n return;\n }\n if (typeof document === 'undefined') {\n return;\n }\n\n ctx.measureTrigger();\n\n const onDocMouseDown = (event: MouseEvent) => {\n const target = event.target as Node;\n const trigger = ctx.triggerRef.current;\n const content = ctx.contentRef.current;\n if (trigger?.contains(target)) {\n return;\n }\n if (content?.contains(target)) {\n return;\n }\n ctx.setOpen(false);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n ctx.setOpen(false);\n }\n };\n const onResize = () => ctx.measureTrigger();\n const onScroll = () => ctx.measureTrigger();\n\n document.addEventListener('mousedown', onDocMouseDown);\n document.addEventListener('keydown', onKeyDown);\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n return () => {\n document.removeEventListener('mousedown', onDocMouseDown);\n document.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('resize', onResize);\n window.removeEventListener('scroll', onScroll, true);\n };\n // ctx is the provider's stable identity; we only care about open transitions.\n }, [ctx.open, ctx.measureTrigger, ctx.setOpen, ctx.triggerRef, ctx.contentRef]);\n\n // Reset measured size when popover closes so reopening re-measures fresh.\n useEffect(() => {\n if (!ctx.open) {\n setContentSize(null);\n }\n }, [ctx.open]);\n\n if (!ctx.open) {\n return null;\n }\n\n const position = ctx.triggerRect ? computePosition(ctx.triggerRect, side, align, contentSize) : null;\n\n // Viewport-aware max width. Web uses Dimensions.get('window') which\n // react-native-web maps to window.innerWidth; native uses the same API\n // for the device window. Subtract margin on both sides so content\n // doesn't kiss the screen edge.\n const viewportWidth = Dimensions.get('window').width;\n const maxContentWidth = Math.max(MIN_WIDTH, viewportWidth - VIEWPORT_MARGIN * 2);\n\n const contentBaseStyle: ViewStyle = {\n minWidth: MIN_WIDTH,\n maxWidth: maxContentWidth,\n borderRadius: px(colors.radius.lg),\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n backgroundColor: colors.semantic.background.elevated,\n padding: px(colors.spacing['4']),\n ...(Platform.OS === 'web'\n ? ({\n boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n // Subtle scale-in. Skipped on native (do nothing fancy there).\n transition: 'opacity 120ms ease-out, transform 120ms ease-out',\n transform: 'scale(1)',\n opacity: 1,\n } as ViewStyle)\n : { elevation: 8 }),\n };\n\n // Clamp `left` so the popover stays within the viewport even when the\n // trigger sits near the right edge. First-paint fallback uses\n // `maxContentWidth` (the cap we apply via maxWidth above) — content\n // is allowed to grow up to that size, so assuming worst-case avoids\n // a one-frame overflow before measurement settles.\n const measuredWidth = contentSize?.width ?? maxContentWidth;\n const clampedLeft = position\n ? Math.min(\n Math.max(VIEWPORT_MARGIN, position.left),\n Math.max(VIEWPORT_MARGIN, viewportWidth - measuredWidth - VIEWPORT_MARGIN)\n )\n : 0;\n\n const positionedStyle: ViewStyle =\n Platform.OS === 'web'\n ? position\n ? ({\n position: 'fixed' as unknown as 'absolute',\n top: position.top,\n left: clampedLeft,\n zIndex: 50,\n } as ViewStyle)\n : ({\n // Trigger not yet measured — render off-screen for a\n // frame to avoid a flash at (0,0).\n position: 'fixed' as unknown as 'absolute',\n top: -9999,\n left: -9999,\n zIndex: 50,\n } as ViewStyle)\n : {};\n\n const content = (\n <View\n ref={(node) => {\n ctx.contentRef.current = node as unknown as HTMLDivElement | null;\n if (Platform.OS !== 'web') {\n return;\n }\n if (!node) {\n return;\n }\n if (typeof (node as unknown as HTMLDivElement).getBoundingClientRect !== 'function') {\n return;\n }\n const rect = (node as unknown as HTMLDivElement).getBoundingClientRect();\n if (!contentSize || contentSize.width !== rect.width || contentSize.height !== rect.height) {\n setContentSize({ width: rect.width, height: rect.height });\n }\n }}\n {...({\n role: 'dialog',\n id: ctx.contentId,\n ...(ariaLabel !== undefined ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n className={cn(\n 'rounded-lg border border-semantic-border-default bg-semantic-background-elevated',\n className\n )}\n style={[contentBaseStyle, positionedStyle]}\n >\n {children}\n </View>\n );\n\n if (Platform.OS === 'web') {\n return content;\n }\n\n // Native: use Modal as the floating layer with a transparent backdrop.\n // Tap on the backdrop closes the popover.\n return (\n <Modal visible={ctx.open} transparent animationType=\"fade\" onRequestClose={() => ctx.setOpen(false)}>\n <Pressable\n accessibilityRole=\"none\"\n aria-hidden={true}\n onPress={() => ctx.setOpen(false)}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'transparent',\n }}\n >\n <Pressable\n onPress={(event) => event.stopPropagation?.()}\n style={{\n position: 'absolute',\n top: ctx.triggerRect\n ? side === 'top'\n ? Math.max(VIEWPORT_MARGIN, ctx.triggerRect.top - GAP - 80)\n : ctx.triggerRect.top + ctx.triggerRect.height + GAP\n : 80,\n // Clamp horizontally so a wide popover near the\n // right edge can still grow leftward without\n // overflowing the screen.\n left: ctx.triggerRect\n ? Math.min(\n Math.max(VIEWPORT_MARGIN, ctx.triggerRect.left),\n Math.max(VIEWPORT_MARGIN, viewportWidth - measuredWidth - VIEWPORT_MARGIN)\n )\n : VIEWPORT_MARGIN * 2,\n }}\n >\n {content}\n </Pressable>\n </Pressable>\n </Modal>\n );\n};\n\n/**\n * Public `Popover` value — the root function plus its `.Trigger` and `.Content`\n * static members. `Object.assign` produces a value whose inferred type carries\n * the static properties, so `.d.ts` consumers can write `<Popover.Trigger>`\n * without a separate import.\n */\nexport const Popover = Object.assign(PopoverRoot, {\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n});\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { getLocalTimeZone } from '@internationalized/date';\nimport { useCallback, useState } from 'react';\nimport { Platform, Pressable, Text as RNText, View } from 'react-native';\nimport { useLocale } from '../../i18n/locale';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport type { DateRange } from '../Calendar';\nimport { Calendar } from '../Calendar';\nimport { Popover } from '../Popover';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Format a single CalendarDate for display using Intl. */\nfunction formatDate(date: CalendarDate, locale: string): string {\n try {\n return new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(date.toDate(getLocalTimeZone()));\n } catch {\n return `${date.year}-${String(date.month).padStart(2, '0')}-${String(date.day).padStart(2, '0')}`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Calendar icon\n// ---------------------------------------------------------------------------\n\nfunction CalendarIcon({ size = 16, color = 'currentColor' }: { size?: number; color?: string }) {\n const colors = useThemeColors();\n\n if (Platform.OS === 'web') {\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=\"M8 2v4M16 2v4M3 10h18M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z\" />\n </svg>\n );\n }\n\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.muted : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {'📅'}\n </RNText>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type DatePickerProps = {\n value?: CalendarDate | null;\n defaultValue?: CalendarDate | null;\n onChange?: (date: CalendarDate | null) => void;\n\n /** BCP 47 locale; defaults from NoriProvider's i18n context. */\n locale?: string;\n\n /** Min/max selectable date. */\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n\n /** Custom unavailable predicate. */\n isDateUnavailable?: (date: CalendarDate) => boolean;\n\n /** First day of week override (0=Sun, 1=Mon, ...). Defaults from locale. */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n /** Placeholder text shown when no value. */\n placeholder?: string;\n\n /** Disable the whole picker. */\n disabled?: boolean;\n\n // A11y / Field.Control hook props\n id?: string;\n name?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n\n testID?: string;\n className?: string;\n};\n\nexport type DateRangeValue = { start: CalendarDate | null; end: CalendarDate | null };\n\nexport type DatePickerRangeProps = {\n value?: DateRangeValue;\n defaultValue?: DateRangeValue;\n onChange?: (range: DateRangeValue) => void;\n\n locale?: string;\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n placeholder?: string;\n disabled?: boolean;\n\n id?: string;\n name?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n\n testID?: string;\n className?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Shared Calendar optional props builder\n// ---------------------------------------------------------------------------\n\ntype CalendarOptional = {\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n};\n\nfunction buildCalendarOptional(\n minValue: CalendarDate | undefined,\n maxValue: CalendarDate | undefined,\n isDateUnavailable: ((date: CalendarDate) => boolean) | undefined,\n firstDayOfWeek: (0 | 1 | 2 | 3 | 4 | 5 | 6) | undefined\n): CalendarOptional {\n const out: CalendarOptional = {};\n if (minValue !== undefined) {\n out.minValue = minValue;\n }\n if (maxValue !== undefined) {\n out.maxValue = maxValue;\n }\n if (isDateUnavailable !== undefined) {\n out.isDateUnavailable = isDateUnavailable;\n }\n if (firstDayOfWeek !== undefined) {\n out.firstDayOfWeek = firstDayOfWeek;\n }\n return out;\n}\n\nfunction buildTriggerAriaProps(ariaProps: {\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n}): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (ariaProps['aria-labelledby'] !== undefined) {\n out['aria-labelledby'] = ariaProps['aria-labelledby'];\n }\n if (ariaProps['aria-describedby'] !== undefined) {\n out['aria-describedby'] = ariaProps['aria-describedby'];\n }\n if (ariaProps['aria-invalid'] !== undefined) {\n out['aria-invalid'] = ariaProps['aria-invalid'];\n }\n if (ariaProps['aria-required'] !== undefined) {\n out['aria-required'] = ariaProps['aria-required'];\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// DatePicker (single)\n//\n// Uses Popover.Trigger + asChild so the Popover correctly sets the trigger\n// ref for web positioning and handles outside-click dismissal.\n// The trigger renders as a Pressable (via Popover.Trigger asChild pattern).\n// ---------------------------------------------------------------------------\n\nconst DatePickerRoot = ({\n value,\n defaultValue,\n onChange,\n locale: localeProp,\n minValue,\n maxValue,\n isDateUnavailable,\n firstDayOfWeek,\n placeholder,\n disabled = false,\n id,\n name: _name,\n className,\n testID,\n ...ariaProps\n}: DatePickerProps) => {\n const providerLocale = useLocale();\n const locale = localeProp ?? providerLocale;\n\n const [open, setOpen] = useState(false);\n\n const isControlled = value !== undefined;\n const [inner, setInner] = useState<CalendarDate | null>(defaultValue ?? null);\n const current = isControlled ? (value ?? null) : inner;\n\n const handleChange = useCallback(\n (date: CalendarDate | null) => {\n if (!isControlled) {\n setInner(date);\n }\n onChange?.(date);\n setOpen(false);\n },\n [isControlled, onChange]\n );\n\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (!disabled) {\n setOpen(next);\n }\n },\n [disabled]\n );\n\n const displayValue = current ? formatDate(current, locale) : null;\n const calendarOptional = buildCalendarOptional(minValue, maxValue, isDateUnavailable, firstDayOfWeek);\n const triggerAriaProps = buildTriggerAriaProps(ariaProps);\n\n const colors = useThemeColors();\n const hasError = ariaProps['aria-invalid'] === true || (ariaProps['aria-invalid'] as unknown as string) === 'true';\n\n const pressableStyle = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n borderWidth: 1,\n borderRadius: px(colors.radius.md),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: hasError ? colors.color.danger : colors.semantic.border.default,\n opacity: disabled ? 0.6 : 1,\n };\n\n const textStyle = {\n flex: 1,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: displayValue ? colors.semantic.text.default : colors.semantic.text.muted,\n };\n\n // Extra a11y props for the trigger\n const triggerExtraProps: Record<string, unknown> = {\n role: 'combobox',\n accessibilityRole: 'button',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n ...triggerAriaProps,\n };\n if (id !== undefined) {\n triggerExtraProps.id = id;\n triggerExtraProps.nativeID = id;\n }\n if (testID !== undefined) {\n triggerExtraProps.testID = testID;\n }\n if (hasError) {\n triggerExtraProps['aria-invalid'] = true;\n }\n if (ariaProps['aria-required']) {\n triggerExtraProps['aria-required'] = true;\n }\n if (disabled) {\n triggerExtraProps['aria-disabled'] = true;\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild={false} className={cn(className)}>\n <Pressable\n onPress={disabled ? undefined : () => setOpen(!open)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center rounded-md border px-3 py-2',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={pressableStyle}\n {...(triggerExtraProps as Record<string, unknown>)}\n >\n <RNText style={textStyle} numberOfLines={1}>\n {displayValue ?? placeholder ?? ''}\n </RNText>\n <View style={{ marginLeft: px(colors.spacing['2']) }}>\n <CalendarIcon size={16} color={colors.semantic.text.muted} />\n </View>\n </Pressable>\n </Popover.Trigger>\n <Popover.Content aria-label=\"Date picker\" side=\"bottom\" align=\"start\">\n <Calendar\n mode=\"single\"\n value={current}\n onChange={(date) => {\n handleChange(date as CalendarDate | null);\n }}\n locale={locale}\n {...calendarOptional}\n />\n </Popover.Content>\n </Popover>\n );\n};\n\n// ---------------------------------------------------------------------------\n// DatePicker.Range\n// ---------------------------------------------------------------------------\n\nconst DatePickerRange = ({\n value,\n defaultValue,\n onChange,\n locale: localeProp,\n minValue,\n maxValue,\n isDateUnavailable,\n firstDayOfWeek,\n placeholder,\n disabled = false,\n id,\n name: _name,\n className,\n testID,\n ...ariaProps\n}: DatePickerRangeProps) => {\n const providerLocale = useLocale();\n const locale = localeProp ?? providerLocale;\n\n const [open, setOpen] = useState(false);\n\n const isControlled = value !== undefined;\n const [inner, setInner] = useState<DateRangeValue>(defaultValue ?? { start: null, end: null });\n const current = isControlled ? (value ?? { start: null, end: null }) : inner;\n\n const calendarValue: DateRange | null = current.start !== null ? { start: current.start, end: current.end } : null;\n\n const handleChange = useCallback(\n (calRange: DateRange | null) => {\n const next: DateRangeValue = {\n start: calRange?.start ?? null,\n end: calRange?.end ?? null,\n };\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n if (next.start !== null && next.end !== null) {\n setOpen(false);\n }\n },\n [isControlled, onChange]\n );\n\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (!disabled) {\n setOpen(next);\n }\n },\n [disabled]\n );\n\n let displayValue: string | null = null;\n if (current.start !== null) {\n const startStr = formatDate(current.start, locale);\n const endStr = current.end !== null ? formatDate(current.end, locale) : '';\n displayValue = `${startStr} – ${endStr}`;\n }\n\n const calendarOptional = buildCalendarOptional(minValue, maxValue, isDateUnavailable, firstDayOfWeek);\n const triggerAriaProps = buildTriggerAriaProps(ariaProps);\n\n const colors = useThemeColors();\n const hasError = ariaProps['aria-invalid'] === true || (ariaProps['aria-invalid'] as unknown as string) === 'true';\n\n const pressableStyle = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n borderWidth: 1,\n borderRadius: px(colors.radius.md),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: hasError ? colors.color.danger : colors.semantic.border.default,\n opacity: disabled ? 0.6 : 1,\n };\n\n const textStyle = {\n flex: 1,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: displayValue ? colors.semantic.text.default : colors.semantic.text.muted,\n };\n\n const triggerExtraProps: Record<string, unknown> = {\n role: 'combobox',\n accessibilityRole: 'button',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n ...triggerAriaProps,\n };\n if (id !== undefined) {\n triggerExtraProps.id = id;\n triggerExtraProps.nativeID = id;\n }\n if (testID !== undefined) {\n triggerExtraProps.testID = testID;\n }\n if (hasError) {\n triggerExtraProps['aria-invalid'] = true;\n }\n if (ariaProps['aria-required']) {\n triggerExtraProps['aria-required'] = true;\n }\n if (disabled) {\n triggerExtraProps['aria-disabled'] = true;\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild={false} className={cn(className)}>\n <Pressable\n onPress={disabled ? undefined : () => setOpen(!open)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center rounded-md border px-3 py-2',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={pressableStyle}\n {...(triggerExtraProps as Record<string, unknown>)}\n >\n <RNText style={textStyle} numberOfLines={1}>\n {displayValue ?? placeholder ?? ''}\n </RNText>\n <View style={{ marginLeft: px(colors.spacing['2']) }}>\n <CalendarIcon size={16} color={colors.semantic.text.muted} />\n </View>\n </Pressable>\n </Popover.Trigger>\n <Popover.Content aria-label=\"Date range picker\" side=\"bottom\" align=\"start\">\n <Calendar\n mode=\"range\"\n value={calendarValue}\n onChange={(range) => {\n handleChange(range as DateRange | null);\n }}\n locale={locale}\n {...calendarOptional}\n />\n </Popover.Content>\n </Popover>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public export\n// ---------------------------------------------------------------------------\n\nexport const DatePicker = Object.assign(DatePickerRoot, {\n Range: DatePickerRange,\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/i18n/locale.tsx","../../../src/theme/px.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/utils/cn.ts","../../../src/components/Calendar/scroll/ScrollBody.tsx","../../../src/components/Calendar/state/locale-utils.ts","../../../src/components/Calendar/state/use-calendar-keyboard.ts","../../../src/components/Calendar/state/constraints.ts","../../../src/components/Calendar/state/use-calendar-state.ts","../../../src/components/Calendar/state/use-range-state.ts","../../../src/i18n/default-dictionary.ts","../../../src/i18n/resolve.ts","../../../src/i18n/context.tsx","../../../src/i18n/use-translation.ts","../../../src/icons/default-semantic-icons.tsx","../../../src/components/Select/Select.tsx","../../../src/components/Calendar/state/use-caption.tsx","../../../src/components/Calendar/view/Caption.tsx","../../../src/components/Calendar/view/DayCell.tsx","../../../src/components/Calendar/view/DayGrid.tsx","../../../src/components/Calendar/view/Footer.tsx","../../../src/components/Calendar/view/MonthGrid.tsx","../../../src/components/Calendar/view/YearGrid.tsx","../../../src/components/Calendar/Calendar.tsx","../../../src/slot/compose-refs.ts","../../../src/slot/slot.tsx","../../../src/components/Popover/Popover.tsx","../../../src/components/DatePicker/DatePicker.tsx"],"names":["createContext","useContext","Platform","useState","Appearance","useEffect","useCallback","today","getLocalTimeZone","useMemo","isWeb","jsx","RNText","useId","useRef","id","useWindowDimensions","jsxs","View","Pressable","createPortal","Modal","ScrollView","Fragment","startOfMonth","ROW_KEYS","useLayoutEffect","CalendarDate","initialFocus","forwardRef","Slot","isValidElement","Children","cloneElement","content","Dimensions","date","defaultValue"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\n\nexport type LocaleInput = string | Intl.Locale;\n\n/**\n * Resolve the runtime's default locale. Works under Hermes (which ships\n * Intl on iOS via system ICU and on Android via bundled ICU) and any\n * browser. Returns a BCP 47 tag.\n */\nexport const detectLocale = (): string => {\n try {\n return new Intl.DateTimeFormat().resolvedOptions().locale;\n } catch {\n return 'en-US';\n }\n};\n\nconst toTag = (input: LocaleInput | undefined): string =>\n input === undefined ? detectLocale() : typeof input === 'string' ? input : input.toString();\n\nconst LocaleContext = createContext<string | null>(null);\nLocaleContext.displayName = 'LocaleContext';\n\nexport type LocaleProviderProps = {\n locale?: LocaleInput;\n children?: ReactNode;\n};\n\nexport const LocaleProvider = ({ locale, children }: LocaleProviderProps) => {\n const value = useMemo(() => toTag(locale), [locale]);\n return <LocaleContext.Provider value={value}>{children}</LocaleContext.Provider>;\n};\n\nexport const useLocale = (): string => {\n const ctx = useContext(LocaleContext);\n return ctx ?? detectLocale();\n};\n","/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n 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","// 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","import type { CalendarDate } from '@internationalized/date';\nimport type { ReactElement, ReactNode } from 'react';\nimport type { CalendarMode, CalendarValue, ChangeMeta, DateRange, DayContext } from '../Calendar.types';\nimport type { DayOfWeek } from '../state/locale-utils';\n\nexport type ScrollBodyProps<M extends CalendarMode> = {\n mode: M;\n locale: string;\n focusedDate: CalendarDate;\n onFocusedMonthChange: (anchor: CalendarDate, meta: ChangeMeta) => void;\n value: CalendarValue<M>;\n onSelectDate: (date: CalendarDate) => void;\n\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n\n showWeekNumbers?: boolean;\n highlightToday?: boolean;\n firstDayOfWeek: DayOfWeek;\n weekendDays: [DayOfWeek, DayOfWeek];\n\n renderDay?: (ctx: DayContext) => ReactNode;\n\n /** Range-only; undefined for single/multiple. */\n previewRange?: DateRange | null;\n};\n\n// Platform-extension fallback. Metro (native) picks `.native.tsx`; Vite/Webpack\n// (web) pick `.web.tsx`. Reaching this default means the bundler config is\n// broken — fail loudly rather than silently mounting an empty body.\nexport const ScrollBody = <M extends CalendarMode>(_props: ScrollBodyProps<M>): ReactElement => {\n throw new Error(\n '[Calendar] ScrollBody: no platform implementation resolved. ' +\n 'Ensure your bundler honors *.web.tsx / *.native.tsx extensions.'\n );\n};\n","import type { CalendarDate } from '@internationalized/date';\n\n/**\n * Day of week index where 0 = Sunday, 1 = Monday, ..., 6 = Saturday.\n * Matches `Date.prototype.getDay()` semantics.\n */\nexport type DayOfWeek = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n/**\n * The weekday a calendar week begins on for the given locale, per CLDR.\n * Examples: en-US → 0 (Sun), de-DE → 1 (Mon), fa-IR → 6 (Sat).\n *\n * Trusts `Intl.Locale#getWeekInfo` as the authoritative source. Falls back\n * to a small lookup only when CLDR data is unavailable (e.g. Hermes on\n * Android with bundled ICU gaps).\n */\nexport const getFirstDayOfWeek = (locale: string): DayOfWeek => {\n try {\n // biome-ignore lint/suspicious/noExplicitAny: weekInfo is in the spec but TS lib types lag\n const loc = new Intl.Locale(locale) as any;\n const info = loc.getWeekInfo?.() ?? loc.weekInfo;\n if (typeof info?.firstDay === 'number') {\n // CLDR uses 1=Mon..7=Sun; convert to 0=Sun..6=Sat.\n return (info.firstDay === 7 ? 0 : info.firstDay) as DayOfWeek;\n }\n } catch {\n // fall through\n }\n // Fallback for environments without CLDR weekInfo (e.g. some Hermes builds).\n return FIRST_DAY_FALLBACK[locale] ?? FIRST_DAY_FALLBACK[locale.split('-')[0] ?? ''] ?? 1;\n};\n\n/**\n * Last-resort lookup when `Intl.Locale#getWeekInfo` is unavailable. Values\n * are 0=Sun..6=Sat. Keep small — only enough to keep the calendar usable\n * if the runtime has no CLDR data at all.\n */\nconst FIRST_DAY_FALLBACK: Record<string, DayOfWeek> = {\n en: 0,\n 'en-US': 0,\n 'en-CA': 0,\n 'en-GB': 1,\n 'en-AU': 1,\n de: 1,\n fr: 1,\n ja: 0,\n ar: 0,\n he: 0,\n fa: 6,\n};\n\n/**\n * The two days CLDR considers weekend in this locale (e.g. [6, 0] for\n * en-US = Sat+Sun; [5, 6] for ar-SA = Fri+Sat).\n *\n * Falls back to a small lookup when `Intl.Locale#getWeekInfo` is unavailable\n * (notably Hermes Android in some configurations).\n */\nexport const getWeekendDays = (locale: string): [DayOfWeek, DayOfWeek] => {\n try {\n // biome-ignore lint/suspicious/noExplicitAny: weekInfo is in the spec but TS lib types lag\n const loc = new Intl.Locale(locale) as any;\n const info = loc.getWeekInfo?.() ?? loc.weekInfo;\n if (info?.weekend && Array.isArray(info.weekend) && info.weekend.length === 2) {\n // CLDR uses 1=Mon..7=Sun; convert to 0=Sun..6=Sat.\n const [a, b] = info.weekend.map((d: number) => (d === 7 ? 0 : d) as DayOfWeek);\n return [a, b];\n }\n } catch {\n // fall through\n }\n return WEEKEND_FALLBACK[locale] ?? WEEKEND_FALLBACK[locale.split('-')[0] ?? ''] ?? [6, 0];\n};\n\nconst WEEKEND_FALLBACK: Record<string, [DayOfWeek, DayOfWeek]> = {\n 'en-US': [6, 0],\n 'de-DE': [6, 0],\n 'fr-FR': [6, 0],\n 'ja-JP': [6, 0],\n 'ar-SA': [5, 6],\n 'ar-AE': [5, 6],\n 'he-IL': [5, 6],\n 'fa-IR': [4, 5],\n en: [6, 0],\n de: [6, 0],\n fr: [6, 0],\n ar: [5, 6],\n he: [5, 6],\n};\n\n/**\n * Seven weekday short names ordered to begin at the locale's firstDayOfWeek.\n * Use for the calendar grid header row.\n */\nexport const formatWeekdayNames = (locale: string, format: 'short' | 'narrow' = 'short'): string[] => {\n const fmt = new Intl.DateTimeFormat(locale, { weekday: format });\n const start = getFirstDayOfWeek(locale);\n // 2026-01-04 is a Sunday in Gregorian; offset from there.\n return Array.from({ length: 7 }, (_, i) => {\n const d = new Date(Date.UTC(2026, 0, 4 + ((start + i) % 7)));\n return fmt.format(d);\n });\n};\n\n/** \"May 2026\" / \"Mai 2026\" / \"mai 2026\" — for the calendar header. */\nexport const formatMonthYearTitle = (date: CalendarDate, locale: string): string => {\n const fmt = new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric' });\n return fmt.format(date.toDate('UTC'));\n};\n\n/** Twelve full month names in the active locale. */\nexport const formatMonthNames = (locale: string): string[] => {\n const fmt = new Intl.DateTimeFormat(locale, { month: 'long' });\n return Array.from({ length: 12 }, (_, m) => fmt.format(new Date(Date.UTC(2026, m, 15))));\n};\n\n/** \"May 5, 2026\" — for screen-reader announcements of the focused date. */\nexport const formatFullDate = (date: CalendarDate, locale: string): string => {\n const fmt = new Intl.DateTimeFormat(locale, { dateStyle: 'long' });\n return fmt.format(date.toDate('UTC'));\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { useCallback } from 'react';\nimport type { CalendarView, ChangeMeta } from '../Calendar.types';\nimport type { DayOfWeek } from './locale-utils';\nimport type { FocusDelta } from './use-calendar-state';\n\nexport type UseCalendarKeyboardProps = {\n focusedDate: CalendarDate;\n moveFocus: (delta: FocusDelta) => void;\n selectDate: (date: CalendarDate, source: ChangeMeta['source']) => void;\n setView: (view: CalendarView) => void;\n view: CalendarView;\n /** Default 0 (Sunday). Used by Home/End to compute week boundaries. */\n firstDayOfWeek?: DayOfWeek;\n};\n\nexport const useCalendarKeyboard = (props: UseCalendarKeyboardProps) => {\n const { focusedDate, moveFocus, selectDate, firstDayOfWeek = 0 } = props;\n\n const onKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n const focusedDow = focusedDate.toDate('UTC').getUTCDay() as DayOfWeek;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n moveFocus({ days: -1 });\n return;\n case 'ArrowRight':\n event.preventDefault();\n moveFocus({ days: 1 });\n return;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus({ weeks: -1 });\n return;\n case 'ArrowDown':\n event.preventDefault();\n moveFocus({ weeks: 1 });\n return;\n case 'PageUp':\n event.preventDefault();\n moveFocus(event.shiftKey ? { years: -1 } : { months: -1 });\n return;\n case 'PageDown':\n event.preventDefault();\n moveFocus(event.shiftKey ? { years: 1 } : { months: 1 });\n return;\n case 'Home': {\n event.preventDefault();\n const back = (focusedDow - firstDayOfWeek + 7) % 7;\n moveFocus({ days: -back });\n return;\n }\n case 'End': {\n event.preventDefault();\n const back = (focusedDow - firstDayOfWeek + 7) % 7;\n const forward = 6 - back;\n moveFocus({ days: forward });\n return;\n }\n case 'Enter':\n case ' ':\n event.preventDefault();\n selectDate(focusedDate, 'keyboard');\n return;\n default:\n return;\n }\n },\n [focusedDate, firstDayOfWeek, moveFocus, selectDate]\n );\n\n return { onKeyDown };\n};\n","import type { CalendarDate } from '@internationalized/date';\n\nexport type Constraints = {\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n};\n\nconst cmp = (a: CalendarDate, b: CalendarDate): number => a.compare(b);\n\nexport const isOutOfRange = (date: CalendarDate, bounds: Pick<Constraints, 'minValue' | 'maxValue'> = {}): boolean => {\n if (bounds.minValue && cmp(date, bounds.minValue) < 0) {\n return true;\n }\n if (bounds.maxValue && cmp(date, bounds.maxValue) > 0) {\n return true;\n }\n return false;\n};\n\n/**\n * Returns a single predicate that combines minValue/maxValue bounds and\n * a user-provided `isDateUnavailable`. The composed function is what every\n * view layer (DayCell, keyboard nav focus skip, scroll list) consults.\n */\nexport const composeUnavailable =\n (c: Constraints) =>\n (date: CalendarDate): boolean => {\n if (isOutOfRange(date, c)) {\n return true;\n }\n if (c.isDateUnavailable?.(date)) {\n return true;\n }\n return false;\n };\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { getLocalTimeZone, today } from '@internationalized/date';\nimport { useCallback, useMemo, useState } from 'react';\nimport type { CalendarMode, CalendarValue, CalendarView, ChangeMeta } from '../Calendar.types';\nimport { type Constraints, composeUnavailable } from './constraints';\n\nexport type FocusDelta = {\n days?: number;\n weeks?: number;\n months?: number;\n years?: number;\n};\n\nexport type UseCalendarStateProps<M extends CalendarMode> = Constraints & {\n mode?: M;\n locale: string;\n value?: CalendarValue<M>;\n defaultValue?: CalendarValue<M>;\n onChange?: (value: CalendarValue<M>, meta: ChangeMeta) => void;\n view?: CalendarView;\n defaultView?: CalendarView;\n onViewChange?: (view: CalendarView) => void;\n};\n\nexport type UseCalendarStateReturn<M extends CalendarMode> = {\n value: CalendarValue<M>;\n view: CalendarView;\n focusedDate: CalendarDate;\n setView: (next: CalendarView) => void;\n moveFocus: (delta: FocusDelta) => void;\n setFocusedDate: (date: CalendarDate) => void;\n selectDate: (date: CalendarDate, source: ChangeMeta['source']) => void;\n isUnavailable: (date: CalendarDate) => boolean;\n};\n\nconst initialFocus = <M extends CalendarMode>(\n mode: M,\n value: CalendarValue<M> | undefined,\n fallback: CalendarDate\n): CalendarDate => {\n if (!value) {\n return fallback;\n }\n if (mode === 'single') {\n return (value as CalendarDate | null) ?? fallback;\n }\n if (mode === 'range') {\n const r = value as { start: CalendarDate; end: CalendarDate | null };\n return r?.start ?? fallback;\n }\n const arr = value as CalendarDate[];\n return arr[0] ?? fallback;\n};\n\nexport const useCalendarState = <M extends CalendarMode = 'single'>(\n props: UseCalendarStateProps<M>\n): UseCalendarStateReturn<M> => {\n const mode = (props.mode ?? 'single') as M;\n const fallback = today(getLocalTimeZone());\n\n const [internalValue, setInternalValue] = useState<CalendarValue<M>>(() => {\n if (props.value !== undefined) {\n return props.value;\n }\n if (props.defaultValue !== undefined) {\n return props.defaultValue;\n }\n return (mode === 'multiple' ? [] : null) as CalendarValue<M>;\n });\n const isControlled = props.value !== undefined;\n const value = isControlled ? (props.value as CalendarValue<M>) : internalValue;\n\n const [internalView, setInternalView] = useState<CalendarView>(props.defaultView ?? 'day');\n const isViewControlled = props.view !== undefined;\n const view = isViewControlled ? (props.view as CalendarView) : internalView;\n\n const [focusedDate, setFocusedDate] = useState<CalendarDate>(() => initialFocus(mode, value, fallback));\n\n const isUnavailable = useMemo(\n () =>\n composeUnavailable({\n ...(props.minValue !== undefined ? { minValue: props.minValue } : {}),\n ...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {}),\n ...(props.isDateUnavailable !== undefined ? { isDateUnavailable: props.isDateUnavailable } : {}),\n }),\n [props.minValue, props.maxValue, props.isDateUnavailable]\n );\n\n const setView = useCallback(\n (next: CalendarView) => {\n if (!isViewControlled) {\n setInternalView(next);\n }\n props.onViewChange?.(next);\n },\n [isViewControlled, props.onViewChange]\n );\n\n const moveFocus = useCallback(\n (delta: FocusDelta) => {\n setFocusedDate((cur) => {\n let next = cur;\n if (delta.days) {\n next = next.add({ days: delta.days });\n }\n if (delta.weeks) {\n next = next.add({ weeks: delta.weeks });\n }\n if (delta.months) {\n next = next.add({ months: delta.months });\n }\n if (delta.years) {\n next = next.add({ years: delta.years });\n }\n if (!isUnavailable(next)) {\n return next;\n }\n // Target is disabled — scan in the direction of motion for\n // the next available date. Cap at ~100 days so a wide\n // disabled range doesn't loop forever; if nothing's\n // available within the cap, leave focus where it was.\n const totalDelta =\n (delta.days ?? 0) + (delta.weeks ?? 0) * 7 + (delta.months ?? 0) * 30 + (delta.years ?? 0) * 365;\n const sign = totalDelta >= 0 ? 1 : -1;\n for (let i = 1; i <= 100; i++) {\n const candidate = next.add({ days: sign * i });\n if (!isUnavailable(candidate)) {\n return candidate;\n }\n }\n return cur;\n });\n },\n [isUnavailable]\n );\n\n const selectDate = useCallback(\n (date: CalendarDate, source: ChangeMeta['source']) => {\n if (isUnavailable(date)) {\n return;\n }\n const meta: ChangeMeta = { view, source };\n let next: CalendarValue<M>;\n if (mode === 'single') {\n next = date as CalendarValue<M>;\n } else if (mode === 'multiple') {\n const arr = (value as CalendarDate[]) ?? [];\n const exists = arr.some((d) => d.compare(date) === 0);\n next = (exists ? arr.filter((d) => d.compare(date) !== 0) : [...arr, date]) as CalendarValue<M>;\n } else {\n // range mode is delegated to useRangeState\n return;\n }\n if (!isControlled) {\n setInternalValue(next);\n }\n props.onChange?.(next, meta);\n setFocusedDate(date);\n },\n [isControlled, isUnavailable, mode, props.onChange, value, view]\n );\n\n return {\n value,\n view,\n focusedDate,\n setView,\n moveFocus,\n setFocusedDate,\n selectDate,\n isUnavailable,\n };\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { useCallback, useMemo, useState } from 'react';\nimport type { ChangeMeta, DateRange } from '../Calendar.types';\nimport { type Constraints, composeUnavailable } from './constraints';\n\nexport type UseRangeStateProps = Constraints & {\n value?: DateRange | null;\n defaultValue?: DateRange | null;\n onChange?: (value: DateRange | null, meta: ChangeMeta) => void;\n minNights?: number;\n maxNights?: number;\n};\n\nexport type UseRangeStateReturn = {\n value: DateRange | null;\n previewRange: DateRange | null;\n hoveredDate: CalendarDate | null;\n selectDate: (date: CalendarDate, source?: ChangeMeta['source']) => void;\n setHoveredDate: (date: CalendarDate | null) => void;\n isUnavailable: (date: CalendarDate) => boolean;\n};\n\nconst order = (a: CalendarDate, b: CalendarDate): [CalendarDate, CalendarDate] => (a.compare(b) <= 0 ? [a, b] : [b, a]);\n\nconst nightsBetween = (a: CalendarDate, b: CalendarDate): number => {\n const [first, last] = order(a, b);\n return Math.round((last.toDate('UTC').getTime() - first.toDate('UTC').getTime()) / 86400000);\n};\n\nexport const useRangeState = (props: UseRangeStateProps): UseRangeStateReturn => {\n const [internal, setInternal] = useState<DateRange | null>(props.defaultValue ?? null);\n const isControlled = props.value !== undefined;\n const value = isControlled ? (props.value ?? null) : internal;\n\n const [hoveredDate, setHoveredDate] = useState<CalendarDate | null>(null);\n\n const isUnavailable = useMemo(\n () =>\n composeUnavailable({\n ...(props.minValue !== undefined ? { minValue: props.minValue } : {}),\n ...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {}),\n ...(props.isDateUnavailable !== undefined ? { isDateUnavailable: props.isDateUnavailable } : {}),\n }),\n [props.minValue, props.maxValue, props.isDateUnavailable]\n );\n\n const commit = useCallback(\n (next: DateRange | null, source: ChangeMeta['source']) => {\n if (!isControlled) {\n setInternal(next);\n }\n props.onChange?.(next, { view: 'day', source });\n },\n [isControlled, props.onChange]\n );\n\n const selectDate = useCallback(\n (date: CalendarDate, source: ChangeMeta['source'] = 'click') => {\n if (isUnavailable(date)) {\n return;\n }\n\n // No range yet, or both endpoints set → start a fresh selection.\n if (!value || value.end !== null) {\n commit({ start: date, end: null }, source);\n setHoveredDate(null);\n return;\n }\n\n // We have a pending start, no end yet.\n const nights = nightsBetween(value.start, date);\n if (props.minNights !== undefined && nights < props.minNights) {\n return;\n }\n if (props.maxNights !== undefined && nights > props.maxNights) {\n return;\n }\n\n const [start, end] = order(value.start, date);\n commit({ start, end }, source);\n setHoveredDate(null);\n },\n [commit, isUnavailable, props.maxNights, props.minNights, value]\n );\n\n const previewRange = useMemo<DateRange | null>(() => {\n if (!value || value.end !== null || !hoveredDate) {\n return null;\n }\n const [start, end] = order(value.start, hoveredDate);\n return { start, end };\n }, [hoveredDate, value]);\n\n return {\n value,\n previewRange,\n hoveredDate,\n selectDate,\n setHoveredDate,\n isUnavailable,\n };\n};\n","import type { Dictionary } from './types';\n\n/**\n * Default English strings used by library components.\n *\n * Key naming convention:\n * <component>.<purpose>[_plural-form]\n *\n * Plural suffixes follow i18next: `_zero`, `_one`, `_two`, `_few`, `_many`, `_other`.\n * Interpolation uses `{{name}}` — double braces, no spaces, by convention.\n */\nexport const defaultDictionary: Dictionary = {\n // generic / shared\n 'common.cancel': 'Cancel',\n 'common.confirm': 'Confirm',\n 'common.close': 'Close',\n 'common.back': 'Back',\n 'common.loading': 'Loading',\n 'common.error': 'Something went wrong',\n 'common.retry': 'Try again',\n\n // breadcrumb\n 'breadcrumb.ariaLabel': 'Breadcrumb',\n 'breadcrumb.expandLabel': 'Show full path',\n 'breadcrumb.ellipsisLabel': 'More',\n 'breadcrumb.currentPageLabel': 'Current page',\n 'breadcrumb.siblingMenuLabel': 'Open sibling pages',\n\n // pagination\n 'pagination.ariaLabel': 'Pagination',\n 'pagination.previous': 'Previous page',\n 'pagination.next': 'Next page',\n 'pagination.first': 'First page',\n 'pagination.last': 'Last page',\n 'pagination.ellipsis': 'More pages',\n 'pagination.currentPage': 'Current page',\n 'pagination.gotoPage': 'Go to page {{page}}',\n 'pagination.range': 'Showing {{from}}–{{to}} of {{total}}',\n 'pagination.pageOf': 'Page {{page}} of {{total}}',\n 'pagination.pageSizeLabel': 'Items per page',\n 'pagination.jumperLabel': 'Go to page',\n 'pagination.jumperPlaceholder': '#',\n\n // floatButton\n 'floatButton.backToTop': 'Back to top',\n\n // calendar\n 'calendar.header.previous': 'Previous month',\n 'calendar.header.next': 'Next month',\n 'calendar.header.openMonthView': 'Open month picker',\n 'calendar.header.openYearView': 'Open year picker',\n 'calendar.header.openDayView': 'Open day picker',\n 'calendar.today': 'Today',\n 'calendar.clear': 'Clear',\n\n // button\n 'button.loadingLabel': 'Loading',\n\n // input\n 'input.clear': 'Clear',\n 'input.passwordShow': 'Show password',\n 'input.passwordHide': 'Hide password',\n\n // checkbox / switch\n 'checkbox.checked': 'Checked',\n 'checkbox.unchecked': 'Unchecked',\n 'switch.on': 'On',\n 'switch.off': 'Off',\n\n // field\n 'field.requiredIndicator': '*',\n 'field.requiredLabel': 'required',\n\n // table / dataTable\n 'table.empty': 'No data',\n};\n","import type { Dictionary, I18nInput, I18nOptions, TranslateFn } from './types';\n\n/**\n * Normalizes the consumer's i18n input (undefined | dictionary | function) into a\n * uniform TranslateFn. Internal code only calls the returned function.\n *\n * Precedence for a given key lookup:\n * 1. consumer function (if provided) — called verbatim, no further fallback\n * 2. consumer dictionary (if provided)\n * 3. library defaults\n * 4. options.defaultValue\n * 5. the key itself (so missing strings are visible in dev, not silent)\n */\nexport function resolveI18n(input: I18nInput, defaults: Dictionary): TranslateFn {\n if (typeof input === 'function') {\n // Wrap so the consumer fn is always invoked with (key, options) — enables\n // Jest `toHaveBeenCalledWith(key, undefined)` assertions and mirrors i18next's\n // own call signature exactly.\n return (keyOrKeys, options) => input(keyOrKeys, options);\n }\n\n const dict = input ?? {};\n\n return (keyOrKeys, options) => {\n const keys = Array.isArray(keyOrKeys) ? keyOrKeys : [keyOrKeys];\n for (const rawKey of keys) {\n const key = pluralize(rawKey, options?.count);\n const template = dict[key] ?? defaults[key];\n if (template !== undefined) {\n return interpolate(template, options);\n }\n }\n // exhausted the key list\n const lastKey = keys[keys.length - 1];\n if (options?.defaultValue !== undefined) {\n return interpolate(options.defaultValue, options);\n }\n return lastKey ?? '';\n };\n}\n\nfunction pluralize(key: string, count: number | undefined): string {\n if (count === undefined) {\n return key;\n }\n // Minimal English pluralization — extend with ICU rules later if needed.\n if (count === 1) {\n return `${key}_one`;\n }\n return `${key}_other`;\n}\n\nfunction interpolate(template: string, options: I18nOptions | undefined): string {\n if (!options) {\n return template;\n }\n return template.replace(/\\{\\{\\s*([A-Za-z0-9_.-]+)\\s*\\}\\}/g, (_match, name: string) => {\n const value = options[name];\n return value === undefined || value === null ? '' : String(value);\n });\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext, useMemo } from 'react';\nimport { defaultDictionary } from './default-dictionary';\nimport { resolveI18n } from './resolve';\nimport type { I18nInput, TranslateFn } from './types';\n\nexport type I18nContextValue = {\n t: TranslateFn;\n};\n\n// Default context value uses the built-in English dictionary; consumers without\n// a provider still get a working t().\nconst defaultValue: I18nContextValue = {\n t: resolveI18n(undefined, defaultDictionary),\n};\n\nexport const I18nContext = createContext<I18nContextValue>(defaultValue);\nI18nContext.displayName = 'I18nContext';\n\nexport type I18nProviderProps = {\n i18n?: I18nInput;\n children?: ReactNode;\n};\n\nexport function I18nProvider({ i18n, children }: I18nProviderProps) {\n const value = useMemo<I18nContextValue>(() => ({ t: resolveI18n(i18n, defaultDictionary) }), [i18n]);\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n","'use client';\n\nimport { useContext } from 'react';\nimport { I18nContext, type I18nContextValue } from './context';\n\nexport function useTranslation(): I18nContextValue {\n return useContext(I18nContext);\n}\n","'use client';\n\n// default-semantic-icons — minimal built-in icon placeholders for internal\n// library glyphs. Consumers can swap each one via the provider:\n//\n// <NoriProvider icons={{ checkmark: MyCheck, close: MyX }}>\n//\n// These defaults exist so the library renders usable UI out of the box even\n// when lucide-react(-native) or any other icon set is not installed. They are\n// NOT intended to compete with Lucide on style — override them in production.\n//\n// Web ships an SVG path identical to the historical lucide-style stroke. Native\n// ships a Unicode glyph wrapped in `<Text>` because raw `<svg><path>` doesn't\n// exist on the React Native runtime — the renderer treats lowercase host names\n// as native components and crashes with \"View config getter callback for\n// component `path` must be a function\". `react-native-svg` would solve this\n// but it's an extra peer dep this library deliberately doesn't require.\n//\n// Marked `'use client'` because the native render path reads\n// `useThemeColors()` to default the glyph color to the active theme's\n// text token when no explicit color is passed. Without this the native\n// glyph would render in RNText's default (black) regardless of scheme.\n\nimport type { ComponentType } from 'react';\nimport { Platform, Text as RNText } from 'react-native';\nimport { useThemeColors } from '../theme/use-theme-colors';\nimport type { IconComponentProps } from './icon';\n\ntype SemanticIcon = ComponentType<IconComponentProps>;\n\ntype IconRecipe = {\n /** SVG `path` data — used on the web. */\n path: string;\n /** Unicode glyph rendered in `<Text>` on native. */\n glyph: string;\n};\n\nconst isWeb = Platform.OS === 'web';\n\nconst make = ({ path, glyph }: IconRecipe): SemanticIcon =>\n function PlaceholderIcon({ size = 20, color = 'currentColor' }) {\n // Always call the hook — rules-of-hooks. The native branch is the\n // only consumer of the resolved colors, but pulling them on web is\n // a cheap context read.\n const colors = useThemeColors();\n if (isWeb) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n }\n // 'currentColor' is a CSS keyword without meaning on native — RNText\n // would render in its inherent default (~black). Resolve it against\n // the active theme so the glyph stays readable in both schemes.\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.default : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {glyph}\n </RNText>\n );\n };\n\nexport type SemanticIcons = {\n checkmark: SemanticIcon;\n close: SemanticIcon;\n eye: SemanticIcon;\n eyeOff: SemanticIcon;\n chevronDown: SemanticIcon;\n chevronUp: SemanticIcon;\n alertTriangle: SemanticIcon;\n info: SemanticIcon;\n check: SemanticIcon;\n x: SemanticIcon;\n};\n\nexport const defaultSemanticIcons: SemanticIcons = {\n checkmark: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n close: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n eye: make({\n path: 'M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z',\n glyph: '👁',\n }),\n eyeOff: make({\n path: 'M17.94 17.94A10 10 0 0 1 2 12s3.5-7 10-7c2 0 3.8.6 5.4 1.5 M1 1l22 22',\n glyph: '🙈',\n }),\n chevronDown: make({ path: 'm6 9 6 6 6-6', glyph: '⌄' }),\n chevronUp: make({ path: 'm18 15-6-6-6 6', glyph: '⌃' }),\n alertTriangle: make({\n path: 'M12 9v4 M12 17h.01 M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z',\n glyph: '⚠',\n }),\n info: make({\n path: 'M12 8h.01 M11 12h1v4h1 M12 22C6.48 22 2 17.52 2 12 2 6.48 6.48 2 12 2c5.52 0 10 4.48 10 10 0 5.52-4.48 10-10 10z',\n glyph: 'ⓘ',\n }),\n check: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n x: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n};\n","'use client';\n\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type { NativeScrollEvent, NativeSyntheticEvent, ViewStyle } from 'react-native';\nimport { Modal, Platform, Pressable, Text as RNText, ScrollView, useWindowDimensions, View } from 'react-native';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type SelectOption<T = unknown> = {\n /** Unique value within the select. */\n value: string;\n /** Visible text. */\n label: string;\n /** Optional group label — items with the same `group` cluster together. */\n group?: string;\n disabled?: boolean;\n /** Arbitrary payload — surfaced to `renderOption` and `onChange`. */\n data?: T;\n};\n\nexport type LoadOptionsParams = {\n /** Current search input. */\n search: string;\n /** Number of items already loaded — start of the requested window. */\n offset: number;\n /** Page size requested. */\n limit: number;\n};\n\nexport type LoadOptionsResult<T = unknown> = {\n items: ReadonlyArray<SelectOption<T>>;\n /** Total available — the picker stops requesting when offset+items.length >= total. Optional; if omitted, requests stop when items.length < limit. */\n total?: number;\n};\n\nexport type SelectRenderOptionInfo = {\n /** This option matches the current value. */\n selected: boolean;\n /** This option is the keyboard focus target. */\n active: boolean;\n};\n\ntype SelectBaseProps<T = unknown> = {\n /** Static options. Mutually exclusive with `loadOptions`. */\n options?: ReadonlyArray<SelectOption<T>>;\n /**\n * Async loader. Called with `{ search, offset, limit }` whenever the\n * search input changes (debounced) or the user scrolls near the end of\n * the loaded list. Return more items + an optional total to stop the\n * pagination loop early.\n */\n loadOptions?: (params: LoadOptionsParams) => Promise<LoadOptionsResult<T>>;\n /** Page size for `loadOptions`. @defaultValue 50 */\n pageSize?: number;\n /** Show a search input above the list. @defaultValue auto-on for static options >= 10 items, always on for loadOptions */\n searchable?: boolean;\n /** Placeholder for the search input. */\n searchPlaceholder?: string;\n /** Override the default substring filter for static options. */\n filterOption?: (option: SelectOption<T>, search: string) => boolean;\n /** Custom item renderer. Called per option in the list. */\n renderOption?: (option: SelectOption<T>, info: SelectRenderOptionInfo) => ReactNode;\n /** Trigger placeholder when no value is selected. */\n placeholder?: string;\n /**\n * BCP 47 locale — drives `Intl.Collator` sorting of options when set.\n * Re-sorts on language switch so a German list reads alphabetically in\n * German vs the same list in English.\n */\n locale?: string;\n /** When `locale` is set, sort options alphabetically. @defaultValue true */\n sortByLocale?: boolean;\n /** Message shown in the popup when there are no matching options. */\n noOptionsMessage?: string;\n /** Message shown while async results are loading. */\n loadingMessage?: string;\n /** Disable interaction. */\n disabled?: boolean;\n /** RTL flips the popup alignment + text direction. */\n dir?: 'ltr' | 'rtl';\n /**\n * Virtualize the list — only DOM-render the visible window of items.\n * Auto-on when the list has more than 100 items.\n */\n virtualized?: boolean;\n /** Pixel height of a single item — required for virtualization math. @defaultValue 36 */\n itemHeight?: number;\n /** Max popup height in px. @defaultValue 320 */\n maxMenuHeight?: number;\n className?: string;\n testID?: string;\n id?: string;\n name?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n};\n\nexport type SelectSingleProps<T = unknown> = SelectBaseProps<T> & {\n /** Single-select mode (default — omit or pass `false`). */\n multiple?: false;\n /** Controlled value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n /** Fires when the user picks an option. */\n onChange?: (value: string, option: SelectOption<T> | undefined) => void;\n};\n\nexport type SelectMultiProps<T = unknown> = SelectBaseProps<T> & {\n /** Multi-select mode — value/onChange become array-typed. */\n multiple: true;\n /** Controlled values. */\n value?: ReadonlyArray<string>;\n /** Uncontrolled initial values. */\n defaultValue?: ReadonlyArray<string>;\n /** Fires when the selection changes. Receives the full new array of values + their resolved options. */\n onChange?: (values: ReadonlyArray<string>, options: ReadonlyArray<SelectOption<T>>) => void;\n /** Hard cap on selected count — extra picks are ignored. */\n maxSelected?: number;\n /** Max chips to render in the trigger before collapsing to \"N selected\". @defaultValue 3 */\n maxChips?: number;\n};\n\nexport type SelectProps<T = unknown> = SelectSingleProps<T> | SelectMultiProps<T>;\n\nconst DEFAULT_PAGE_SIZE = 50;\nconst DEFAULT_ITEM_HEIGHT = 36;\nconst DEFAULT_MAX_MENU = 320;\nconst SEARCH_DEBOUNCE_MS = 150;\nconst VIRTUAL_OVERSCAN = 4;\n// Reset window for the type-ahead buffer. Matches native <select> on macOS\n// closely enough that typing \"Sep\" lands on September even without a search\n// field. Shorter than the WAI-ARIA suggested 500ms feels jumpy on slow typists.\nconst TYPE_AHEAD_RESET_MS = 500;\n\nconst defaultFilter = <T,>(option: SelectOption<T>, search: string): boolean => {\n if (!search) {\n return true;\n }\n return option.label.toLowerCase().includes(search.toLowerCase());\n};\n\n/**\n * Searchable, async-capable, optionally virtualized select. Designed for the\n * \"I have 500 items behind a paginated API\" case as easily as the \"five\n * static items\" case.\n *\n * Modes:\n * - **Static** — pass `options`. The picker filters in-memory by a\n * substring match on `label` (override via `filterOption`).\n * - **Async** — pass `loadOptions(params)`. Called on search-input change\n * (debounced) and when the list scrolls near the bottom for the next\n * page. The picker manages the loaded list, so consumers don't have to.\n *\n * Other features:\n * - Custom item renderer via `renderOption`.\n * - i18n locale-aware sorting via `Intl.Collator` when `locale` is set —\n * re-sorts when the locale changes so a German list reads\n * alphabetically in German.\n * - OptGroup support — items with the same `group` field cluster in the\n * popup with a group header.\n * - Virtualized list when item count > 100 (or set `virtualized`\n * explicitly). Only the visible window is rendered.\n * - Keyboard navigation: ArrowDown / ArrowUp move the active option,\n * Home / End jump to the first / last, Enter selects, Escape closes,\n * Tab closes. Type-ahead works whether or not a search field is shown\n * (typing \"Sep\" lands on September; repeating a single char like\n * \"m\",\"m\" cycles through M-options).\n * - RTL alignment via `dir=\"rtl\"`.\n */\nexport const Select = <T = unknown>(props: SelectProps<T>) => {\n const {\n options: staticOptions,\n loadOptions,\n pageSize = DEFAULT_PAGE_SIZE,\n searchable: searchableProp,\n searchPlaceholder = 'Search…',\n filterOption,\n renderOption,\n placeholder = 'Select…',\n locale,\n sortByLocale = true,\n noOptionsMessage = 'No options',\n loadingMessage = 'Loading…',\n disabled = false,\n dir = 'ltr',\n virtualized: virtualizedProp,\n itemHeight = DEFAULT_ITEM_HEIGHT,\n maxMenuHeight = DEFAULT_MAX_MENU,\n className,\n testID,\n id,\n name,\n } = props;\n const ariaLabel = (props as { 'aria-label'?: string })['aria-label'];\n const ariaLabelledBy = (props as { 'aria-labelledby'?: string })['aria-labelledby'];\n const ariaDescribedBy = (props as { 'aria-describedby'?: string })['aria-describedby'];\n const ariaInvalid = (props as { 'aria-invalid'?: boolean })['aria-invalid'];\n const ariaRequired = (props as { 'aria-required'?: boolean })['aria-required'];\n const multiple = props.multiple === true;\n const maxSelected = multiple ? (props as SelectMultiProps<T>).maxSelected : undefined;\n const maxChips = multiple ? ((props as SelectMultiProps<T>).maxChips ?? 3) : undefined;\n\n const baseId = useId();\n const colors = useThemeColors();\n const [open, setOpen] = useState(false);\n\n // We always store values as a ReadonlyArray<string> internally so the\n // toggle / replace logic stays uniform; for single mode the array is\n // either empty or has exactly one element.\n const controlledValues: ReadonlyArray<string> | undefined = multiple\n ? (props.value as ReadonlyArray<string> | undefined)\n : props.value !== undefined\n ? [props.value as string]\n : undefined;\n const defaultValues: ReadonlyArray<string> = multiple\n ? (((props as SelectMultiProps<T>).defaultValue as ReadonlyArray<string> | undefined) ?? [])\n : (props as SelectSingleProps<T>).defaultValue !== undefined\n ? [(props as SelectSingleProps<T>).defaultValue as string]\n : [];\n const [innerValues, setInnerValues] = useState<ReadonlyArray<string>>(defaultValues);\n const isControlled = controlledValues !== undefined;\n const currentValues: ReadonlyArray<string> = isControlled\n ? (controlledValues as ReadonlyArray<string>)\n : innerValues;\n /** Single-mode legacy accessor — first selected value (or undefined). */\n const current: string | undefined = currentValues[0];\n\n const [searchInput, setSearchInput] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const [activeIndex, setActiveIndex] = useState(0);\n\n // Debounce the search input so loadOptions / filterOption don't fire on\n // every keystroke when the work is expensive.\n useEffect(() => {\n const t = setTimeout(() => setDebouncedSearch(searchInput), SEARCH_DEBOUNCE_MS);\n return () => clearTimeout(t);\n }, [searchInput]);\n\n // Async-mode internal cache of loaded options.\n const [asyncItems, setAsyncItems] = useState<SelectOption<T>[]>([]);\n const [asyncLoading, setAsyncLoading] = useState(false);\n const [asyncTotal, setAsyncTotal] = useState<number | undefined>(undefined);\n const asyncRequestId = useRef(0);\n\n const isAsync = loadOptions !== undefined;\n\n // When the search changes in async mode, reset the loaded list and\n // refetch from offset 0. The request id guards against stale resolution.\n useEffect(() => {\n if (!isAsync || !loadOptions || !open) {\n return;\n }\n const requestId = ++asyncRequestId.current;\n setAsyncLoading(true);\n setAsyncItems([]);\n setAsyncTotal(undefined);\n loadOptions({ search: debouncedSearch, offset: 0, limit: pageSize })\n .then((result) => {\n if (requestId !== asyncRequestId.current) {\n return;\n }\n setAsyncItems(result.items.slice());\n setAsyncTotal(result.total);\n })\n .catch(() => {\n // Swallow — consumers can wrap loadOptions to handle errors.\n })\n .finally(() => {\n if (requestId === asyncRequestId.current) {\n setAsyncLoading(false);\n }\n });\n }, [debouncedSearch, isAsync, loadOptions, pageSize, open]);\n\n // Helper to load the next page in async mode.\n const loadMore = useCallback(() => {\n if (!isAsync || !loadOptions || asyncLoading) {\n return;\n }\n const haveAll = asyncTotal !== undefined && asyncItems.length >= asyncTotal;\n if (haveAll) {\n return;\n }\n const requestId = ++asyncRequestId.current;\n setAsyncLoading(true);\n loadOptions({ search: debouncedSearch, offset: asyncItems.length, limit: pageSize })\n .then((result) => {\n if (requestId !== asyncRequestId.current) {\n return;\n }\n setAsyncItems((prev) => prev.concat(result.items));\n if (result.total !== undefined) {\n setAsyncTotal(result.total);\n }\n })\n .catch(() => undefined)\n .finally(() => {\n if (requestId === asyncRequestId.current) {\n setAsyncLoading(false);\n }\n });\n }, [asyncItems.length, asyncLoading, asyncTotal, debouncedSearch, isAsync, loadOptions, pageSize]);\n\n // Build the displayed option list — filter (static) or async items, then\n // optionally locale-sort.\n const visibleOptions = useMemo<SelectOption<T>[]>(() => {\n const source = isAsync ? asyncItems : (staticOptions ?? []);\n const filtered = isAsync\n ? source.slice() // async backend already handled search\n : source.filter((opt) => (filterOption ?? defaultFilter)(opt, debouncedSearch));\n if (locale && sortByLocale) {\n const collator = new Intl.Collator(locale, { sensitivity: 'base', numeric: true });\n // Group-aware sort: stable on group, then on label.\n return filtered.slice().sort((a, b) => {\n const ga = a.group ?? '';\n const gb = b.group ?? '';\n const groupDelta = collator.compare(ga, gb);\n if (groupDelta !== 0) {\n return groupDelta;\n }\n return collator.compare(a.label, b.label);\n });\n }\n return filtered;\n }, [isAsync, asyncItems, staticOptions, filterOption, debouncedSearch, locale, sortByLocale]);\n\n const selectedOption = useMemo(() => {\n const all = isAsync ? asyncItems : (staticOptions ?? []);\n return all.find((o) => o.value === current);\n }, [asyncItems, isAsync, staticOptions, current]);\n\n /** Multi-mode: resolved options for every currently-selected value, in selection order. */\n const selectedOptions = useMemo<ReadonlyArray<SelectOption<T>>>(() => {\n if (!multiple) {\n return [];\n }\n const all = isAsync ? asyncItems : (staticOptions ?? []);\n const map = new Map(all.map((o) => [o.value, o]));\n return currentValues.map((v) => map.get(v)).filter((o): o is SelectOption<T> => o !== undefined);\n }, [multiple, currentValues, asyncItems, isAsync, staticOptions]);\n\n const searchable = searchableProp ?? (isAsync || (staticOptions !== undefined && staticOptions.length >= 10));\n const virtualized = virtualizedProp ?? visibleOptions.length > 100;\n\n // Keep activeIndex in bounds.\n useEffect(() => {\n setActiveIndex((idx) => Math.min(Math.max(0, idx), Math.max(0, visibleOptions.length - 1)));\n }, [visibleOptions.length]);\n\n const onSelect = useCallback(\n (option: SelectOption<T>) => {\n if (option.disabled) {\n return;\n }\n if (multiple) {\n const has = currentValues.includes(option.value);\n let nextValues: string[];\n if (has) {\n nextValues = currentValues.filter((v) => v !== option.value);\n } else {\n if (maxSelected !== undefined && currentValues.length >= maxSelected) {\n return; // hit the cap\n }\n nextValues = [...currentValues, option.value];\n }\n if (!isControlled) {\n setInnerValues(nextValues);\n }\n // Resolve options for callback — preserves order of nextValues.\n const allOpts: ReadonlyArray<SelectOption<T>> = [\n ...(staticOptions ?? []),\n ...(asyncItems as ReadonlyArray<SelectOption<T>>),\n ];\n const optMap = new Map(allOpts.map((o) => [o.value, o]));\n const selectedOpts = nextValues\n .map((v) => optMap.get(v))\n .filter((o): o is SelectOption<T> => o !== undefined);\n (props as SelectMultiProps<T>).onChange?.(nextValues, selectedOpts);\n // Multi mode: keep the popup open, keep the search input — the\n // user is likely picking more than one in a row.\n return;\n }\n // Single mode — replace + close.\n if (!isControlled) {\n setInnerValues([option.value]);\n }\n (props as SelectSingleProps<T>).onChange?.(option.value, option);\n setOpen(false);\n setSearchInput('');\n },\n // biome-ignore lint/correctness/useExhaustiveDependencies: `props` is the discriminated union — destructuring it would defeat the narrowing; the asyncItems / staticOptions captures intentionally re-trigger the callback when the option pool changes\n [multiple, isControlled, currentValues, maxSelected, staticOptions, asyncItems, props]\n );\n\n /** Multi-mode helper to clear all selected values. */\n const clearAll = useCallback(() => {\n if (!isControlled) {\n setInnerValues([]);\n }\n (props as SelectMultiProps<T>).onChange?.([], []);\n // biome-ignore lint/correctness/useExhaustiveDependencies: same reason as above\n }, [isControlled, props]);\n\n const moveActive = useCallback(\n (delta: 1 | -1) => {\n setActiveIndex((idx) => {\n if (visibleOptions.length === 0) {\n return 0;\n }\n let next = (idx + delta + visibleOptions.length) % visibleOptions.length;\n // Skip disabled options.\n for (let attempts = 0; attempts < visibleOptions.length; attempts += 1) {\n if (!visibleOptions[next]?.disabled) {\n return next;\n }\n next = (next + delta + visibleOptions.length) % visibleOptions.length;\n }\n return idx;\n });\n },\n [visibleOptions]\n );\n\n // Type-ahead buffer — shared across the trigger (closed state) and the\n // popup container (open without search field). Mutable ref so we don't\n // re-render on every keystroke.\n const typeAheadRef = useRef<{ buffer: string; timer: ReturnType<typeof setTimeout> | null }>({\n buffer: '',\n timer: null,\n });\n useEffect(() => {\n // Clear any pending type-ahead timer on unmount so we don't leak it.\n return () => {\n if (typeAheadRef.current.timer) {\n clearTimeout(typeAheadRef.current.timer);\n typeAheadRef.current.timer = null;\n }\n };\n }, []);\n\n const handleTypeAhead = useCallback(\n (char: string) => {\n if (visibleOptions.length === 0) {\n return;\n }\n if (typeAheadRef.current.timer) {\n clearTimeout(typeAheadRef.current.timer);\n }\n const nextBuffer = typeAheadRef.current.buffer + char.toLowerCase();\n typeAheadRef.current.buffer = nextBuffer;\n typeAheadRef.current.timer = setTimeout(() => {\n typeAheadRef.current.buffer = '';\n typeAheadRef.current.timer = null;\n }, TYPE_AHEAD_RESET_MS);\n\n // Cycle mode: a single char OR repeated same char (e.g. \"aa\") cycles\n // through options whose label starts with that char, advancing past\n // the current activeIndex. Otherwise the buffer is treated as a\n // prefix and we search from the top — refining the match as the\n // user keeps typing (\"S\" → \"Se\" → \"Sep\" → September).\n const allSame = nextBuffer.length > 1 && nextBuffer.split('').every((c) => c === nextBuffer[0]);\n const cycleMode = nextBuffer.length === 1 || allSame;\n const needle = cycleMode ? nextBuffer.charAt(0) : nextBuffer;\n const len = visibleOptions.length;\n const startFrom = cycleMode ? (activeIndex + 1) % len : 0;\n for (let i = 0; i < len; i += 1) {\n const idx = (startFrom + i) % len;\n const opt = visibleOptions[idx];\n if (!opt || opt.disabled) {\n continue;\n }\n if (opt.label.toLowerCase().startsWith(needle)) {\n setActiveIndex(idx);\n return;\n }\n }\n },\n [visibleOptions, activeIndex]\n );\n\n // Shared list-navigation handler — used by the search input, the\n // popup container (when no search field is shown), and as the basis for\n // trigger handling. Returns true if the event was consumed so callers\n // can fall through to type-ahead handling for unhandled keys.\n const handleListKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>): boolean => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveActive(1);\n return true;\n case 'ArrowUp':\n event.preventDefault();\n moveActive(-1);\n return true;\n case 'Home': {\n event.preventDefault();\n const idx = visibleOptions.findIndex((o) => !o.disabled);\n if (idx >= 0) {\n setActiveIndex(idx);\n }\n return true;\n }\n case 'End': {\n event.preventDefault();\n for (let i = visibleOptions.length - 1; i >= 0; i -= 1) {\n if (!visibleOptions[i]?.disabled) {\n setActiveIndex(i);\n break;\n }\n }\n return true;\n }\n case 'Enter': {\n const opt = visibleOptions[activeIndex];\n if (opt) {\n event.preventDefault();\n onSelect(opt);\n }\n return true;\n }\n case 'Escape':\n event.preventDefault();\n setOpen(false);\n // Restore focus to the trigger so the next Tab keeps the\n // user inside the same widget instead of jumping to <body>.\n if (Platform.OS === 'web') {\n const trigger = triggerRef.current as unknown as { focus?: () => void } | null;\n trigger?.focus?.();\n }\n return true;\n case 'Tab':\n setOpen(false);\n return true;\n }\n return false;\n },\n [moveActive, activeIndex, visibleOptions, onSelect]\n );\n\n const handleSearchKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n handleListKeyDown(event);\n },\n [handleListKeyDown]\n );\n\n // Popup-container handler — only attached when there's no search input,\n // so we own type-ahead here. Falls through to the shared list handler\n // for arrow keys / Enter / Escape / Tab.\n const handlePopupKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (handleListKeyDown(event)) {\n return;\n }\n // Single printable character without modifiers → feed the\n // type-ahead buffer. Modifier-combos (Cmd-A, Ctrl-K) are left\n // alone so browser/OS shortcuts keep working.\n if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey && event.key !== ' ') {\n event.preventDefault();\n handleTypeAhead(event.key);\n }\n },\n [handleListKeyDown, handleTypeAhead]\n );\n\n const handleTriggerKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n switch (event.key) {\n case ' ':\n case 'Enter':\n case 'ArrowDown':\n case 'ArrowUp':\n event.preventDefault();\n setOpen(true);\n return;\n }\n // Type-ahead on the closed trigger: open the popup and jump to\n // the matching option. Mirrors native <select> behaviour where\n // typing a letter while the control has focus changes the\n // highlighted choice without an explicit \"open\" gesture.\n if (!disabled && event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {\n event.preventDefault();\n setOpen(true);\n handleTypeAhead(event.key);\n }\n },\n [disabled, handleTypeAhead]\n );\n\n // Close when clicking outside (web only). The outside check considers\n // BOTH the container (trigger area) and the popup ref because the popup\n // portals out of the container's DOM subtree (position: fixed escapes\n // any overflow:hidden ancestor, but still belongs to the same logical\n // widget).\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const popupRef = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n if (\n Platform.OS !== 'web' ||\n typeof document === 'undefined' ||\n typeof document.addEventListener !== 'function'\n ) {\n return;\n }\n if (!open) {\n return;\n }\n const onDocClick = (event: MouseEvent) => {\n const node = containerRef.current;\n const popup = popupRef.current;\n const target = event.target as Node;\n if (node?.contains(target)) {\n return;\n }\n if (popup?.contains(target)) {\n return;\n }\n setOpen(false);\n };\n document.addEventListener('mousedown', onDocClick);\n return () => document.removeEventListener('mousedown', onDocClick);\n }, [open]);\n\n // Measure the trigger so the popup can render with `position: fixed` +\n // computed coords. position:fixed escapes any ancestor's overflow:hidden\n // (e.g. fumadocs Tabs panes, our Preview frame), which is the\n // single biggest source of \"the dropdown got cut off\" bugs.\n //\n // On native we ignore the web `position:fixed` path entirely and\n // measure via `View.measure(...)` to feed an RN `<Modal>` positioned\n // absolutely below the trigger.\n const [triggerRect, setTriggerRect] = useState<{ top: number; left: number; width: number; height: number } | null>(\n null\n );\n const measureTrigger = useCallback(() => {\n const node = triggerRef.current as unknown as {\n getBoundingClientRect?: () => DOMRect;\n measure?: (cb: (x: number, y: number, w: number, h: number, pageX: number, pageY: number) => void) => void;\n } | null;\n if (!node) {\n return;\n }\n if (Platform.OS === 'web' && typeof node.getBoundingClientRect === 'function') {\n const rect = node.getBoundingClientRect();\n setTriggerRect({ top: rect.top, left: rect.left, width: rect.width, height: rect.height });\n return;\n }\n // Native path — RN's measure() reports page-relative coords on the UI thread.\n if (typeof node.measure === 'function') {\n node.measure((_x, _y, w, h, pageX, pageY) => {\n setTriggerRect({ top: pageY, left: pageX, width: w, height: h });\n });\n }\n }, []);\n useEffect(() => {\n if (!open) {\n return;\n }\n // `window` is defined on RN's Hermes/JSC runtime but `addEventListener`\n // is web-only; gate on Platform.OS to avoid the runtime crash on native.\n if (Platform.OS !== 'web' || typeof window === 'undefined' || typeof window.addEventListener !== 'function') {\n return;\n }\n measureTrigger();\n window.addEventListener('scroll', measureTrigger, true);\n window.addEventListener('resize', measureTrigger);\n return () => {\n window.removeEventListener('scroll', measureTrigger, true);\n window.removeEventListener('resize', measureTrigger);\n };\n }, [open, measureTrigger]);\n\n // Auto-focus the popup container when it opens without a search field —\n // otherwise key events have nowhere to land and the user gets a popup\n // they can only operate with the mouse. With a search field, the input's\n // own auto-focus effect already handles this.\n useEffect(() => {\n if (!open || searchable || Platform.OS !== 'web') {\n return;\n }\n const id = requestAnimationFrame(() => {\n const node = popupRef.current as unknown as { focus?: () => void } | null;\n node?.focus?.();\n });\n return () => cancelAnimationFrame(id);\n }, [open, searchable]);\n\n // Scroll handler for async pagination. ScrollView's onScroll event shape\n // works across both react-native-web (HTMLDivElement under the hood) and\n // native (RCTScrollView), so we read offsets from `nativeEvent`.\n const onListScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (!isAsync) {\n return;\n }\n const { contentOffset, contentSize, layoutMeasurement } = event.nativeEvent;\n const remaining = contentSize.height - contentOffset.y - layoutMeasurement.height;\n if (remaining < itemHeight * 4) {\n loadMore();\n }\n },\n [isAsync, itemHeight, loadMore]\n );\n\n // ---------- visual styling ----------\n const triggerStyle: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n minHeight: 36, // component-density literal — not from theme\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.background.elevated,\n opacity: disabled ? 0.6 : 1,\n };\n\n // Web: position:fixed + computed coords from the trigger so the popup\n // can escape any ancestor with `overflow: hidden` (fumadocs Tabs, our\n // Preview frame, etc.). Width matches the trigger; widen to a 200px\n // floor for readability.\n //\n // Native: same coords, but on `position:'absolute'` inside the Modal —\n // RN doesn't have `position:'fixed'`, but Modal renders above all\n // content as a true overlay so absolute coords against the screen\n // window are correct.\n const winDims = useWindowDimensions();\n const popupStyle: ViewStyle = triggerRect\n ? {\n position: (Platform.OS === 'web' ? 'fixed' : 'absolute') as unknown as 'absolute',\n top: triggerRect.top + triggerRect.height + px(colors.spacing['1']),\n left: dir === 'rtl' ? undefined : triggerRect.left,\n right:\n dir === 'rtl'\n ? Platform.OS === 'web' && typeof window !== 'undefined'\n ? window.innerWidth - (triggerRect.left + triggerRect.width)\n : winDims.width - (triggerRect.left + triggerRect.width)\n : undefined,\n minWidth: Math.max(200, triggerRect.width),\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: px(colors.radius.lg),\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n // 2147483646 (max int32 - 1) so we sit above any third-party\n // chrome (toasts, modals, dev banners) without picking a fight\n // for the very top slot. Combined with portaling to body below,\n // this also dodges any ancestor stacking context that would\n // otherwise trap our z-index inside a sibling preview frame.\n zIndex: 2147483646,\n ...({ boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)' } as ViewStyle),\n }\n : {\n // Trigger not yet measured — render off-screen until the\n // first measurement lands. Avoids a one-frame flash at (0,0).\n position: (Platform.OS === 'web' ? 'fixed' : 'absolute') as unknown as 'absolute',\n top: -9999,\n left: -9999,\n };\n\n const containerProps: Record<string, unknown> = {\n ref: (node: HTMLDivElement | null) => {\n containerRef.current = node;\n },\n ...(testID !== undefined ? { testID } : {}),\n dir,\n };\n\n return (\n <View {...containerProps} className={cn('relative', className)} style={{ position: 'relative' }}>\n {/* RN's Pressable TS surface doesn't model onKeyDown / aria-haspopup; rn-web forwards them. Spread at the boundary. */}\n <Pressable\n ref={(node) => {\n triggerRef.current = node as unknown as HTMLElement | null;\n }}\n {...({\n onKeyDown: handleTriggerKeyDown,\n role: 'combobox',\n accessibilityRole: 'combobox',\n 'aria-expanded': open,\n 'aria-controls': `${baseId}-listbox`,\n 'aria-haspopup': 'listbox',\n tabIndex: disabled ? -1 : 0,\n ...(id !== undefined ? { id, nativeID: id } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(ariaLabel !== undefined ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n ...(ariaLabelledBy !== undefined\n ? { 'aria-labelledby': ariaLabelledBy, accessibilityLabelledBy: ariaLabelledBy }\n : {}),\n ...(ariaDescribedBy !== undefined\n ? { 'aria-describedby': ariaDescribedBy, accessibilityDescribedBy: ariaDescribedBy }\n : {}),\n ...(ariaInvalid === true ? { 'aria-invalid': true } : {}),\n ...(ariaRequired === true ? { 'aria-required': true } : {}),\n ...(disabled ? { 'aria-disabled': true, disabled: true } : {}),\n } as Record<string, unknown>)}\n onPress={() => {\n if (disabled) {\n return;\n }\n // Re-measure on every press so the popup picks up\n // post-scroll / rotation / keyboard-shifted positions.\n measureTrigger();\n setOpen((v) => !v);\n }}\n style={triggerStyle}\n >\n {multiple ? (\n <MultiTriggerLabel options={selectedOptions} placeholder={placeholder} maxChips={maxChips ?? 3} />\n ) : (\n <RNText\n style={{\n color: selectedOption ? colors.semantic.text.default : colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {selectedOption?.label ?? placeholder}\n </RNText>\n )}\n <defaultSemanticIcons.chevronDown size={16} color={colors.semantic.text.muted} />\n </Pressable>\n\n {open ? renderPopup() : null}\n </View>\n );\n\n // Local helper so we can portal to <body> on web. Why: even with\n // position:fixed, an ancestor with `transform`, `filter`, or `will-change`\n // creates a containing block that traps fixed positioning AND a stacking\n // context that traps z-index. The docs preview frames trip both. Portaling\n // to body removes all ambiguity — the popup is a top-level sibling of\n // <body>'s other children. On native, RN doesn't have a portal here, so\n // we render in place; native overflow is rarely a clipping problem\n // because RN doesn't have stacking-context-creating CSS properties.\n function renderPopup(): React.ReactNode {\n const popup = (\n <View\n ref={(node) => {\n popupRef.current = node as unknown as HTMLDivElement | null;\n }}\n {...({\n role: 'listbox',\n id: `${baseId}-listbox`,\n ...(multiple ? { 'aria-multiselectable': true } : {}),\n // Without a search field there's no input to capture\n // keystrokes — make the popup itself focusable and own\n // arrow / Enter / Escape / type-ahead. With a search\n // field these belong to the input below.\n ...(searchable ? {} : { tabIndex: -1, onKeyDown: handlePopupKeyDown }),\n } as Record<string, unknown>)}\n style={popupStyle}\n >\n {searchable ? (\n <SearchInput\n value={searchInput}\n onChange={setSearchInput}\n onKeyDown={handleSearchKeyDown}\n placeholder={searchPlaceholder}\n dir={dir}\n />\n ) : null}\n {multiple && currentValues.length > 0 ? (\n <MultiSelectionHeader count={currentValues.length} onClearAll={clearAll} />\n ) : null}\n <SelectList\n options={visibleOptions}\n activeIndex={activeIndex}\n currentValue={current}\n selectedValues={currentValues}\n multiple={multiple}\n onSelect={onSelect}\n onActiveChange={setActiveIndex}\n {...(renderOption !== undefined ? { renderOption } : {})}\n itemHeight={itemHeight}\n maxHeight={maxMenuHeight}\n virtualized={virtualized}\n loading={isAsync && asyncLoading}\n loadingMessage={loadingMessage}\n noOptionsMessage={noOptionsMessage}\n listboxId={`${baseId}-listbox`}\n onScroll={onListScroll}\n />\n </View>\n );\n if (Platform.OS === 'web' && typeof document !== 'undefined') {\n return createPortal(popup, document.body);\n }\n // Native: wrap in a transparent Modal so the popup renders above\n // all in-tree content (RN has no `position:'fixed'` and an\n // absolute child can't escape its parent's overflow). The\n // Modal's onRequestClose handles Android's hardware back button;\n // a transparent backdrop Pressable closes the popup on outside\n // tap (the equivalent of the document-mousedown handler on web).\n return (\n <Modal transparent visible animationType=\"fade\" onRequestClose={() => setOpen(false)} statusBarTranslucent>\n <Pressable\n onPress={() => setOpen(false)}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n }}\n />\n {popup}\n </Modal>\n );\n }\n};\n\n// ---------- search input (web-native input wrapped in a pressable container) ----------\n\ntype SearchInputProps = {\n value: string;\n onChange: (next: string) => void;\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => void;\n placeholder: string;\n dir: 'ltr' | 'rtl';\n};\n\nconst SearchInput = ({ value, onChange, onKeyDown, placeholder, dir }: SearchInputProps) => {\n const colors = useThemeColors();\n const inputRef = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n // Auto-focus when the popup opens so the user can start typing.\n inputRef.current?.focus?.();\n }, []);\n return (\n <View\n style={{\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: px(colors.spacing['2']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={(event: ChangeEvent<HTMLInputElement>) => onChange(event.target.value)}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n dir={dir}\n aria-label=\"Search options\"\n style={{\n width: '100%',\n // Inline `padding: '6px 8px'` shorthand intentionally kept as a\n // string for the native HTML <input> — it's not an RN style prop.\n padding: `${px(colors.spacing['2']) - 2}px ${px(colors.spacing['2'])}px`,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n backgroundColor: colors.semantic.background.elevated,\n border: `1px solid ${colors.semantic.border.default}`,\n borderRadius: px(colors.radius.sm),\n outline: 'none',\n }}\n />\n </View>\n );\n};\n\n// ---------- list (with optional virtualization + group headers) ----------\n\ntype SelectListProps<T> = {\n options: ReadonlyArray<SelectOption<T>>;\n activeIndex: number;\n currentValue: string | undefined;\n selectedValues: ReadonlyArray<string>;\n multiple: boolean;\n onSelect: (option: SelectOption<T>) => void;\n onActiveChange: (index: number) => void;\n renderOption?: (option: SelectOption<T>, info: SelectRenderOptionInfo) => ReactNode;\n itemHeight: number;\n maxHeight: number;\n virtualized: boolean;\n loading: boolean;\n loadingMessage: string;\n noOptionsMessage: string;\n listboxId: string;\n onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n};\n\nconst SelectList = <T,>({\n options,\n activeIndex,\n currentValue,\n selectedValues,\n multiple,\n onSelect,\n onActiveChange,\n renderOption,\n itemHeight,\n maxHeight,\n virtualized,\n loading,\n loadingMessage,\n noOptionsMessage,\n listboxId,\n onScroll,\n}: SelectListProps<T>) => {\n const colors = useThemeColors();\n const [scrollTop, setScrollTop] = useState(0);\n\n const totalHeight = options.length * itemHeight;\n const visibleStart = virtualized ? Math.max(0, Math.floor(scrollTop / itemHeight) - VIRTUAL_OVERSCAN) : 0;\n const visibleEnd = virtualized\n ? Math.min(options.length, Math.ceil((scrollTop + maxHeight) / itemHeight) + VIRTUAL_OVERSCAN)\n : options.length;\n\n const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (virtualized) {\n setScrollTop(event.nativeEvent.contentOffset.y);\n }\n onScroll(event);\n };\n\n if (loading && options.length === 0) {\n return (\n <View style={{ padding: px(colors.spacing['4']), alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {loadingMessage}\n </RNText>\n </View>\n );\n }\n if (options.length === 0) {\n return (\n <View style={{ padding: px(colors.spacing['4']), alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {noOptionsMessage}\n </RNText>\n </View>\n );\n }\n\n // Group headers: when consecutive options change `group`, insert a header.\n // For virtualized mode we still respect groups by including any header\n // that precedes the visible window's first item.\n const items: ReactNode[] = [];\n let lastGroup: string | undefined;\n for (let i = visibleStart; i < visibleEnd; i += 1) {\n const opt = options[i];\n if (!opt) {\n continue;\n }\n if (opt.group !== lastGroup && opt.group !== undefined) {\n items.push(\n <View\n // biome-ignore lint/suspicious/noArrayIndexKey: group header position is stable for current visible window\n key={`grp-${i}-${opt.group}`}\n style={{\n paddingHorizontal: px(colors.spacing['3']),\n paddingTop: px(colors.spacing['2']),\n paddingBottom: px(colors.spacing['1']),\n position: virtualized ? 'absolute' : 'relative',\n top: virtualized ? i * itemHeight - px(colors.spacing['4']) : undefined,\n left: 0,\n right: 0,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: 11, // group header — component-density literal — not from theme (smaller than xs)\n fontWeight: colors.fontWeight.semibold as '600',\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n }}\n >\n {opt.group}\n </RNText>\n </View>\n );\n lastGroup = opt.group;\n }\n const selected = multiple ? selectedValues.includes(opt.value) : opt.value === currentValue;\n const active = i === activeIndex;\n const itemNode = renderOption ? (\n renderOption(opt, { selected, active })\n ) : (\n <DefaultOptionRow option={opt} selected={selected} active={active} multiple={multiple} />\n );\n items.push(\n <Pressable\n // biome-ignore lint/suspicious/noArrayIndexKey: option position is stable in the visible window\n key={`opt-${i}-${opt.value}`}\n {...({\n role: 'option',\n accessibilityRole: 'none',\n 'aria-selected': selected,\n onMouseEnter: () => onActiveChange(i),\n ...(opt.disabled ? { 'aria-disabled': true, disabled: true } : {}),\n } as Record<string, unknown>)}\n onPress={() => onSelect(opt)}\n style={{\n position: virtualized ? 'absolute' : 'relative',\n top: virtualized ? i * itemHeight : undefined,\n left: 0,\n right: 0,\n height: itemHeight,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: px(colors.spacing['3']),\n backgroundColor: active ? colors.semantic.background.subtle : 'transparent',\n opacity: opt.disabled ? 0.5 : 1,\n }}\n >\n {itemNode}\n </Pressable>\n );\n }\n\n // ScrollView is the cross-platform container — react-native-web emits\n // scroll events with the same `nativeEvent.contentOffset` shape as\n // native, so the handler is identical on both. Web also gets the\n // `nativeID` prop mapped to the underlying div's `id` for a11y.\n return (\n <ScrollView\n nativeID={listboxId}\n onScroll={handleScroll}\n scrollEventThrottle={16}\n style={{ maxHeight }}\n contentContainerStyle={virtualized ? { height: totalHeight, position: 'relative' } : undefined}\n >\n {items}\n </ScrollView>\n );\n};\n\nconst DefaultOptionRow = <T,>({\n option,\n selected,\n active,\n multiple = false,\n}: {\n option: SelectOption<T>;\n selected: boolean;\n active: boolean;\n multiple?: boolean;\n}) => {\n const colors = useThemeColors();\n return (\n <View style={{ flexDirection: 'row', alignItems: 'center', flex: 1, gap: px(colors.spacing['2']) }}>\n {multiple ? (\n // Inline checkbox-style indicator. We don't reuse <Checkbox>\n // here because the row is already a Pressable — nesting two\n // pressable surfaces breaks tap handling on native; this\n // is purely visual (the Pressable parent owns the toggle).\n <View\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n width: 18,\n height: 18,\n borderWidth: 1,\n borderRadius: px(colors.radius.sm),\n borderColor: selected ? colors.semantic.interactive.primary : colors.semantic.border.strong,\n backgroundColor: selected ? colors.semantic.interactive.primary : 'transparent',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {selected ? <defaultSemanticIcons.check size={12} color={colors.semantic.text.inverted} /> : null}\n </View>\n ) : null}\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: selected ? (colors.fontWeight.semibold as '600') : (colors.fontWeight.regular as '400'),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {option.label}\n </RNText>\n {selected && !multiple ? (\n <defaultSemanticIcons.check size={16} color={colors.semantic.interactive.primary} />\n ) : null}\n {/* keep `active` referenced — it's part of the public API consumers see via renderOption */}\n {active ? null : null}\n </View>\n );\n};\n\n// ---------- multi-select trigger label (chips with overflow) ----------\n\nconst MultiTriggerLabel = <T,>({\n options,\n placeholder,\n maxChips,\n}: {\n options: ReadonlyArray<SelectOption<T>>;\n placeholder: string;\n maxChips: number;\n}) => {\n const colors = useThemeColors();\n if (options.length === 0) {\n return (\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n flex: 1,\n }}\n numberOfLines={1}\n >\n {placeholder}\n </RNText>\n );\n }\n // When the selection grows beyond `maxChips`, collapse to a counter so\n // the trigger height stays stable on narrow screens.\n if (options.length > maxChips) {\n return (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n fontVariant: ['tabular-nums'],\n flex: 1,\n }}\n numberOfLines={1}\n >\n {options.length} selected\n </RNText>\n );\n }\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n flexWrap: 'wrap',\n rowGap: px(colors.spacing['1']),\n columnGap: px(colors.spacing['1']),\n flex: 1,\n }}\n >\n {options.map((opt) => (\n <View\n key={`chip-${opt.value}`}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 2,\n borderRadius: px(colors.radius.sm),\n backgroundColor: colors.semantic.background.subtle,\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n numberOfLines={1}\n >\n {opt.label}\n </RNText>\n </View>\n ))}\n </View>\n );\n};\n\n// ---------- multi-select popup header with \"Clear all\" affordance ----------\n\nconst MultiSelectionHeader = ({ count, onClearAll }: { count: number; onClearAll: () => void }) => {\n const colors = useThemeColors();\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontVariant: ['tabular-nums'],\n }}\n >\n {count} selected\n </RNText>\n <Pressable\n role=\"button\"\n accessibilityRole=\"button\"\n aria-label=\"Clear all\"\n accessibilityLabel=\"Clear all\"\n onPress={onClearAll}\n style={({ pressed }) => ({\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 2,\n borderRadius: px(colors.radius.sm),\n opacity: pressed ? 0.6 : 1,\n })}\n >\n <RNText\n style={{\n color: colors.semantic.interactive.primary,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n Clear all\n </RNText>\n </Pressable>\n </View>\n );\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { createContext, type ReactNode, useContext } from 'react';\n\nexport type CaptionOption = {\n value: number;\n label: string;\n disabled: boolean;\n};\n\nexport type CaptionContextValue = {\n /** Currently displayed month, 1..12. */\n month: number;\n /** Currently displayed year. */\n year: number;\n visibleMonth: CalendarDate;\n /** All months a, optional disabled flag derived from min/max + isDateUnavailable. */\n monthOptions: ReadonlyArray<CaptionOption>;\n /** Years inside `yearRange`, optional disabled flag. */\n yearOptions: ReadonlyArray<CaptionOption>;\n /** Set the displayed month, 1..12. */\n setMonth: (month: number) => void;\n /** Set the displayed year. */\n setYear: (year: number) => void;\n /** Move to the previous month/year/decade depending on the current view. */\n goPrev: () => void;\n /** Move to the next month/year/decade depending on the current view. */\n goNext: () => void;\n};\n\nconst CaptionContext = createContext<CaptionContextValue | null>(null);\nCaptionContext.displayName = 'CalendarCaptionContext';\n\nexport type CaptionProviderProps = {\n value: CaptionContextValue;\n children?: ReactNode;\n};\n\nexport const CaptionProvider = ({ value, children }: CaptionProviderProps) => (\n <CaptionContext.Provider value={value}>{children}</CaptionContext.Provider>\n);\n\n/**\n * Returns the current caption state and setters for a Calendar. Use inside\n * a `<Calendar.Caption>` slot (or any direct child of a Calendar with\n * `caption=\"custom\"`) to render your own dropdowns / navigation.\n *\n * @throws if called outside a Calendar with `caption=\"custom\"`.\n */\nexport const useCalendarCaption = (): CaptionContextValue => {\n const ctx = useContext(CaptionContext);\n if (!ctx) {\n throw new Error('useCalendarCaption must be called inside a <Calendar caption=\"custom\"> subtree.');\n }\n return ctx;\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { type ReactNode, useMemo } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { useTranslation } from '../../../i18n/use-translation';\nimport { useThemeColors } from '../../../theme/use-theme-colors';\nimport { Select } from '../../Select';\nimport type { CalendarCaption, CalendarView } from '../Calendar.types';\nimport { formatMonthNames, formatMonthYearTitle } from '../state/locale-utils';\nimport { type CaptionContextValue, type CaptionOption, CaptionProvider } from '../state/use-caption';\n\nconst ARROW_BUTTON_GAP = 8;\n\ntype CaptionProps = {\n /** All visible months, leftmost first. Always length-1 for non-day views. */\n months: ReadonlyArray<CalendarDate>;\n locale: string;\n view: CalendarView;\n caption: CalendarCaption;\n /** Width of one month grid; titles align centered above each grid. */\n gridWidth: number;\n monthGap: number;\n /** Year-dropdown bounds. */\n yearRange: [min: number, max: number];\n /** Constraint for disabling out-of-bounds options. */\n isMonthDisabled?: (year: number, month: number) => boolean;\n isYearDisabled?: (year: number) => boolean;\n onPrev: () => void;\n onNext: () => void;\n onTitlePress: (clicked: CalendarDate) => void;\n /** Mutate the anchor month for a specific visible month index. */\n onSetMonth: (slotIndex: number, month: number) => void;\n onSetYear: (slotIndex: number, year: number) => void;\n /** Children for `caption=\"custom\"` mode. */\n children?: ReactNode;\n};\n\ntype NavButtonProps = {\n label: string;\n onPress: () => void;\n children: ReactNode;\n};\n\nconst NavButton = ({ label, onPress, children }: NavButtonProps) => {\n const colors = useThemeColors();\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n onPress={onPress}\n style={({ pressed, hovered, focused }: { pressed: boolean; hovered?: boolean; focused?: boolean }) => {\n const base: ViewStyle = {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 8,\n };\n const transition = {\n transitionProperty: 'background-color, border-color, transform',\n transitionDuration: '140ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n outlineStyle: 'none',\n } as unknown as ViewStyle;\n const bg = pressed\n ? colors.color.primary['200']\n : hovered\n ? colors.color.primary['100']\n : 'transparent';\n const border = focused\n ? { borderWidth: 2, borderColor: colors.semantic.interactive.primary }\n : { borderWidth: 0 };\n return [base, transition, { backgroundColor: bg, transform: [{ scale: pressed ? 0.94 : 1 }] }, border];\n }}\n >\n <RNText style={{ color: colors.semantic.text.default, fontSize: 16, lineHeight: 16, fontWeight: '500' }}>\n {children}\n </RNText>\n </Pressable>\n );\n};\n\nconst TitleButton = ({\n text,\n ariaLabel,\n onPress,\n drilldown,\n}: {\n text: string;\n ariaLabel: string;\n onPress?: () => void;\n drilldown: boolean;\n}) => {\n const colors = useThemeColors();\n if (!onPress) {\n return (\n <View style={{ paddingHorizontal: 12, paddingVertical: 6, alignItems: 'center' }}>\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontSize: 15,\n fontWeight: '600',\n letterSpacing: -0.1,\n }}\n >\n {text}\n </RNText>\n </View>\n );\n }\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={ariaLabel}\n onPress={onPress}\n style={({ pressed, hovered, focused }: { pressed: boolean; hovered?: boolean; focused?: boolean }) => {\n const base: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n paddingHorizontal: 12,\n paddingVertical: 6,\n borderRadius: 8,\n };\n const transition = {\n transitionProperty: 'background-color, transform',\n transitionDuration: '140ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n outlineStyle: 'none',\n } as unknown as ViewStyle;\n const bg = pressed\n ? colors.color.primary['200']\n : hovered\n ? colors.color.primary['100']\n : 'transparent';\n const border = focused\n ? { borderWidth: 2, borderColor: colors.semantic.interactive.primary }\n : { borderWidth: 0 };\n return [base, transition, { backgroundColor: bg, transform: [{ scale: pressed ? 0.97 : 1 }] }, border];\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontSize: 15,\n fontWeight: '600',\n letterSpacing: -0.1,\n }}\n >\n {text}\n </RNText>\n {drilldown ? (\n <RNText aria-hidden style={{ color: colors.semantic.text.muted, fontSize: 10, opacity: 0.7 }}>\n ▾\n </RNText>\n ) : null}\n </Pressable>\n );\n};\n\nexport const Caption = ({\n months,\n locale,\n view,\n caption,\n gridWidth,\n monthGap,\n yearRange,\n isMonthDisabled,\n isYearDisabled,\n onPrev,\n onNext,\n onTitlePress,\n onSetMonth,\n onSetYear,\n children,\n}: CaptionProps) => {\n const { t } = useTranslation();\n\n const titleText = (m: CalendarDate) => {\n if (view === 'day') {\n return formatMonthYearTitle(m, locale);\n }\n if (view === 'month') {\n return String(m.year);\n }\n const start = m.year - (m.year % 10);\n return `${start} – ${start + 11}`;\n };\n\n const titleAriaKey =\n view === 'day'\n ? 'calendar.header.openMonthView'\n : view === 'month'\n ? 'calendar.header.openYearView'\n : 'calendar.header.openDayView';\n\n // Title row width — sized to the visible grids so titles align over them.\n const showMultiTitles = view === 'day' && months.length > 1;\n const titleRowWidth = showMultiTitles ? months.length * gridWidth + (months.length - 1) * monthGap : gridWidth;\n\n // Month and year option lists — used by the dropdown / custom modes.\n const monthNames = useMemo(() => formatMonthNames(locale), [locale]);\n\n // Custom mode: provide the context for slot consumers and render their JSX.\n // We use `months[0]` (focused leftmost month) for context — when consumers\n // need per-month dropdowns they can compose multiple `Calendar.Caption`s.\n const focused = months[0] ?? undefined;\n if (!focused) {\n return null;\n }\n const ctxValue: CaptionContextValue = {\n month: focused.month,\n year: focused.year,\n visibleMonth: focused,\n monthOptions: monthNames.map((label, i) => ({\n value: i + 1,\n label,\n disabled: isMonthDisabled?.(focused.year, i + 1) ?? false,\n })),\n yearOptions: Array.from({ length: yearRange[1] - yearRange[0] + 1 }, (_, i) => ({\n value: yearRange[0] + i,\n label: String(yearRange[0] + i),\n disabled: isYearDisabled?.(yearRange[0] + i) ?? false,\n })),\n setMonth: (m) => onSetMonth(0, m),\n setYear: (y) => onSetYear(0, y),\n goPrev: onPrev,\n goNext: onNext,\n };\n\n if (caption === 'custom') {\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingBottom: 10,\n gap: ARROW_BUTTON_GAP,\n alignSelf: 'center',\n }}\n >\n <CaptionProvider value={ctxValue}>{children}</CaptionProvider>\n </View>\n );\n }\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingBottom: 10,\n gap: ARROW_BUTTON_GAP,\n alignSelf: 'center',\n }}\n >\n <NavButton label={t('calendar.header.previous', { defaultValue: 'Previous month' })} onPress={onPrev}>\n ‹\n </NavButton>\n <View style={{ flexDirection: 'row', gap: monthGap, width: titleRowWidth }}>\n {showMultiTitles ? (\n months.map((m, i) => (\n <View key={`${m.year}-${m.month}`} style={{ width: gridWidth, alignItems: 'center' }}>\n {caption === 'dropdown' && view === 'day' ? (\n <DropdownPair\n month={m.month}\n year={m.year}\n monthOptions={monthNames.map((label, j) => ({\n value: j + 1,\n label,\n disabled: isMonthDisabled?.(m.year, j + 1) ?? false,\n }))}\n yearOptions={makeYearOptions(yearRange, isYearDisabled)}\n onMonthChange={(next) => onSetMonth(i, next)}\n onYearChange={(next) => onSetYear(i, next)}\n />\n ) : (\n <TitleButton\n text={titleText(m)}\n ariaLabel={t(titleAriaKey, { defaultValue: 'Change view' })}\n onPress={() => onTitlePress(m)}\n drilldown\n />\n )}\n </View>\n ))\n ) : (\n <View style={{ width: gridWidth, alignItems: 'center' }}>\n {caption === 'dropdown' && view === 'day' ? (\n <DropdownPair\n month={focused.month}\n year={focused.year}\n monthOptions={monthNames.map((label, j) => ({\n value: j + 1,\n label,\n disabled: isMonthDisabled?.(focused.year, j + 1) ?? false,\n }))}\n yearOptions={makeYearOptions(yearRange, isYearDisabled)}\n onMonthChange={(next) => onSetMonth(0, next)}\n onYearChange={(next) => onSetYear(0, next)}\n />\n ) : (\n <TitleButton\n text={titleText(focused)}\n ariaLabel={t(titleAriaKey, { defaultValue: 'Change view' })}\n onPress={() => onTitlePress(focused)}\n drilldown\n />\n )}\n </View>\n )}\n </View>\n <NavButton label={t('calendar.header.next', { defaultValue: 'Next month' })} onPress={onNext}>\n ›\n </NavButton>\n </View>\n );\n};\n\nconst makeYearOptions = (\n yearRange: [number, number],\n isYearDisabled?: (year: number) => boolean\n): ReadonlyArray<CaptionOption> =>\n Array.from({ length: yearRange[1] - yearRange[0] + 1 }, (_, i) => ({\n value: yearRange[0] + i,\n label: String(yearRange[0] + i),\n disabled: isYearDisabled?.(yearRange[0] + i) ?? false,\n }));\n\ntype DropdownPairProps = {\n month: number;\n year: number;\n monthOptions: ReadonlyArray<CaptionOption>;\n yearOptions: ReadonlyArray<CaptionOption>;\n onMonthChange: (m: number) => void;\n onYearChange: (y: number) => void;\n};\n\nconst DropdownPair = ({ month, year, monthOptions, yearOptions, onMonthChange, onYearChange }: DropdownPairProps) => {\n return (\n <View style={{ flexDirection: 'row', gap: 6 }}>\n <Select\n value={String(month)}\n onChange={(v) => onMonthChange(Number(v))}\n options={monthOptions.map((o) => ({\n value: String(o.value),\n label: o.label,\n disabled: o.disabled,\n }))}\n aria-label=\"Month\"\n searchable={false}\n />\n <Select\n value={String(year)}\n onChange={(v) => onYearChange(Number(v))}\n options={yearOptions.map((o) => ({\n value: String(o.value),\n label: o.label,\n disabled: o.disabled,\n }))}\n aria-label=\"Year\"\n searchable={false}\n />\n </View>\n );\n};\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport type { TextStyle, ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { useThemeColors } from '../../../theme/use-theme-colors';\nimport type { DayContext } from '../Calendar.types';\n\nexport type DayCellProps = {\n ctx: DayContext;\n onPress: () => void;\n onHoverIn?: () => void;\n onHoverOut?: () => void;\n /** When provided, the slot wins over default day rendering. */\n renderDay?: (ctx: DayContext) => ReactNode;\n /**\n * BCP-47 locale used to format the accessibility label\n * (e.g. \"Friday, May 8, 2026\"). Falls back to undefined (runtime default)\n * if not provided.\n */\n locale?: string;\n};\n\nexport const CELL_SIZE = 40;\n\n/**\n * Module-scope cache of Intl.DateTimeFormat instances keyed by locale.\n * Prior to caching, each DayCell instantiated a new formatter per render\n * (~420+ instantiations per scroll burst in scroll mode). The cache is\n * unbounded but the live locale set is also bounded — typically 1–2\n * entries per app — so no LRU is needed.\n */\nconst formatterCache = new Map<string, Intl.DateTimeFormat>();\nconst RUNTIME_DEFAULT_LOCALE_KEY = '__default__';\n\nconst getDayFormatter = (locale: string | undefined): Intl.DateTimeFormat | null => {\n const key = locale ?? RUNTIME_DEFAULT_LOCALE_KEY;\n const cached = formatterCache.get(key);\n if (cached) {\n return cached;\n }\n try {\n const fmt = new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n timeZone: 'UTC',\n });\n formatterCache.set(key, fmt);\n return fmt;\n } catch {\n return null;\n }\n};\n\n/**\n * Builds the day cell's accessibility label. Format:\n * \"{weekday}, {Month} {day}, {year}\" + optional state suffixes,\n * e.g. \"Friday, May 8, 2026, today, selected\".\n *\n * Kept module-local so view tests / Profiler harnesses can match it\n * with a regex without depending on Intl output for the suffix.\n *\n * KNOWN LIMITATION: State suffixes (\"today\", \"selected\", \"in range\",\n * \"unavailable\") are hardcoded English. Non-English locales get\n * mixed-language output (e.g. \"2026年5月8日金曜日, today\"). Proper\n * fix routes these through the project's i18n provider; tracked as\n * a follow-up to be addressed alongside the broader i18n sweep.\n *\n * TODO(i18n): localize state suffixes.\n */\nconst formatDayLabel = (ctx: DayContext, locale?: string): string => {\n const jsDate = new Date(Date.UTC(ctx.date.year, ctx.date.month - 1, ctx.date.day));\n const fmt = getDayFormatter(locale);\n const base = fmt\n ? fmt.format(jsDate)\n : // Fallback if the runtime rejects the locale tag.\n `${ctx.date.month}/${ctx.date.day}/${ctx.date.year}`;\n\n const suffixes: string[] = [];\n if (ctx.isToday) {\n suffixes.push('today');\n }\n if (ctx.isSelected || ctx.isRangeStart || ctx.isRangeEnd) {\n suffixes.push('selected');\n }\n if (ctx.isInRange && !ctx.isRangeStart && !ctx.isRangeEnd) {\n suffixes.push('in range');\n }\n if (ctx.isUnavailable) {\n suffixes.push('unavailable');\n }\n\n return suffixes.length > 0 ? `${base}, ${suffixes.join(', ')}` : base;\n};\n\nexport const DayCell = ({ ctx, onPress, onHoverIn, onHoverOut, renderDay, locale }: DayCellProps) => {\n const colors = useThemeColors();\n const accessibilityLabel = formatDayLabel(ctx, locale);\n\n const isSelectedLike = ctx.isSelected || ctx.isRangeStart || ctx.isRangeEnd;\n\n // Range middle / preview cells get a flat background drawn by the\n // gridcell wrapper in DayGrid (so adjacent cells visually connect).\n // The DayCell itself is transparent in that case.\n const isInsideRange = ctx.isInRange || ctx.isInPreviewRange;\n const isRangeMiddle = isInsideRange && !isSelectedLike;\n\n const dataState = ctx.isSelected\n ? 'selected'\n : ctx.isRangeStart\n ? 'range-start'\n : ctx.isRangeEnd\n ? 'range-end'\n : ctx.isInPreviewRange\n ? 'preview'\n : ctx.isInRange\n ? 'in-range'\n : undefined;\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ disabled: ctx.isUnavailable, selected: isSelectedLike }}\n disabled={ctx.isUnavailable}\n onPress={onPress}\n {...(onHoverIn ? { onHoverIn } : {})}\n {...(onHoverOut ? { onHoverOut } : {})}\n style={({ pressed, hovered, focused }: { pressed: boolean; hovered?: boolean; focused?: boolean }) => {\n const base: ViewStyle = {\n width: CELL_SIZE,\n height: CELL_SIZE,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 999, // perfect circle for endpoints/selected\n position: 'relative',\n };\n\n if (ctx.isUnavailable) {\n return [base, { opacity: 0.28 }];\n }\n\n let backgroundColor: string | undefined;\n let transform: ViewStyle['transform'];\n let borderWidth: number | undefined;\n let borderColor: string | undefined;\n\n if (isSelectedLike) {\n backgroundColor = colors.semantic.interactive.primary;\n if (pressed) {\n backgroundColor = colors.semantic.interactive.primaryPressed;\n } else if (hovered) {\n backgroundColor = colors.semantic.interactive.primaryHover;\n }\n transform = [{ scale: pressed ? 0.94 : 1 }];\n } else if (isRangeMiddle) {\n // Sits ON TOP of the gridcell range fill. Keep transparent\n // so the bar reads continuous across cells. On hover we\n // brighten with a soft circular halo.\n backgroundColor = hovered ? colors.color.primary['200'] : 'transparent';\n transform = [{ scale: pressed ? 0.94 : 1 }];\n } else {\n // Idle / hover / focus on a non-selected non-range cell.\n if (pressed) {\n backgroundColor = colors.color.primary['200'];\n } else if (hovered) {\n backgroundColor = colors.color.primary['100'];\n } else {\n backgroundColor = 'transparent';\n }\n transform = [{ scale: pressed ? 0.94 : 1 }];\n }\n\n if ((ctx.isFocused || focused) && !isSelectedLike) {\n borderWidth = 2;\n borderColor = colors.semantic.interactive.primary;\n }\n\n // RN-Web honors these as CSS transitions; native ignores silently.\n const transition: ViewStyle = {\n transitionProperty: 'background-color, transform, border-color, opacity',\n transitionDuration: '140ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n outlineStyle: 'none',\n } as unknown as ViewStyle;\n\n return [\n base,\n transition,\n {\n backgroundColor,\n ...(transform ? { transform } : {}),\n ...(borderWidth ? { borderWidth, borderColor } : {}),\n },\n ];\n }}\n {...({\n dataSet: {\n dayKey: `${ctx.date.year}-${ctx.date.month}-${ctx.date.day}`,\n ...(dataState ? { state: dataState } : {}),\n },\n } as unknown as { dataSet: Record<string, string> })}\n >\n {renderDay ? (\n renderDay(ctx)\n ) : (\n <>\n <RNText\n style={\n {\n color: isSelectedLike\n ? colors.semantic.text.inverted\n : ctx.isOutsideMonth\n ? colors.semantic.text.muted\n : colors.semantic.text.default,\n fontSize: 14,\n fontWeight: ctx.isToday ? '600' : '400',\n opacity: ctx.isOutsideMonth ? 0.55 : 1,\n transitionProperty: 'color',\n transitionDuration: '140ms',\n } as unknown as TextStyle\n }\n >\n {ctx.date.day}\n </RNText>\n {/* Today indicator: a 4px dot below the number, primary-colored,\n becomes white when the cell is selected. Subtler than a ring\n and never causes layout shift. */}\n {ctx.isToday ? (\n <View\n style={{\n position: 'absolute',\n bottom: 5,\n width: 4,\n height: 4,\n borderRadius: 999,\n backgroundColor: isSelectedLike\n ? colors.semantic.text.inverted\n : colors.semantic.interactive.primary,\n }}\n />\n ) : null}\n </>\n )}\n </Pressable>\n );\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { getLocalTimeZone, startOfMonth, today } from '@internationalized/date';\nimport { type ReactNode, useMemo } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { useThemeColors } from '../../../theme/use-theme-colors';\nimport type { CalendarMode, CalendarValue, DateRange, DayContext } from '../Calendar.types';\nimport { type DayOfWeek, formatWeekdayNames, getFirstDayOfWeek } from '../state/locale-utils';\nimport { CELL_SIZE, DayCell } from './DayCell';\n\ntype DayGridProps<M extends CalendarMode> = {\n visibleMonth: CalendarDate;\n locale: string;\n mode: M;\n value: CalendarValue<M>;\n previewRange?: DateRange | null;\n focusedDate: CalendarDate;\n isUnavailable: (date: CalendarDate) => boolean;\n weekendDays: [DayOfWeek, DayOfWeek];\n firstDayOfWeek?: DayOfWeek;\n onDayPress: (date: CalendarDate) => void;\n onDayHover?: (date: CalendarDate | null) => void;\n renderDay?: (ctx: DayContext) => ReactNode;\n};\n\nconst isInRange = (date: CalendarDate, range: DateRange | null | undefined): boolean => {\n if (!range?.end) {\n return false;\n }\n return date.compare(range.start) >= 0 && date.compare(range.end) <= 0;\n};\n\nconst buildContext = <M extends CalendarMode>(\n date: CalendarDate,\n args: {\n visibleMonth: CalendarDate;\n mode: M;\n value: CalendarValue<M>;\n previewRange?: DateRange | null;\n focusedDate: CalendarDate;\n isUnavailable: (date: CalendarDate) => boolean;\n weekendDays: [DayOfWeek, DayOfWeek];\n todayDate: CalendarDate;\n }\n): DayContext => {\n const isOutsideMonth = date.month !== args.visibleMonth.month;\n const isToday = date.compare(args.todayDate) === 0;\n const dow = date.toDate('UTC').getUTCDay() as DayOfWeek;\n const isWeekend = args.weekendDays.includes(dow);\n let isSelected = false;\n let isRangeStart = false;\n let isRangeEnd = false;\n let inRange = false;\n\n if (args.mode === 'single') {\n const v = args.value as CalendarDate | null;\n isSelected = !!v && v.compare(date) === 0;\n } else if (args.mode === 'range') {\n const r = args.value as DateRange | null;\n if (r) {\n isRangeStart = r.start.compare(date) === 0;\n isRangeEnd = r.end !== null && r.end.compare(date) === 0;\n inRange = isInRange(date, r);\n }\n } else {\n const arr = args.value as CalendarDate[];\n isSelected = arr.some((x) => x.compare(date) === 0);\n }\n\n return {\n date,\n isOutsideMonth,\n isToday,\n isSelected,\n isRangeStart,\n isRangeEnd,\n isInRange: inRange,\n isInPreviewRange: isInRange(date, args.previewRange ?? null),\n isUnavailable: args.isUnavailable(date),\n isFocused: args.focusedDate.compare(date) === 0,\n isWeekend,\n };\n};\n\n// Stable row keys for the 6-row grid — never reorder, never change count.\nconst ROW_KEYS = ['row-0', 'row-1', 'row-2', 'row-3', 'row-4', 'row-5'] as const;\n\nexport const DayGrid = <M extends CalendarMode>(props: DayGridProps<M>) => {\n const {\n visibleMonth,\n locale,\n mode,\n value,\n previewRange,\n focusedDate,\n isUnavailable,\n weekendDays,\n firstDayOfWeek,\n onDayPress,\n onDayHover,\n renderDay,\n } = props;\n\n const colors = useThemeColors();\n const fdow = firstDayOfWeek ?? getFirstDayOfWeek(locale);\n\n const cells = useMemo<CalendarDate[]>(() => {\n const start = startOfMonth(visibleMonth);\n const startDow = start.toDate('UTC').getUTCDay() as DayOfWeek;\n const back = (startDow - fdow + 7) % 7;\n const first = start.subtract({ days: back });\n const total = 42; // 6 rows × 7 — handles all month layouts\n return Array.from({ length: total }, (_, i) => first.add({ days: i }));\n }, [visibleMonth, fdow]);\n\n const weekdayNames = useMemo(() => formatWeekdayNames(locale), [locale]);\n const todayDate = useMemo(() => today(getLocalTimeZone()), []);\n\n const gridWidth = 7 * CELL_SIZE;\n\n return (\n <View role=\"grid\" style={{ width: gridWidth }}>\n <View role=\"row\" style={{ flexDirection: 'row', marginBottom: 4 }}>\n {weekdayNames.map((name) => (\n <View\n key={name}\n role=\"columnheader\"\n style={{ width: CELL_SIZE, alignItems: 'center', paddingVertical: 6 }}\n >\n <RNText\n style={{\n fontSize: 11,\n fontWeight: '500',\n letterSpacing: 0.6,\n color: colors.semantic.text.muted,\n textTransform: 'uppercase',\n }}\n >\n {name}\n </RNText>\n </View>\n ))}\n </View>\n {ROW_KEYS.map((rowKey, row) => (\n <View key={rowKey} role=\"row\" style={{ flexDirection: 'row' }}>\n {cells.slice(row * 7, row * 7 + 7).map((date) => {\n const ctx = buildContext(date, {\n visibleMonth,\n mode,\n value,\n ...(previewRange !== undefined ? { previewRange } : {}),\n focusedDate,\n isUnavailable,\n weekendDays,\n todayDate,\n });\n const isSelectedLike = ctx.isSelected || ctx.isRangeStart || ctx.isRangeEnd;\n const isInsideRange = ctx.isInRange || ctx.isInPreviewRange;\n\n // Range continuity: middle cells get a flat full-width\n // background. Endpoints get a half-fill on the side\n // facing the range so the bar visually connects with\n // the adjacent cell. Single-day ranges get no spillover.\n const wrapperStyle: ViewStyle = {\n width: CELL_SIZE,\n height: CELL_SIZE,\n position: 'relative',\n };\n const rangeFillTint = colors.color.primary['100'];\n let rangeFillStyle: ViewStyle | null = null;\n\n if (ctx.isRangeStart && !ctx.isRangeEnd) {\n rangeFillStyle = {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: '50%',\n right: 0,\n backgroundColor: rangeFillTint,\n };\n } else if (ctx.isRangeEnd && !ctx.isRangeStart) {\n rangeFillStyle = {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: '50%',\n backgroundColor: rangeFillTint,\n };\n } else if (isInsideRange && !isSelectedLike) {\n rangeFillStyle = {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: rangeFillTint,\n };\n }\n\n const gridcellProps = {\n role: 'gridcell' as 'cell',\n ...(isSelectedLike ? { 'aria-selected': true as const } : {}),\n };\n\n return (\n <View\n key={`${date.year}-${date.month}-${date.day}`}\n {...gridcellProps}\n style={wrapperStyle}\n >\n {rangeFillStyle ? <View style={rangeFillStyle} /> : null}\n <DayCell\n ctx={ctx}\n locale={locale}\n onPress={() => onDayPress(date)}\n {...(onDayHover\n ? {\n onHoverIn: () => onDayHover(date),\n onHoverOut: () => onDayHover(null),\n }\n : {})}\n {...(renderDay ? { renderDay } : {})}\n />\n </View>\n );\n })}\n </View>\n ))}\n </View>\n );\n};\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { View } from 'react-native';\n\nexport const Footer = ({ children }: { children?: ReactNode }) => <View style={{ paddingTop: 12 }}>{children}</View>;\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { useThemeColors } from '../../../theme/use-theme-colors';\nimport { formatMonthNames } from '../state/locale-utils';\n\ntype MonthGridProps = {\n visibleMonth: CalendarDate;\n locale: string;\n /** Width to fill (calendar inner width). Cells distribute across this. */\n availableWidth: number;\n onSelect: (month: number) => void; // 1..12\n};\n\nconst ROW_KEYS = ['r0', 'r1', 'r2', 'r3'] as const;\n\nexport const MonthGrid = ({ visibleMonth, locale, availableWidth, onSelect }: MonthGridProps) => {\n const colors = useThemeColors();\n const names = formatMonthNames(locale);\n const cellHeight = 56;\n\n return (\n <View style={{ width: availableWidth, paddingVertical: 8 }}>\n {ROW_KEYS.map((rowKey, row) => (\n <View key={rowKey} style={{ flexDirection: 'row', marginBottom: 4 }}>\n {[0, 1, 2].map((col) => {\n const idx = row * 3 + col;\n const monthNumber = idx + 1;\n const isCurrent = monthNumber === visibleMonth.month;\n const name = names[idx] ?? '';\n return (\n <View key={monthNumber} style={{ flex: 1, paddingHorizontal: 4 }}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={name}\n onPress={() => onSelect(monthNumber)}\n style={({\n pressed,\n hovered,\n focused,\n }: {\n pressed: boolean;\n hovered?: boolean;\n focused?: boolean;\n }) => {\n const base: ViewStyle = {\n height: cellHeight,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 10,\n };\n const transition = {\n transitionProperty: 'background-color, transform, border-color',\n transitionDuration: '140ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n outlineStyle: 'none',\n } as unknown as ViewStyle;\n let bg: string;\n if (isCurrent) {\n bg = pressed\n ? colors.semantic.interactive.primaryPressed\n : hovered\n ? colors.semantic.interactive.primaryHover\n : colors.semantic.interactive.primary;\n } else if (pressed) {\n bg = colors.color.primary['200'];\n } else if (hovered) {\n bg = colors.color.primary['100'];\n } else {\n bg = 'transparent';\n }\n const border =\n focused && !isCurrent\n ? { borderWidth: 2, borderColor: colors.semantic.interactive.primary }\n : { borderWidth: 0 };\n return [\n base,\n transition,\n { backgroundColor: bg, transform: [{ scale: pressed ? 0.96 : 1 }] },\n border,\n ];\n }}\n >\n <RNText\n style={{\n color: isCurrent\n ? colors.semantic.text.inverted\n : colors.semantic.text.default,\n fontSize: 14,\n fontWeight: isCurrent ? '600' : '500',\n }}\n >\n {name}\n </RNText>\n </Pressable>\n </View>\n );\n })}\n </View>\n ))}\n </View>\n );\n};\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { useThemeColors } from '../../../theme/use-theme-colors';\n\ntype YearGridProps = {\n visibleMonth: CalendarDate;\n /** Width to fill (calendar inner width). */\n availableWidth: number;\n onSelect: (year: number) => void;\n};\n\nconst ROW_KEYS = ['r0', 'r1', 'r2'] as const;\n\nexport const YearGrid = ({ visibleMonth, availableWidth, onSelect }: YearGridProps) => {\n const colors = useThemeColors();\n const decadeStart = visibleMonth.year - (visibleMonth.year % 10);\n const years = Array.from({ length: 12 }, (_, i) => decadeStart + i - 1);\n const cellHeight = 60;\n\n return (\n <View style={{ width: availableWidth, paddingVertical: 8 }}>\n {ROW_KEYS.map((rowKey, row) => (\n <View key={rowKey} style={{ flexDirection: 'row', marginBottom: 4 }}>\n {[0, 1, 2, 3].map((col) => {\n const year = years[row * 4 + col];\n if (year === undefined) {\n return null;\n }\n const isCurrent = year === visibleMonth.year;\n const isAdjacentDecade = year < decadeStart || year >= decadeStart + 10;\n return (\n <View key={year} style={{ flex: 1, paddingHorizontal: 4 }}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={String(year)}\n onPress={() => onSelect(year)}\n style={({\n pressed,\n hovered,\n focused,\n }: {\n pressed: boolean;\n hovered?: boolean;\n focused?: boolean;\n }) => {\n const base: ViewStyle = {\n height: cellHeight,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 10,\n };\n const transition = {\n transitionProperty: 'background-color, transform, border-color',\n transitionDuration: '140ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n outlineStyle: 'none',\n } as unknown as ViewStyle;\n let bg: string;\n if (isCurrent) {\n bg = pressed\n ? colors.semantic.interactive.primaryPressed\n : hovered\n ? colors.semantic.interactive.primaryHover\n : colors.semantic.interactive.primary;\n } else if (pressed) {\n bg = colors.color.primary['200'];\n } else if (hovered) {\n bg = colors.color.primary['100'];\n } else {\n bg = 'transparent';\n }\n const border =\n focused && !isCurrent\n ? { borderWidth: 2, borderColor: colors.semantic.interactive.primary }\n : { borderWidth: 0 };\n return [\n base,\n transition,\n { backgroundColor: bg, transform: [{ scale: pressed ? 0.96 : 1 }] },\n border,\n ];\n }}\n >\n <RNText\n style={{\n color: isCurrent\n ? colors.semantic.text.inverted\n : colors.semantic.text.default,\n fontSize: 14,\n fontWeight: isCurrent ? '600' : '500',\n opacity: isAdjacentDecade ? 0.45 : 1,\n }}\n >\n {year}\n </RNText>\n </Pressable>\n </View>\n );\n })}\n </View>\n ))}\n </View>\n );\n};\n","'use client';\n\nimport { CalendarDate, getLocalTimeZone, today } from '@internationalized/date';\nimport { type ReactNode, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport type { LayoutChangeEvent, ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { useLocale } from '../../i18n/locale';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport type { CalendarBaseProps, CalendarMode, CalendarValue, CalendarView, DateRange } from './Calendar.types';\nimport { ScrollBody } from './scroll/ScrollBody';\nimport { type DayOfWeek, getFirstDayOfWeek, getWeekendDays } from './state/locale-utils';\nimport { useCalendarKeyboard } from './state/use-calendar-keyboard';\nimport { useCalendarState } from './state/use-calendar-state';\nimport { useRangeState } from './state/use-range-state';\nimport { Caption } from './view/Caption';\nimport { CELL_SIZE } from './view/DayCell';\nimport { DayGrid } from './view/DayGrid';\nimport { Footer } from './view/Footer';\nimport { MonthGrid } from './view/MonthGrid';\nimport { YearGrid } from './view/YearGrid';\n\n// Width constants used to compute the calendar's natural content width and\n// to pick a responsive `visibleMonths` based on the parent container width.\nconst GRID_WIDTH = 7 * CELL_SIZE; // single month grid (7 cols)\nconst MONTH_GAP = 16;\nconst ARROW_AREA = 32 + 8; // nav button width + gap to first/last grid edge\nconst SURFACE_PADDING = 16;\nconst SURFACE_BORDER = 1;\nconst requiredOuterWidth = (n: number) =>\n 2 * (ARROW_AREA + SURFACE_PADDING + SURFACE_BORDER) + n * GRID_WIDTH + (n - 1) * MONTH_GAP;\n\n// Body fade-up on view/month change. The wrapper's `key` flips on every\n// navigation (prev/next, drilldown), forcing a fresh mount; FadeIn starts\n// at opacity 0 + 4px down, then bumps to 1 / 0 in an effect so the inline\n// transition runs. RN-Web honors transition* style props; native ignores.\nconst focusDayCell = (root: HTMLElement | null, date: CalendarDate, force: boolean) => {\n if (!root) {\n return;\n }\n // DOM-only: keyboard focus management has no analog on native, where this\n // ref points at a RN View instead of HTMLElement. Bail out before touching\n // `document` so jest-expo / RN runtime don't ReferenceError.\n if (typeof document === 'undefined' || typeof root.contains !== 'function') {\n return;\n }\n if (!force && !root.contains(document.activeElement)) {\n return;\n }\n const sel = `[data-day-key=\"${date.year}-${date.month}-${date.day}\"]`;\n const cell = root.querySelector(sel) as HTMLElement | null;\n const isDisabled = (cell as HTMLButtonElement | null)?.disabled === true;\n if (cell && !isDisabled) {\n if (cell !== document.activeElement) {\n cell.focus();\n }\n return;\n }\n // Cell is missing or disabled — fall back to focusing the calendar root\n // so subsequent keyboard navigation continues to fire onKeyDown\n // (otherwise focus drops to <body> and arrow keys go to the page).\n if (force && !root.contains(document.activeElement)) {\n root.focus();\n }\n};\n\nconst FadeIn = ({ children }: { children: ReactNode }) => {\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n const id = requestAnimationFrame(() => setMounted(true));\n return () => cancelAnimationFrame(id);\n }, []);\n return (\n <View\n style={\n {\n opacity: mounted ? 1 : 0,\n transform: [{ translateY: mounted ? 0 : 4 }],\n transitionProperty: 'opacity, transform',\n transitionDuration: '220ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n } as ViewStyle\n }\n >\n {children}\n </View>\n );\n};\n\n/**\n * Picks a responsive number of visible months from a measured container\n * width. Used when the consumer doesn't pin `visibleMonths`. Falls back\n * to 1 month while measurement is in flight (initial render) so we never\n * overflow on first paint.\n */\nconst resolveYearRange = (\n input: [number, number] | undefined,\n minValue: import('@internationalized/date').CalendarDate | undefined,\n maxValue: import('@internationalized/date').CalendarDate | undefined,\n focusedYear: number\n): [number, number] => {\n if (input) {\n return input;\n }\n if (minValue && maxValue) {\n return [minValue.year, maxValue.year];\n }\n if (minValue) {\n return [minValue.year, Math.max(minValue.year, focusedYear + 10)];\n }\n if (maxValue) {\n return [Math.min(maxValue.year, focusedYear - 100), maxValue.year];\n }\n return [focusedYear - 100, focusedYear + 10];\n};\n\nconst pickVisibleMonths = (input: number | 'auto' | undefined, measuredWidth: number | null): number => {\n // `visibleMonths` is treated as a *maximum*: when the parent container\n // is too narrow to fit `target` months side-by-side, we drop to the\n // largest count that fits. `auto` defaults to 2.\n const target = typeof input === 'number' ? input : 2;\n if (measuredWidth == null || measuredWidth === 0) {\n // Pre-measurement (e.g. SSR / jsdom). Trust an explicit number;\n // fall back to 1 for `auto` so we don't overflow on first paint.\n return typeof input === 'number' ? input : 1;\n }\n for (let n = target; n >= 1; n--) {\n if (measuredWidth >= requiredOuterWidth(n)) {\n return n;\n }\n }\n return 1;\n};\n\n/**\n * Outer wrapper that measures the available container width and renders\n * the actual Calendar root once the measurement is in. Renders nothing on\n * the first paint to avoid the 1-month → 2-month flash; this is one\n * synchronous re-render after layout, imperceptible in practice.\n */\nconst CalendarRoot = <M extends CalendarMode = 'single'>(props: CalendarBaseProps<M>) => {\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n const onLayout = useCallback((e: LayoutChangeEvent) => {\n const next = e.nativeEvent.layout.width;\n setContainerWidth((prev) => (prev === next ? prev : next));\n }, []);\n\n return (\n <View onLayout={onLayout} style={{ width: '100%' }}>\n <CalendarSurface<M> containerWidth={containerWidth ?? 0} {...props} />\n </View>\n );\n};\n\nconst CalendarSurface = <M extends CalendarMode = 'single'>(\n props: CalendarBaseProps<M> & { containerWidth: number }\n) => {\n const providerLocale = useLocale();\n const locale = props.locale ?? providerLocale;\n\n if ((props.mode ?? 'single') === 'range') {\n return (\n <RangeCalendar\n {...(props as unknown as CalendarBaseProps<'range'> & { containerWidth: number })}\n locale={locale}\n />\n );\n }\n return (\n <SingleOrMultiCalendar\n {...(props as unknown as CalendarBaseProps<Exclude<CalendarMode, 'range'>> & { containerWidth: number })}\n locale={locale}\n />\n );\n};\n\n/**\n * Computes both the inner content width (for centering the body) and the\n * outer surface width (for the bordered card). Both depend on\n * visibleMonths only.\n */\nconst surfaceMetrics = (visibleMonths: number) => {\n const innerWidth = 2 * ARROW_AREA + visibleMonths * GRID_WIDTH + (visibleMonths - 1) * MONTH_GAP;\n return {\n innerWidth,\n // Body grids row width (excludes arrow area)\n gridsRowWidth: visibleMonths * GRID_WIDTH + (visibleMonths - 1) * MONTH_GAP,\n };\n};\n\nconst SingleOrMultiCalendar = <M extends Exclude<CalendarMode, 'range'>>(\n props: CalendarBaseProps<M> & { locale: string; containerWidth: number }\n) => {\n const { locale, renderDay, containerWidth } = props;\n const colors = useThemeColors();\n const firstDayOfWeek = props.firstDayOfWeek ?? getFirstDayOfWeek(locale);\n const weekendDays = (props.weekendDays as [DayOfWeek, DayOfWeek] | undefined) ?? getWeekendDays(locale);\n\n const visibleMonths = props.behavior === 'scroll' ? 1 : pickVisibleMonths(props.visibleMonths, containerWidth);\n const { innerWidth, gridsRowWidth } = surfaceMetrics(visibleMonths);\n\n useEffect(() => {\n if (\n process.env.NODE_ENV !== 'production' &&\n props.behavior === 'scroll' &&\n typeof props.visibleMonths === 'number' &&\n props.visibleMonths > 1\n ) {\n // biome-ignore lint/suspicious/noConsole: dev-mode developer warning\n console.warn('[Calendar] visibleMonths is ignored when behavior=\"scroll\"; falling back to single column.');\n }\n }, [props.behavior, props.visibleMonths]);\n\n // Anchor month: what the user sees. Decoupled from `state.focusedDate`\n // so selecting a day in the rightmost grid does NOT shift the view.\n // Prev/Next buttons mutate this anchor; selectDate does not.\n const containerRef = useRef<HTMLElement | null>(null);\n\n const state = useCalendarState<M>({\n ...(props.mode !== undefined ? { mode: props.mode } : {}),\n locale,\n ...(props.value !== undefined ? { value: props.value } : {}),\n ...(props.defaultValue !== undefined ? { defaultValue: props.defaultValue } : {}),\n ...(props.onChange !== undefined ? { onChange: props.onChange } : {}),\n ...(props.view !== undefined ? { view: props.view } : {}),\n ...(props.defaultView !== undefined ? { defaultView: props.defaultView } : {}),\n ...(props.onViewChange !== undefined ? { onViewChange: props.onViewChange } : {}),\n ...(props.minValue !== undefined ? { minValue: props.minValue } : {}),\n ...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {}),\n ...(props.isDateUnavailable !== undefined ? { isDateUnavailable: props.isDateUnavailable } : {}),\n });\n\n const [anchor, setAnchor] = useState<CalendarDate>(state.focusedDate);\n\n // Snap the anchor when the focused date moves OUTSIDE visible months\n // (only triggered by keyboard nav). We must not re-fire when the\n // anchor changes (prev/next), or arrow navigation would snap right\n // back to the focused month. anchorRef gives us the current value\n // without putting `anchor` in the dependency array.\n const anchorRef = useRef(anchor);\n useEffect(() => {\n anchorRef.current = anchor;\n }, [anchor]);\n useEffect(() => {\n const start = anchorRef.current;\n const end = start.add({ months: visibleMonths });\n if (state.focusedDate.compare(start) < 0 || state.focusedDate.compare(end) >= 0) {\n setAnchor(state.focusedDate);\n }\n }, [state.focusedDate, visibleMonths]);\n\n const keyboardNavRef = useRef(false);\n // biome-ignore lint/correctness/useExhaustiveDependencies: state.value is intentional — re-fire focus after a selection re-renders the cell\n useLayoutEffect(() => {\n focusDayCell(containerRef.current, state.focusedDate, keyboardNavRef.current);\n keyboardNavRef.current = false;\n }, [state.focusedDate, state.value]);\n\n const months = useMemo(\n () => Array.from({ length: visibleMonths }, (_, i) => anchor.add({ months: i })),\n [anchor, visibleMonths]\n );\n\n const keyboard = useCalendarKeyboard({\n focusedDate: state.focusedDate,\n moveFocus: (delta: import('./state/use-calendar-state').FocusDelta) => {\n state.moveFocus(delta);\n // PgDn/PgUp (months) and Shift+PgDn/PgUp (years) feel like\n // \"scroll the view by N\" — shift the anchor by the same delta so\n // the focused cell stays in its current slot. Day/week deltas\n // leave the anchor alone; the snap effect handles overflow.\n if (delta.months || delta.years) {\n setAnchor((a) => {\n let next = a;\n if (delta.months) {\n next = next.add({ months: delta.months });\n }\n if (delta.years) {\n next = next.add({ years: delta.years });\n }\n return next;\n });\n }\n },\n selectDate: state.selectDate,\n setView: state.setView,\n view: state.view,\n firstDayOfWeek,\n });\n\n const onPrev = () => {\n if (state.view === 'year') {\n setAnchor((a) => a.add({ years: -10 }));\n } else if (state.view === 'month') {\n setAnchor((a) => a.add({ years: -1 }));\n } else if (props.behavior === 'scroll') {\n state.moveFocus({ months: -1 });\n } else {\n setAnchor((a) => a.add({ months: -1 }));\n }\n };\n const onNext = () => {\n if (state.view === 'year') {\n setAnchor((a) => a.add({ years: 10 }));\n } else if (state.view === 'month') {\n setAnchor((a) => a.add({ years: 1 }));\n } else if (props.behavior === 'scroll') {\n state.moveFocus({ months: 1 });\n } else {\n setAnchor((a) => a.add({ months: 1 }));\n }\n };\n const onTitlePress = () => state.setView(state.view === 'day' ? 'month' : state.view === 'month' ? 'year' : 'day');\n\n return (\n <View\n ref={(node) => {\n containerRef.current = node as unknown as HTMLElement | null;\n if (typeof props.ref === 'function') {\n props.ref(node);\n } else if (props.ref) {\n (props.ref as { current: View | null }).current = node;\n }\n }}\n {...(props.testID !== undefined ? { testID: props.testID } : {})}\n // @ts-expect-error onKeyDown is supported by react-native-web on View\n onKeyDown={(e: React.KeyboardEvent) => {\n keyboardNavRef.current = true;\n keyboard.onKeyDown(e);\n }}\n tabIndex={0}\n style={{\n padding: SURFACE_PADDING,\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: 16,\n borderWidth: SURFACE_BORDER,\n borderColor: colors.semantic.border.default,\n shadowColor: '#000',\n shadowOpacity: 0.04,\n shadowRadius: 12,\n shadowOffset: { width: 0, height: 4 },\n width: innerWidth + 2 * SURFACE_PADDING + 2 * SURFACE_BORDER,\n maxWidth: '100%',\n alignSelf: 'center',\n }}\n >\n <Caption\n months={months}\n locale={locale}\n view={state.view}\n caption={props.caption ?? 'title'}\n gridWidth={GRID_WIDTH}\n monthGap={MONTH_GAP}\n yearRange={resolveYearRange(props.yearRange, props.minValue, props.maxValue, anchor.year)}\n onPrev={onPrev}\n onNext={onNext}\n onTitlePress={onTitlePress}\n onSetMonth={(slot, m) => {\n const picked = (months[slot] ?? anchor).set({ month: m, day: 1 });\n // Subtract slot offset so the picked month stays in the\n // SAME visible slot the user clicked (not the leftmost).\n setAnchor(picked.subtract({ months: slot }));\n }}\n onSetYear={(slot, y) => {\n const picked = (months[slot] ?? anchor).set({ year: y, day: 1 });\n setAnchor(picked.subtract({ months: slot }));\n }}\n >\n {props.children}\n </Caption>\n <FadeIn key={`smc-${state.view}`}>\n {state.view === 'day' &&\n (props.behavior === 'scroll' ? (\n <ScrollBody<M>\n mode={(props.mode ?? 'single') as M}\n locale={locale}\n focusedDate={state.focusedDate}\n onFocusedMonthChange={(next) => setAnchor(next)}\n value={state.value as CalendarValue<M>}\n onSelectDate={(date) => state.selectDate(date, 'click')}\n firstDayOfWeek={firstDayOfWeek}\n weekendDays={weekendDays}\n {...(props.minValue !== undefined ? { minValue: props.minValue } : {})}\n {...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {})}\n {...(props.isDateUnavailable !== undefined\n ? { isDateUnavailable: props.isDateUnavailable }\n : {})}\n {...(renderDay ? { renderDay } : {})}\n />\n ) : (\n <View\n style={{ flexDirection: 'row', gap: MONTH_GAP, alignSelf: 'center', width: gridsRowWidth }}\n >\n {months.map((m) => (\n <DayGrid<M>\n key={`${m.year}-${m.month}`}\n visibleMonth={m}\n locale={locale}\n mode={(props.mode ?? 'single') as M}\n value={state.value as CalendarValue<M>}\n focusedDate={state.focusedDate}\n isUnavailable={state.isUnavailable}\n weekendDays={weekendDays}\n firstDayOfWeek={firstDayOfWeek}\n onDayPress={(date) => state.selectDate(date, 'click')}\n {...(renderDay ? { renderDay } : {})}\n />\n ))}\n </View>\n ))}\n {state.view === 'month' && (\n <View style={{ alignItems: 'center' }}>\n <MonthGrid\n visibleMonth={anchor}\n locale={locale}\n availableWidth={gridsRowWidth}\n onSelect={(month) => {\n setAnchor(new CalendarDate(anchor.year, month, 1));\n state.setView('day');\n }}\n />\n </View>\n )}\n {state.view === 'year' && (\n <View style={{ alignItems: 'center' }}>\n <YearGrid\n visibleMonth={anchor}\n availableWidth={gridsRowWidth}\n onSelect={(year) => {\n setAnchor(new CalendarDate(year, anchor.month, 1));\n state.setView('month');\n }}\n />\n </View>\n )}\n {props.children && (props.caption ?? 'title') !== 'custom' ? <Footer>{props.children}</Footer> : null}\n </FadeIn>\n </View>\n );\n};\n\nconst RangeCalendar = (props: CalendarBaseProps<'range'> & { locale: string; containerWidth: number }) => {\n const { locale, renderDay, containerWidth } = props;\n const colors = useThemeColors();\n const firstDayOfWeek = props.firstDayOfWeek ?? getFirstDayOfWeek(locale);\n const weekendDays = (props.weekendDays as [DayOfWeek, DayOfWeek] | undefined) ?? getWeekendDays(locale);\n\n const visibleMonths = props.behavior === 'scroll' ? 1 : pickVisibleMonths(props.visibleMonths, containerWidth);\n const { innerWidth, gridsRowWidth } = surfaceMetrics(visibleMonths);\n\n useEffect(() => {\n if (\n process.env.NODE_ENV !== 'production' &&\n props.behavior === 'scroll' &&\n typeof props.visibleMonths === 'number' &&\n props.visibleMonths > 1\n ) {\n // biome-ignore lint/suspicious/noConsole: dev-mode developer warning\n console.warn('[Calendar] visibleMonths is ignored when behavior=\"scroll\"; falling back to single column.');\n }\n }, [props.behavior, props.visibleMonths]);\n\n const containerRef = useRef<HTMLElement | null>(null);\n\n const range = useRangeState({\n ...(props.value !== undefined ? { value: props.value } : {}),\n ...(props.defaultValue !== undefined ? { defaultValue: props.defaultValue } : {}),\n ...(props.onChange !== undefined ? { onChange: props.onChange } : {}),\n ...(props.minValue !== undefined ? { minValue: props.minValue } : {}),\n ...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {}),\n ...(props.isDateUnavailable !== undefined ? { isDateUnavailable: props.isDateUnavailable } : {}),\n ...(props.minNights !== undefined ? { minNights: props.minNights } : {}),\n ...(props.maxNights !== undefined ? { maxNights: props.maxNights } : {}),\n });\n\n const initialFocus = range.value?.start ?? today(getLocalTimeZone());\n const [focusedDate, setFocusedDate] = useState<CalendarDate>(initialFocus);\n const keyboardNavRef = useRef(false);\n // biome-ignore lint/correctness/useExhaustiveDependencies: range.value is intentional — re-fire focus after a selection re-renders the cell\n useLayoutEffect(() => {\n focusDayCell(containerRef.current, focusedDate, keyboardNavRef.current);\n keyboardNavRef.current = false;\n }, [focusedDate, range.value]);\n const [anchor, setAnchor] = useState<CalendarDate>(initialFocus);\n\n const [internalView, setInternalView] = useState<CalendarView>(props.defaultView ?? 'day');\n const isViewControlled = props.view !== undefined;\n const view: CalendarView = isViewControlled ? (props.view as CalendarView) : internalView;\n const setView = useCallback(\n (next: CalendarView) => {\n if (!isViewControlled) {\n setInternalView(next);\n }\n props.onViewChange?.(next);\n },\n [isViewControlled, props.onViewChange]\n );\n\n const months = useMemo(\n () => Array.from({ length: visibleMonths }, (_, i) => anchor.add({ months: i })),\n [anchor, visibleMonths]\n );\n\n const keyboard = useCalendarKeyboard({\n focusedDate,\n moveFocus: (delta) => {\n setFocusedDate((f) => {\n let next = f;\n if (delta.days) {\n next = next.add({ days: delta.days });\n }\n if (delta.weeks) {\n next = next.add({ weeks: delta.weeks });\n }\n if (delta.months) {\n next = next.add({ months: delta.months });\n }\n if (delta.years) {\n next = next.add({ years: delta.years });\n }\n return next;\n });\n if (delta.months || delta.years) {\n setAnchor((a) => {\n let next = a;\n if (delta.months) {\n next = next.add({ months: delta.months });\n }\n if (delta.years) {\n next = next.add({ years: delta.years });\n }\n return next;\n });\n }\n },\n selectDate: (date) => range.selectDate(date, 'keyboard'),\n setView,\n view,\n firstDayOfWeek,\n });\n\n const onPrev = () => {\n if (view === 'year') {\n setAnchor((a) => a.add({ years: -10 }));\n } else if (view === 'month') {\n setAnchor((a) => a.add({ years: -1 }));\n } else if (props.behavior === 'scroll') {\n setFocusedDate((f) => f.add({ months: -1 }));\n } else {\n setAnchor((a) => a.add({ months: -1 }));\n }\n };\n const onNext = () => {\n if (view === 'year') {\n setAnchor((a) => a.add({ years: 10 }));\n } else if (view === 'month') {\n setAnchor((a) => a.add({ years: 1 }));\n } else if (props.behavior === 'scroll') {\n setFocusedDate((f) => f.add({ months: 1 }));\n } else {\n setAnchor((a) => a.add({ months: 1 }));\n }\n };\n const [drilldownSlot, setDrilldownSlot] = useState(0);\n const onTitlePress = (clicked: CalendarDate) => {\n const slot = months.findIndex((m) => m.year === clicked.year && m.month === clicked.month);\n setDrilldownSlot(slot >= 0 ? slot : 0);\n if (clicked.compare(anchor) !== 0) {\n setAnchor(clicked);\n }\n setView(view === 'day' ? 'month' : view === 'month' ? 'year' : 'day');\n };\n\n return (\n <View\n ref={(node) => {\n containerRef.current = node as unknown as HTMLElement | null;\n if (typeof props.ref === 'function') {\n props.ref(node);\n } else if (props.ref) {\n (props.ref as { current: View | null }).current = node;\n }\n }}\n {...(props.testID !== undefined ? { testID: props.testID } : {})}\n // @ts-expect-error onKeyDown is supported by react-native-web on View\n onKeyDown={(e: React.KeyboardEvent) => {\n keyboardNavRef.current = true;\n keyboard.onKeyDown(e);\n }}\n tabIndex={0}\n style={{\n padding: SURFACE_PADDING,\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: 16,\n borderWidth: SURFACE_BORDER,\n borderColor: colors.semantic.border.default,\n shadowColor: '#000',\n shadowOpacity: 0.04,\n shadowRadius: 12,\n shadowOffset: { width: 0, height: 4 },\n width: innerWidth + 2 * SURFACE_PADDING + 2 * SURFACE_BORDER,\n maxWidth: '100%',\n alignSelf: 'center',\n }}\n >\n <Caption\n months={months}\n locale={locale}\n view={view}\n caption={props.caption ?? 'title'}\n gridWidth={GRID_WIDTH}\n monthGap={MONTH_GAP}\n yearRange={resolveYearRange(props.yearRange, props.minValue, props.maxValue, anchor.year)}\n onPrev={onPrev}\n onNext={onNext}\n onTitlePress={onTitlePress}\n onSetMonth={(slot, m) => {\n const picked = (months[slot] ?? anchor).set({ month: m, day: 1 });\n // Subtract slot offset so the picked month stays in the\n // SAME visible slot the user clicked (not the leftmost).\n setAnchor(picked.subtract({ months: slot }));\n }}\n onSetYear={(slot, y) => {\n const picked = (months[slot] ?? anchor).set({ year: y, day: 1 });\n setAnchor(picked.subtract({ months: slot }));\n }}\n >\n {props.children}\n </Caption>\n <FadeIn key={`range-${view}`}>\n {view === 'day' &&\n (props.behavior === 'scroll' ? (\n <ScrollBody<'range'>\n mode=\"range\"\n locale={locale}\n focusedDate={focusedDate}\n onFocusedMonthChange={(next) => setAnchor(next)}\n value={range.value as DateRange | null}\n previewRange={range.previewRange}\n onSelectDate={(date) => range.selectDate(date)}\n firstDayOfWeek={firstDayOfWeek}\n weekendDays={weekendDays}\n {...(props.minValue !== undefined ? { minValue: props.minValue } : {})}\n {...(props.maxValue !== undefined ? { maxValue: props.maxValue } : {})}\n {...(props.isDateUnavailable !== undefined\n ? { isDateUnavailable: props.isDateUnavailable }\n : {})}\n {...(renderDay ? { renderDay } : {})}\n />\n ) : (\n <View\n style={{ flexDirection: 'row', gap: MONTH_GAP, alignSelf: 'center', width: gridsRowWidth }}\n >\n {months.map((m) => (\n <DayGrid<'range'>\n key={`${m.year}-${m.month}`}\n visibleMonth={m}\n locale={locale}\n mode=\"range\"\n value={range.value as DateRange | null}\n previewRange={range.previewRange}\n focusedDate={focusedDate}\n isUnavailable={range.isUnavailable}\n weekendDays={weekendDays}\n firstDayOfWeek={firstDayOfWeek}\n onDayPress={(date) => range.selectDate(date)}\n onDayHover={(date) => range.setHoveredDate(date)}\n {...(renderDay ? { renderDay } : {})}\n />\n ))}\n </View>\n ))}\n {view === 'month' && (\n <View style={{ alignItems: 'center' }}>\n <MonthGrid\n visibleMonth={anchor}\n locale={locale}\n availableWidth={gridsRowWidth}\n onSelect={(month) => {\n const picked = new CalendarDate(anchor.year, month, 1);\n setAnchor(picked.subtract({ months: drilldownSlot }));\n setView('day');\n }}\n />\n </View>\n )}\n {view === 'year' && (\n <View style={{ alignItems: 'center' }}>\n <YearGrid\n visibleMonth={anchor}\n availableWidth={gridsRowWidth}\n onSelect={(year) => {\n const picked = new CalendarDate(year, anchor.month, 1);\n setAnchor(picked.subtract({ months: drilldownSlot }));\n setView('month');\n }}\n />\n </View>\n )}\n {props.children && (props.caption ?? 'title') !== 'custom' ? <Footer>{props.children}</Footer> : null}\n </FadeIn>\n </View>\n );\n};\n\n/**\n * Slot wrapper for Calendar's `caption=\"custom\"` mode. Use it to mark the\n * subtree that renders your own month/year pickers (or any other header\n * UI). Inside, call {@link useCalendarCaption} to read the current\n * month/year and trigger changes.\n *\n * `<Calendar.Caption>` is a transparent passthrough — Calendar renders\n * any direct children when `caption=\"custom\"`. The wrapper exists to\n * make the intent explicit at call sites and to give static analysis\n * something to introspect.\n *\n * @example\n * ```tsx\n * <Calendar caption=\"custom\">\n * <Calendar.Caption>\n * <MyMonthSelect />\n * <MyYearSelect />\n * </Calendar.Caption>\n * </Calendar>\n * ```\n */\nexport const CalendarCaption = ({ children }: CalendarCaptionProps): ReactNode => <>{children}</>;\n// react-docgen-typescript keys the generated props table by displayName,\n// and dotted names like 'Calendar.Caption' would force odd index lookups\n// downstream. Keep the registered name flat; consumers still access it\n// at call sites as `Calendar.Caption`.\nCalendarCaption.displayName = 'CalendarCaption';\n\nexport type CalendarCaptionProps = {\n /** Custom caption content — typically your own month / year selects. */\n children?: ReactNode;\n};\n\ntype CalendarComponent = typeof CalendarRoot & { Caption: typeof CalendarCaption };\n\nexport const Calendar = CalendarRoot as CalendarComponent;\nCalendar.Caption = CalendarCaption;\n","// composeRefs — merges multiple React refs (callback or object) into a single callback.\n// Derived from Radix UI's approach; reimplemented here so we don't take a Radix dependency.\n\nimport type { MutableRefObject, Ref, RefCallback } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\nexport function composeRefs<T>(...refs: Array<PossibleRef<T>>): RefCallback<T> {\n return (node: T | null) => {\n for (const ref of refs) {\n if (ref == null) {\n continue;\n }\n if (typeof ref === 'function') {\n ref(node);\n } else {\n // React's MutableRefObject typing — we assign .current directly.\n (ref as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n","import type { CSSProperties, ReactElement, Ref } from 'react';\nimport { Children, cloneElement, forwardRef, isValidElement } from 'react';\nimport { composeRefs } from './compose-refs';\n\ntype AnyProps = Record<string, unknown>;\n\nexport type SlotProps = {\n children?: React.ReactNode;\n} & AnyProps;\n\nexport const Slot = forwardRef<unknown, SlotProps>(function Slot(props, forwardedRef) {\n const { children, ...slotProps } = props;\n\n if (!isValidElement(children)) {\n return null;\n }\n\n // Assert that children is a single React element with props — we've narrowed above.\n const child = Children.only(children) as ReactElement<AnyProps> & { ref?: Ref<unknown> };\n const merged = mergeProps(slotProps, child.props);\n\n // Merge refs: Slot's forwarded ref + the child's own ref (if any).\n const childRef = (child as unknown as { ref?: Ref<unknown> }).ref;\n if (forwardedRef || childRef) {\n (merged as AnyProps).ref = composeRefs(forwardedRef, childRef);\n }\n\n return cloneElement(child, merged);\n});\nSlot.displayName = 'Slot';\n\nfunction mergeProps(outer: AnyProps, inner: AnyProps): AnyProps {\n // Inner (child) wins for everything except: className (concatenated), style (merged), and\n // event handlers (composed — outer runs first, then inner).\n const merged: AnyProps = { ...outer };\n\n for (const key of Object.keys(inner)) {\n const outerValue = outer[key];\n const innerValue = inner[key];\n\n if (key === 'className' || key === 'class') {\n merged[key] = joinClass(outerValue, innerValue);\n continue;\n }\n\n if (key === 'style') {\n merged[key] = {\n ...(outerValue as CSSProperties | undefined),\n ...(innerValue as CSSProperties | undefined),\n };\n continue;\n }\n\n if (isEventHandler(key, outerValue, innerValue)) {\n merged[key] = composeHandlers(outerValue as Fn, innerValue as Fn);\n continue;\n }\n\n merged[key] = innerValue;\n }\n\n return merged;\n}\n\nfunction joinClass(outer: unknown, inner: unknown): string | undefined {\n const a = typeof outer === 'string' ? outer : '';\n const b = typeof inner === 'string' ? inner : '';\n const joined = [a, b].filter(Boolean).join(' ');\n return joined.length > 0 ? joined : undefined;\n}\n\ntype Fn = (...args: unknown[]) => unknown;\n\nfunction isEventHandler(key: string, outer: unknown, inner: unknown): boolean {\n if (!key.startsWith('on') || key.length < 3) {\n return false;\n }\n if (key[2] !== key[2]?.toUpperCase()) {\n return false;\n }\n return typeof outer === 'function' && typeof inner === 'function';\n}\n\nfunction composeHandlers(outer: Fn, inner: Fn): Fn {\n return (...args: unknown[]) => {\n outer(...args);\n inner(...args);\n };\n}\n","'use client';\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Dimensions, Modal, Platform, Pressable, Text as RNText, View } from 'react-native';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type PopoverSide = 'top' | 'right' | 'bottom' | 'left';\nexport type PopoverAlign = 'start' | 'center' | 'end';\n\ntype TriggerRect = { top: number; left: number; width: number; height: number };\n\ntype PopoverContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n contentId: string;\n triggerRef: { current: HTMLElement | null };\n contentRef: { current: HTMLDivElement | null };\n triggerRect: TriggerRect | null;\n measureTrigger: () => void;\n};\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null);\n\nconst usePopoverContext = (label: string): PopoverContextValue => {\n const ctx = useContext(PopoverContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Popover>.`);\n }\n return ctx;\n};\n\n/**\n * @internal — exposes the Popover context so higher-level overlay components\n * (DropdownMenu, ContextMenu) can interact with trigger measurement and open\n * state without going through PopoverTrigger.\n */\nexport { usePopoverContext };\n\nexport type PopoverProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n};\n\n/**\n * Non-modal floating panel anchored to a trigger element. Use for help\n * tooltips with rich content, color pickers, or profile previews.\n *\n * Composition: `Popover` (root, owns open state), `PopoverTrigger`\n * (forwards events to its child via Slot when `asChild`), `PopoverContent`\n * (the floating surface).\n *\n * Differences from `Dialog`: non-modal — does NOT trap focus or lock\n * scroll. Tab moves outside as normal. Differences from `Tooltip`: can\n * contain interactive content (buttons, inputs, links) and dismisses on\n * outside-click + Escape rather than mouse-leave.\n *\n * Behavior:\n * - Trigger click toggles open/close.\n * - Click outside the content (and outside the trigger) closes.\n * - Escape closes.\n *\n * Cross-platform: uses RN `<Modal>` as the visibility/portal primitive on\n * native (transparent backdrop, tap-outside-to-close). On web, the content\n * uses `position: fixed` + a measured trigger rect so it escapes any\n * ancestor `overflow: hidden`.\n */\nconst PopoverRoot = ({ open, defaultOpen = false, onOpenChange, children }: PopoverProps) => {\n const [inner, setInner] = useState<boolean>(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? open : inner;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const baseId = useId();\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n // Measure the trigger so the content 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 single\n // biggest source of \"the popup got cut off\" bugs.\n const [triggerRect, setTriggerRect] = useState<TriggerRect | null>(null);\n const measureTrigger = useCallback(() => {\n const node = triggerRef.current;\n if (!node || typeof node.getBoundingClientRect !== 'function') {\n return;\n }\n const rect = node.getBoundingClientRect();\n setTriggerRect({ top: rect.top, left: rect.left, width: rect.width, height: rect.height });\n }, []);\n\n const ctxValue: PopoverContextValue = {\n open: current,\n setOpen,\n contentId: `${baseId}-content`,\n triggerRef,\n contentRef,\n triggerRect,\n measureTrigger,\n };\n\n return <PopoverContext.Provider value={ctxValue}>{children}</PopoverContext.Provider>;\n};\n\nexport type PopoverTriggerProps = {\n /** Render the child as the trigger (Slot pattern). Default true — pass `false` for an inline pressable. */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Element that toggles the popover. Uses `asChild` by default so any\n * element (Button, Link, custom Pressable) becomes the trigger.\n *\n * The trigger element gets `aria-haspopup=\"dialog\"` and `aria-expanded`\n * so assistive tech announces the relationship.\n */\nexport const PopoverTrigger = ({ asChild = true, children, className, testID }: PopoverTriggerProps) => {\n const ctx = usePopoverContext('PopoverTrigger');\n const onPress = useCallback(() => {\n ctx.measureTrigger();\n ctx.setOpen(!ctx.open);\n }, [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n // Pass both onClick (web HTML buttons) AND onPress (RN Pressable /\n // our own Button) so the trigger fires regardless of which event\n // model the wrapped child speaks. The child's existing handler\n // runs first, then we toggle.\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.measureTrigger();\n ctx.setOpen(!ctx.open);\n };\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }}\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n aria-controls={ctx.contentId}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n ref={(node) => {\n ctx.triggerRef.current = node as unknown as HTMLElement | null;\n }}\n onPress={onPress}\n {...({\n 'aria-haspopup': 'dialog',\n 'aria-expanded': ctx.open,\n 'aria-controls': ctx.contentId,\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// On native, raw strings rendered as children of a non-Text component\n// throw \"Text strings must be rendered within a <Text> component\". On\n// web, react-native-web silently tolerates it. Wrap any string/number\n// children in an RNText so the same JSX renders cleanly on both\n// platforms. Non-string children are passed through unchanged.\nfunction wrapStringChildren(children: ReactNode): ReactNode {\n if (typeof children === 'string' || typeof children === 'number') {\n return <RNText>{children}</RNText>;\n }\n return children;\n}\n\nconst GAP = 4; // visual gap between trigger and content\nconst MIN_WIDTH = 200;\n// Margin reserved on each side so the popover never butts against the\n// viewport edge. Matches the 8px safe-area we use for native modal pads.\nconst VIEWPORT_MARGIN = 8;\n\nfunction computePosition(\n rect: TriggerRect,\n side: PopoverSide,\n align: PopoverAlign,\n contentSize: { width: number; height: number } | null\n): { top: number; left: number } {\n const cw = contentSize?.width ?? MIN_WIDTH;\n const ch = contentSize?.height ?? 0;\n\n let top = 0;\n let left = 0;\n\n switch (side) {\n case 'top':\n top = rect.top - GAP - ch;\n break;\n case 'bottom':\n top = rect.top + rect.height + GAP;\n break;\n case 'left':\n left = rect.left - GAP - cw;\n break;\n case 'right':\n left = rect.left + rect.width + GAP;\n break;\n }\n\n if (side === 'top' || side === 'bottom') {\n switch (align) {\n case 'start':\n left = rect.left;\n break;\n case 'center':\n left = rect.left + rect.width / 2 - cw / 2;\n break;\n case 'end':\n left = rect.left + rect.width - cw;\n break;\n }\n } else {\n switch (align) {\n case 'start':\n top = rect.top;\n break;\n case 'center':\n top = rect.top + rect.height / 2 - ch / 2;\n break;\n case 'end':\n top = rect.top + rect.height - ch;\n break;\n }\n }\n\n return { top, left };\n}\n\nexport type PopoverContentProps = {\n /** Side of the trigger to anchor on. @defaultValue 'bottom' */\n side?: PopoverSide;\n /** Alignment along the trigger edge. @defaultValue 'center' */\n align?: PopoverAlign;\n children?: ReactNode;\n className?: string;\n testID?: string;\n /** Accessible label when no visible heading is present. */\n 'aria-label'?: string;\n};\n\n/**\n * The floating popover surface. Renders only while open. On web uses\n * `position: fixed` with a measured trigger rect so it escapes any\n * ancestor `overflow: hidden`. Non-modal: focus is NOT trapped inside —\n * the user can tab back out as normal.\n *\n * ARIA: `role=\"dialog\"` (without `aria-modal`) so assistive tech\n * announces it as a grouping but doesn't suppress the rest of the page.\n */\nexport const PopoverContent = ({\n side = 'bottom',\n align = 'center',\n children,\n className,\n testID,\n ...rest\n}: PopoverContentProps) => {\n const ctx = usePopoverContext('PopoverContent');\n const colors = useThemeColors();\n const ariaLabel = rest['aria-label'];\n\n // Measure content size after first paint so we can anchor `top`-style\n // popups (which need to know content height to render above the trigger).\n const [contentSize, setContentSize] = useState<{ width: number; height: number } | null>(null);\n\n // Web-only side effects: outside-click close, Escape close, re-measure\n // on resize. RN Modal handles its own dismissal on native (tap-outside\n // is the transparent overlay's onPress).\n useEffect(() => {\n if (!ctx.open) {\n return;\n }\n if (Platform.OS !== 'web') {\n return;\n }\n if (typeof document === 'undefined') {\n return;\n }\n\n ctx.measureTrigger();\n\n const onDocMouseDown = (event: MouseEvent) => {\n const target = event.target as Node;\n const trigger = ctx.triggerRef.current;\n const content = ctx.contentRef.current;\n if (trigger?.contains(target)) {\n return;\n }\n if (content?.contains(target)) {\n return;\n }\n ctx.setOpen(false);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n ctx.setOpen(false);\n }\n };\n const onResize = () => ctx.measureTrigger();\n const onScroll = () => ctx.measureTrigger();\n\n document.addEventListener('mousedown', onDocMouseDown);\n document.addEventListener('keydown', onKeyDown);\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n return () => {\n document.removeEventListener('mousedown', onDocMouseDown);\n document.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('resize', onResize);\n window.removeEventListener('scroll', onScroll, true);\n };\n // ctx is the provider's stable identity; we only care about open transitions.\n }, [ctx.open, ctx.measureTrigger, ctx.setOpen, ctx.triggerRef, ctx.contentRef]);\n\n // Reset measured size when popover closes so reopening re-measures fresh.\n useEffect(() => {\n if (!ctx.open) {\n setContentSize(null);\n }\n }, [ctx.open]);\n\n if (!ctx.open) {\n return null;\n }\n\n const position = ctx.triggerRect ? computePosition(ctx.triggerRect, side, align, contentSize) : null;\n\n // Viewport-aware max width. Web uses Dimensions.get('window') which\n // react-native-web maps to window.innerWidth; native uses the same API\n // for the device window. Subtract margin on both sides so content\n // doesn't kiss the screen edge.\n const viewportWidth = Dimensions.get('window').width;\n const maxContentWidth = Math.max(MIN_WIDTH, viewportWidth - VIEWPORT_MARGIN * 2);\n\n const contentBaseStyle: ViewStyle = {\n minWidth: MIN_WIDTH,\n maxWidth: maxContentWidth,\n borderRadius: px(colors.radius.lg),\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n backgroundColor: colors.semantic.background.elevated,\n padding: px(colors.spacing['4']),\n ...(Platform.OS === 'web'\n ? ({\n boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n // Subtle scale-in. Skipped on native (do nothing fancy there).\n transition: 'opacity 120ms ease-out, transform 120ms ease-out',\n transform: 'scale(1)',\n opacity: 1,\n } as ViewStyle)\n : { elevation: 8 }),\n };\n\n // Clamp `left` so the popover stays within the viewport even when the\n // trigger sits near the right edge. First-paint fallback uses\n // `maxContentWidth` (the cap we apply via maxWidth above) — content\n // is allowed to grow up to that size, so assuming worst-case avoids\n // a one-frame overflow before measurement settles.\n const measuredWidth = contentSize?.width ?? maxContentWidth;\n const clampedLeft = position\n ? Math.min(\n Math.max(VIEWPORT_MARGIN, position.left),\n Math.max(VIEWPORT_MARGIN, viewportWidth - measuredWidth - VIEWPORT_MARGIN)\n )\n : 0;\n\n const positionedStyle: ViewStyle =\n Platform.OS === 'web'\n ? position\n ? ({\n position: 'fixed' as unknown as 'absolute',\n top: position.top,\n left: clampedLeft,\n zIndex: 50,\n } as ViewStyle)\n : ({\n // Trigger not yet measured — render off-screen for a\n // frame to avoid a flash at (0,0).\n position: 'fixed' as unknown as 'absolute',\n top: -9999,\n left: -9999,\n zIndex: 50,\n } as ViewStyle)\n : {};\n\n const content = (\n <View\n ref={(node) => {\n ctx.contentRef.current = node as unknown as HTMLDivElement | null;\n if (Platform.OS !== 'web') {\n return;\n }\n if (!node) {\n return;\n }\n if (typeof (node as unknown as HTMLDivElement).getBoundingClientRect !== 'function') {\n return;\n }\n const rect = (node as unknown as HTMLDivElement).getBoundingClientRect();\n if (!contentSize || contentSize.width !== rect.width || contentSize.height !== rect.height) {\n setContentSize({ width: rect.width, height: rect.height });\n }\n }}\n {...({\n role: 'dialog',\n id: ctx.contentId,\n ...(ariaLabel !== undefined ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n className={cn(\n 'rounded-lg border border-semantic-border-default bg-semantic-background-elevated',\n className\n )}\n style={[contentBaseStyle, positionedStyle]}\n >\n {children}\n </View>\n );\n\n if (Platform.OS === 'web') {\n return content;\n }\n\n // Native: use Modal as the floating layer with a transparent backdrop.\n // Tap on the backdrop closes the popover.\n return (\n <Modal visible={ctx.open} transparent animationType=\"fade\" onRequestClose={() => ctx.setOpen(false)}>\n <Pressable\n accessibilityRole=\"none\"\n aria-hidden={true}\n onPress={() => ctx.setOpen(false)}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'transparent',\n }}\n >\n <Pressable\n onPress={(event) => event.stopPropagation?.()}\n style={{\n position: 'absolute',\n top: ctx.triggerRect\n ? side === 'top'\n ? Math.max(VIEWPORT_MARGIN, ctx.triggerRect.top - GAP - 80)\n : ctx.triggerRect.top + ctx.triggerRect.height + GAP\n : 80,\n // Clamp horizontally so a wide popover near the\n // right edge can still grow leftward without\n // overflowing the screen.\n left: ctx.triggerRect\n ? Math.min(\n Math.max(VIEWPORT_MARGIN, ctx.triggerRect.left),\n Math.max(VIEWPORT_MARGIN, viewportWidth - measuredWidth - VIEWPORT_MARGIN)\n )\n : VIEWPORT_MARGIN * 2,\n }}\n >\n {content}\n </Pressable>\n </Pressable>\n </Modal>\n );\n};\n\n/**\n * Public `Popover` value — the root function plus its `.Trigger` and `.Content`\n * static members. `Object.assign` produces a value whose inferred type carries\n * the static properties, so `.d.ts` consumers can write `<Popover.Trigger>`\n * without a separate import.\n */\nexport const Popover = Object.assign(PopoverRoot, {\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n});\n","'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { getLocalTimeZone } from '@internationalized/date';\nimport { useCallback, useState } from 'react';\nimport { Platform, Pressable, Text as RNText, View } from 'react-native';\nimport { useLocale } from '../../i18n/locale';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport type { DateRange } from '../Calendar';\nimport { Calendar } from '../Calendar';\nimport { Popover } from '../Popover';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Format a single CalendarDate for display using Intl. */\nfunction formatDate(date: CalendarDate, locale: string): string {\n try {\n return new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(date.toDate(getLocalTimeZone()));\n } catch {\n return `${date.year}-${String(date.month).padStart(2, '0')}-${String(date.day).padStart(2, '0')}`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Calendar icon\n// ---------------------------------------------------------------------------\n\nfunction CalendarIcon({ size = 16, color = 'currentColor' }: { size?: number; color?: string }) {\n const colors = useThemeColors();\n\n if (Platform.OS === 'web') {\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=\"M8 2v4M16 2v4M3 10h18M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z\" />\n </svg>\n );\n }\n\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.muted : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {'📅'}\n </RNText>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type DatePickerProps = {\n value?: CalendarDate | null;\n defaultValue?: CalendarDate | null;\n onChange?: (date: CalendarDate | null) => void;\n\n /** BCP 47 locale; defaults from NoriProvider's i18n context. */\n locale?: string;\n\n /** Min/max selectable date. */\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n\n /** Custom unavailable predicate. */\n isDateUnavailable?: (date: CalendarDate) => boolean;\n\n /** First day of week override (0=Sun, 1=Mon, ...). Defaults from locale. */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n /** Placeholder text shown when no value. */\n placeholder?: string;\n\n /** Disable the whole picker. */\n disabled?: boolean;\n\n // A11y / Field.Control hook props\n id?: string;\n name?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n\n testID?: string;\n className?: string;\n};\n\nexport type DateRangeValue = { start: CalendarDate | null; end: CalendarDate | null };\n\nexport type DatePickerRangeProps = {\n value?: DateRangeValue;\n defaultValue?: DateRangeValue;\n onChange?: (range: DateRangeValue) => void;\n\n locale?: string;\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n placeholder?: string;\n disabled?: boolean;\n\n id?: string;\n name?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n\n testID?: string;\n className?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Shared Calendar optional props builder\n// ---------------------------------------------------------------------------\n\ntype CalendarOptional = {\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n};\n\nfunction buildCalendarOptional(\n minValue: CalendarDate | undefined,\n maxValue: CalendarDate | undefined,\n isDateUnavailable: ((date: CalendarDate) => boolean) | undefined,\n firstDayOfWeek: (0 | 1 | 2 | 3 | 4 | 5 | 6) | undefined\n): CalendarOptional {\n const out: CalendarOptional = {};\n if (minValue !== undefined) {\n out.minValue = minValue;\n }\n if (maxValue !== undefined) {\n out.maxValue = maxValue;\n }\n if (isDateUnavailable !== undefined) {\n out.isDateUnavailable = isDateUnavailable;\n }\n if (firstDayOfWeek !== undefined) {\n out.firstDayOfWeek = firstDayOfWeek;\n }\n return out;\n}\n\nfunction buildTriggerAriaProps(ariaProps: {\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n}): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (ariaProps['aria-labelledby'] !== undefined) {\n out['aria-labelledby'] = ariaProps['aria-labelledby'];\n }\n if (ariaProps['aria-describedby'] !== undefined) {\n out['aria-describedby'] = ariaProps['aria-describedby'];\n }\n if (ariaProps['aria-invalid'] !== undefined) {\n out['aria-invalid'] = ariaProps['aria-invalid'];\n }\n if (ariaProps['aria-required'] !== undefined) {\n out['aria-required'] = ariaProps['aria-required'];\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// DatePicker (single)\n//\n// Uses Popover.Trigger + asChild so the Popover correctly sets the trigger\n// ref for web positioning and handles outside-click dismissal.\n// The trigger renders as a Pressable (via Popover.Trigger asChild pattern).\n// ---------------------------------------------------------------------------\n\nconst DatePickerRoot = ({\n value,\n defaultValue,\n onChange,\n locale: localeProp,\n minValue,\n maxValue,\n isDateUnavailable,\n firstDayOfWeek,\n placeholder,\n disabled = false,\n id,\n name: _name,\n className,\n testID,\n ...ariaProps\n}: DatePickerProps) => {\n const providerLocale = useLocale();\n const locale = localeProp ?? providerLocale;\n\n const [open, setOpen] = useState(false);\n\n const isControlled = value !== undefined;\n const [inner, setInner] = useState<CalendarDate | null>(defaultValue ?? null);\n const current = isControlled ? (value ?? null) : inner;\n\n const handleChange = useCallback(\n (date: CalendarDate | null) => {\n if (!isControlled) {\n setInner(date);\n }\n onChange?.(date);\n setOpen(false);\n },\n [isControlled, onChange]\n );\n\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (!disabled) {\n setOpen(next);\n }\n },\n [disabled]\n );\n\n const displayValue = current ? formatDate(current, locale) : null;\n const calendarOptional = buildCalendarOptional(minValue, maxValue, isDateUnavailable, firstDayOfWeek);\n const triggerAriaProps = buildTriggerAriaProps(ariaProps);\n\n const colors = useThemeColors();\n const hasError = ariaProps['aria-invalid'] === true || (ariaProps['aria-invalid'] as unknown as string) === 'true';\n\n const pressableStyle = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n borderWidth: 1,\n borderRadius: px(colors.radius.md),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: hasError ? colors.color.danger : colors.semantic.border.default,\n opacity: disabled ? 0.6 : 1,\n };\n\n const textStyle = {\n flex: 1,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: displayValue ? colors.semantic.text.default : colors.semantic.text.muted,\n };\n\n // Extra a11y props for the trigger\n const triggerExtraProps: Record<string, unknown> = {\n role: 'combobox',\n accessibilityRole: 'button',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n ...triggerAriaProps,\n };\n if (id !== undefined) {\n triggerExtraProps.id = id;\n triggerExtraProps.nativeID = id;\n }\n if (testID !== undefined) {\n triggerExtraProps.testID = testID;\n }\n if (hasError) {\n triggerExtraProps['aria-invalid'] = true;\n }\n if (ariaProps['aria-required']) {\n triggerExtraProps['aria-required'] = true;\n }\n if (disabled) {\n triggerExtraProps['aria-disabled'] = true;\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild={false} className={cn(className)}>\n <Pressable\n onPress={disabled ? undefined : () => setOpen(!open)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center rounded-md border px-3 py-2',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={pressableStyle}\n {...(triggerExtraProps as Record<string, unknown>)}\n >\n <RNText style={textStyle} numberOfLines={1}>\n {displayValue ?? placeholder ?? ''}\n </RNText>\n <View style={{ marginLeft: px(colors.spacing['2']) }}>\n <CalendarIcon size={16} color={colors.semantic.text.muted} />\n </View>\n </Pressable>\n </Popover.Trigger>\n <Popover.Content aria-label=\"Date picker\" side=\"bottom\" align=\"start\">\n <Calendar\n mode=\"single\"\n value={current}\n onChange={(date) => {\n handleChange(date as CalendarDate | null);\n }}\n locale={locale}\n {...calendarOptional}\n />\n </Popover.Content>\n </Popover>\n );\n};\n\n// ---------------------------------------------------------------------------\n// DatePicker.Range\n// ---------------------------------------------------------------------------\n\nconst DatePickerRange = ({\n value,\n defaultValue,\n onChange,\n locale: localeProp,\n minValue,\n maxValue,\n isDateUnavailable,\n firstDayOfWeek,\n placeholder,\n disabled = false,\n id,\n name: _name,\n className,\n testID,\n ...ariaProps\n}: DatePickerRangeProps) => {\n const providerLocale = useLocale();\n const locale = localeProp ?? providerLocale;\n\n const [open, setOpen] = useState(false);\n\n const isControlled = value !== undefined;\n const [inner, setInner] = useState<DateRangeValue>(defaultValue ?? { start: null, end: null });\n const current = isControlled ? (value ?? { start: null, end: null }) : inner;\n\n const calendarValue: DateRange | null = current.start !== null ? { start: current.start, end: current.end } : null;\n\n const handleChange = useCallback(\n (calRange: DateRange | null) => {\n const next: DateRangeValue = {\n start: calRange?.start ?? null,\n end: calRange?.end ?? null,\n };\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n if (next.start !== null && next.end !== null) {\n setOpen(false);\n }\n },\n [isControlled, onChange]\n );\n\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (!disabled) {\n setOpen(next);\n }\n },\n [disabled]\n );\n\n let displayValue: string | null = null;\n if (current.start !== null) {\n const startStr = formatDate(current.start, locale);\n const endStr = current.end !== null ? formatDate(current.end, locale) : '';\n displayValue = `${startStr} – ${endStr}`;\n }\n\n const calendarOptional = buildCalendarOptional(minValue, maxValue, isDateUnavailable, firstDayOfWeek);\n const triggerAriaProps = buildTriggerAriaProps(ariaProps);\n\n const colors = useThemeColors();\n const hasError = ariaProps['aria-invalid'] === true || (ariaProps['aria-invalid'] as unknown as string) === 'true';\n\n const pressableStyle = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n borderWidth: 1,\n borderRadius: px(colors.radius.md),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: hasError ? colors.color.danger : colors.semantic.border.default,\n opacity: disabled ? 0.6 : 1,\n };\n\n const textStyle = {\n flex: 1,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: displayValue ? colors.semantic.text.default : colors.semantic.text.muted,\n };\n\n const triggerExtraProps: Record<string, unknown> = {\n role: 'combobox',\n accessibilityRole: 'button',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n ...triggerAriaProps,\n };\n if (id !== undefined) {\n triggerExtraProps.id = id;\n triggerExtraProps.nativeID = id;\n }\n if (testID !== undefined) {\n triggerExtraProps.testID = testID;\n }\n if (hasError) {\n triggerExtraProps['aria-invalid'] = true;\n }\n if (ariaProps['aria-required']) {\n triggerExtraProps['aria-required'] = true;\n }\n if (disabled) {\n triggerExtraProps['aria-disabled'] = true;\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild={false} className={cn(className)}>\n <Pressable\n onPress={disabled ? undefined : () => setOpen(!open)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center rounded-md border px-3 py-2',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={pressableStyle}\n {...(triggerExtraProps as Record<string, unknown>)}\n >\n <RNText style={textStyle} numberOfLines={1}>\n {displayValue ?? placeholder ?? ''}\n </RNText>\n <View style={{ marginLeft: px(colors.spacing['2']) }}>\n <CalendarIcon size={16} color={colors.semantic.text.muted} />\n </View>\n </Pressable>\n </Popover.Trigger>\n <Popover.Content aria-label=\"Date range picker\" side=\"bottom\" align=\"start\">\n <Calendar\n mode=\"range\"\n value={calendarValue}\n onChange={(range) => {\n handleChange(range as DateRange | null);\n }}\n locale={locale}\n {...calendarOptional}\n />\n </Popover.Content>\n </Popover>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public export\n// ---------------------------------------------------------------------------\n\nexport const DatePicker = Object.assign(DatePickerRoot, {\n Range: DatePickerRange,\n});\n"]}
|