@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/slot/compose-refs.ts","../../../src/slot/slot.tsx","../../../src/theme/px.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/utils/cn.ts","../../../src/components/Tooltip/Tooltip.tsx"],"names":["forwardRef","Slot","isValidElement","Children","cloneElement","createContext","Platform","useContext","useState","Appearance","useEffect","useCallback","useRef","useId","jsx","Pressable","RNText","View"],"mappings":"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","file":"index.cjs","sourcesContent":["// composeRefs — merges multiple React refs (callback or object) into a single callback.\n// Derived from Radix UI's approach; reimplemented here so we don't take a Radix dependency.\n\nimport type { MutableRefObject, Ref, RefCallback } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\nexport function composeRefs<T>(...refs: Array<PossibleRef<T>>): RefCallback<T> {\n return (node: T | null) => {\n for (const ref of refs) {\n if (ref == null) {\n continue;\n }\n if (typeof ref === 'function') {\n ref(node);\n } else {\n // React's MutableRefObject typing — we assign .current directly.\n (ref as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n","import type { CSSProperties, ReactElement, Ref } from 'react';\nimport { Children, cloneElement, forwardRef, isValidElement } from 'react';\nimport { composeRefs } from './compose-refs';\n\ntype AnyProps = Record<string, unknown>;\n\nexport type SlotProps = {\n children?: React.ReactNode;\n} & AnyProps;\n\nexport const Slot = forwardRef<unknown, SlotProps>(function Slot(props, forwardedRef) {\n const { children, ...slotProps } = props;\n\n if (!isValidElement(children)) {\n return null;\n }\n\n // Assert that children is a single React element with props — we've narrowed above.\n const child = Children.only(children) as ReactElement<AnyProps> & { ref?: Ref<unknown> };\n const merged = mergeProps(slotProps, child.props);\n\n // Merge refs: Slot's forwarded ref + the child's own ref (if any).\n const childRef = (child as unknown as { ref?: Ref<unknown> }).ref;\n if (forwardedRef || childRef) {\n (merged as AnyProps).ref = composeRefs(forwardedRef, childRef);\n }\n\n return cloneElement(child, merged);\n});\nSlot.displayName = 'Slot';\n\nfunction mergeProps(outer: AnyProps, inner: AnyProps): AnyProps {\n // Inner (child) wins for everything except: className (concatenated), style (merged), and\n // event handlers (composed — outer runs first, then inner).\n const merged: AnyProps = { ...outer };\n\n for (const key of Object.keys(inner)) {\n const outerValue = outer[key];\n const innerValue = inner[key];\n\n if (key === 'className' || key === 'class') {\n merged[key] = joinClass(outerValue, innerValue);\n continue;\n }\n\n if (key === 'style') {\n merged[key] = {\n ...(outerValue as CSSProperties | undefined),\n ...(innerValue as CSSProperties | undefined),\n };\n continue;\n }\n\n if (isEventHandler(key, outerValue, innerValue)) {\n merged[key] = composeHandlers(outerValue as Fn, innerValue as Fn);\n continue;\n }\n\n merged[key] = innerValue;\n }\n\n return merged;\n}\n\nfunction joinClass(outer: unknown, inner: unknown): string | undefined {\n const a = typeof outer === 'string' ? outer : '';\n const b = typeof inner === 'string' ? inner : '';\n const joined = [a, b].filter(Boolean).join(' ');\n return joined.length > 0 ? joined : undefined;\n}\n\ntype Fn = (...args: unknown[]) => unknown;\n\nfunction isEventHandler(key: string, outer: unknown, inner: unknown): boolean {\n if (!key.startsWith('on') || key.length < 3) {\n return false;\n }\n if (key[2] !== key[2]?.toUpperCase()) {\n return false;\n }\n return typeof outer === 'function' && typeof inner === 'function';\n}\n\nfunction composeHandlers(outer: Fn, inner: Fn): Fn {\n return (...args: unknown[]) => {\n outer(...args);\n inner(...args);\n };\n}\n","/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#fafafa\",\n elevated: \"#ffffff\",\n subtle: \"#f4f4f5\",\n },\n border: {\n default: \"#e4e4e7\",\n strong: \"#d4d4d8\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#0d9488\",\n primaryHover: \"#0f766e\",\n primaryPressed: \"#115e59\",\n },\n text: {\n default: \"#18181b\",\n inverted: \"#fafafa\",\n muted: \"#52525b\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n\n// Dark mode overrides\n// Generated for dark mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const themeDark = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#18181b\",\n elevated: \"#3f3f46\",\n subtle: \"#27272a\",\n },\n border: {\n default: \"#3f3f46\",\n strong: \"#52525b\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#2dd4bf\",\n primaryHover: \"#5eead4\",\n primaryPressed: \"#99f6e4\",\n },\n text: {\n default: \"#fafafa\",\n inverted: \"#18181b\",\n muted: \"#a1a1aa\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\n","'use client';\n\nimport { themeDark as defaultDark, theme as defaultLight, type Theme } from '@nori-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\n\n/**\n * A `NoriTheme` is a paired light/dark palette. The active half is picked\n * by `useColorScheme()` so the same theme object covers both schemes.\n *\n * Build one yourself by spreading the defaults and overriding the colors\n * you care about, or pick a preset from `@nori-ui/core/themes` (see the\n * Theming docs for examples).\n */\nexport type NoriTheme = {\n light: Theme;\n dark: Theme;\n};\n\n/**\n * Default Nori palette — teal primary on a warm-paper light surface, and\n * teal-400 primary on a deep-zinc dark surface. Mirrors the `theme` /\n * `themeDark` exports from @nori-ui/tokens.\n */\nexport const defaultTheme: NoriTheme = {\n light: defaultLight,\n dark: defaultDark as unknown as Theme,\n};\n\n// Context value is the FULL pair, not the active half. `useThemeColors`\n// (the hook components reach for) resolves it to the right one based on\n// the current color scheme. Storing the pair means a parent only has to\n// declare the theme once — switching scheme is a separate concern.\nexport const ThemeContext = createContext<NoriTheme>(defaultTheme);\nThemeContext.displayName = 'ThemeContext';\n\nexport type ThemeProviderProps = {\n /**\n * The theme to apply to descendants. Pass either:\n * - a full `NoriTheme` (`{ light, dark }`) — both schemes covered\n * - a single `Theme` — used for both light and dark (rare; mostly\n * useful when you ONLY ever render in one scheme)\n * - omit — falls back to the Nori default (teal palette)\n */\n theme?: NoriTheme | Theme;\n children?: ReactNode;\n};\n\nconst isFullTheme = (t: NoriTheme | Theme): t is NoriTheme => 'light' in t && 'dark' in t;\n\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const value: NoriTheme =\n theme === undefined ? defaultTheme : isFullTheme(theme) ? theme : { light: theme, dark: theme };\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n","'use client';\n\nimport { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\nimport { Appearance, Platform } from 'react-native';\n\nexport type ColorScheme = 'light' | 'dark';\n\n// Override channel so a parent can force a scheme (e.g. an app shell with\n// hard-coded dark chrome that wants nested components to render against\n// the dark token half regardless of the OS Appearance). `null` means\n// \"no override — use the system signal\".\nconst ColorSchemeOverrideContext = createContext<ColorScheme | null>(null);\nColorSchemeOverrideContext.displayName = 'ColorSchemeOverrideContext';\n\nexport type ColorSchemeProviderProps = {\n /** Force a specific scheme for descendants. */\n value: ColorScheme;\n children?: ReactNode;\n};\n\n/**\n * Forces a color scheme for all descendants. Useful when a screen's chrome\n * is hard-coded to one scheme (e.g. a forced-dark editorial surface) and\n * you want library components inside it to follow that, not the OS.\n */\nexport function ColorSchemeProvider({ value, children }: ColorSchemeProviderProps) {\n return <ColorSchemeOverrideContext.Provider value={value}>{children}</ColorSchemeOverrideContext.Provider>;\n}\n\nconst isWeb = Platform.OS === 'web';\n\n// Web: a document is \"in dark mode\" when the root <html> element carries\n// the `dark` class (Tailwind / Fumadocs convention) OR a `data-theme=\"dark\"`\n// attribute (matches the `darkMode` selectors in our Tailwind preset).\n// We deliberately don't fall back to `prefers-color-scheme` — the app\n// usually owns that decision and writes it onto <html>; tracking the system\n// preference too would fight the app's chosen value.\nfunction readWebScheme(): ColorScheme {\n if (typeof document === 'undefined') {\n return 'light';\n }\n const root = document.documentElement;\n if (root.classList.contains('dark')) {\n return 'dark';\n }\n if (root.getAttribute('data-theme') === 'dark') {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Returns the current color scheme — `'light'` or `'dark'`.\n *\n * On web: observes the root `<html>` element's `class=\"dark\"` and\n * `data-theme=\"dark\"` attribute (the same signals our Tailwind preset\n * keys on). Updates live as those flip.\n *\n * On native: delegates to `react-native`'s `Appearance` API so the hook\n * tracks the OS preference without extra wiring.\n *\n * Components consume this indirectly via `useThemeColors()`; reach for\n * this directly when you need the raw scheme (e.g. to swap an icon).\n */\nexport function useColorScheme(): ColorScheme {\n // A `<ColorSchemeProvider value=\"dark\">` ancestor (or NoriProvider's\n // `colorScheme` prop, which mounts one) wins over the OS signal — the\n // app shell knows which scheme its chrome is locked to.\n const override = useContext(ColorSchemeOverrideContext);\n\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (isWeb) {\n return readWebScheme();\n }\n return (Appearance.getColorScheme() ?? 'light') as ColorScheme;\n });\n\n useEffect(() => {\n if (isWeb) {\n const root = document.documentElement;\n const update = () => setScheme(readWebScheme());\n const observer = new MutationObserver(update);\n observer.observe(root, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n // Sync once after mount in case SSR shipped a different value.\n update();\n return () => observer.disconnect();\n }\n\n const sub = Appearance.addChangeListener(({ colorScheme }) => {\n setScheme((colorScheme ?? 'light') as ColorScheme);\n });\n return () => sub.remove();\n }, []);\n\n return override ?? scheme;\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport { useContext } from 'react';\nimport { ThemeContext } from './context';\nimport { useColorScheme } from './use-color-scheme';\n\n/**\n * Returns the active token palette — `theme.light` in light mode,\n * `theme.dark` in dark mode. Resolves the theme via `ThemeContext` so\n * any ancestor `<ThemeProvider theme={...}>` flows through. With no\n * provider in the tree, the default Nori palette (teal) is used.\n *\n * Use this **inside a component** when you need a hex value for a React\n * Native `style` prop (`backgroundColor`, `borderColor`, etc.).\n *\n * Note: className-based styles (e.g. `bg-semantic-interactive-primary`)\n * compile against the @nori-ui/tokens palette at build time and don't\n * follow `<ThemeProvider>` overrides today. Inline styles via this hook\n * always do — and inline beats class on CSS specificity, so the visible\n * color you see is whatever the hook resolves to. CSS-variable theming\n * for the className path is a planned follow-up.\n */\nexport function useThemeColors(): Theme {\n const scheme = useColorScheme();\n const themePair = useContext(ThemeContext);\n return scheme === 'dark' ? themePair.dark : themePair.light;\n}\n","// cn — class-name merger. clsx-compatible shape.\n//\n// Intentionally does NOT deduplicate Tailwind conflicts (e.g. \"text-sm text-lg\").\n// That's `tailwind-merge`'s job; we defer adding it until a component actually\n// needs it, to keep the core tree-shakable and the runtime zero-dep.\n\nexport type ClassInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | ClassInput[]\n | Record<string, boolean | number | null | undefined>;\n\nexport function cn(...inputs: ClassInput[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n append(out, input);\n }\n return out.join(' ');\n}\n\nfunction append(out: string[], input: ClassInput): void {\n if (!input) {\n return;\n }\n if (typeof input === 'string') {\n if (input.length > 0) {\n out.push(input);\n }\n return;\n }\n if (typeof input === 'number') {\n return; // numbers are never class names\n }\n if (Array.isArray(input)) {\n for (const inner of input) {\n append(out, inner);\n }\n return;\n }\n if (typeof input === 'object') {\n for (const key of Object.keys(input)) {\n if (input[key]) {\n out.push(key);\n }\n }\n }\n}\n","'use client';\n\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 { 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 TooltipSide = 'top' | 'right' | 'bottom' | 'left';\nexport type TooltipAlign = 'start' | 'center' | 'end';\n\ntype TriggerRect = { top: number; left: number; width: number; height: number };\n\ntype TooltipContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n /** Open after `delayMs` if still hovered/focused. */\n requestOpen: () => void;\n /** Close after `closeDelayMs`; cancellable. */\n requestClose: () => void;\n /** Cancel any pending open/close timers (e.g. when re-entering). */\n cancelTimers: () => void;\n contentId: string;\n triggerRef: { current: HTMLElement | null };\n contentRef: { current: HTMLDivElement | null };\n triggerRect: TriggerRect | null;\n measureTrigger: () => void;\n};\n\nconst TooltipContext = createContext<TooltipContextValue | null>(null);\n\nconst useTooltipContext = (label: string): TooltipContextValue => {\n const ctx = useContext(TooltipContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Tooltip>.`);\n }\n return ctx;\n};\n\nconst DEFAULT_OPEN_DELAY_MS = 500;\nconst DEFAULT_CLOSE_DELAY_MS = 0;\n/** Long-press duration on native — matches platform defaults (iOS ~500ms). */\nconst LONG_PRESS_MS = 500;\n\nexport type TooltipProps = {\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 /**\n * Delay before the tooltip opens after hover/focus.\n * @defaultValue 500\n */\n delayMs?: number;\n /**\n * Delay before the tooltip closes after hover-out / blur. Useful for\n * giving users time to move into the tooltip if it ever becomes\n * interactive (it shouldn't — use Popover for that — but the knob is\n * here so the API matches Radix).\n * @defaultValue 0\n */\n closeDelayMs?: number;\n children?: ReactNode;\n};\n\n/**\n * Small floating label triggered by hover (web) or long-press (native).\n * Use for short contextual hints — most often on icon-only buttons. NOT\n * for rich interactive content; reach for `Popover` when the surface\n * needs to hold buttons, inputs, or links.\n *\n * Composition: `Tooltip` (root, owns open state and timers),\n * `TooltipTrigger` (forwards events to its child via Slot when\n * `asChild`), `TooltipContent` (the floating label).\n *\n * Accessibility: the trigger gets `aria-describedby` pointing at the\n * content id — tooltips augment the trigger's accessible name, they do\n * NOT replace it. The icon-only button still needs an `aria-label`.\n *\n * Behavior:\n * - Open on hover (web mouseover) or focus, after `delayMs`.\n * - Close on hover-out, blur, or Escape.\n * - Native: long-press the trigger (500ms) to reveal; tap-anywhere or\n * re-press to dismiss.\n *\n * Cross-platform: web renders the content inline with `position: fixed`\n * + a measured trigger rect so it escapes any ancestor `overflow:\n * hidden`. Native renders inline with `position: absolute` — the parent\n * needs to allow overflow for the chip to peek out.\n */\nconst TooltipRoot = ({\n open,\n defaultOpen = false,\n onOpenChange,\n delayMs = DEFAULT_OPEN_DELAY_MS,\n closeDelayMs = DEFAULT_CLOSE_DELAY_MS,\n children,\n}: TooltipProps) => {\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 // Open / close timers. Both are cleared on unmount and on every new\n // request — so rapid hover-in / hover-out doesn't leave a stale timer\n // about to flip state after the user has moved on.\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const cancelTimers = useCallback(() => {\n if (openTimer.current) {\n clearTimeout(openTimer.current);\n openTimer.current = null;\n }\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n }, []);\n\n const requestOpen = useCallback(() => {\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n if (openTimer.current) {\n return;\n }\n if (delayMs <= 0) {\n setOpen(true);\n return;\n }\n openTimer.current = setTimeout(() => {\n openTimer.current = null;\n setOpen(true);\n }, delayMs);\n }, [delayMs, setOpen]);\n\n const requestClose = useCallback(() => {\n if (openTimer.current) {\n clearTimeout(openTimer.current);\n openTimer.current = null;\n }\n if (closeTimer.current) {\n return;\n }\n if (closeDelayMs <= 0) {\n setOpen(false);\n return;\n }\n closeTimer.current = setTimeout(() => {\n closeTimer.current = null;\n setOpen(false);\n }, closeDelayMs);\n }, [closeDelayMs, setOpen]);\n\n useEffect(() => () => cancelTimers(), [cancelTimers]);\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 tooltip 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: TooltipContextValue = {\n open: current,\n setOpen,\n requestOpen,\n requestClose,\n cancelTimers,\n contentId: `${baseId}-content`,\n triggerRef,\n contentRef,\n triggerRect,\n measureTrigger,\n };\n\n return <TooltipContext.Provider value={ctxValue}>{children}</TooltipContext.Provider>;\n};\n\nexport type TooltipTriggerProps = {\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 reveals the tooltip. Uses `asChild` by default so any\n * element (Button, IconButton, custom Pressable) becomes the trigger.\n *\n * Wires `aria-describedby` to the content's id — assistive tech reads\n * the tooltip text in addition to the trigger's own accessible name.\n *\n * Web: opens on `mouseEnter` and `focus`; closes on `mouseLeave` and\n * `blur`, both honoring the configured delays. Native: opens on\n * `onLongPress` (500ms hold) and closes on the next press anywhere.\n */\nexport const TooltipTrigger = ({ asChild = true, children, className, testID }: TooltipTriggerProps) => {\n const ctx = useTooltipContext('TooltipTrigger');\n\n const handleMouseEnter = useCallback(() => {\n ctx.measureTrigger();\n ctx.requestOpen();\n }, [ctx]);\n const handleMouseLeave = useCallback(() => {\n ctx.requestClose();\n }, [ctx]);\n const handleFocus = useCallback(() => {\n ctx.measureTrigger();\n ctx.requestOpen();\n }, [ctx]);\n const handleBlur = useCallback(() => {\n ctx.requestClose();\n }, [ctx]);\n const handleLongPress = useCallback(() => {\n ctx.measureTrigger();\n ctx.setOpen(true);\n }, [ctx]);\n const handlePress = useCallback(() => {\n // Native: tap (after a long-press has revealed it) dismisses.\n if (Platform.OS !== 'web' && ctx.open) {\n ctx.setOpen(false);\n }\n }, [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n // Compose the wrapped child's existing handlers with ours so any\n // app-level onClick / onFocus / onPress still fires. The tooltip\n // event runs AFTER the child's so consumer code wins on conflict.\n const compose =\n <T,>(existing: ((e: T) => void) | undefined, next: (e: T) => void) =>\n (event: T) => {\n existing?.(event);\n next(event);\n };\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }}\n onMouseEnter={compose(child.props.onMouseEnter as ((e: unknown) => void) | undefined, handleMouseEnter)}\n onMouseLeave={compose(child.props.onMouseLeave as ((e: unknown) => void) | undefined, handleMouseLeave)}\n onFocus={compose(child.props.onFocus as ((e: unknown) => void) | undefined, handleFocus)}\n onBlur={compose(child.props.onBlur as ((e: unknown) => void) | undefined, handleBlur)}\n {...(Platform.OS !== 'web'\n ? {\n onLongPress: compose(\n child.props.onLongPress as ((e: unknown) => void) | undefined,\n handleLongPress\n ),\n onPress: compose(child.props.onPress as ((e: unknown) => void) | undefined, handlePress),\n delayLongPress: LONG_PRESS_MS,\n }\n : {})}\n aria-describedby={ctx.open ? ctx.contentId : undefined}\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 {...(Platform.OS !== 'web'\n ? { onLongPress: handleLongPress, onPress: handlePress, delayLongPress: LONG_PRESS_MS }\n : {})}\n {...({\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleFocus,\n onBlur: handleBlur,\n 'aria-describedby': ctx.open ? ctx.contentId : undefined,\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 = 0; // tooltips hug their text — no enforced minimum\n\nfunction computePosition(\n rect: TriggerRect,\n side: TooltipSide,\n align: TooltipAlign,\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 TooltipContentProps = {\n /** Side of the trigger to anchor on. @defaultValue 'top' */\n side?: TooltipSide;\n /** Alignment along the trigger edge. @defaultValue 'center' */\n align?: TooltipAlign;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * The floating tooltip surface. Renders only while open. On web uses\n * `position: fixed` with a measured trigger rect so it escapes any\n * ancestor `overflow: hidden`.\n *\n * ARIA: `role=\"tooltip\"` plus a unique id that the trigger's\n * `aria-describedby` points at.\n */\nexport const TooltipContent = ({\n side = 'top',\n align = 'center',\n children,\n className,\n testID,\n}: TooltipContentProps) => {\n const ctx = useTooltipContext('TooltipContent');\n const colors = useThemeColors();\n\n // Measure content size after first paint so we can anchor `top`-side\n // tooltips (which need to know content height to render above the trigger).\n const [contentSize, setContentSize] = useState<{ width: number; height: number } | null>(null);\n\n // Direct DOM ref for the entrance animation. We poke `transform`,\n // `opacity`, and `transition` straight onto node.style instead of\n // passing them through `<View style>`, because rn-web's style filter\n // drops keys it doesn't recognize as RN style props (`transitionProperty`,\n // `transitionDuration`, etc.) — so any style fragment containing them\n // gets discarded entirely. Same pattern as the Dialog backdrop-blur fix.\n const domRef = useRef<HTMLDivElement | null>(null);\n const [entered, setEntered] = useState(false);\n\n // Web-only: Escape closes. Re-measure trigger on resize/scroll so the\n // chip stays anchored during page motion.\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 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('keydown', onKeyDown);\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('resize', onResize);\n window.removeEventListener('scroll', onScroll, true);\n };\n }, [ctx.open, ctx.measureTrigger, ctx.setOpen]);\n\n // Reset measured size and entrance flag when tooltip closes so a\n // reopen re-measures and re-animates fresh.\n useEffect(() => {\n if (!ctx.open) {\n setContentSize(null);\n setEntered(false);\n }\n }, [ctx.open]);\n\n // Entrance animation. On the first paint we render at scale(0.95) +\n // opacity 0; the next frame we flip the styles to scale(1) + opacity\n // 1, and the CSS transition handles the in-between. Web only —\n // native renders without animation (an animated mount on RN would\n // require Reanimated for negligible visual gain on a hint chip).\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n if (!ctx.open) {\n return;\n }\n const node = domRef.current;\n if (!node) {\n return;\n }\n // Initial values — explicitly set so the first frame is at the\n // pre-entrance state regardless of inherited styles.\n node.style.transformOrigin = 'center';\n node.style.transitionProperty = 'opacity, transform';\n node.style.transitionDuration = '100ms';\n node.style.transitionTimingFunction = 'ease-out';\n node.style.opacity = entered ? '1' : '0';\n node.style.transform = entered ? 'scale(1)' : 'scale(0.95)';\n }, [ctx.open, entered]);\n\n // Kick off the transition on the next frame after mount.\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n if (!ctx.open) {\n return;\n }\n const id = requestAnimationFrame(() => setEntered(true));\n return () => cancelAnimationFrame(id);\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 const contentBaseStyle: ViewStyle = {\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.text.default,\n paddingVertical: px(colors.spacing['2']) - 2, // closest theme-rooted approximation of legacy 6\n paddingHorizontal: px(colors.spacing['2']),\n ...(Platform.OS === 'web'\n ? ({\n boxShadow: '0 4px 6px -2px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.06)',\n } as ViewStyle)\n : { elevation: 4 }),\n };\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: position.left,\n zIndex: 60,\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: 60,\n } as ViewStyle)\n : ({\n // Native: rely on the parent allowing overflow. We anchor\n // by absolute positioning relative to wherever the\n // tooltip is mounted in the tree (typically right next\n // to the trigger).\n position: 'absolute',\n top: position?.top ?? 0,\n left: position?.left ?? 0,\n } as ViewStyle);\n\n return (\n <View\n ref={(node) => {\n ctx.contentRef.current = node as unknown as HTMLDivElement | null;\n domRef.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: 'tooltip',\n id: ctx.contentId,\n // Don't soak up pointer events — hovering the tooltip\n // itself should NOT block the trigger's mouse-leave from\n // firing. Tooltips are presentational; if you need\n // interactivity, reach for Popover.\n pointerEvents: 'none',\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n className={cn('rounded-md', className)}\n style={[contentBaseStyle, positionedStyle]}\n >\n <RNText\n className=\"text-xs\"\n style={{\n color: colors.semantic.text.inverted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.tight),\n }}\n >\n {children}\n </RNText>\n </View>\n );\n};\n\n/**\n * Public `Tooltip` value — the root function plus its `.Trigger` and\n * `.Content` static members. `Object.assign` produces a value whose inferred\n * type carries the static properties, so `.d.ts` consumers can write\n * `<Tooltip.Trigger>` without a separate import.\n */\nexport const Tooltip = Object.assign(TooltipRoot, {\n Trigger: TooltipTrigger,\n Content: TooltipContent,\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/slot/compose-refs.ts","../../../src/slot/slot.tsx","../../../src/theme/px.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/utils/cn.ts","../../../src/components/Tooltip/Tooltip.tsx"],"names":["forwardRef","Slot","isValidElement","Children","cloneElement","createContext","Platform","useContext","useState","Appearance","useEffect","useCallback","useRef","useId","jsx","Pressable","RNText","View"],"mappings":"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","file":"index.cjs","sourcesContent":["// composeRefs — merges multiple React refs (callback or object) into a single callback.\n// Derived from Radix UI's approach; reimplemented here so we don't take a Radix dependency.\n\nimport type { MutableRefObject, Ref, RefCallback } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\nexport function composeRefs<T>(...refs: Array<PossibleRef<T>>): RefCallback<T> {\n return (node: T | null) => {\n for (const ref of refs) {\n if (ref == null) {\n continue;\n }\n if (typeof ref === 'function') {\n ref(node);\n } else {\n // React's MutableRefObject typing — we assign .current directly.\n (ref as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n","import type { CSSProperties, ReactElement, Ref } from 'react';\nimport { Children, cloneElement, forwardRef, isValidElement } from 'react';\nimport { composeRefs } from './compose-refs';\n\ntype AnyProps = Record<string, unknown>;\n\nexport type SlotProps = {\n children?: React.ReactNode;\n} & AnyProps;\n\nexport const Slot = forwardRef<unknown, SlotProps>(function Slot(props, forwardedRef) {\n const { children, ...slotProps } = props;\n\n if (!isValidElement(children)) {\n return null;\n }\n\n // Assert that children is a single React element with props — we've narrowed above.\n const child = Children.only(children) as ReactElement<AnyProps> & { ref?: Ref<unknown> };\n const merged = mergeProps(slotProps, child.props);\n\n // Merge refs: Slot's forwarded ref + the child's own ref (if any).\n const childRef = (child as unknown as { ref?: Ref<unknown> }).ref;\n if (forwardedRef || childRef) {\n (merged as AnyProps).ref = composeRefs(forwardedRef, childRef);\n }\n\n return cloneElement(child, merged);\n});\nSlot.displayName = 'Slot';\n\nfunction mergeProps(outer: AnyProps, inner: AnyProps): AnyProps {\n // Inner (child) wins for everything except: className (concatenated), style (merged), and\n // event handlers (composed — outer runs first, then inner).\n const merged: AnyProps = { ...outer };\n\n for (const key of Object.keys(inner)) {\n const outerValue = outer[key];\n const innerValue = inner[key];\n\n if (key === 'className' || key === 'class') {\n merged[key] = joinClass(outerValue, innerValue);\n continue;\n }\n\n if (key === 'style') {\n merged[key] = {\n ...(outerValue as CSSProperties | undefined),\n ...(innerValue as CSSProperties | undefined),\n };\n continue;\n }\n\n if (isEventHandler(key, outerValue, innerValue)) {\n merged[key] = composeHandlers(outerValue as Fn, innerValue as Fn);\n continue;\n }\n\n merged[key] = innerValue;\n }\n\n return merged;\n}\n\nfunction joinClass(outer: unknown, inner: unknown): string | undefined {\n const a = typeof outer === 'string' ? outer : '';\n const b = typeof inner === 'string' ? inner : '';\n const joined = [a, b].filter(Boolean).join(' ');\n return joined.length > 0 ? joined : undefined;\n}\n\ntype Fn = (...args: unknown[]) => unknown;\n\nfunction isEventHandler(key: string, outer: unknown, inner: unknown): boolean {\n if (!key.startsWith('on') || key.length < 3) {\n return false;\n }\n if (key[2] !== key[2]?.toUpperCase()) {\n return false;\n }\n return typeof outer === 'function' && typeof inner === 'function';\n}\n\nfunction composeHandlers(outer: Fn, inner: Fn): Fn {\n return (...args: unknown[]) => {\n outer(...args);\n inner(...args);\n };\n}\n","/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n 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","'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 { 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 TooltipSide = 'top' | 'right' | 'bottom' | 'left';\nexport type TooltipAlign = 'start' | 'center' | 'end';\n\ntype TriggerRect = { top: number; left: number; width: number; height: number };\n\ntype TooltipContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n /** Open after `delayMs` if still hovered/focused. */\n requestOpen: () => void;\n /** Close after `closeDelayMs`; cancellable. */\n requestClose: () => void;\n /** Cancel any pending open/close timers (e.g. when re-entering). */\n cancelTimers: () => void;\n contentId: string;\n triggerRef: { current: HTMLElement | null };\n contentRef: { current: HTMLDivElement | null };\n triggerRect: TriggerRect | null;\n measureTrigger: () => void;\n};\n\nconst TooltipContext = createContext<TooltipContextValue | null>(null);\n\nconst useTooltipContext = (label: string): TooltipContextValue => {\n const ctx = useContext(TooltipContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Tooltip>.`);\n }\n return ctx;\n};\n\nconst DEFAULT_OPEN_DELAY_MS = 500;\nconst DEFAULT_CLOSE_DELAY_MS = 0;\n/** Long-press duration on native — matches platform defaults (iOS ~500ms). */\nconst LONG_PRESS_MS = 500;\n\nexport type TooltipProps = {\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 /**\n * Delay before the tooltip opens after hover/focus.\n * @defaultValue 500\n */\n delayMs?: number;\n /**\n * Delay before the tooltip closes after hover-out / blur. Useful for\n * giving users time to move into the tooltip if it ever becomes\n * interactive (it shouldn't — use Popover for that — but the knob is\n * here so the API matches Radix).\n * @defaultValue 0\n */\n closeDelayMs?: number;\n children?: ReactNode;\n};\n\n/**\n * Small floating label triggered by hover (web) or long-press (native).\n * Use for short contextual hints — most often on icon-only buttons. NOT\n * for rich interactive content; reach for `Popover` when the surface\n * needs to hold buttons, inputs, or links.\n *\n * Composition: `Tooltip` (root, owns open state and timers),\n * `TooltipTrigger` (forwards events to its child via Slot when\n * `asChild`), `TooltipContent` (the floating label).\n *\n * Accessibility: the trigger gets `aria-describedby` pointing at the\n * content id — tooltips augment the trigger's accessible name, they do\n * NOT replace it. The icon-only button still needs an `aria-label`.\n *\n * Behavior:\n * - Open on hover (web mouseover) or focus, after `delayMs`.\n * - Close on hover-out, blur, or Escape.\n * - Native: long-press the trigger (500ms) to reveal; tap-anywhere or\n * re-press to dismiss.\n *\n * Cross-platform: web renders the content inline with `position: fixed`\n * + a measured trigger rect so it escapes any ancestor `overflow:\n * hidden`. Native renders inline with `position: absolute` — the parent\n * needs to allow overflow for the chip to peek out.\n */\nconst TooltipRoot = ({\n open,\n defaultOpen = false,\n onOpenChange,\n delayMs = DEFAULT_OPEN_DELAY_MS,\n closeDelayMs = DEFAULT_CLOSE_DELAY_MS,\n children,\n}: TooltipProps) => {\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 // Open / close timers. Both are cleared on unmount and on every new\n // request — so rapid hover-in / hover-out doesn't leave a stale timer\n // about to flip state after the user has moved on.\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const cancelTimers = useCallback(() => {\n if (openTimer.current) {\n clearTimeout(openTimer.current);\n openTimer.current = null;\n }\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n }, []);\n\n const requestOpen = useCallback(() => {\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n if (openTimer.current) {\n return;\n }\n if (delayMs <= 0) {\n setOpen(true);\n return;\n }\n openTimer.current = setTimeout(() => {\n openTimer.current = null;\n setOpen(true);\n }, delayMs);\n }, [delayMs, setOpen]);\n\n const requestClose = useCallback(() => {\n if (openTimer.current) {\n clearTimeout(openTimer.current);\n openTimer.current = null;\n }\n if (closeTimer.current) {\n return;\n }\n if (closeDelayMs <= 0) {\n setOpen(false);\n return;\n }\n closeTimer.current = setTimeout(() => {\n closeTimer.current = null;\n setOpen(false);\n }, closeDelayMs);\n }, [closeDelayMs, setOpen]);\n\n useEffect(() => () => cancelTimers(), [cancelTimers]);\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 tooltip 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: TooltipContextValue = {\n open: current,\n setOpen,\n requestOpen,\n requestClose,\n cancelTimers,\n contentId: `${baseId}-content`,\n triggerRef,\n contentRef,\n triggerRect,\n measureTrigger,\n };\n\n return <TooltipContext.Provider value={ctxValue}>{children}</TooltipContext.Provider>;\n};\n\nexport type TooltipTriggerProps = {\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 reveals the tooltip. Uses `asChild` by default so any\n * element (Button, IconButton, custom Pressable) becomes the trigger.\n *\n * Wires `aria-describedby` to the content's id — assistive tech reads\n * the tooltip text in addition to the trigger's own accessible name.\n *\n * Web: opens on `mouseEnter` and `focus`; closes on `mouseLeave` and\n * `blur`, both honoring the configured delays. Native: opens on\n * `onLongPress` (500ms hold) and closes on the next press anywhere.\n */\nexport const TooltipTrigger = ({ asChild = true, children, className, testID }: TooltipTriggerProps) => {\n const ctx = useTooltipContext('TooltipTrigger');\n\n const handleMouseEnter = useCallback(() => {\n ctx.measureTrigger();\n ctx.requestOpen();\n }, [ctx]);\n const handleMouseLeave = useCallback(() => {\n ctx.requestClose();\n }, [ctx]);\n const handleFocus = useCallback(() => {\n ctx.measureTrigger();\n ctx.requestOpen();\n }, [ctx]);\n const handleBlur = useCallback(() => {\n ctx.requestClose();\n }, [ctx]);\n const handleLongPress = useCallback(() => {\n ctx.measureTrigger();\n ctx.setOpen(true);\n }, [ctx]);\n const handlePress = useCallback(() => {\n // Native: tap (after a long-press has revealed it) dismisses.\n if (Platform.OS !== 'web' && ctx.open) {\n ctx.setOpen(false);\n }\n }, [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n // Compose the wrapped child's existing handlers with ours so any\n // app-level onClick / onFocus / onPress still fires. The tooltip\n // event runs AFTER the child's so consumer code wins on conflict.\n const compose =\n <T,>(existing: ((e: T) => void) | undefined, next: (e: T) => void) =>\n (event: T) => {\n existing?.(event);\n next(event);\n };\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }}\n onMouseEnter={compose(child.props.onMouseEnter as ((e: unknown) => void) | undefined, handleMouseEnter)}\n onMouseLeave={compose(child.props.onMouseLeave as ((e: unknown) => void) | undefined, handleMouseLeave)}\n onFocus={compose(child.props.onFocus as ((e: unknown) => void) | undefined, handleFocus)}\n onBlur={compose(child.props.onBlur as ((e: unknown) => void) | undefined, handleBlur)}\n {...(Platform.OS !== 'web'\n ? {\n onLongPress: compose(\n child.props.onLongPress as ((e: unknown) => void) | undefined,\n handleLongPress\n ),\n onPress: compose(child.props.onPress as ((e: unknown) => void) | undefined, handlePress),\n delayLongPress: LONG_PRESS_MS,\n }\n : {})}\n aria-describedby={ctx.open ? ctx.contentId : undefined}\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 {...(Platform.OS !== 'web'\n ? { onLongPress: handleLongPress, onPress: handlePress, delayLongPress: LONG_PRESS_MS }\n : {})}\n {...({\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleFocus,\n onBlur: handleBlur,\n 'aria-describedby': ctx.open ? ctx.contentId : undefined,\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 = 0; // tooltips hug their text — no enforced minimum\n\nfunction computePosition(\n rect: TriggerRect,\n side: TooltipSide,\n align: TooltipAlign,\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 TooltipContentProps = {\n /** Side of the trigger to anchor on. @defaultValue 'top' */\n side?: TooltipSide;\n /** Alignment along the trigger edge. @defaultValue 'center' */\n align?: TooltipAlign;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * The floating tooltip surface. Renders only while open. On web uses\n * `position: fixed` with a measured trigger rect so it escapes any\n * ancestor `overflow: hidden`.\n *\n * ARIA: `role=\"tooltip\"` plus a unique id that the trigger's\n * `aria-describedby` points at.\n */\nexport const TooltipContent = ({\n side = 'top',\n align = 'center',\n children,\n className,\n testID,\n}: TooltipContentProps) => {\n const ctx = useTooltipContext('TooltipContent');\n const colors = useThemeColors();\n\n // Measure content size after first paint so we can anchor `top`-side\n // tooltips (which need to know content height to render above the trigger).\n const [contentSize, setContentSize] = useState<{ width: number; height: number } | null>(null);\n\n // Direct DOM ref for the entrance animation. We poke `transform`,\n // `opacity`, and `transition` straight onto node.style instead of\n // passing them through `<View style>`, because rn-web's style filter\n // drops keys it doesn't recognize as RN style props (`transitionProperty`,\n // `transitionDuration`, etc.) — so any style fragment containing them\n // gets discarded entirely. Same pattern as the Dialog backdrop-blur fix.\n const domRef = useRef<HTMLDivElement | null>(null);\n const [entered, setEntered] = useState(false);\n\n // Web-only: Escape closes. Re-measure trigger on resize/scroll so the\n // chip stays anchored during page motion.\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 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('keydown', onKeyDown);\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('resize', onResize);\n window.removeEventListener('scroll', onScroll, true);\n };\n }, [ctx.open, ctx.measureTrigger, ctx.setOpen]);\n\n // Reset measured size and entrance flag when tooltip closes so a\n // reopen re-measures and re-animates fresh.\n useEffect(() => {\n if (!ctx.open) {\n setContentSize(null);\n setEntered(false);\n }\n }, [ctx.open]);\n\n // Entrance animation. On the first paint we render at scale(0.95) +\n // opacity 0; the next frame we flip the styles to scale(1) + opacity\n // 1, and the CSS transition handles the in-between. Web only —\n // native renders without animation (an animated mount on RN would\n // require Reanimated for negligible visual gain on a hint chip).\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n if (!ctx.open) {\n return;\n }\n const node = domRef.current;\n if (!node) {\n return;\n }\n // Initial values — explicitly set so the first frame is at the\n // pre-entrance state regardless of inherited styles.\n node.style.transformOrigin = 'center';\n node.style.transitionProperty = 'opacity, transform';\n node.style.transitionDuration = '100ms';\n node.style.transitionTimingFunction = 'ease-out';\n node.style.opacity = entered ? '1' : '0';\n node.style.transform = entered ? 'scale(1)' : 'scale(0.95)';\n }, [ctx.open, entered]);\n\n // Kick off the transition on the next frame after mount.\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n if (!ctx.open) {\n return;\n }\n const id = requestAnimationFrame(() => setEntered(true));\n return () => cancelAnimationFrame(id);\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 const contentBaseStyle: ViewStyle = {\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.text.default,\n paddingVertical: px(colors.spacing['2']) - 2, // closest theme-rooted approximation of legacy 6\n paddingHorizontal: px(colors.spacing['2']),\n ...(Platform.OS === 'web'\n ? ({\n boxShadow: '0 4px 6px -2px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.06)',\n } as ViewStyle)\n : { elevation: 4 }),\n };\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: position.left,\n zIndex: 60,\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: 60,\n } as ViewStyle)\n : ({\n // Native: rely on the parent allowing overflow. We anchor\n // by absolute positioning relative to wherever the\n // tooltip is mounted in the tree (typically right next\n // to the trigger).\n position: 'absolute',\n top: position?.top ?? 0,\n left: position?.left ?? 0,\n } as ViewStyle);\n\n return (\n <View\n ref={(node) => {\n ctx.contentRef.current = node as unknown as HTMLDivElement | null;\n domRef.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: 'tooltip',\n id: ctx.contentId,\n // Don't soak up pointer events — hovering the tooltip\n // itself should NOT block the trigger's mouse-leave from\n // firing. Tooltips are presentational; if you need\n // interactivity, reach for Popover.\n pointerEvents: 'none',\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n className={cn('rounded-md', className)}\n style={[contentBaseStyle, positionedStyle]}\n >\n <RNText\n className=\"text-xs\"\n style={{\n color: colors.semantic.text.inverted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.tight),\n }}\n >\n {children}\n </RNText>\n </View>\n );\n};\n\n/**\n * Public `Tooltip` value — the root function plus its `.Trigger` and\n * `.Content` static members. `Object.assign` produces a value whose inferred\n * type carries the static properties, so `.d.ts` consumers can write\n * `<Tooltip.Trigger>` without a separate import.\n */\nexport const Tooltip = Object.assign(TooltipRoot, {\n Trigger: TooltipTrigger,\n Content: TooltipContent,\n});\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { Tooltip } from '../../chunk-
|
|
1
|
+
export { Tooltip } from '../../chunk-YUYYAMLE.js';
|
|
2
2
|
import '../../chunk-ZIBNLXIV.js';
|
|
3
3
|
import '../../chunk-5A2QOOVN.js';
|
|
4
|
-
import '../../chunk-
|
|
4
|
+
import '../../chunk-3W2O4OBL.js';
|
|
5
5
|
import '../../chunk-CHXHRJNZ.js';
|
|
6
6
|
import '../../chunk-WCQVDF3K.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -59,6 +59,7 @@ __name(px, "px");
|
|
|
59
59
|
var theme = {
|
|
60
60
|
color: {
|
|
61
61
|
danger: "#ef4444",
|
|
62
|
+
dangerText: "#b91c1c",
|
|
62
63
|
info: "#3b82f6",
|
|
63
64
|
neutral: {
|
|
64
65
|
"100": "#f4f4f5",
|
|
@@ -168,6 +169,7 @@ var theme = {
|
|
|
168
169
|
var themeDark = {
|
|
169
170
|
color: {
|
|
170
171
|
danger: "#ef4444",
|
|
172
|
+
dangerText: "#b91c1c",
|
|
171
173
|
info: "#3b82f6",
|
|
172
174
|
neutral: {
|
|
173
175
|
"100": "#f4f4f5",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/cn.ts","../../../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/components/Text/Text.tsx","../../../src/utils/wrap-string-children.tsx","../../../src/components/VStack/VStack.tsx"],"names":["createContext","Platform","useContext","useState","Appearance","useEffect","jsx","RNText","Children","View"],"mappings":"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","file":"index.cjs","sourcesContent":["// 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","/**\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","'use client';\n\nimport type { TextProps as RNTextProps, TextStyle } from 'react-native';\nimport { Text as RNText } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type TextVariant = 'body-xs' | 'body-sm' | 'body-md' | 'body-lg' | 'heading-1' | 'heading-2' | 'heading-3';\n\nexport type TextProps = RNTextProps & {\n variant?: TextVariant;\n className?: string;\n testID?: string;\n};\n\nconst VARIANT_CLASSES: Record<TextVariant, string> = {\n 'body-xs': 'text-xs leading-normal',\n 'body-sm': 'text-sm leading-normal',\n 'body-md': 'text-md leading-normal',\n 'body-lg': 'text-lg leading-relaxed',\n 'heading-1': 'text-4xl leading-tight font-bold',\n 'heading-2': 'text-3xl leading-tight font-semibold',\n 'heading-3': 'text-2xl leading-tight font-semibold',\n};\n\nconst HEADING_VARIANTS: Readonly<Set<TextVariant>> = new Set(['heading-1', 'heading-2', 'heading-3']);\n\n// Per-variant resolution from the active theme. Keys here name the\n// fontSize / fontWeight / lineHeight tokens the variant pulls from. The\n// fontFamily is picked separately (display for headings, body otherwise).\ntype VariantKeys = {\n fontSize: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n fontWeight: 'regular' | 'medium' | 'semibold' | 'bold';\n lineHeight: 'tight' | 'normal' | 'relaxed';\n};\nconst VARIANT_KEYS: Record<TextVariant, VariantKeys> = {\n 'body-xs': { fontSize: 'xs', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-sm': { fontSize: 'sm', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-md': { fontSize: 'md', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-lg': { fontSize: 'lg', fontWeight: 'regular', lineHeight: 'relaxed' },\n 'heading-1': { fontSize: '4xl', fontWeight: 'bold', lineHeight: 'tight' },\n 'heading-2': {\n fontSize: '3xl',\n fontWeight: 'semibold',\n lineHeight: 'tight',\n },\n 'heading-3': {\n fontSize: '2xl',\n fontWeight: 'semibold',\n lineHeight: 'tight',\n },\n};\n\n/**\n * Typography primitive. Renders a react-native <Text>; on web via RN-Web\n * it becomes a <div role=\"...\"> with the appropriate className.\n *\n * Inline style is sourced from the active `<NoriProvider theme={...}>`:\n * font family (display for headings, body for body variants), fontSize,\n * fontWeight, lineHeight all flow through. Override the whole variant by\n * passing a custom theme; override a single instance by passing `style`.\n *\n * The `className` path keeps the Tailwind dark-mode color flip — inline\n * style provides the typographic substance, className provides the color.\n */\nexport const Text = ({ variant = 'body-md', className, testID, children, ...rest }: TextProps) => {\n const colors = useThemeColors();\n const isHeading = HEADING_VARIANTS.has(variant);\n const role = isHeading ? 'header' : rest.accessibilityRole;\n\n const keys = VARIANT_KEYS[variant];\n const sizePx = px(colors.fontSize[keys.fontSize]);\n const lhMultiplier = Number(colors.lineHeight[keys.lineHeight]);\n const themedStyle: TextStyle = {\n // Inline color is the ONLY color source. The Tailwind preset uses\n // `darkMode: ['class', '[data-theme=\"dark\"]']` — that requires a\n // DOM, so on native the `dark:` variant never fires and a\n // className-only color path would always emit the LIGHT variant\n // (near-black), invisible on a dark surface. Sourcing color from\n // `useThemeColors()` means it follows the OS scheme AND honors a\n // forced `colorScheme` override on the provider.\n color: colors.semantic.text.default,\n fontFamily: isHeading ? colors.fontFamily.display : colors.fontFamily.body,\n fontSize: sizePx,\n // RN expects lineHeight in px, not unitless. Tokens carry it as a\n // ratio (1.2 / 1.4 / 1.6) — multiply against the variant fontSize.\n lineHeight: sizePx * lhMultiplier,\n // The fontWeight token returns string literals like \"500\" / \"700\"\n // which match RN's TextStyle.fontWeight enum.\n fontWeight: colors.fontWeight[keys.fontWeight] as TextStyle['fontWeight'],\n };\n\n // Caller-provided style wins (last in the array). The themed style is\n // the source of truth, the user's `style` prop the override.\n const styleProp = (rest as { style?: TextStyle | TextStyle[] }).style;\n\n return (\n <RNText\n testID={testID}\n {...rest}\n {...(role !== undefined ? { accessibilityRole: role } : {})}\n className={cn(VARIANT_CLASSES[variant], className)}\n style={[themedStyle, styleProp]}\n >\n {children}\n </RNText>\n );\n};\n","import { Children, type ReactNode } from 'react';\nimport { Text } from '../components/Text';\n\n/**\n * Walks a `ReactNode` (single, array, or fragment) and wraps every\n * string/number child in a themed `<Text>` so the same JSX renders\n * cleanly on web AND native. Non-string children are passed through\n * unchanged.\n *\n * On native, raw strings as children of any non-Text component throw\n * \"Text strings must be rendered within a <Text> component\". On web,\n * react-native-web silently tolerates them — but the rendered string\n * inherits no theme color, so dark mode never flips.\n *\n * Both bugs collapse to the same fix: wrap. Layout primitives\n * (`<HStack>`, `<VStack>`, `<Box>`) use this so consumers can write\n * `<HStack>Hello</HStack>` and have it Just Work on both platforms\n * and across light/dark mode.\n *\n * The wrapper is the lib's own `<Text>`, which reads from\n * `useThemeColors()` — so the wrapped string flips with the active\n * scheme. Importing a `'use client'` component from an RSC-safe file\n * is allowed; React's RSC model lets server components contain client\n * children.\n */\nexport function wrapStringChildren(children: ReactNode): ReactNode {\n return Children.map(children, (child) => {\n if (typeof child === 'string' || typeof child === 'number') {\n return <Text>{child}</Text>;\n }\n return child;\n });\n}\n","import type { ViewProps, ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { cn } from '../../utils/cn';\nimport { wrapStringChildren } from '../../utils/wrap-string-children';\nimport type { StackAlign, StackGap, StackJustify } from '../HStack/HStack';\n\nexport type VStackProps = ViewProps & {\n gap?: StackGap;\n align?: StackAlign;\n justify?: StackJustify;\n className?: string;\n testID?: string;\n};\n\nconst ALIGN_CLASS: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n};\n\nconst JUSTIFY_CLASS: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n};\n\nconst ALIGN_STYLE: Record<StackAlign, ViewStyle['alignItems']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY_STYLE: Record<StackJustify, ViewStyle['justifyContent']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\n\nconst GAP_PX: Record<StackGap, number> = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 48,\n};\n\n/**\n * Vertical flex layout primitive. RSC-safe.\n *\n * Layout is driven by inline style; see HStack for the rationale.\n */\nexport const VStack = ({ gap, align, justify, className, children, style, ...rest }: VStackProps) => {\n const inline: ViewStyle = { flexDirection: 'column' };\n if (gap !== undefined && gap !== 0) {\n inline.gap = GAP_PX[gap];\n }\n if (align !== undefined) {\n inline.alignItems = ALIGN_STYLE[align];\n }\n if (justify !== undefined) {\n inline.justifyContent = JUSTIFY_STYLE[justify];\n }\n const merged = style === undefined ? inline : ([inline, style] as ViewStyle[]);\n return (\n <View\n {...rest}\n style={merged}\n className={cn(\n 'flex-col',\n gap !== undefined && gap !== 0 ? `gap-${gap}` : undefined,\n align !== undefined ? ALIGN_CLASS[align] : undefined,\n justify !== undefined ? JUSTIFY_CLASS[justify] : undefined,\n className\n )}\n >\n {wrapStringChildren(children)}\n </View>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/cn.ts","../../../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/components/Text/Text.tsx","../../../src/utils/wrap-string-children.tsx","../../../src/components/VStack/VStack.tsx"],"names":["createContext","Platform","useContext","useState","Appearance","useEffect","jsx","RNText","Children","View"],"mappings":"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","file":"index.cjs","sourcesContent":["// 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","/**\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","'use client';\n\nimport type { TextProps as RNTextProps, TextStyle } from 'react-native';\nimport { Text as RNText } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type TextVariant = 'body-xs' | 'body-sm' | 'body-md' | 'body-lg' | 'heading-1' | 'heading-2' | 'heading-3';\n\nexport type TextProps = RNTextProps & {\n variant?: TextVariant;\n className?: string;\n testID?: string;\n};\n\nconst VARIANT_CLASSES: Record<TextVariant, string> = {\n 'body-xs': 'text-xs leading-normal',\n 'body-sm': 'text-sm leading-normal',\n 'body-md': 'text-md leading-normal',\n 'body-lg': 'text-lg leading-relaxed',\n 'heading-1': 'text-4xl leading-tight font-bold',\n 'heading-2': 'text-3xl leading-tight font-semibold',\n 'heading-3': 'text-2xl leading-tight font-semibold',\n};\n\nconst HEADING_VARIANTS: Readonly<Set<TextVariant>> = new Set(['heading-1', 'heading-2', 'heading-3']);\n\n// Per-variant resolution from the active theme. Keys here name the\n// fontSize / fontWeight / lineHeight tokens the variant pulls from. The\n// fontFamily is picked separately (display for headings, body otherwise).\ntype VariantKeys = {\n fontSize: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n fontWeight: 'regular' | 'medium' | 'semibold' | 'bold';\n lineHeight: 'tight' | 'normal' | 'relaxed';\n};\nconst VARIANT_KEYS: Record<TextVariant, VariantKeys> = {\n 'body-xs': { fontSize: 'xs', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-sm': { fontSize: 'sm', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-md': { fontSize: 'md', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-lg': { fontSize: 'lg', fontWeight: 'regular', lineHeight: 'relaxed' },\n 'heading-1': { fontSize: '4xl', fontWeight: 'bold', lineHeight: 'tight' },\n 'heading-2': {\n fontSize: '3xl',\n fontWeight: 'semibold',\n lineHeight: 'tight',\n },\n 'heading-3': {\n fontSize: '2xl',\n fontWeight: 'semibold',\n lineHeight: 'tight',\n },\n};\n\n/**\n * Typography primitive. Renders a react-native <Text>; on web via RN-Web\n * it becomes a <div role=\"...\"> with the appropriate className.\n *\n * Inline style is sourced from the active `<NoriProvider theme={...}>`:\n * font family (display for headings, body for body variants), fontSize,\n * fontWeight, lineHeight all flow through. Override the whole variant by\n * passing a custom theme; override a single instance by passing `style`.\n *\n * The `className` path keeps the Tailwind dark-mode color flip — inline\n * style provides the typographic substance, className provides the color.\n */\nexport const Text = ({ variant = 'body-md', className, testID, children, ...rest }: TextProps) => {\n const colors = useThemeColors();\n const isHeading = HEADING_VARIANTS.has(variant);\n const role = isHeading ? 'header' : rest.accessibilityRole;\n\n const keys = VARIANT_KEYS[variant];\n const sizePx = px(colors.fontSize[keys.fontSize]);\n const lhMultiplier = Number(colors.lineHeight[keys.lineHeight]);\n const themedStyle: TextStyle = {\n // Inline color is the ONLY color source. The Tailwind preset uses\n // `darkMode: ['class', '[data-theme=\"dark\"]']` — that requires a\n // DOM, so on native the `dark:` variant never fires and a\n // className-only color path would always emit the LIGHT variant\n // (near-black), invisible on a dark surface. Sourcing color from\n // `useThemeColors()` means it follows the OS scheme AND honors a\n // forced `colorScheme` override on the provider.\n color: colors.semantic.text.default,\n fontFamily: isHeading ? colors.fontFamily.display : colors.fontFamily.body,\n fontSize: sizePx,\n // RN expects lineHeight in px, not unitless. Tokens carry it as a\n // ratio (1.2 / 1.4 / 1.6) — multiply against the variant fontSize.\n lineHeight: sizePx * lhMultiplier,\n // The fontWeight token returns string literals like \"500\" / \"700\"\n // which match RN's TextStyle.fontWeight enum.\n fontWeight: colors.fontWeight[keys.fontWeight] as TextStyle['fontWeight'],\n };\n\n // Caller-provided style wins (last in the array). The themed style is\n // the source of truth, the user's `style` prop the override.\n const styleProp = (rest as { style?: TextStyle | TextStyle[] }).style;\n\n return (\n <RNText\n testID={testID}\n {...rest}\n {...(role !== undefined ? { accessibilityRole: role } : {})}\n className={cn(VARIANT_CLASSES[variant], className)}\n style={[themedStyle, styleProp]}\n >\n {children}\n </RNText>\n );\n};\n","import { Children, type ReactNode } from 'react';\nimport { Text } from '../components/Text';\n\n/**\n * Walks a `ReactNode` (single, array, or fragment) and wraps every\n * string/number child in a themed `<Text>` so the same JSX renders\n * cleanly on web AND native. Non-string children are passed through\n * unchanged.\n *\n * On native, raw strings as children of any non-Text component throw\n * \"Text strings must be rendered within a <Text> component\". On web,\n * react-native-web silently tolerates them — but the rendered string\n * inherits no theme color, so dark mode never flips.\n *\n * Both bugs collapse to the same fix: wrap. Layout primitives\n * (`<HStack>`, `<VStack>`, `<Box>`) use this so consumers can write\n * `<HStack>Hello</HStack>` and have it Just Work on both platforms\n * and across light/dark mode.\n *\n * The wrapper is the lib's own `<Text>`, which reads from\n * `useThemeColors()` — so the wrapped string flips with the active\n * scheme. Importing a `'use client'` component from an RSC-safe file\n * is allowed; React's RSC model lets server components contain client\n * children.\n */\nexport function wrapStringChildren(children: ReactNode): ReactNode {\n return Children.map(children, (child) => {\n if (typeof child === 'string' || typeof child === 'number') {\n return <Text>{child}</Text>;\n }\n return child;\n });\n}\n","import type { ViewProps, ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { cn } from '../../utils/cn';\nimport { wrapStringChildren } from '../../utils/wrap-string-children';\nimport type { StackAlign, StackGap, StackJustify } from '../HStack/HStack';\n\nexport type VStackProps = ViewProps & {\n gap?: StackGap;\n align?: StackAlign;\n justify?: StackJustify;\n className?: string;\n testID?: string;\n};\n\nconst ALIGN_CLASS: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n};\n\nconst JUSTIFY_CLASS: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n};\n\nconst ALIGN_STYLE: Record<StackAlign, ViewStyle['alignItems']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY_STYLE: Record<StackJustify, ViewStyle['justifyContent']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\n\nconst GAP_PX: Record<StackGap, number> = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 48,\n};\n\n/**\n * Vertical flex layout primitive. RSC-safe.\n *\n * Layout is driven by inline style; see HStack for the rationale.\n */\nexport const VStack = ({ gap, align, justify, className, children, style, ...rest }: VStackProps) => {\n const inline: ViewStyle = { flexDirection: 'column' };\n if (gap !== undefined && gap !== 0) {\n inline.gap = GAP_PX[gap];\n }\n if (align !== undefined) {\n inline.alignItems = ALIGN_STYLE[align];\n }\n if (justify !== undefined) {\n inline.justifyContent = JUSTIFY_STYLE[justify];\n }\n const merged = style === undefined ? inline : ([inline, style] as ViewStyle[]);\n return (\n <View\n {...rest}\n style={merged}\n className={cn(\n 'flex-col',\n gap !== undefined && gap !== 0 ? `gap-${gap}` : undefined,\n align !== undefined ? ALIGN_CLASS[align] : undefined,\n justify !== undefined ? JUSTIFY_CLASS[justify] : undefined,\n className\n )}\n >\n {wrapStringChildren(children)}\n </View>\n );\n};\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { VStack } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
1
|
+
export { VStack } from '../../chunk-BJARVBFN.js';
|
|
2
|
+
import '../../chunk-EMU3GXKM.js';
|
|
3
|
+
import '../../chunk-57AVXG7D.js';
|
|
4
4
|
import '../../chunk-5A2QOOVN.js';
|
|
5
|
-
import '../../chunk-
|
|
5
|
+
import '../../chunk-3W2O4OBL.js';
|
|
6
6
|
import '../../chunk-CHXHRJNZ.js';
|
|
7
7
|
import '../../chunk-WCQVDF3K.js';
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
package/dist/icons/index.cjs
CHANGED
|
@@ -11,6 +11,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
11
11
|
var theme = {
|
|
12
12
|
color: {
|
|
13
13
|
danger: "#ef4444",
|
|
14
|
+
dangerText: "#b91c1c",
|
|
14
15
|
info: "#3b82f6",
|
|
15
16
|
neutral: {
|
|
16
17
|
"100": "#f4f4f5",
|
|
@@ -120,6 +121,7 @@ var theme = {
|
|
|
120
121
|
var themeDark = {
|
|
121
122
|
color: {
|
|
122
123
|
danger: "#ef4444",
|
|
124
|
+
dangerText: "#b91c1c",
|
|
123
125
|
info: "#3b82f6",
|
|
124
126
|
neutral: {
|
|
125
127
|
"100": "#f4f4f5",
|