@nori-ui/core 1.0.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-2UXKXUX2.js +286 -0
- package/dist/chunk-2UXKXUX2.js.map +1 -0
- package/dist/{chunk-DDGMLLS3.js → chunk-46OT4PA6.js} +3 -3
- package/dist/{chunk-DDGMLLS3.js.map → chunk-46OT4PA6.js.map} +1 -1
- package/dist/{chunk-SFNDR6DI.js → chunk-5BM6H2CD.js} +3 -3
- package/dist/{chunk-SFNDR6DI.js.map → chunk-5BM6H2CD.js.map} +1 -1
- package/dist/{chunk-EWWQQ5DB.js → chunk-6JVUVBZH.js} +5 -5
- package/dist/{chunk-EWWQQ5DB.js.map → chunk-6JVUVBZH.js.map} +1 -1
- package/dist/{chunk-FT2XBBQJ.js → chunk-6PO2IWB3.js} +8 -5
- package/dist/chunk-6PO2IWB3.js.map +1 -0
- package/dist/{chunk-YNKKEO2A.js → chunk-7D2BHQ6M.js} +3 -3
- package/dist/{chunk-YNKKEO2A.js.map → chunk-7D2BHQ6M.js.map} +1 -1
- package/dist/{chunk-MRJWPRCX.js → chunk-AFQIK6JI.js} +3 -3
- package/dist/{chunk-MRJWPRCX.js.map → chunk-AFQIK6JI.js.map} +1 -1
- package/dist/{chunk-IKLA2CVQ.js → chunk-C6TRLHMW.js} +21 -5
- package/dist/chunk-C6TRLHMW.js.map +1 -0
- package/dist/{chunk-NRYWNOG5.js → chunk-CGQIVFCN.js} +3 -3
- package/dist/{chunk-NRYWNOG5.js.map → chunk-CGQIVFCN.js.map} +1 -1
- package/dist/chunk-EFK7726V.js +104 -0
- package/dist/chunk-EFK7726V.js.map +1 -0
- package/dist/{chunk-3BDDPFCI.js → chunk-FDBQOQMW.js} +3 -3
- package/dist/{chunk-3BDDPFCI.js.map → chunk-FDBQOQMW.js.map} +1 -1
- package/dist/{chunk-XALU6LOT.js → chunk-GELLSU64.js} +3 -3
- package/dist/{chunk-XALU6LOT.js.map → chunk-GELLSU64.js.map} +1 -1
- package/dist/{chunk-BZLT6R62.js → chunk-GRDVE3IR.js} +3 -3
- package/dist/{chunk-BZLT6R62.js.map → chunk-GRDVE3IR.js.map} +1 -1
- package/dist/{chunk-OMU4R4Y5.js → chunk-HTF6FDB6.js} +3 -3
- package/dist/{chunk-OMU4R4Y5.js.map → chunk-HTF6FDB6.js.map} +1 -1
- package/dist/{chunk-X7APG7G2.js → chunk-HZKXPN6B.js} +154 -34
- package/dist/chunk-HZKXPN6B.js.map +1 -0
- package/dist/{chunk-WGT345SV.js → chunk-IGLMPAWE.js} +3 -3
- package/dist/{chunk-WGT345SV.js.map → chunk-IGLMPAWE.js.map} +1 -1
- package/dist/{chunk-5XEGZFG5.js → chunk-LWQZ257T.js} +3 -3
- package/dist/{chunk-5XEGZFG5.js.map → chunk-LWQZ257T.js.map} +1 -1
- package/dist/{chunk-RFW5SRZA.js → chunk-MJ4AGXS7.js} +3 -3
- package/dist/{chunk-RFW5SRZA.js.map → chunk-MJ4AGXS7.js.map} +1 -1
- package/dist/{chunk-PNP7L4TA.js → chunk-RM5TSXVE.js} +3 -3
- package/dist/{chunk-PNP7L4TA.js.map → chunk-RM5TSXVE.js.map} +1 -1
- package/dist/{chunk-MKSDYRWQ.js → chunk-SINLREQV.js} +3 -3
- package/dist/{chunk-MKSDYRWQ.js.map → chunk-SINLREQV.js.map} +1 -1
- package/dist/{chunk-TLS54G6Y.js → chunk-UF5OENHV.js} +3 -3
- package/dist/{chunk-TLS54G6Y.js.map → chunk-UF5OENHV.js.map} +1 -1
- package/dist/{chunk-ZQMNGPLE.js → chunk-UJ5KFRDE.js} +18 -6
- package/dist/chunk-UJ5KFRDE.js.map +1 -0
- package/dist/{chunk-SWC5CNKE.js → chunk-UPVNZPFV.js} +3 -3
- package/dist/{chunk-SWC5CNKE.js.map → chunk-UPVNZPFV.js.map} +1 -1
- package/dist/{chunk-3F4TXKDY.js → chunk-UUXWRDWW.js} +3 -3
- package/dist/chunk-UUXWRDWW.js.map +1 -0
- package/dist/{chunk-7GPDNQSX.js → chunk-V2AWSDDZ.js} +5 -5
- package/dist/{chunk-7GPDNQSX.js.map → chunk-V2AWSDDZ.js.map} +1 -1
- package/dist/{chunk-JQQ3FBN7.js → chunk-VCJF75T2.js} +3 -3
- package/dist/{chunk-JQQ3FBN7.js.map → chunk-VCJF75T2.js.map} +1 -1
- package/dist/{chunk-ZBW3BA5R.js → chunk-VMAGFYHG.js} +39 -4
- package/dist/chunk-VMAGFYHG.js.map +1 -0
- package/dist/{chunk-JZ774T7U.js → chunk-W3HMOOON.js} +3 -3
- package/dist/{chunk-JZ774T7U.js.map → chunk-W3HMOOON.js.map} +1 -1
- package/dist/{chunk-6AD6KCVB.js → chunk-WAKKQROH.js} +3 -3
- package/dist/{chunk-6AD6KCVB.js.map → chunk-WAKKQROH.js.map} +1 -1
- package/dist/{chunk-LVWNMQGR.js → chunk-WDNDTSNX.js} +5 -5
- package/dist/{chunk-LVWNMQGR.js.map → chunk-WDNDTSNX.js.map} +1 -1
- package/dist/chunk-WOF67PKT.js +60 -0
- package/dist/chunk-WOF67PKT.js.map +1 -0
- package/dist/{chunk-QJNV7YQP.js → chunk-WTNDPO2V.js} +39 -4
- package/dist/chunk-WTNDPO2V.js.map +1 -0
- package/dist/{chunk-FEPTH5RV.js → chunk-XP55RZ3D.js} +3 -3
- package/dist/{chunk-FEPTH5RV.js.map → chunk-XP55RZ3D.js.map} +1 -1
- package/dist/{chunk-CCUXO2HN.js → chunk-Y4ZRSW35.js} +3 -3
- package/dist/{chunk-CCUXO2HN.js.map → chunk-Y4ZRSW35.js.map} +1 -1
- package/dist/client.cjs +619 -123
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +2 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.js +40 -38
- package/dist/client.js.map +1 -1
- package/dist/components/Accordion/index.js +2 -2
- package/dist/components/Alert/index.js +2 -2
- package/dist/components/AlertDialog/index.js +2 -2
- package/dist/components/Avatar/index.js +2 -2
- package/dist/components/Badge/index.js +2 -2
- package/dist/components/Box/index.js +4 -4
- package/dist/components/Breadcrumb/index.cjs +6 -3
- package/dist/components/Breadcrumb/index.cjs.map +1 -1
- package/dist/components/Breadcrumb/index.js +5 -5
- package/dist/components/Button/index.js +2 -2
- package/dist/components/Calendar/index.cjs +170 -35
- package/dist/components/Calendar/index.cjs.map +1 -1
- package/dist/components/Calendar/index.js +5 -5
- package/dist/components/Card/index.js +2 -2
- package/dist/components/Checkbox/index.cjs +36 -1
- package/dist/components/Checkbox/index.cjs.map +1 -1
- package/dist/components/Checkbox/index.d.cts +17 -1
- package/dist/components/Checkbox/index.d.ts +17 -1
- package/dist/components/Checkbox/index.js +2 -2
- package/dist/components/Dialog/index.js +2 -2
- package/dist/components/Field/index.cjs +703 -0
- package/dist/components/Field/index.cjs.map +1 -0
- package/dist/components/Field/index.d.cts +51 -0
- package/dist/components/Field/index.d.ts +51 -0
- package/dist/components/Field/index.js +9 -0
- package/dist/components/Field/index.js.map +1 -0
- package/dist/components/FloatButton/index.cjs +6 -3
- package/dist/components/FloatButton/index.cjs.map +1 -1
- package/dist/components/FloatButton/index.js +5 -5
- package/dist/components/HStack/index.js +4 -4
- package/dist/components/InputGroup/index.cjs.map +1 -1
- package/dist/components/InputGroup/index.d.cts +8 -1
- package/dist/components/InputGroup/index.d.ts +8 -1
- package/dist/components/InputGroup/index.js +2 -2
- package/dist/components/Label/index.cjs +458 -0
- package/dist/components/Label/index.cjs.map +1 -0
- package/dist/components/Label/index.d.cts +14 -0
- package/dist/components/Label/index.d.ts +14 -0
- package/dist/components/Label/index.js +8 -0
- package/dist/components/Label/index.js.map +1 -0
- package/dist/components/Pagination/index.cjs +21 -6
- package/dist/components/Pagination/index.cjs.map +1 -1
- package/dist/components/Pagination/index.js +5 -5
- package/dist/components/Popover/index.js +2 -2
- package/dist/components/Progress/index.js +2 -2
- package/dist/components/Radio/index.cjs +18 -2
- package/dist/components/Radio/index.cjs.map +1 -1
- package/dist/components/Radio/index.d.cts +17 -1
- package/dist/components/Radio/index.d.ts +17 -1
- package/dist/components/Radio/index.js +2 -2
- package/dist/components/SegmentedControl/index.js +2 -2
- package/dist/components/Select/index.cjs +15 -3
- package/dist/components/Select/index.cjs.map +1 -1
- package/dist/components/Select/index.d.cts +6 -0
- package/dist/components/Select/index.d.ts +6 -0
- package/dist/components/Select/index.js +2 -2
- package/dist/components/Switch/index.cjs +36 -1
- package/dist/components/Switch/index.cjs.map +1 -1
- package/dist/components/Switch/index.d.cts +17 -1
- package/dist/components/Switch/index.d.ts +17 -1
- package/dist/components/Switch/index.js +2 -2
- package/dist/components/Tabs/index.js +2 -2
- package/dist/components/Text/index.js +2 -2
- package/dist/components/TextArea/index.cjs +35 -84
- package/dist/components/TextArea/index.cjs.map +1 -1
- package/dist/components/TextArea/index.js +3 -3
- package/dist/components/TextInput/index.cjs +35 -84
- package/dist/components/TextInput/index.cjs.map +1 -1
- package/dist/components/TextInput/index.d.cts +7 -8
- package/dist/components/TextInput/index.d.ts +7 -8
- package/dist/components/TextInput/index.js +2 -2
- package/dist/components/Toggle/index.js +2 -2
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/components/VStack/index.js +4 -4
- package/dist/i18n/index.cjs +6 -3
- package/dist/i18n/index.cjs.map +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/index.cjs +619 -123
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +37 -35
- package/package.json +8 -1
- package/dist/chunk-3F4TXKDY.js.map +0 -1
- package/dist/chunk-FT2XBBQJ.js.map +0 -1
- package/dist/chunk-IKLA2CVQ.js.map +0 -1
- package/dist/chunk-QJNV7YQP.js.map +0 -1
- package/dist/chunk-X7APG7G2.js.map +0 -1
- package/dist/chunk-ZBW3BA5R.js.map +0 -1
- package/dist/chunk-ZQMNGPLE.js.map +0 -1
- package/dist/chunk-ZRD4FQBT.js +0 -153
- package/dist/chunk-ZRD4FQBT.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../node_modules/react-native-safe-area-context/SafeAreaContext.tsx","../../../src/i18n/default-dictionary.ts","../../../src/i18n/resolve.ts","../../../src/i18n/context.tsx","../../../src/i18n/use-translation.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/icons/default-semantic-icons.tsx","../../../src/theme/px.ts","../../../src/utils/cn.ts","../../../src/components/Badge/Badge.tsx","../../../src/components/FloatButton/FloatButton.tsx"],"names":["isDev","process","env","NODE_ENV","SafeAreaInsetsContext","createContext","displayName","SafeAreaFrameContext","StyleSheet","create","fill","flex","Consumer","useContext","Platform","useState","Appearance","useEffect","isWeb","jsx","RNText","View","useWindowDimensions","useRef","useCallback","useMemo","jsxs","Fragment","Pressable","isValidElement","cloneElement"],"mappings":"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","file":"index.cjs","sourcesContent":[null,"import type { Dictionary } from './types';\n\n/**\n * Default English strings used by library components.\n *\n * Key naming convention:\n * <component>.<purpose>[_plural-form]\n *\n * Plural suffixes follow i18next: `_zero`, `_one`, `_two`, `_few`, `_many`, `_other`.\n * Interpolation uses `{{name}}` — double braces, no spaces, by convention.\n */\nexport const defaultDictionary: Dictionary = {\n // generic / shared\n 'common.cancel': 'Cancel',\n 'common.confirm': 'Confirm',\n 'common.close': 'Close',\n 'common.back': 'Back',\n 'common.loading': 'Loading',\n 'common.error': 'Something went wrong',\n 'common.retry': 'Try again',\n\n // breadcrumb\n 'breadcrumb.ariaLabel': 'Breadcrumb',\n 'breadcrumb.expandLabel': 'Show full path',\n 'breadcrumb.ellipsisLabel': 'More',\n 'breadcrumb.currentPageLabel': 'Current page',\n 'breadcrumb.siblingMenuLabel': 'Open sibling pages',\n\n // pagination\n 'pagination.ariaLabel': 'Pagination',\n 'pagination.previous': 'Previous page',\n 'pagination.next': 'Next page',\n 'pagination.first': 'First page',\n 'pagination.last': 'Last page',\n 'pagination.ellipsis': 'More pages',\n 'pagination.currentPage': 'Current page',\n 'pagination.gotoPage': 'Go to page {{page}}',\n 'pagination.range': 'Showing {{from}}–{{to}} of {{total}}',\n 'pagination.pageOf': 'Page {{page}} of {{total}}',\n 'pagination.pageSizeLabel': 'Items per page',\n 'pagination.jumperLabel': 'Go to page',\n 'pagination.jumperPlaceholder': '#',\n\n // floatButton\n 'floatButton.backToTop': 'Back to top',\n\n // calendar\n 'calendar.header.previous': 'Previous',\n 'calendar.header.next': 'Next',\n 'calendar.header.openMonthView': 'Open month picker',\n 'calendar.header.openYearView': 'Open year picker',\n 'calendar.header.openDayView': 'Open day picker',\n 'calendar.today': 'Today',\n 'calendar.clear': 'Clear',\n\n // button\n 'button.loadingLabel': 'Loading',\n\n // input\n 'input.clear': 'Clear',\n 'input.passwordShow': 'Show password',\n 'input.passwordHide': 'Hide password',\n\n // checkbox / switch\n 'checkbox.checked': 'Checked',\n 'checkbox.unchecked': 'Unchecked',\n 'switch.on': 'On',\n 'switch.off': 'Off',\n};\n","import type { Dictionary, I18nInput, I18nOptions, TranslateFn } from './types';\n\n/**\n * Normalizes the consumer's i18n input (undefined | dictionary | function) into a\n * uniform TranslateFn. Internal code only calls the returned function.\n *\n * Precedence for a given key lookup:\n * 1. consumer function (if provided) — called verbatim, no further fallback\n * 2. consumer dictionary (if provided)\n * 3. library defaults\n * 4. options.defaultValue\n * 5. the key itself (so missing strings are visible in dev, not silent)\n */\nexport function resolveI18n(input: I18nInput, defaults: Dictionary): TranslateFn {\n if (typeof input === 'function') {\n // Wrap so the consumer fn is always invoked with (key, options) — enables\n // Jest `toHaveBeenCalledWith(key, undefined)` assertions and mirrors i18next's\n // own call signature exactly.\n return (keyOrKeys, options) => input(keyOrKeys, options);\n }\n\n const dict = input ?? {};\n\n return (keyOrKeys, options) => {\n const keys = Array.isArray(keyOrKeys) ? keyOrKeys : [keyOrKeys];\n for (const rawKey of keys) {\n const key = pluralize(rawKey, options?.count);\n const template = dict[key] ?? defaults[key];\n if (template !== undefined) {\n return interpolate(template, options);\n }\n }\n // exhausted the key list\n const lastKey = keys[keys.length - 1];\n if (options?.defaultValue !== undefined) {\n return interpolate(options.defaultValue, options);\n }\n return lastKey ?? '';\n };\n}\n\nfunction pluralize(key: string, count: number | undefined): string {\n if (count === undefined) {\n return key;\n }\n // Minimal English pluralization — extend with ICU rules later if needed.\n if (count === 1) {\n return `${key}_one`;\n }\n return `${key}_other`;\n}\n\nfunction interpolate(template: string, options: I18nOptions | undefined): string {\n if (!options) {\n return template;\n }\n return template.replace(/\\{\\{\\s*([A-Za-z0-9_.-]+)\\s*\\}\\}/g, (_match, name: string) => {\n const value = options[name];\n return value === undefined || value === null ? '' : String(value);\n });\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext, useMemo } from 'react';\nimport { defaultDictionary } from './default-dictionary';\nimport { resolveI18n } from './resolve';\nimport type { I18nInput, TranslateFn } from './types';\n\nexport type I18nContextValue = {\n t: TranslateFn;\n};\n\n// Default context value uses the built-in English dictionary; consumers without\n// a provider still get a working t().\nconst defaultValue: I18nContextValue = {\n t: resolveI18n(undefined, defaultDictionary),\n};\n\nexport const I18nContext = createContext<I18nContextValue>(defaultValue);\nI18nContext.displayName = 'I18nContext';\n\nexport type I18nProviderProps = {\n i18n?: I18nInput;\n children?: ReactNode;\n};\n\nexport function I18nProvider({ i18n, children }: I18nProviderProps) {\n const value = useMemo<I18nContextValue>(() => ({ t: resolveI18n(i18n, defaultDictionary) }), [i18n]);\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n","'use client';\n\nimport { useContext } from 'react';\nimport { I18nContext, type I18nContextValue } from './context';\n\nexport function useTranslation(): I18nContextValue {\n return useContext(I18nContext);\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#fafafa\",\n elevated: \"#ffffff\",\n subtle: \"#f4f4f5\",\n },\n border: {\n default: \"#e4e4e7\",\n strong: \"#d4d4d8\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#0d9488\",\n primaryHover: \"#0f766e\",\n primaryPressed: \"#115e59\",\n },\n text: {\n default: \"#18181b\",\n inverted: \"#fafafa\",\n muted: \"#52525b\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n\n// Dark mode overrides\n// Generated for dark mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const themeDark = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#18181b\",\n elevated: \"#3f3f46\",\n subtle: \"#27272a\",\n },\n border: {\n default: \"#3f3f46\",\n strong: \"#52525b\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#2dd4bf\",\n primaryHover: \"#5eead4\",\n primaryPressed: \"#99f6e4\",\n },\n text: {\n default: \"#fafafa\",\n inverted: \"#18181b\",\n muted: \"#a1a1aa\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\n","'use client';\n\nimport { themeDark as defaultDark, theme as defaultLight, type Theme } from '@nori-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\n\n/**\n * A `NoriTheme` is a paired light/dark palette. The active half is picked\n * by `useColorScheme()` so the same theme object covers both schemes.\n *\n * Build one yourself by spreading the defaults and overriding the colors\n * you care about, or pick a preset from `@nori-ui/core/themes` (see the\n * Theming docs for examples).\n */\nexport type NoriTheme = {\n light: Theme;\n dark: Theme;\n};\n\n/**\n * Default Nori palette — teal primary on a warm-paper light surface, and\n * teal-400 primary on a deep-zinc dark surface. Mirrors the `theme` /\n * `themeDark` exports from @nori-ui/tokens.\n */\nexport const defaultTheme: NoriTheme = {\n light: defaultLight,\n dark: defaultDark as unknown as Theme,\n};\n\n// Context value is the FULL pair, not the active half. `useThemeColors`\n// (the hook components reach for) resolves it to the right one based on\n// the current color scheme. Storing the pair means a parent only has to\n// declare the theme once — switching scheme is a separate concern.\nexport const ThemeContext = createContext<NoriTheme>(defaultTheme);\nThemeContext.displayName = 'ThemeContext';\n\nexport type ThemeProviderProps = {\n /**\n * The theme to apply to descendants. Pass either:\n * - a full `NoriTheme` (`{ light, dark }`) — both schemes covered\n * - a single `Theme` — used for both light and dark (rare; mostly\n * useful when you ONLY ever render in one scheme)\n * - omit — falls back to the Nori default (teal palette)\n */\n theme?: NoriTheme | Theme;\n children?: ReactNode;\n};\n\nconst isFullTheme = (t: NoriTheme | Theme): t is NoriTheme => 'light' in t && 'dark' in t;\n\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const value: NoriTheme =\n theme === undefined ? defaultTheme : isFullTheme(theme) ? theme : { light: theme, dark: theme };\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n","'use client';\n\nimport { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\nimport { Appearance, Platform } from 'react-native';\n\nexport type ColorScheme = 'light' | 'dark';\n\n// Override channel so a parent can force a scheme (e.g. an app shell with\n// hard-coded dark chrome that wants nested components to render against\n// the dark token half regardless of the OS Appearance). `null` means\n// \"no override — use the system signal\".\nconst ColorSchemeOverrideContext = createContext<ColorScheme | null>(null);\nColorSchemeOverrideContext.displayName = 'ColorSchemeOverrideContext';\n\nexport type ColorSchemeProviderProps = {\n /** Force a specific scheme for descendants. */\n value: ColorScheme;\n children?: ReactNode;\n};\n\n/**\n * Forces a color scheme for all descendants. Useful when a screen's chrome\n * is hard-coded to one scheme (e.g. a forced-dark editorial surface) and\n * you want library components inside it to follow that, not the OS.\n */\nexport function ColorSchemeProvider({ value, children }: ColorSchemeProviderProps) {\n return <ColorSchemeOverrideContext.Provider value={value}>{children}</ColorSchemeOverrideContext.Provider>;\n}\n\nconst isWeb = Platform.OS === 'web';\n\n// Web: a document is \"in dark mode\" when the root <html> element carries\n// the `dark` class (Tailwind / Fumadocs convention) OR a `data-theme=\"dark\"`\n// attribute (matches the `darkMode` selectors in our Tailwind preset).\n// We deliberately don't fall back to `prefers-color-scheme` — the app\n// usually owns that decision and writes it onto <html>; tracking the system\n// preference too would fight the app's chosen value.\nfunction readWebScheme(): ColorScheme {\n if (typeof document === 'undefined') {\n return 'light';\n }\n const root = document.documentElement;\n if (root.classList.contains('dark')) {\n return 'dark';\n }\n if (root.getAttribute('data-theme') === 'dark') {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Returns the current color scheme — `'light'` or `'dark'`.\n *\n * On web: observes the root `<html>` element's `class=\"dark\"` and\n * `data-theme=\"dark\"` attribute (the same signals our Tailwind preset\n * keys on). Updates live as those flip.\n *\n * On native: delegates to `react-native`'s `Appearance` API so the hook\n * tracks the OS preference without extra wiring.\n *\n * Components consume this indirectly via `useThemeColors()`; reach for\n * this directly when you need the raw scheme (e.g. to swap an icon).\n */\nexport function useColorScheme(): ColorScheme {\n // A `<ColorSchemeProvider value=\"dark\">` ancestor (or NoriProvider's\n // `colorScheme` prop, which mounts one) wins over the OS signal — the\n // app shell knows which scheme its chrome is locked to.\n const override = useContext(ColorSchemeOverrideContext);\n\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (isWeb) {\n return readWebScheme();\n }\n return (Appearance.getColorScheme() ?? 'light') as ColorScheme;\n });\n\n useEffect(() => {\n if (isWeb) {\n const root = document.documentElement;\n const update = () => setScheme(readWebScheme());\n const observer = new MutationObserver(update);\n observer.observe(root, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n // Sync once after mount in case SSR shipped a different value.\n update();\n return () => observer.disconnect();\n }\n\n const sub = Appearance.addChangeListener(({ colorScheme }) => {\n setScheme((colorScheme ?? 'light') as ColorScheme);\n });\n return () => sub.remove();\n }, []);\n\n return override ?? scheme;\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport { useContext } from 'react';\nimport { ThemeContext } from './context';\nimport { useColorScheme } from './use-color-scheme';\n\n/**\n * Returns the active token palette — `theme.light` in light mode,\n * `theme.dark` in dark mode. Resolves the theme via `ThemeContext` so\n * any ancestor `<ThemeProvider theme={...}>` flows through. With no\n * provider in the tree, the default Nori palette (teal) is used.\n *\n * Use this **inside a component** when you need a hex value for a React\n * Native `style` prop (`backgroundColor`, `borderColor`, etc.).\n *\n * Note: className-based styles (e.g. `bg-semantic-interactive-primary`)\n * compile against the @nori-ui/tokens palette at build time and don't\n * follow `<ThemeProvider>` overrides today. Inline styles via this hook\n * always do — and inline beats class on CSS specificity, so the visible\n * color you see is whatever the hook resolves to. CSS-variable theming\n * for the className path is a planned follow-up.\n */\nexport function useThemeColors(): Theme {\n const scheme = useColorScheme();\n const themePair = useContext(ThemeContext);\n return scheme === 'dark' ? themePair.dark : themePair.light;\n}\n","'use client';\n\n// default-semantic-icons — minimal built-in icon placeholders for internal\n// library glyphs. Consumers can swap each one via the provider:\n//\n// <NoriProvider icons={{ checkmark: MyCheck, close: MyX }}>\n//\n// These defaults exist so the library renders usable UI out of the box even\n// when lucide-react(-native) or any other icon set is not installed. They are\n// NOT intended to compete with Lucide on style — override them in production.\n//\n// Web ships an SVG path identical to the historical lucide-style stroke. Native\n// ships a Unicode glyph wrapped in `<Text>` because raw `<svg><path>` doesn't\n// exist on the React Native runtime — the renderer treats lowercase host names\n// as native components and crashes with \"View config getter callback for\n// component `path` must be a function\". `react-native-svg` would solve this\n// but it's an extra peer dep this library deliberately doesn't require.\n//\n// Marked `'use client'` because the native render path reads\n// `useThemeColors()` to default the glyph color to the active theme's\n// text token when no explicit color is passed. Without this the native\n// glyph would render in RNText's default (black) regardless of scheme.\n\nimport type { ComponentType } from 'react';\nimport { Platform, Text as RNText } from 'react-native';\nimport { useThemeColors } from '../theme/use-theme-colors';\nimport type { IconComponentProps } from './icon';\n\ntype SemanticIcon = ComponentType<IconComponentProps>;\n\ntype IconRecipe = {\n /** SVG `path` data — used on the web. */\n path: string;\n /** Unicode glyph rendered in `<Text>` on native. */\n glyph: string;\n};\n\nconst isWeb = Platform.OS === 'web';\n\nconst make = ({ path, glyph }: IconRecipe): SemanticIcon =>\n function PlaceholderIcon({ size = 20, color = 'currentColor' }) {\n // Always call the hook — rules-of-hooks. The native branch is the\n // only consumer of the resolved colors, but pulling them on web is\n // a cheap context read.\n const colors = useThemeColors();\n if (isWeb) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n }\n // 'currentColor' is a CSS keyword without meaning on native — RNText\n // would render in its inherent default (~black). Resolve it against\n // the active theme so the glyph stays readable in both schemes.\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.default : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {glyph}\n </RNText>\n );\n };\n\nexport type SemanticIcons = {\n checkmark: SemanticIcon;\n close: SemanticIcon;\n eye: SemanticIcon;\n eyeOff: SemanticIcon;\n chevronDown: SemanticIcon;\n chevronUp: SemanticIcon;\n alertTriangle: SemanticIcon;\n info: SemanticIcon;\n check: SemanticIcon;\n x: SemanticIcon;\n};\n\nexport const defaultSemanticIcons: SemanticIcons = {\n checkmark: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n close: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n eye: make({\n path: 'M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z',\n glyph: '👁',\n }),\n eyeOff: make({\n path: 'M17.94 17.94A10 10 0 0 1 2 12s3.5-7 10-7c2 0 3.8.6 5.4 1.5 M1 1l22 22',\n glyph: '🙈',\n }),\n chevronDown: make({ path: 'm6 9 6 6 6-6', glyph: '⌄' }),\n chevronUp: make({ path: 'm18 15-6-6-6 6', glyph: '⌃' }),\n alertTriangle: make({\n path: 'M12 9v4 M12 17h.01 M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z',\n glyph: '⚠',\n }),\n info: make({\n path: 'M12 8h.01 M11 12h1v4h1 M12 22C6.48 22 2 17.52 2 12 2 6.48 6.48 2 12 2c5.52 0 10 4.48 10 10 0 5.52-4.48 10-10 10z',\n glyph: 'ⓘ',\n }),\n check: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n x: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n};\n","/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// cn — class-name merger. clsx-compatible shape.\n//\n// Intentionally does NOT deduplicate Tailwind conflicts (e.g. \"text-sm text-lg\").\n// That's `tailwind-merge`'s job; we defer adding it until a component actually\n// needs it, to keep the core tree-shakable and the runtime zero-dep.\n\nexport type ClassInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | ClassInput[]\n | Record<string, boolean | number | null | undefined>;\n\nexport function cn(...inputs: ClassInput[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n append(out, input);\n }\n return out.join(' ');\n}\n\nfunction append(out: string[], input: ClassInput): void {\n if (!input) {\n return;\n }\n if (typeof input === 'string') {\n if (input.length > 0) {\n out.push(input);\n }\n return;\n }\n if (typeof input === 'number') {\n return; // numbers are never class names\n }\n if (Array.isArray(input)) {\n for (const inner of input) {\n append(out, inner);\n }\n return;\n }\n if (typeof input === 'object') {\n for (const key of Object.keys(input)) {\n if (input[key]) {\n out.push(key);\n }\n }\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport type { TextStyle, ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type BadgeTone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger';\nexport type BadgeAppearance = 'solid' | 'outline' | 'soft';\n\nexport type BadgeProps = {\n /**\n * Semantic color of the badge.\n * @defaultValue 'neutral'\n */\n tone?: BadgeTone;\n /**\n * Visual treatment.\n * - `soft` (default) — tinted background with darker tone-colored text. Modern, calm.\n * - `solid` — filled tone background, white text. Loud, used sparingly.\n * - `outline` — border in tone, transparent background, tone-colored text.\n * @defaultValue 'soft'\n */\n appearance?: BadgeAppearance;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// Layout-only base; theme-driven dimensions are merged inside the\n// component so a custom theme reshapes the badge.\nconst BASE_CONTAINER_LAYOUT: ViewStyle = {\n alignSelf: 'flex-start',\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 2, // component-density literal — not from theme (no 2px spacing token)\n borderWidth: 1,\n borderColor: 'transparent',\n};\n\n/**\n * Compact pill for status, counts, or labels. Use sparingly — every badge\n * draws the eye, so a row of five is no longer a row of badges.\n *\n * Tone palettes flip with the active color scheme — light mode uses the\n * familiar pastel scale (Tailwind 50/200/800), dark mode uses the deep\n * 950/700/100 scale so a soft success badge reads as a calm tinted chip\n * on either surface, never as a glaring pastel on a dark page.\n */\nexport const Badge = ({ tone = 'neutral', appearance = 'soft', children, className, testID }: BadgeProps) => {\n const colors = useThemeColors();\n const isDark = useColorScheme() === 'dark';\n const invertedText = colors.semantic.text.inverted;\n\n let palette: {\n soft: { bg: string; fg: string };\n solid: { bg: string; fg: string };\n outline: { border: string; fg: string };\n };\n if (tone === 'neutral') {\n palette = {\n soft: isDark\n ? { bg: colors.color.neutral['800'], fg: colors.color.neutral['100'] }\n : { bg: colors.color.neutral['100'], fg: colors.color.neutral['700'] },\n solid: {\n bg: isDark ? colors.color.neutral['200'] : colors.color.neutral['700'],\n fg: isDark ? colors.color.neutral['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.neutral['600'] : colors.color.neutral['300'],\n fg: isDark ? colors.color.neutral['100'] : colors.color.neutral['700'],\n },\n };\n } else if (tone === 'primary') {\n palette = {\n soft: isDark\n ? { bg: colors.color.primary['900'], fg: colors.color.primary['200'] }\n : { bg: colors.color.primary['100'], fg: colors.color.primary['800'] },\n solid: {\n bg: isDark ? colors.color.primary['400'] : colors.color.primary['600'],\n fg: isDark ? colors.color.primary['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.primary['400'] : colors.color.primary['300'],\n fg: isDark ? colors.color.primary['200'] : colors.color.primary['700'],\n },\n };\n } else if (tone === 'success') {\n palette = {\n soft: isDark ? { bg: '#14532d', fg: '#bbf7d0' } : { bg: '#dcfce7', fg: '#166534' },\n solid: { bg: colors.color.success, fg: invertedText },\n outline: { border: colors.color.success, fg: isDark ? '#bbf7d0' : '#166534' },\n };\n } else if (tone === 'warning') {\n palette = {\n soft: isDark ? { bg: '#78350f', fg: '#fde68a' } : { bg: '#fef3c7', fg: '#92400e' },\n solid: { bg: colors.color.warning, fg: invertedText },\n outline: { border: colors.color.warning, fg: isDark ? '#fde68a' : '#92400e' },\n };\n } else {\n palette = {\n soft: isDark ? { bg: '#7f1d1d', fg: '#fecaca' } : { bg: '#fee2e2', fg: '#991b1b' },\n solid: { bg: colors.color.danger, fg: invertedText },\n outline: { border: colors.color.danger, fg: isDark ? '#fecaca' : '#991b1b' },\n };\n }\n\n const baseContainer: ViewStyle = {\n ...BASE_CONTAINER_LAYOUT,\n gap: px(colors.spacing['1']),\n paddingHorizontal: px(colors.spacing['2']),\n borderRadius: px(colors.radius.full),\n };\n const containerStyle: ViewStyle = (() => {\n if (appearance === 'solid') {\n return { ...baseContainer, backgroundColor: palette.solid.bg };\n }\n if (appearance === 'outline') {\n return { ...baseContainer, backgroundColor: 'transparent', borderColor: palette.outline.border };\n }\n return { ...baseContainer, backgroundColor: palette.soft.bg };\n })();\n const textColor = (() => {\n if (appearance === 'solid') {\n return palette.solid.fg;\n }\n if (appearance === 'outline') {\n return palette.outline.fg;\n }\n return palette.soft.fg;\n })();\n const baseText: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.xs),\n fontWeight: colors.fontWeight.medium as '500',\n lineHeight: px(colors.fontSize.xs) * Number(colors.lineHeight.normal),\n };\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn('inline-flex flex-row items-center gap-1 rounded-full px-2 py-0.5 border', className)}\n style={containerStyle}\n >\n <RNText style={{ ...baseText, color: textColor }}>{children}</RNText>\n </View>\n );\n};\n","'use client';\n\n// =============================================================================\n// FloatButton — cross-platform Floating Action Button (FAB)\n//\n// Two-component public surface:\n// <FloatButton> — standalone FAB\n// <FloatButton.Group> — cluster with click/long-press expansion\n// <FloatButton.BackToTop> — preset that scrolls a target ref to top\n//\n// Design direction: restrained-editorial (Linear/Stripe energy). Two-layer\n// brand-tinted shadows, subtle hover lift, snappy press scale, no bouncy\n// physics. Cross-platform via the same Pressable + inline style pattern\n// used in Pagination.\n// =============================================================================\n\nimport {\n type ComponentProps,\n cloneElement,\n createContext,\n type FC,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { GestureResponderEvent, ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, type ScrollView, useWindowDimensions, View } from 'react-native';\nimport { SafeAreaInsetsContext } from 'react-native-safe-area-context';\nimport { useTranslation } from '../../i18n/use-translation';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Badge, type BadgeProps } from '../Badge';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type FloatButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'surface';\nexport type FloatButtonShape = 'circle' | 'square' | 'extended';\nexport type FloatButtonSize = 'small' | 'medium' | 'large';\nexport type FloatButtonPlacement = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\nexport type FloatButtonGroupTrigger = 'click' | 'longPress' | 'manual';\nexport type FloatButtonGroupDirection = 'up' | 'down' | 'left' | 'right';\n\n/** Badge passthrough — same shape as our `<Badge>` accepts. */\nexport type FloatButtonBadge = {\n /** Numeric badge — render the number inside a small pill. */\n count?: number;\n /** Show a dot instead of a count (overrides `count`). */\n dot?: boolean;\n /** Badge tone — defaults to `'danger'` (the canonical \"unread\" red). */\n tone?: BadgeProps['tone'];\n};\n\ntype FloatButtonBaseProps = {\n /** Required unless `label` is set. */\n icon?: ReactNode;\n /** Inline label — turns the button extended (auto-sets `shape='extended'`). */\n label?: string;\n /** A11y label — falls back to `label`; required when icon-only. */\n accessibilityLabel?: string;\n /** Visual shape. @defaultValue 'circle' (or 'extended' when both icon + label are set) */\n shape?: FloatButtonShape;\n /** Size — sm=40, md=56, lg=72. @defaultValue 'medium' */\n size?: FloatButtonSize;\n /** Color/tone variant. @defaultValue 'primary' */\n variant?: FloatButtonVariant;\n /** Tooltip — web: hover/focus tooltip; native (in a group): always-visible label chip. */\n tooltip?: string;\n /** Badge — count, dot, or tone passthrough. */\n badge?: FloatButtonBadge;\n /** Disable interaction. */\n disabled?: boolean;\n /** Show a spinner in place of the icon. */\n loading?: boolean;\n /** Animate in/out. @defaultValue true */\n visible?: boolean;\n /** Where to anchor the FAB on the screen. @defaultValue 'bottom-right' */\n placement?: FloatButtonPlacement;\n /**\n * Positioning strategy. `'fixed'` pins to the viewport (web `position: fixed`,\n * native absolute-on-root); `'absolute'` pins to the nearest positioned\n * ancestor — useful for docs previews and any contained-canvas layout.\n * @defaultValue 'fixed'\n */\n positioning?: 'fixed' | 'absolute';\n /** Additional offset from the placement corner (px). @defaultValue { x: 24, y: 24 } web; { x: 16, y: 16 } native */\n offset?: { x?: number; y?: number };\n /**\n * On native, auto-add the device's bottom safe-area inset to the offset.\n * **Default is `false`** because RN has no `position: 'fixed'` — every\n * `FloatButton` is parent-relative, and adding the screen-bottom inset\n * to a card-relative offset pushes the button up by ~34pt for no reason.\n * Set this to `true` only when you're certain the FAB's parent reaches\n * the screen edge (e.g. a root-level container without `SafeAreaView`).\n * @defaultValue false\n */\n respectSafeArea?: boolean;\n /** Anchor link — renders as an `<a>` on web. */\n href?: string;\n /** RTL flips left/right placements. @defaultValue 'ltr' */\n dir?: 'ltr' | 'rtl';\n /** Long-press handler — native first-class, web maps to contextmenu. */\n onLongPress?: (event: GestureResponderEvent) => void;\n /** Forward ARIA attributes (used internally by Group for `aria-haspopup`/`aria-expanded`). */\n 'aria-haspopup'?: 'menu' | 'true' | boolean;\n 'aria-expanded'?: boolean;\n /**\n * Press handler. We're React-Native-first, so `onPress` is the primary\n * surface and works on both platforms. `onClick` is also accepted for\n * web-mental-model consumers; if BOTH are defined, `onPress` wins (and\n * a dev-only warning fires).\n */\n onPress?: (event: GestureResponderEvent) => void;\n /** Web-y alias for `onPress` — same handler, mapped at the call site. */\n onClick?: (event: { preventDefault?: () => void }) => void;\n className?: string;\n testID?: string;\n /** Set internally when the button lives inside a `<FloatButton.Group>`. */\n children?: ReactNode;\n};\n\nexport type FloatButtonProps = FloatButtonBaseProps;\n\n// =============================================================================\n// Context — shared by Group and its children\n// =============================================================================\n\ntype FloatButtonGroupContextValue = {\n /** Whether the group is expanded. */\n open: boolean;\n /** Close the group programmatically (used by action items after press). */\n close: () => void;\n /** Direction of expansion. */\n direction: FloatButtonGroupDirection;\n /** Whether items are inside a group — used to skip per-item positioning. */\n insideGroup: true;\n /** Index of the action item, used for staggered animation. */\n indexRef: { next: number };\n};\n\nconst FloatButtonGroupContext = createContext<FloatButtonGroupContextValue | null>(null);\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nconst SIZE_MAP: Record<FloatButtonSize, { diameter: number; iconSize: number; fontSize: number; padX: number }> = {\n small: { diameter: 40, iconSize: 18, fontSize: 14, padX: 16 },\n medium: { diameter: 56, iconSize: 22, fontSize: 14, padX: 20 },\n large: { diameter: 72, iconSize: 28, fontSize: 16, padX: 28 },\n};\n\nconst DEFAULT_OFFSET_WEB = 24;\nconst DEFAULT_OFFSET_NATIVE = 16;\n\n// =============================================================================\n// Standalone FloatButton\n// =============================================================================\n\n/**\n * Floating Action Button — a fixed-position button that hovers above page\n * content. Cross-platform (web + native), badge-aware, link-capable, and\n * safe-area-aware on native.\n *\n * @example\n * <FloatButton icon={<Plus />} accessibilityLabel=\"New item\" onPress={...} />\n *\n * @example\n * <FloatButton icon={<Help />} label=\"Help\" shape=\"extended\" />\n */\n// Defined here as a plain function; the Group / BackToTop static properties\n// are attached at the bottom of the file via `Object.assign` so the dist\n// `.d.ts` surface preserves them (a bare type cast on the const doesn't\n// propagate through tsup's declaration emitter).\nconst FloatButtonRoot = (props: FloatButtonProps) => {\n const groupCtx = useContext(FloatButtonGroupContext);\n const colors = useThemeColors();\n // Read the context directly (instead of `useSafeAreaInsets()`) so the\n // component degrades silently when no `<SafeAreaProvider>` is mounted —\n // the canonical case on web. With a provider, real insets flow through;\n // without one, we get zeros and no console warning.\n const insets = useContext(SafeAreaInsetsContext) ?? { top: 0, right: 0, bottom: 0, left: 0 };\n const { width: viewportWidth } = useWindowDimensions();\n\n const {\n icon,\n label,\n accessibilityLabel,\n shape: shapeProp,\n size = groupCtx ? 'small' : 'medium',\n variant = 'primary',\n tooltip,\n badge,\n disabled = false,\n loading = false,\n visible = true,\n placement = 'bottom-right',\n positioning = 'fixed',\n offset,\n respectSafeArea = false,\n href,\n dir = 'ltr',\n onLongPress,\n className,\n testID,\n children,\n onPress,\n onClick,\n 'aria-haspopup': ariaHasPopup,\n 'aria-expanded': ariaExpanded,\n } = props;\n\n // `onPress` wins when both are defined — emit a dev-only warning so the\n // intent is unambiguous. (We can't make this a TS error because\n // exactOptionalPropertyTypes + spread in FloatButton.Group fights\n // discriminated unions.)\n if (process.env.NODE_ENV !== 'production' && onPress && onClick) {\n console.warn('<FloatButton>: both `onPress` and `onClick` defined — `onPress` will be used. Pick one.');\n }\n const onPressFn = onPress ?? onClick;\n\n // Auto-extend when both icon + label are present and shape is unset.\n const shape: FloatButtonShape = shapeProp ?? (label && icon ? 'extended' : 'circle');\n const sizeTokens = SIZE_MAP[size];\n\n // Tooltip visibility (web: hover/focus; native-in-group: always when group open)\n const [tooltipVisible, setTooltipVisible] = useState(false);\n\n // Track press-tap separately so we don't run onLongPress -> onPress.\n const longPressFiredRef = useRef(false);\n\n const handlePress = useCallback(\n (event: GestureResponderEvent) => {\n if (disabled || loading) {\n return;\n }\n if (longPressFiredRef.current) {\n longPressFiredRef.current = false;\n return;\n }\n // If we're inside a Group, close it after a press (unless this IS the\n // group's trigger — group trigger is rendered from inside Group itself,\n // not by a child FloatButton).\n if (groupCtx) {\n groupCtx.close();\n }\n (onPressFn as ((e: GestureResponderEvent) => void) | undefined)?.(event);\n },\n [disabled, loading, groupCtx, onPressFn]\n );\n\n const handleLongPress = useCallback(\n (event: GestureResponderEvent) => {\n if (disabled || loading) {\n return;\n }\n longPressFiredRef.current = true;\n onLongPress?.(event);\n },\n [disabled, loading, onLongPress]\n );\n\n // ----- variant resolution -----\n const variantStyle = useMemo(() => resolveVariantStyle(variant, colors), [variant, colors]);\n\n // ----- positioning -----\n const positionStyle: ViewStyle | null = groupCtx\n ? null // children of a group don't position themselves; the group handles layout\n : resolvePositionStyle({\n placement,\n positioning,\n offset: offset ?? {},\n dir,\n insets,\n viewportWidth,\n respectSafeArea,\n });\n\n // ----- visibility / disabled opacity -----\n const containerOpacity = visible ? (disabled ? 0.4 : 1) : 0;\n\n // ----- shape dimensions -----\n const isExtended = shape === 'extended' && Boolean(label);\n const containerDimensions: ViewStyle = isExtended\n ? {\n minWidth: sizeTokens.diameter,\n height: sizeTokens.diameter,\n paddingHorizontal: sizeTokens.padX,\n borderRadius: sizeTokens.diameter / 2,\n }\n : {\n width: sizeTokens.diameter,\n height: sizeTokens.diameter,\n borderRadius: shape === 'square' ? px(colors.radius.lg) : sizeTokens.diameter / 2,\n };\n\n const a11yLabel = accessibilityLabel ?? label ?? tooltip;\n\n if (process.env.NODE_ENV !== 'production' && !a11yLabel && icon) {\n console.warn('<FloatButton>: provide `accessibilityLabel` or `label` for icon-only buttons (WCAG 2.2).');\n }\n\n // ----- shadow tokens (brand-tinted on primary) -----\n const shadowStyle = useMemo(() => resolveShadowStyle(variant, colors), [variant, colors]);\n\n // ----- inner content (icon + optional label) -----\n const contentNode = (\n <>\n {loading ? (\n <SmallSpinner color={variantStyle.fg} size={sizeTokens.iconSize} />\n ) : (\n <View\n style={\n {\n width: sizeTokens.iconSize,\n height: sizeTokens.iconSize,\n alignItems: 'center',\n justifyContent: 'center',\n // Sets CSS `color` on the wrapper div under RN-Web\n // so any nested SVG using `stroke=\"currentColor\"`\n // or `fill=\"currentColor\"` inherits the variant fg.\n // RN ignores `color` on a View (it's only valid on\n // Text) — silently dropped on native.\n color: variantStyle.fg,\n } as unknown as ViewStyle\n }\n >\n {tintIcon(icon, variantStyle.fg)}\n </View>\n )}\n {isExtended ? (\n <RNText\n style={{\n marginLeft: px(colors.spacing['2']),\n color: variantStyle.fg,\n fontFamily: colors.fontFamily.body,\n fontSize: sizeTokens.fontSize,\n fontWeight: colors.fontWeight.medium as '500',\n letterSpacing: -0.1,\n fontVariant: ['tabular-nums'],\n }}\n numberOfLines={1}\n >\n {label}\n </RNText>\n ) : null}\n </>\n );\n\n // ----- wrapper: positioning + opacity transitions -----\n const wrapperStyle: ViewStyle = {\n ...(positionStyle ?? {}),\n opacity: containerOpacity,\n // Web-only transitions for visibility/scale (silently dropped on native).\n ...(Platform.OS === 'web'\n ? ({\n transitionProperty: 'opacity, transform',\n transitionDuration: '180ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n pointerEvents: visible ? 'auto' : 'none',\n } as ViewStyle)\n : null),\n };\n\n // ----- the button itself (Pressable + visual style) -----\n const buttonNode = (\n <Pressable\n {...(testID !== undefined ? { testID } : {})}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={a11yLabel}\n aria-label={a11yLabel}\n disabled={disabled || loading}\n aria-disabled={disabled || undefined}\n aria-busy={loading || undefined}\n {...(ariaHasPopup !== undefined ? { 'aria-haspopup': ariaHasPopup } : {})}\n {...(ariaExpanded !== undefined ? { 'aria-expanded': ariaExpanded } : {})}\n onPress={handlePress}\n onLongPress={onLongPress ? handleLongPress : undefined}\n // Web hover/focus reveals the tooltip; rely on Pressable's hover state.\n onHoverIn={() => setTooltipVisible(true)}\n onHoverOut={() => setTooltipVisible(false)}\n onFocus={() => setTooltipVisible(true)}\n onBlur={() => setTooltipVisible(false)}\n // Pre-compute the static style; iOS's Pressable renderer was\n // observed to drop properties from function-form `style` returns\n // intermittently — same bug we hit on the Pagination selected pill.\n // The function form is web-only (where it reads `hovered`); on\n // native we pass a plain object that always renders.\n style={\n Platform.OS === 'web'\n ? (state) => {\n const { pressed, hovered } = state as { pressed: boolean; hovered?: boolean };\n return {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: pressed\n ? variantStyle.bgPressed\n : hovered\n ? variantStyle.bgHover\n : variantStyle.bg,\n ...(variantStyle.borderColor\n ? { borderWidth: 1, borderColor: variantStyle.borderColor }\n : null),\n ...containerDimensions,\n ...shadowStyle.resting,\n ...(pressed ? { transform: [{ scale: 0.96 }], ...shadowStyle.pressed } : null),\n ...(hovered && !pressed\n ? { transform: [{ translateY: -1 }], ...shadowStyle.hover }\n : null),\n ...({\n transitionProperty: 'background-color, box-shadow, transform',\n transitionDuration: '150ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n cursor: disabled || loading ? 'not-allowed' : 'pointer',\n outlineWidth: 0,\n } as object),\n } as ViewStyle;\n }\n : ({\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: variantStyle.bg,\n ...(variantStyle.borderColor\n ? { borderWidth: 1, borderColor: variantStyle.borderColor }\n : null),\n ...containerDimensions,\n ...shadowStyle.resting,\n } as ViewStyle)\n }\n >\n {contentNode}\n </Pressable>\n );\n\n // Web `<a>` wrapper for href integration. Non-anchor on native.\n const linkedButton =\n href && Platform.OS === 'web' ? (\n <a\n href={href}\n aria-label={a11yLabel}\n style={{ textDecoration: 'none', color: 'inherit', display: 'inline-flex' }}\n onClick={(e) => {\n if (onPressFn) {\n // Let consumer's handler decide; if they call preventDefault we honor it.\n (onPressFn as (e: { preventDefault?: () => void }) => void)({\n preventDefault: () => e.preventDefault(),\n });\n }\n }}\n >\n {buttonNode}\n </a>\n ) : (\n buttonNode\n );\n\n // Tooltip chip — always visible on native when inside an open group;\n // hover/focus on web. Skipped if no tooltip text.\n const showTooltip = tooltip && (Platform.OS === 'web' ? tooltipVisible : (groupCtx?.open ?? false));\n\n return (\n <View className={cn(className)} style={wrapperStyle}>\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: px(colors.spacing['2']) }}>\n {showTooltip ? <TooltipChip text={tooltip!} /> : null}\n <View style={{ position: 'relative' }}>\n {linkedButton}\n {badge ? <BadgeOverlay badge={badge} size={size} /> : null}\n </View>\n </View>\n {children}\n </View>\n );\n};\n\n// =============================================================================\n// FloatButton.Group\n// =============================================================================\n\nexport type FloatButtonGroupProps = Omit<FloatButtonProps, 'onPress' | 'onClick' | 'onLongPress'> & {\n /** Trigger mode — `manual` requires `open` to be controlled. @defaultValue 'click' */\n trigger?: FloatButtonGroupTrigger;\n /** Controlled open state. */\n open?: boolean;\n /** Initial open state when uncontrolled. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires whenever the group opens or closes. */\n onOpenChange?: (open: boolean) => void;\n /** Direction the action items expand. @defaultValue 'up' */\n direction?: FloatButtonGroupDirection;\n /** Render a scrim/backdrop behind the open group. @defaultValue false */\n backdrop?: boolean;\n /** Override the trigger icon when collapsed. */\n expandIcon?: ReactNode;\n /** Override the trigger icon when expanded. @defaultValue rotated `expandIcon` (or `icon`) */\n collapseIcon?: ReactNode;\n /** Action items declared as data — alternative to children. */\n actions?: ReadonlyArray<FloatButtonProps>;\n};\n\nconst FloatButtonGroup: FC<FloatButtonGroupProps> = ({\n trigger = 'click',\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n direction = 'up',\n backdrop = false,\n expandIcon,\n collapseIcon,\n actions,\n children,\n ...buttonProps\n}) => {\n const isControlled = openProp !== undefined;\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n const open = isControlled ? (openProp as boolean) : innerOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInnerOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n const toggle = useCallback(() => setOpen(!open), [setOpen, open]);\n\n // Action items: flatten `actions` array into FloatButton children if given.\n const actionItems: ReactNode = actions\n ? actions.map((action, idx) => {\n // biome-ignore lint/suspicious/noArrayIndexKey: deterministic order from caller's array\n return <FloatButton key={`fab-action-${idx}`} {...(action as FloatButtonProps)} />;\n })\n : children;\n\n // The group's outer container handles positioning; children render inline.\n const groupCtxValue = useMemo<FloatButtonGroupContextValue>(\n () => ({\n open,\n close,\n direction,\n insideGroup: true as const,\n indexRef: { next: 0 },\n }),\n [open, close, direction]\n );\n\n // Trigger button (uses the same FloatButton render path but without\n // group-context positioning so it stays in the corner).\n const triggerIcon = open\n ? (collapseIcon ?? <RotatedIcon node={expandIcon ?? buttonProps.icon} />)\n : (expandIcon ?? buttonProps.icon);\n\n return (\n <FloatButtonGroupContext.Provider value={groupCtxValue}>\n {backdrop && open ? <Backdrop onPress={close} positioning={buttonProps.positioning ?? 'fixed'} /> : null}\n <GroupLayout\n direction={direction}\n placement={buttonProps.placement ?? 'bottom-right'}\n positioning={buttonProps.positioning ?? 'fixed'}\n offset={buttonProps.offset ?? {}}\n dir={buttonProps.dir ?? 'ltr'}\n >\n {open ? <View style={groupActionsLayoutStyle(direction)}>{actionItems}</View> : null}\n <FloatButton\n {...(buttonProps as FloatButtonProps)}\n icon={triggerIcon}\n {...(trigger === 'click' ? { onPress: toggle } : {})}\n {...(trigger === 'longPress' ? { onLongPress: toggle } : {})}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n />\n </GroupLayout>\n </FloatButtonGroupContext.Provider>\n );\n};\n\n// (assignment moved to the bottom-of-file Object.assign)\n\n// =============================================================================\n// FloatButton.BackToTop\n// =============================================================================\n\nexport type FloatButtonBackToTopProps = Omit<FloatButtonProps, 'icon' | 'onPress' | 'onClick' | 'visible'> & {\n /** Scroll target ref — RN ScrollView. Defaults to window on web. */\n scrollRef?: { current: ScrollView | null };\n /** Show only when the scroll target is past this many px from the top. @defaultValue 400 */\n visibilityThreshold?: number;\n};\n\nconst FloatButtonBackToTop: FC<FloatButtonBackToTopProps> = ({\n scrollRef,\n visibilityThreshold = 400,\n variant = 'surface',\n ...rest\n}) => {\n const { t } = useTranslation();\n const [visible, setVisible] = useState(false);\n\n // Web: bind to window scroll. Native: caller wires onScroll on their\n // ScrollView and updates an external state — we expose a passive read here.\n useEffect(() => {\n if (Platform.OS !== 'web' || typeof window === 'undefined') {\n return;\n }\n const onScroll = () => setVisible(window.scrollY > visibilityThreshold);\n onScroll();\n window.addEventListener('scroll', onScroll, { passive: true });\n return () => window.removeEventListener('scroll', onScroll);\n }, [visibilityThreshold]);\n\n const onPress = useCallback(() => {\n if (Platform.OS === 'web' && typeof window !== 'undefined') {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n return;\n }\n scrollRef?.current?.scrollTo?.({ y: 0, animated: true });\n }, [scrollRef]);\n\n return (\n <FloatButton\n {...(rest as FloatButtonProps)}\n variant={variant}\n visible={visible}\n icon={<defaultSemanticIcons.chevronUp size={20} />}\n accessibilityLabel={rest.accessibilityLabel ?? t('floatButton.backToTop', { defaultValue: 'Back to top' })}\n onPress={onPress}\n />\n );\n};\n\n// (assignment moved to the bottom-of-file Object.assign)\n\n/**\n * Public `FloatButton` value — the root function plus its `.Group` and\n * `.BackToTop` static members. `Object.assign` produces a value whose\n * inferred type carries the static properties, so `.d.ts` consumers can\n * write `<FloatButton.Group>` without a separate import.\n */\nexport const FloatButton = Object.assign(FloatButtonRoot, {\n Group: FloatButtonGroup,\n BackToTop: FloatButtonBackToTop,\n});\n\n// =============================================================================\n// Subcomponents\n// =============================================================================\n\nconst TooltipChip = ({ text }: { text: string }) => {\n const colors = useThemeColors();\n return (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: px(colors.radius.sm) + 2,\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 4,\n ...(Platform.OS === 'web' ? ({ boxShadow: '0 1px 2px rgba(0,0,0,0.06)' } as object) : null),\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: 13,\n lineHeight: 16,\n }}\n >\n {text}\n </RNText>\n </View>\n );\n};\n\nconst BadgeOverlay = ({ badge, size }: { badge: FloatButtonBadge; size: FloatButtonSize }) => {\n const offsetTop = size === 'large' ? -6 : -4;\n const offsetRight = size === 'large' ? -6 : -4;\n return (\n <View\n pointerEvents=\"none\"\n style={{\n position: 'absolute',\n top: offsetTop,\n right: offsetRight,\n zIndex: 1,\n }}\n >\n {badge.dot ? (\n <Badge tone={badge.tone ?? 'danger'} appearance=\"solid\">\n {' '}\n </Badge>\n ) : (\n <Badge tone={badge.tone ?? 'danger'} appearance=\"solid\">\n {String(badge.count ?? 0)}\n </Badge>\n )}\n </View>\n );\n};\n\nconst SmallSpinner = ({ color, size }: { color: string; size: number }) => {\n // Tiny CSS spinner on web; on native, defer to an opacity pulse for v1\n // (avoids importing the spinner component into the FloatButton bundle).\n if (Platform.OS === 'web') {\n return (\n <View\n style={\n {\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: 2,\n borderColor: 'transparent',\n borderTopColor: color,\n animationName: 'fb-spin',\n animationDuration: '700ms',\n animationIterationCount: 'infinite',\n animationTimingFunction: 'linear',\n } as unknown as ViewStyle\n }\n />\n );\n }\n return (\n <View\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: 2,\n borderColor: color,\n opacity: 0.6,\n }}\n />\n );\n};\n\nconst Backdrop = ({ onPress, positioning }: { onPress: () => void; positioning: 'fixed' | 'absolute' }) => {\n return (\n <Pressable\n onPress={onPress}\n accessibilityLabel=\"Close\"\n style={{\n position:\n Platform.OS === 'web' && positioning === 'fixed' ? ('fixed' as unknown as 'absolute') : 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.32)',\n zIndex: 49,\n }}\n />\n );\n};\n\nconst RotatedIcon = ({ node, color }: { node: ReactNode; color?: string }) => {\n // Forward the color from the outer `tintIcon` clone down to the inner\n // node — otherwise the morph-to-X icon stays at its default tint while\n // the surrounding FAB icons inherit the variant fg.\n const tintedNode =\n color && isValidElement(node) ? cloneElement(node as ReactElement<{ color?: string }>, { color }) : node;\n return (\n <View\n style={\n {\n transform: [{ rotate: '45deg' }],\n // CSS `color` cascades to nested `currentColor` SVGs on web.\n ...(color ? { color } : null),\n ...(Platform.OS === 'web'\n ? {\n transitionProperty: 'transform',\n transitionDuration: '200ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n }\n : null),\n } as unknown as ViewStyle\n }\n >\n {tintedNode}\n </View>\n );\n};\n\nconst GroupLayout = ({\n direction,\n placement,\n positioning,\n offset,\n dir,\n children,\n}: {\n direction: FloatButtonGroupDirection;\n placement: FloatButtonPlacement;\n positioning: 'fixed' | 'absolute';\n offset: { x?: number; y?: number };\n dir: 'ltr' | 'rtl';\n children: ReactNode;\n}) => {\n // Read the context directly (instead of `useSafeAreaInsets()`) so the\n // component degrades silently when no `<SafeAreaProvider>` is mounted —\n // the canonical case on web. With a provider, real insets flow through;\n // without one, we get zeros and no console warning.\n const insets = useContext(SafeAreaInsetsContext) ?? { top: 0, right: 0, bottom: 0, left: 0 };\n const { width: viewportWidth } = useWindowDimensions();\n const positionStyle = resolvePositionStyle({\n placement,\n positioning,\n offset,\n dir,\n insets,\n viewportWidth,\n respectSafeArea: false,\n });\n return (\n <View\n style={{\n ...positionStyle,\n flexDirection: direction === 'left' || direction === 'right' ? 'row' : 'column',\n alignItems: direction === 'left' || direction === 'right' ? 'center' : 'flex-end',\n justifyContent: direction === 'up' ? 'flex-end' : 'flex-start',\n }}\n >\n {direction === 'up' || direction === 'left'\n ? children\n : Array.isArray(children)\n ? [...children].reverse()\n : children}\n </View>\n );\n};\n\nfunction groupActionsLayoutStyle(direction: FloatButtonGroupDirection): ViewStyle {\n const isVertical = direction === 'up' || direction === 'down';\n return {\n flexDirection: isVertical ? 'column' : 'row',\n alignItems: 'flex-end',\n gap: 12,\n marginBottom: direction === 'up' ? 12 : 0,\n marginTop: direction === 'down' ? 12 : 0,\n marginRight: direction === 'left' ? 12 : 0,\n marginLeft: direction === 'right' ? 12 : 0,\n };\n}\n\n// =============================================================================\n// Style resolvers\n// =============================================================================\n\nfunction resolveVariantStyle(\n variant: FloatButtonVariant,\n colors: ReturnType<typeof useThemeColors>\n): { bg: string; bgHover: string; bgPressed: string; fg: string; borderColor?: string } {\n switch (variant) {\n case 'primary':\n return {\n bg: colors.semantic.interactive.primary,\n bgHover: colors.semantic.interactive.primaryHover,\n bgPressed: colors.semantic.interactive.primaryPressed,\n fg: colors.semantic.text.inverted,\n };\n case 'secondary':\n return {\n bg: colors.semantic.background.subtle,\n bgHover: colors.semantic.background.elevated,\n bgPressed: colors.semantic.background.subtle,\n fg: colors.semantic.text.default,\n borderColor: colors.semantic.border.default,\n };\n case 'tertiary':\n return {\n bg: 'transparent',\n bgHover: withAlpha(colors.semantic.interactive.primary, 0.08),\n bgPressed: withAlpha(colors.semantic.interactive.primary, 0.12),\n fg: colors.semantic.interactive.primary,\n borderColor: colors.semantic.interactive.primary,\n };\n case 'surface':\n return {\n bg: colors.semantic.background.elevated,\n bgHover: colors.semantic.background.subtle,\n bgPressed: colors.semantic.background.subtle,\n fg: colors.semantic.text.default,\n borderColor: colors.semantic.border.default,\n };\n }\n}\n\nfunction resolveShadowStyle(\n variant: FloatButtonVariant,\n colors: ReturnType<typeof useThemeColors>\n): { resting: ViewStyle; hover: ViewStyle; pressed: ViewStyle } {\n if (Platform.OS !== 'web') {\n // RN's elevation prop on Android maps via boxShadow polyfill; keep\n // it minimal to avoid the chunky M3 look. On iOS we rely on RN's\n // native shadow* props.\n return {\n resting: {\n shadowColor: variant === 'primary' ? colors.semantic.interactive.primary : '#000',\n shadowOffset: { width: 0, height: 6 },\n shadowOpacity: variant === 'primary' ? 0.25 : 0.12,\n shadowRadius: 16,\n elevation: 6,\n } as unknown as ViewStyle,\n hover: {} as ViewStyle,\n pressed: {\n shadowOffset: { width: 0, height: 2 },\n shadowRadius: 6,\n elevation: 2,\n } as unknown as ViewStyle,\n };\n }\n const tint = variant === 'primary' ? colors.semantic.interactive.primary : '#000';\n return {\n resting: {\n ...({\n boxShadow: `0 1px 2px rgba(0,0,0,0.06), 0 8px 24px -6px ${withAlpha(tint, variant === 'primary' ? 0.32 : 0.08)}`,\n } as unknown as ViewStyle),\n },\n hover: {\n ...({\n boxShadow: `0 2px 4px rgba(0,0,0,0.08), 0 12px 28px -6px ${withAlpha(tint, variant === 'primary' ? 0.4 : 0.12)}`,\n } as unknown as ViewStyle),\n },\n pressed: {\n ...({ boxShadow: `0 1px 2px rgba(0,0,0,0.06)` } as unknown as ViewStyle),\n },\n };\n}\n\nfunction resolvePositionStyle({\n placement,\n positioning = 'fixed',\n offset,\n dir,\n insets,\n viewportWidth,\n respectSafeArea,\n}: {\n placement: FloatButtonPlacement;\n positioning?: 'fixed' | 'absolute';\n offset: { x?: number; y?: number };\n dir: 'ltr' | 'rtl';\n insets: { top: number; right: number; bottom: number; left: number };\n viewportWidth: number;\n respectSafeArea: boolean;\n}): ViewStyle {\n const defaultOffset = Platform.OS === 'web' ? DEFAULT_OFFSET_WEB : DEFAULT_OFFSET_NATIVE;\n const x = offset.x ?? defaultOffset;\n const y = offset.y ?? defaultOffset;\n const safeBottom = Platform.OS !== 'web' && respectSafeArea ? insets.bottom : 0;\n const safeTop = Platform.OS !== 'web' && respectSafeArea ? insets.top : 0;\n\n // RTL flips left/right placements.\n const flippedPlacement: FloatButtonPlacement =\n dir === 'rtl'\n ? placement === 'bottom-right'\n ? 'bottom-left'\n : placement === 'bottom-left'\n ? 'bottom-right'\n : placement === 'top-right'\n ? 'top-left'\n : 'top-right'\n : placement;\n\n // RN doesn't have `position: 'fixed'` — only `'absolute'`. On web RN-Web\n // accepts the cast. The `positioning` prop also lets consumers force\n // `'absolute'` so the FAB pins to a positioned ancestor (docs previews).\n const cssPosition: ViewStyle['position'] =\n Platform.OS === 'web' && positioning === 'fixed' ? ('fixed' as unknown as 'absolute') : 'absolute';\n const base: ViewStyle = {\n position: cssPosition,\n zIndex: 50,\n };\n\n switch (flippedPlacement) {\n case 'bottom-right':\n return { ...base, bottom: y + safeBottom, right: x };\n case 'bottom-left':\n return { ...base, bottom: y + safeBottom, left: x };\n case 'top-right':\n return { ...base, top: y + safeTop, right: x };\n case 'top-left':\n return { ...base, top: y + safeTop, left: x };\n }\n // Suppress viewportWidth warning — reserved for future RTL/horizontal logic.\n void viewportWidth;\n return base;\n}\n\n/**\n * Force the icon's color to match the FAB's variant fg. Works for our\n * `IconComponentProps`-shaped icons (which accept `{ size, color }`) by\n * cloning the element with the resolved color; raw nodes pass through\n * unchanged and rely on the wrapper's CSS `color` for `currentColor`-based\n * SVGs. Consumer-supplied colors are intentionally overridden — inside a\n * primary FAB the icon should always read against the primary surface.\n */\nfunction tintIcon(icon: ReactNode, color: string): ReactNode {\n if (!isValidElement(icon)) {\n return icon;\n }\n return cloneElement(icon as ReactElement<{ color?: string }>, { color });\n}\n\nfunction withAlpha(color: string, alpha: number): string {\n if (color.startsWith('#') && (color.length === 7 || color.length === 4)) {\n const expanded =\n color.length === 4 ? `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` : color;\n const r = Number.parseInt(expanded.slice(1, 3), 16);\n const g = Number.parseInt(expanded.slice(3, 5), 16);\n const b = Number.parseInt(expanded.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return color;\n}\n\n// Suppress unused — ComponentProps reserved for future href-prop polymorphism.\ntype _Unused = ComponentProps<'button'>;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../node_modules/react-native-safe-area-context/SafeAreaContext.tsx","../../../src/i18n/default-dictionary.ts","../../../src/i18n/resolve.ts","../../../src/i18n/context.tsx","../../../src/i18n/use-translation.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/icons/default-semantic-icons.tsx","../../../src/theme/px.ts","../../../src/utils/cn.ts","../../../src/components/Badge/Badge.tsx","../../../src/components/FloatButton/FloatButton.tsx"],"names":["isDev","process","env","NODE_ENV","SafeAreaInsetsContext","createContext","displayName","SafeAreaFrameContext","StyleSheet","create","fill","flex","Consumer","useContext","Platform","useState","Appearance","useEffect","isWeb","jsx","RNText","View","useWindowDimensions","useRef","useCallback","useMemo","jsxs","Fragment","Pressable","isValidElement","cloneElement"],"mappings":"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","file":"index.cjs","sourcesContent":[null,"import type { Dictionary } from './types';\n\n/**\n * Default English strings used by library components.\n *\n * Key naming convention:\n * <component>.<purpose>[_plural-form]\n *\n * Plural suffixes follow i18next: `_zero`, `_one`, `_two`, `_few`, `_many`, `_other`.\n * Interpolation uses `{{name}}` — double braces, no spaces, by convention.\n */\nexport const defaultDictionary: Dictionary = {\n // generic / shared\n 'common.cancel': 'Cancel',\n 'common.confirm': 'Confirm',\n 'common.close': 'Close',\n 'common.back': 'Back',\n 'common.loading': 'Loading',\n 'common.error': 'Something went wrong',\n 'common.retry': 'Try again',\n\n // breadcrumb\n 'breadcrumb.ariaLabel': 'Breadcrumb',\n 'breadcrumb.expandLabel': 'Show full path',\n 'breadcrumb.ellipsisLabel': 'More',\n 'breadcrumb.currentPageLabel': 'Current page',\n 'breadcrumb.siblingMenuLabel': 'Open sibling pages',\n\n // pagination\n 'pagination.ariaLabel': 'Pagination',\n 'pagination.previous': 'Previous page',\n 'pagination.next': 'Next page',\n 'pagination.first': 'First page',\n 'pagination.last': 'Last page',\n 'pagination.ellipsis': 'More pages',\n 'pagination.currentPage': 'Current page',\n 'pagination.gotoPage': 'Go to page {{page}}',\n 'pagination.range': 'Showing {{from}}–{{to}} of {{total}}',\n 'pagination.pageOf': 'Page {{page}} of {{total}}',\n 'pagination.pageSizeLabel': 'Items per page',\n 'pagination.jumperLabel': 'Go to page',\n 'pagination.jumperPlaceholder': '#',\n\n // floatButton\n 'floatButton.backToTop': 'Back to top',\n\n // calendar\n 'calendar.header.previous': 'Previous month',\n 'calendar.header.next': 'Next month',\n 'calendar.header.openMonthView': 'Open month picker',\n 'calendar.header.openYearView': 'Open year picker',\n 'calendar.header.openDayView': 'Open day picker',\n 'calendar.today': 'Today',\n 'calendar.clear': 'Clear',\n\n // button\n 'button.loadingLabel': 'Loading',\n\n // input\n 'input.clear': 'Clear',\n 'input.passwordShow': 'Show password',\n 'input.passwordHide': 'Hide password',\n\n // checkbox / switch\n 'checkbox.checked': 'Checked',\n 'checkbox.unchecked': 'Unchecked',\n 'switch.on': 'On',\n 'switch.off': 'Off',\n\n // field\n 'field.requiredIndicator': '*',\n 'field.requiredLabel': 'required',\n};\n","import type { Dictionary, I18nInput, I18nOptions, TranslateFn } from './types';\n\n/**\n * Normalizes the consumer's i18n input (undefined | dictionary | function) into a\n * uniform TranslateFn. Internal code only calls the returned function.\n *\n * Precedence for a given key lookup:\n * 1. consumer function (if provided) — called verbatim, no further fallback\n * 2. consumer dictionary (if provided)\n * 3. library defaults\n * 4. options.defaultValue\n * 5. the key itself (so missing strings are visible in dev, not silent)\n */\nexport function resolveI18n(input: I18nInput, defaults: Dictionary): TranslateFn {\n if (typeof input === 'function') {\n // Wrap so the consumer fn is always invoked with (key, options) — enables\n // Jest `toHaveBeenCalledWith(key, undefined)` assertions and mirrors i18next's\n // own call signature exactly.\n return (keyOrKeys, options) => input(keyOrKeys, options);\n }\n\n const dict = input ?? {};\n\n return (keyOrKeys, options) => {\n const keys = Array.isArray(keyOrKeys) ? keyOrKeys : [keyOrKeys];\n for (const rawKey of keys) {\n const key = pluralize(rawKey, options?.count);\n const template = dict[key] ?? defaults[key];\n if (template !== undefined) {\n return interpolate(template, options);\n }\n }\n // exhausted the key list\n const lastKey = keys[keys.length - 1];\n if (options?.defaultValue !== undefined) {\n return interpolate(options.defaultValue, options);\n }\n return lastKey ?? '';\n };\n}\n\nfunction pluralize(key: string, count: number | undefined): string {\n if (count === undefined) {\n return key;\n }\n // Minimal English pluralization — extend with ICU rules later if needed.\n if (count === 1) {\n return `${key}_one`;\n }\n return `${key}_other`;\n}\n\nfunction interpolate(template: string, options: I18nOptions | undefined): string {\n if (!options) {\n return template;\n }\n return template.replace(/\\{\\{\\s*([A-Za-z0-9_.-]+)\\s*\\}\\}/g, (_match, name: string) => {\n const value = options[name];\n return value === undefined || value === null ? '' : String(value);\n });\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext, useMemo } from 'react';\nimport { defaultDictionary } from './default-dictionary';\nimport { resolveI18n } from './resolve';\nimport type { I18nInput, TranslateFn } from './types';\n\nexport type I18nContextValue = {\n t: TranslateFn;\n};\n\n// Default context value uses the built-in English dictionary; consumers without\n// a provider still get a working t().\nconst defaultValue: I18nContextValue = {\n t: resolveI18n(undefined, defaultDictionary),\n};\n\nexport const I18nContext = createContext<I18nContextValue>(defaultValue);\nI18nContext.displayName = 'I18nContext';\n\nexport type I18nProviderProps = {\n i18n?: I18nInput;\n children?: ReactNode;\n};\n\nexport function I18nProvider({ i18n, children }: I18nProviderProps) {\n const value = useMemo<I18nContextValue>(() => ({ t: resolveI18n(i18n, defaultDictionary) }), [i18n]);\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n","'use client';\n\nimport { useContext } from 'react';\nimport { I18nContext, type I18nContextValue } from './context';\n\nexport function useTranslation(): I18nContextValue {\n return useContext(I18nContext);\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#fafafa\",\n elevated: \"#ffffff\",\n subtle: \"#f4f4f5\",\n },\n border: {\n default: \"#e4e4e7\",\n strong: \"#d4d4d8\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#0d9488\",\n primaryHover: \"#0f766e\",\n primaryPressed: \"#115e59\",\n },\n text: {\n default: \"#18181b\",\n inverted: \"#fafafa\",\n muted: \"#52525b\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n\n// Dark mode overrides\n// Generated for dark mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const themeDark = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#18181b\",\n elevated: \"#3f3f46\",\n subtle: \"#27272a\",\n },\n border: {\n default: \"#3f3f46\",\n strong: \"#52525b\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#2dd4bf\",\n primaryHover: \"#5eead4\",\n primaryPressed: \"#99f6e4\",\n },\n text: {\n default: \"#fafafa\",\n inverted: \"#18181b\",\n muted: \"#a1a1aa\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\n","'use client';\n\nimport { themeDark as defaultDark, theme as defaultLight, type Theme } from '@nori-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\n\n/**\n * A `NoriTheme` is a paired light/dark palette. The active half is picked\n * by `useColorScheme()` so the same theme object covers both schemes.\n *\n * Build one yourself by spreading the defaults and overriding the colors\n * you care about, or pick a preset from `@nori-ui/core/themes` (see the\n * Theming docs for examples).\n */\nexport type NoriTheme = {\n light: Theme;\n dark: Theme;\n};\n\n/**\n * Default Nori palette — teal primary on a warm-paper light surface, and\n * teal-400 primary on a deep-zinc dark surface. Mirrors the `theme` /\n * `themeDark` exports from @nori-ui/tokens.\n */\nexport const defaultTheme: NoriTheme = {\n light: defaultLight,\n dark: defaultDark as unknown as Theme,\n};\n\n// Context value is the FULL pair, not the active half. `useThemeColors`\n// (the hook components reach for) resolves it to the right one based on\n// the current color scheme. Storing the pair means a parent only has to\n// declare the theme once — switching scheme is a separate concern.\nexport const ThemeContext = createContext<NoriTheme>(defaultTheme);\nThemeContext.displayName = 'ThemeContext';\n\nexport type ThemeProviderProps = {\n /**\n * The theme to apply to descendants. Pass either:\n * - a full `NoriTheme` (`{ light, dark }`) — both schemes covered\n * - a single `Theme` — used for both light and dark (rare; mostly\n * useful when you ONLY ever render in one scheme)\n * - omit — falls back to the Nori default (teal palette)\n */\n theme?: NoriTheme | Theme;\n children?: ReactNode;\n};\n\nconst isFullTheme = (t: NoriTheme | Theme): t is NoriTheme => 'light' in t && 'dark' in t;\n\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const value: NoriTheme =\n theme === undefined ? defaultTheme : isFullTheme(theme) ? theme : { light: theme, dark: theme };\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n","'use client';\n\nimport { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\nimport { Appearance, Platform } from 'react-native';\n\nexport type ColorScheme = 'light' | 'dark';\n\n// Override channel so a parent can force a scheme (e.g. an app shell with\n// hard-coded dark chrome that wants nested components to render against\n// the dark token half regardless of the OS Appearance). `null` means\n// \"no override — use the system signal\".\nconst ColorSchemeOverrideContext = createContext<ColorScheme | null>(null);\nColorSchemeOverrideContext.displayName = 'ColorSchemeOverrideContext';\n\nexport type ColorSchemeProviderProps = {\n /** Force a specific scheme for descendants. */\n value: ColorScheme;\n children?: ReactNode;\n};\n\n/**\n * Forces a color scheme for all descendants. Useful when a screen's chrome\n * is hard-coded to one scheme (e.g. a forced-dark editorial surface) and\n * you want library components inside it to follow that, not the OS.\n */\nexport function ColorSchemeProvider({ value, children }: ColorSchemeProviderProps) {\n return <ColorSchemeOverrideContext.Provider value={value}>{children}</ColorSchemeOverrideContext.Provider>;\n}\n\nconst isWeb = Platform.OS === 'web';\n\n// Web: a document is \"in dark mode\" when the root <html> element carries\n// the `dark` class (Tailwind / Fumadocs convention) OR a `data-theme=\"dark\"`\n// attribute (matches the `darkMode` selectors in our Tailwind preset).\n// We deliberately don't fall back to `prefers-color-scheme` — the app\n// usually owns that decision and writes it onto <html>; tracking the system\n// preference too would fight the app's chosen value.\nfunction readWebScheme(): ColorScheme {\n if (typeof document === 'undefined') {\n return 'light';\n }\n const root = document.documentElement;\n if (root.classList.contains('dark')) {\n return 'dark';\n }\n if (root.getAttribute('data-theme') === 'dark') {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Returns the current color scheme — `'light'` or `'dark'`.\n *\n * On web: observes the root `<html>` element's `class=\"dark\"` and\n * `data-theme=\"dark\"` attribute (the same signals our Tailwind preset\n * keys on). Updates live as those flip.\n *\n * On native: delegates to `react-native`'s `Appearance` API so the hook\n * tracks the OS preference without extra wiring.\n *\n * Components consume this indirectly via `useThemeColors()`; reach for\n * this directly when you need the raw scheme (e.g. to swap an icon).\n */\nexport function useColorScheme(): ColorScheme {\n // A `<ColorSchemeProvider value=\"dark\">` ancestor (or NoriProvider's\n // `colorScheme` prop, which mounts one) wins over the OS signal — the\n // app shell knows which scheme its chrome is locked to.\n const override = useContext(ColorSchemeOverrideContext);\n\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (isWeb) {\n return readWebScheme();\n }\n return (Appearance.getColorScheme() ?? 'light') as ColorScheme;\n });\n\n useEffect(() => {\n if (isWeb) {\n const root = document.documentElement;\n const update = () => setScheme(readWebScheme());\n const observer = new MutationObserver(update);\n observer.observe(root, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n // Sync once after mount in case SSR shipped a different value.\n update();\n return () => observer.disconnect();\n }\n\n const sub = Appearance.addChangeListener(({ colorScheme }) => {\n setScheme((colorScheme ?? 'light') as ColorScheme);\n });\n return () => sub.remove();\n }, []);\n\n return override ?? scheme;\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport { useContext } from 'react';\nimport { ThemeContext } from './context';\nimport { useColorScheme } from './use-color-scheme';\n\n/**\n * Returns the active token palette — `theme.light` in light mode,\n * `theme.dark` in dark mode. Resolves the theme via `ThemeContext` so\n * any ancestor `<ThemeProvider theme={...}>` flows through. With no\n * provider in the tree, the default Nori palette (teal) is used.\n *\n * Use this **inside a component** when you need a hex value for a React\n * Native `style` prop (`backgroundColor`, `borderColor`, etc.).\n *\n * Note: className-based styles (e.g. `bg-semantic-interactive-primary`)\n * compile against the @nori-ui/tokens palette at build time and don't\n * follow `<ThemeProvider>` overrides today. Inline styles via this hook\n * always do — and inline beats class on CSS specificity, so the visible\n * color you see is whatever the hook resolves to. CSS-variable theming\n * for the className path is a planned follow-up.\n */\nexport function useThemeColors(): Theme {\n const scheme = useColorScheme();\n const themePair = useContext(ThemeContext);\n return scheme === 'dark' ? themePair.dark : themePair.light;\n}\n","'use client';\n\n// default-semantic-icons — minimal built-in icon placeholders for internal\n// library glyphs. Consumers can swap each one via the provider:\n//\n// <NoriProvider icons={{ checkmark: MyCheck, close: MyX }}>\n//\n// These defaults exist so the library renders usable UI out of the box even\n// when lucide-react(-native) or any other icon set is not installed. They are\n// NOT intended to compete with Lucide on style — override them in production.\n//\n// Web ships an SVG path identical to the historical lucide-style stroke. Native\n// ships a Unicode glyph wrapped in `<Text>` because raw `<svg><path>` doesn't\n// exist on the React Native runtime — the renderer treats lowercase host names\n// as native components and crashes with \"View config getter callback for\n// component `path` must be a function\". `react-native-svg` would solve this\n// but it's an extra peer dep this library deliberately doesn't require.\n//\n// Marked `'use client'` because the native render path reads\n// `useThemeColors()` to default the glyph color to the active theme's\n// text token when no explicit color is passed. Without this the native\n// glyph would render in RNText's default (black) regardless of scheme.\n\nimport type { ComponentType } from 'react';\nimport { Platform, Text as RNText } from 'react-native';\nimport { useThemeColors } from '../theme/use-theme-colors';\nimport type { IconComponentProps } from './icon';\n\ntype SemanticIcon = ComponentType<IconComponentProps>;\n\ntype IconRecipe = {\n /** SVG `path` data — used on the web. */\n path: string;\n /** Unicode glyph rendered in `<Text>` on native. */\n glyph: string;\n};\n\nconst isWeb = Platform.OS === 'web';\n\nconst make = ({ path, glyph }: IconRecipe): SemanticIcon =>\n function PlaceholderIcon({ size = 20, color = 'currentColor' }) {\n // Always call the hook — rules-of-hooks. The native branch is the\n // only consumer of the resolved colors, but pulling them on web is\n // a cheap context read.\n const colors = useThemeColors();\n if (isWeb) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n }\n // 'currentColor' is a CSS keyword without meaning on native — RNText\n // would render in its inherent default (~black). Resolve it against\n // the active theme so the glyph stays readable in both schemes.\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.default : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {glyph}\n </RNText>\n );\n };\n\nexport type SemanticIcons = {\n checkmark: SemanticIcon;\n close: SemanticIcon;\n eye: SemanticIcon;\n eyeOff: SemanticIcon;\n chevronDown: SemanticIcon;\n chevronUp: SemanticIcon;\n alertTriangle: SemanticIcon;\n info: SemanticIcon;\n check: SemanticIcon;\n x: SemanticIcon;\n};\n\nexport const defaultSemanticIcons: SemanticIcons = {\n checkmark: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n close: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n eye: make({\n path: 'M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z',\n glyph: '👁',\n }),\n eyeOff: make({\n path: 'M17.94 17.94A10 10 0 0 1 2 12s3.5-7 10-7c2 0 3.8.6 5.4 1.5 M1 1l22 22',\n glyph: '🙈',\n }),\n chevronDown: make({ path: 'm6 9 6 6 6-6', glyph: '⌄' }),\n chevronUp: make({ path: 'm18 15-6-6-6 6', glyph: '⌃' }),\n alertTriangle: make({\n path: 'M12 9v4 M12 17h.01 M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z',\n glyph: '⚠',\n }),\n info: make({\n path: 'M12 8h.01 M11 12h1v4h1 M12 22C6.48 22 2 17.52 2 12 2 6.48 6.48 2 12 2c5.52 0 10 4.48 10 10 0 5.52-4.48 10-10 10z',\n glyph: 'ⓘ',\n }),\n check: make({ path: 'M20 6 9 17l-5-5', glyph: '✓' }),\n x: make({ path: 'M18 6 6 18 M6 6l12 12', glyph: '✕' }),\n};\n","/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// cn — class-name merger. clsx-compatible shape.\n//\n// Intentionally does NOT deduplicate Tailwind conflicts (e.g. \"text-sm text-lg\").\n// That's `tailwind-merge`'s job; we defer adding it until a component actually\n// needs it, to keep the core tree-shakable and the runtime zero-dep.\n\nexport type ClassInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | ClassInput[]\n | Record<string, boolean | number | null | undefined>;\n\nexport function cn(...inputs: ClassInput[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n append(out, input);\n }\n return out.join(' ');\n}\n\nfunction append(out: string[], input: ClassInput): void {\n if (!input) {\n return;\n }\n if (typeof input === 'string') {\n if (input.length > 0) {\n out.push(input);\n }\n return;\n }\n if (typeof input === 'number') {\n return; // numbers are never class names\n }\n if (Array.isArray(input)) {\n for (const inner of input) {\n append(out, inner);\n }\n return;\n }\n if (typeof input === 'object') {\n for (const key of Object.keys(input)) {\n if (input[key]) {\n out.push(key);\n }\n }\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport type { TextStyle, ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type BadgeTone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger';\nexport type BadgeAppearance = 'solid' | 'outline' | 'soft';\n\nexport type BadgeProps = {\n /**\n * Semantic color of the badge.\n * @defaultValue 'neutral'\n */\n tone?: BadgeTone;\n /**\n * Visual treatment.\n * - `soft` (default) — tinted background with darker tone-colored text. Modern, calm.\n * - `solid` — filled tone background, white text. Loud, used sparingly.\n * - `outline` — border in tone, transparent background, tone-colored text.\n * @defaultValue 'soft'\n */\n appearance?: BadgeAppearance;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// Layout-only base; theme-driven dimensions are merged inside the\n// component so a custom theme reshapes the badge.\nconst BASE_CONTAINER_LAYOUT: ViewStyle = {\n alignSelf: 'flex-start',\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 2, // component-density literal — not from theme (no 2px spacing token)\n borderWidth: 1,\n borderColor: 'transparent',\n};\n\n/**\n * Compact pill for status, counts, or labels. Use sparingly — every badge\n * draws the eye, so a row of five is no longer a row of badges.\n *\n * Tone palettes flip with the active color scheme — light mode uses the\n * familiar pastel scale (Tailwind 50/200/800), dark mode uses the deep\n * 950/700/100 scale so a soft success badge reads as a calm tinted chip\n * on either surface, never as a glaring pastel on a dark page.\n */\nexport const Badge = ({ tone = 'neutral', appearance = 'soft', children, className, testID }: BadgeProps) => {\n const colors = useThemeColors();\n const isDark = useColorScheme() === 'dark';\n const invertedText = colors.semantic.text.inverted;\n\n let palette: {\n soft: { bg: string; fg: string };\n solid: { bg: string; fg: string };\n outline: { border: string; fg: string };\n };\n if (tone === 'neutral') {\n palette = {\n soft: isDark\n ? { bg: colors.color.neutral['800'], fg: colors.color.neutral['100'] }\n : { bg: colors.color.neutral['100'], fg: colors.color.neutral['700'] },\n solid: {\n bg: isDark ? colors.color.neutral['200'] : colors.color.neutral['700'],\n fg: isDark ? colors.color.neutral['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.neutral['600'] : colors.color.neutral['300'],\n fg: isDark ? colors.color.neutral['100'] : colors.color.neutral['700'],\n },\n };\n } else if (tone === 'primary') {\n palette = {\n soft: isDark\n ? { bg: colors.color.primary['900'], fg: colors.color.primary['200'] }\n : { bg: colors.color.primary['100'], fg: colors.color.primary['800'] },\n solid: {\n bg: isDark ? colors.color.primary['400'] : colors.color.primary['600'],\n fg: isDark ? colors.color.primary['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.primary['400'] : colors.color.primary['300'],\n fg: isDark ? colors.color.primary['200'] : colors.color.primary['700'],\n },\n };\n } else if (tone === 'success') {\n palette = {\n soft: isDark ? { bg: '#14532d', fg: '#bbf7d0' } : { bg: '#dcfce7', fg: '#166534' },\n solid: { bg: colors.color.success, fg: invertedText },\n outline: { border: colors.color.success, fg: isDark ? '#bbf7d0' : '#166534' },\n };\n } else if (tone === 'warning') {\n palette = {\n soft: isDark ? { bg: '#78350f', fg: '#fde68a' } : { bg: '#fef3c7', fg: '#92400e' },\n solid: { bg: colors.color.warning, fg: invertedText },\n outline: { border: colors.color.warning, fg: isDark ? '#fde68a' : '#92400e' },\n };\n } else {\n palette = {\n soft: isDark ? { bg: '#7f1d1d', fg: '#fecaca' } : { bg: '#fee2e2', fg: '#991b1b' },\n solid: { bg: colors.color.danger, fg: invertedText },\n outline: { border: colors.color.danger, fg: isDark ? '#fecaca' : '#991b1b' },\n };\n }\n\n const baseContainer: ViewStyle = {\n ...BASE_CONTAINER_LAYOUT,\n gap: px(colors.spacing['1']),\n paddingHorizontal: px(colors.spacing['2']),\n borderRadius: px(colors.radius.full),\n };\n const containerStyle: ViewStyle = (() => {\n if (appearance === 'solid') {\n return { ...baseContainer, backgroundColor: palette.solid.bg };\n }\n if (appearance === 'outline') {\n return { ...baseContainer, backgroundColor: 'transparent', borderColor: palette.outline.border };\n }\n return { ...baseContainer, backgroundColor: palette.soft.bg };\n })();\n const textColor = (() => {\n if (appearance === 'solid') {\n return palette.solid.fg;\n }\n if (appearance === 'outline') {\n return palette.outline.fg;\n }\n return palette.soft.fg;\n })();\n const baseText: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.xs),\n fontWeight: colors.fontWeight.medium as '500',\n lineHeight: px(colors.fontSize.xs) * Number(colors.lineHeight.normal),\n };\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn('inline-flex flex-row items-center gap-1 rounded-full px-2 py-0.5 border', className)}\n style={containerStyle}\n >\n <RNText style={{ ...baseText, color: textColor }}>{children}</RNText>\n </View>\n );\n};\n","'use client';\n\n// =============================================================================\n// FloatButton — cross-platform Floating Action Button (FAB)\n//\n// Two-component public surface:\n// <FloatButton> — standalone FAB\n// <FloatButton.Group> — cluster with click/long-press expansion\n// <FloatButton.BackToTop> — preset that scrolls a target ref to top\n//\n// Design direction: restrained-editorial (Linear/Stripe energy). Two-layer\n// brand-tinted shadows, subtle hover lift, snappy press scale, no bouncy\n// physics. Cross-platform via the same Pressable + inline style pattern\n// used in Pagination.\n// =============================================================================\n\nimport {\n type ComponentProps,\n cloneElement,\n createContext,\n type FC,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { GestureResponderEvent, ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, type ScrollView, useWindowDimensions, View } from 'react-native';\nimport { SafeAreaInsetsContext } from 'react-native-safe-area-context';\nimport { useTranslation } from '../../i18n/use-translation';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Badge, type BadgeProps } from '../Badge';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type FloatButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'surface';\nexport type FloatButtonShape = 'circle' | 'square' | 'extended';\nexport type FloatButtonSize = 'small' | 'medium' | 'large';\nexport type FloatButtonPlacement = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\nexport type FloatButtonGroupTrigger = 'click' | 'longPress' | 'manual';\nexport type FloatButtonGroupDirection = 'up' | 'down' | 'left' | 'right';\n\n/** Badge passthrough — same shape as our `<Badge>` accepts. */\nexport type FloatButtonBadge = {\n /** Numeric badge — render the number inside a small pill. */\n count?: number;\n /** Show a dot instead of a count (overrides `count`). */\n dot?: boolean;\n /** Badge tone — defaults to `'danger'` (the canonical \"unread\" red). */\n tone?: BadgeProps['tone'];\n};\n\ntype FloatButtonBaseProps = {\n /** Required unless `label` is set. */\n icon?: ReactNode;\n /** Inline label — turns the button extended (auto-sets `shape='extended'`). */\n label?: string;\n /** A11y label — falls back to `label`; required when icon-only. */\n accessibilityLabel?: string;\n /** Visual shape. @defaultValue 'circle' (or 'extended' when both icon + label are set) */\n shape?: FloatButtonShape;\n /** Size — sm=40, md=56, lg=72. @defaultValue 'medium' */\n size?: FloatButtonSize;\n /** Color/tone variant. @defaultValue 'primary' */\n variant?: FloatButtonVariant;\n /** Tooltip — web: hover/focus tooltip; native (in a group): always-visible label chip. */\n tooltip?: string;\n /** Badge — count, dot, or tone passthrough. */\n badge?: FloatButtonBadge;\n /** Disable interaction. */\n disabled?: boolean;\n /** Show a spinner in place of the icon. */\n loading?: boolean;\n /** Animate in/out. @defaultValue true */\n visible?: boolean;\n /** Where to anchor the FAB on the screen. @defaultValue 'bottom-right' */\n placement?: FloatButtonPlacement;\n /**\n * Positioning strategy. `'fixed'` pins to the viewport (web `position: fixed`,\n * native absolute-on-root); `'absolute'` pins to the nearest positioned\n * ancestor — useful for docs previews and any contained-canvas layout.\n * @defaultValue 'fixed'\n */\n positioning?: 'fixed' | 'absolute';\n /** Additional offset from the placement corner (px). @defaultValue { x: 24, y: 24 } web; { x: 16, y: 16 } native */\n offset?: { x?: number; y?: number };\n /**\n * On native, auto-add the device's bottom safe-area inset to the offset.\n * **Default is `false`** because RN has no `position: 'fixed'` — every\n * `FloatButton` is parent-relative, and adding the screen-bottom inset\n * to a card-relative offset pushes the button up by ~34pt for no reason.\n * Set this to `true` only when you're certain the FAB's parent reaches\n * the screen edge (e.g. a root-level container without `SafeAreaView`).\n * @defaultValue false\n */\n respectSafeArea?: boolean;\n /** Anchor link — renders as an `<a>` on web. */\n href?: string;\n /** RTL flips left/right placements. @defaultValue 'ltr' */\n dir?: 'ltr' | 'rtl';\n /** Long-press handler — native first-class, web maps to contextmenu. */\n onLongPress?: (event: GestureResponderEvent) => void;\n /** Forward ARIA attributes (used internally by Group for `aria-haspopup`/`aria-expanded`). */\n 'aria-haspopup'?: 'menu' | 'true' | boolean;\n 'aria-expanded'?: boolean;\n /**\n * Press handler. We're React-Native-first, so `onPress` is the primary\n * surface and works on both platforms. `onClick` is also accepted for\n * web-mental-model consumers; if BOTH are defined, `onPress` wins (and\n * a dev-only warning fires).\n */\n onPress?: (event: GestureResponderEvent) => void;\n /** Web-y alias for `onPress` — same handler, mapped at the call site. */\n onClick?: (event: { preventDefault?: () => void }) => void;\n className?: string;\n testID?: string;\n /** Set internally when the button lives inside a `<FloatButton.Group>`. */\n children?: ReactNode;\n};\n\nexport type FloatButtonProps = FloatButtonBaseProps;\n\n// =============================================================================\n// Context — shared by Group and its children\n// =============================================================================\n\ntype FloatButtonGroupContextValue = {\n /** Whether the group is expanded. */\n open: boolean;\n /** Close the group programmatically (used by action items after press). */\n close: () => void;\n /** Direction of expansion. */\n direction: FloatButtonGroupDirection;\n /** Whether items are inside a group — used to skip per-item positioning. */\n insideGroup: true;\n /** Index of the action item, used for staggered animation. */\n indexRef: { next: number };\n};\n\nconst FloatButtonGroupContext = createContext<FloatButtonGroupContextValue | null>(null);\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nconst SIZE_MAP: Record<FloatButtonSize, { diameter: number; iconSize: number; fontSize: number; padX: number }> = {\n small: { diameter: 40, iconSize: 18, fontSize: 14, padX: 16 },\n medium: { diameter: 56, iconSize: 22, fontSize: 14, padX: 20 },\n large: { diameter: 72, iconSize: 28, fontSize: 16, padX: 28 },\n};\n\nconst DEFAULT_OFFSET_WEB = 24;\nconst DEFAULT_OFFSET_NATIVE = 16;\n\n// =============================================================================\n// Standalone FloatButton\n// =============================================================================\n\n/**\n * Floating Action Button — a fixed-position button that hovers above page\n * content. Cross-platform (web + native), badge-aware, link-capable, and\n * safe-area-aware on native.\n *\n * @example\n * <FloatButton icon={<Plus />} accessibilityLabel=\"New item\" onPress={...} />\n *\n * @example\n * <FloatButton icon={<Help />} label=\"Help\" shape=\"extended\" />\n */\n// Defined here as a plain function; the Group / BackToTop static properties\n// are attached at the bottom of the file via `Object.assign` so the dist\n// `.d.ts` surface preserves them (a bare type cast on the const doesn't\n// propagate through tsup's declaration emitter).\nconst FloatButtonRoot = (props: FloatButtonProps) => {\n const groupCtx = useContext(FloatButtonGroupContext);\n const colors = useThemeColors();\n // Read the context directly (instead of `useSafeAreaInsets()`) so the\n // component degrades silently when no `<SafeAreaProvider>` is mounted —\n // the canonical case on web. With a provider, real insets flow through;\n // without one, we get zeros and no console warning.\n const insets = useContext(SafeAreaInsetsContext) ?? { top: 0, right: 0, bottom: 0, left: 0 };\n const { width: viewportWidth } = useWindowDimensions();\n\n const {\n icon,\n label,\n accessibilityLabel,\n shape: shapeProp,\n size = groupCtx ? 'small' : 'medium',\n variant = 'primary',\n tooltip,\n badge,\n disabled = false,\n loading = false,\n visible = true,\n placement = 'bottom-right',\n positioning = 'fixed',\n offset,\n respectSafeArea = false,\n href,\n dir = 'ltr',\n onLongPress,\n className,\n testID,\n children,\n onPress,\n onClick,\n 'aria-haspopup': ariaHasPopup,\n 'aria-expanded': ariaExpanded,\n } = props;\n\n // `onPress` wins when both are defined — emit a dev-only warning so the\n // intent is unambiguous. (We can't make this a TS error because\n // exactOptionalPropertyTypes + spread in FloatButton.Group fights\n // discriminated unions.)\n if (process.env.NODE_ENV !== 'production' && onPress && onClick) {\n console.warn('<FloatButton>: both `onPress` and `onClick` defined — `onPress` will be used. Pick one.');\n }\n const onPressFn = onPress ?? onClick;\n\n // Auto-extend when both icon + label are present and shape is unset.\n const shape: FloatButtonShape = shapeProp ?? (label && icon ? 'extended' : 'circle');\n const sizeTokens = SIZE_MAP[size];\n\n // Tooltip visibility (web: hover/focus; native-in-group: always when group open)\n const [tooltipVisible, setTooltipVisible] = useState(false);\n\n // Track press-tap separately so we don't run onLongPress -> onPress.\n const longPressFiredRef = useRef(false);\n\n const handlePress = useCallback(\n (event: GestureResponderEvent) => {\n if (disabled || loading) {\n return;\n }\n if (longPressFiredRef.current) {\n longPressFiredRef.current = false;\n return;\n }\n // If we're inside a Group, close it after a press (unless this IS the\n // group's trigger — group trigger is rendered from inside Group itself,\n // not by a child FloatButton).\n if (groupCtx) {\n groupCtx.close();\n }\n (onPressFn as ((e: GestureResponderEvent) => void) | undefined)?.(event);\n },\n [disabled, loading, groupCtx, onPressFn]\n );\n\n const handleLongPress = useCallback(\n (event: GestureResponderEvent) => {\n if (disabled || loading) {\n return;\n }\n longPressFiredRef.current = true;\n onLongPress?.(event);\n },\n [disabled, loading, onLongPress]\n );\n\n // ----- variant resolution -----\n const variantStyle = useMemo(() => resolveVariantStyle(variant, colors), [variant, colors]);\n\n // ----- positioning -----\n const positionStyle: ViewStyle | null = groupCtx\n ? null // children of a group don't position themselves; the group handles layout\n : resolvePositionStyle({\n placement,\n positioning,\n offset: offset ?? {},\n dir,\n insets,\n viewportWidth,\n respectSafeArea,\n });\n\n // ----- visibility / disabled opacity -----\n const containerOpacity = visible ? (disabled ? 0.4 : 1) : 0;\n\n // ----- shape dimensions -----\n const isExtended = shape === 'extended' && Boolean(label);\n const containerDimensions: ViewStyle = isExtended\n ? {\n minWidth: sizeTokens.diameter,\n height: sizeTokens.diameter,\n paddingHorizontal: sizeTokens.padX,\n borderRadius: sizeTokens.diameter / 2,\n }\n : {\n width: sizeTokens.diameter,\n height: sizeTokens.diameter,\n borderRadius: shape === 'square' ? px(colors.radius.lg) : sizeTokens.diameter / 2,\n };\n\n const a11yLabel = accessibilityLabel ?? label ?? tooltip;\n\n if (process.env.NODE_ENV !== 'production' && !a11yLabel && icon) {\n console.warn('<FloatButton>: provide `accessibilityLabel` or `label` for icon-only buttons (WCAG 2.2).');\n }\n\n // ----- shadow tokens (brand-tinted on primary) -----\n const shadowStyle = useMemo(() => resolveShadowStyle(variant, colors), [variant, colors]);\n\n // ----- inner content (icon + optional label) -----\n const contentNode = (\n <>\n {loading ? (\n <SmallSpinner color={variantStyle.fg} size={sizeTokens.iconSize} />\n ) : (\n <View\n style={\n {\n width: sizeTokens.iconSize,\n height: sizeTokens.iconSize,\n alignItems: 'center',\n justifyContent: 'center',\n // Sets CSS `color` on the wrapper div under RN-Web\n // so any nested SVG using `stroke=\"currentColor\"`\n // or `fill=\"currentColor\"` inherits the variant fg.\n // RN ignores `color` on a View (it's only valid on\n // Text) — silently dropped on native.\n color: variantStyle.fg,\n } as unknown as ViewStyle\n }\n >\n {tintIcon(icon, variantStyle.fg)}\n </View>\n )}\n {isExtended ? (\n <RNText\n style={{\n marginLeft: px(colors.spacing['2']),\n color: variantStyle.fg,\n fontFamily: colors.fontFamily.body,\n fontSize: sizeTokens.fontSize,\n fontWeight: colors.fontWeight.medium as '500',\n letterSpacing: -0.1,\n fontVariant: ['tabular-nums'],\n }}\n numberOfLines={1}\n >\n {label}\n </RNText>\n ) : null}\n </>\n );\n\n // ----- wrapper: positioning + opacity transitions -----\n const wrapperStyle: ViewStyle = {\n ...(positionStyle ?? {}),\n opacity: containerOpacity,\n // Web-only transitions for visibility/scale (silently dropped on native).\n ...(Platform.OS === 'web'\n ? ({\n transitionProperty: 'opacity, transform',\n transitionDuration: '180ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n pointerEvents: visible ? 'auto' : 'none',\n } as ViewStyle)\n : null),\n };\n\n // ----- the button itself (Pressable + visual style) -----\n const buttonNode = (\n <Pressable\n {...(testID !== undefined ? { testID } : {})}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={a11yLabel}\n aria-label={a11yLabel}\n disabled={disabled || loading}\n aria-disabled={disabled || undefined}\n aria-busy={loading || undefined}\n {...(ariaHasPopup !== undefined ? { 'aria-haspopup': ariaHasPopup } : {})}\n {...(ariaExpanded !== undefined ? { 'aria-expanded': ariaExpanded } : {})}\n onPress={handlePress}\n onLongPress={onLongPress ? handleLongPress : undefined}\n // Web hover/focus reveals the tooltip; rely on Pressable's hover state.\n onHoverIn={() => setTooltipVisible(true)}\n onHoverOut={() => setTooltipVisible(false)}\n onFocus={() => setTooltipVisible(true)}\n onBlur={() => setTooltipVisible(false)}\n // Pre-compute the static style; iOS's Pressable renderer was\n // observed to drop properties from function-form `style` returns\n // intermittently — same bug we hit on the Pagination selected pill.\n // The function form is web-only (where it reads `hovered`); on\n // native we pass a plain object that always renders.\n style={\n Platform.OS === 'web'\n ? (state) => {\n const { pressed, hovered } = state as { pressed: boolean; hovered?: boolean };\n return {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: pressed\n ? variantStyle.bgPressed\n : hovered\n ? variantStyle.bgHover\n : variantStyle.bg,\n ...(variantStyle.borderColor\n ? { borderWidth: 1, borderColor: variantStyle.borderColor }\n : null),\n ...containerDimensions,\n ...shadowStyle.resting,\n ...(pressed ? { transform: [{ scale: 0.96 }], ...shadowStyle.pressed } : null),\n ...(hovered && !pressed\n ? { transform: [{ translateY: -1 }], ...shadowStyle.hover }\n : null),\n ...({\n transitionProperty: 'background-color, box-shadow, transform',\n transitionDuration: '150ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n cursor: disabled || loading ? 'not-allowed' : 'pointer',\n outlineWidth: 0,\n } as object),\n } as ViewStyle;\n }\n : ({\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: variantStyle.bg,\n ...(variantStyle.borderColor\n ? { borderWidth: 1, borderColor: variantStyle.borderColor }\n : null),\n ...containerDimensions,\n ...shadowStyle.resting,\n } as ViewStyle)\n }\n >\n {contentNode}\n </Pressable>\n );\n\n // Web `<a>` wrapper for href integration. Non-anchor on native.\n const linkedButton =\n href && Platform.OS === 'web' ? (\n <a\n href={href}\n aria-label={a11yLabel}\n style={{ textDecoration: 'none', color: 'inherit', display: 'inline-flex' }}\n onClick={(e) => {\n if (onPressFn) {\n // Let consumer's handler decide; if they call preventDefault we honor it.\n (onPressFn as (e: { preventDefault?: () => void }) => void)({\n preventDefault: () => e.preventDefault(),\n });\n }\n }}\n >\n {buttonNode}\n </a>\n ) : (\n buttonNode\n );\n\n // Tooltip chip — always visible on native when inside an open group;\n // hover/focus on web. Skipped if no tooltip text.\n const showTooltip = tooltip && (Platform.OS === 'web' ? tooltipVisible : (groupCtx?.open ?? false));\n\n return (\n <View className={cn(className)} style={wrapperStyle}>\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: px(colors.spacing['2']) }}>\n {showTooltip ? <TooltipChip text={tooltip!} /> : null}\n <View style={{ position: 'relative' }}>\n {linkedButton}\n {badge ? <BadgeOverlay badge={badge} size={size} /> : null}\n </View>\n </View>\n {children}\n </View>\n );\n};\n\n// =============================================================================\n// FloatButton.Group\n// =============================================================================\n\nexport type FloatButtonGroupProps = Omit<FloatButtonProps, 'onPress' | 'onClick' | 'onLongPress'> & {\n /** Trigger mode — `manual` requires `open` to be controlled. @defaultValue 'click' */\n trigger?: FloatButtonGroupTrigger;\n /** Controlled open state. */\n open?: boolean;\n /** Initial open state when uncontrolled. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires whenever the group opens or closes. */\n onOpenChange?: (open: boolean) => void;\n /** Direction the action items expand. @defaultValue 'up' */\n direction?: FloatButtonGroupDirection;\n /** Render a scrim/backdrop behind the open group. @defaultValue false */\n backdrop?: boolean;\n /** Override the trigger icon when collapsed. */\n expandIcon?: ReactNode;\n /** Override the trigger icon when expanded. @defaultValue rotated `expandIcon` (or `icon`) */\n collapseIcon?: ReactNode;\n /** Action items declared as data — alternative to children. */\n actions?: ReadonlyArray<FloatButtonProps>;\n};\n\nconst FloatButtonGroup: FC<FloatButtonGroupProps> = ({\n trigger = 'click',\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n direction = 'up',\n backdrop = false,\n expandIcon,\n collapseIcon,\n actions,\n children,\n ...buttonProps\n}) => {\n const isControlled = openProp !== undefined;\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n const open = isControlled ? (openProp as boolean) : innerOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInnerOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n const toggle = useCallback(() => setOpen(!open), [setOpen, open]);\n\n // Action items: flatten `actions` array into FloatButton children if given.\n const actionItems: ReactNode = actions\n ? actions.map((action, idx) => {\n // biome-ignore lint/suspicious/noArrayIndexKey: deterministic order from caller's array\n return <FloatButton key={`fab-action-${idx}`} {...(action as FloatButtonProps)} />;\n })\n : children;\n\n // The group's outer container handles positioning; children render inline.\n const groupCtxValue = useMemo<FloatButtonGroupContextValue>(\n () => ({\n open,\n close,\n direction,\n insideGroup: true as const,\n indexRef: { next: 0 },\n }),\n [open, close, direction]\n );\n\n // Trigger button (uses the same FloatButton render path but without\n // group-context positioning so it stays in the corner).\n const triggerIcon = open\n ? (collapseIcon ?? <RotatedIcon node={expandIcon ?? buttonProps.icon} />)\n : (expandIcon ?? buttonProps.icon);\n\n return (\n <FloatButtonGroupContext.Provider value={groupCtxValue}>\n {backdrop && open ? <Backdrop onPress={close} positioning={buttonProps.positioning ?? 'fixed'} /> : null}\n <GroupLayout\n direction={direction}\n placement={buttonProps.placement ?? 'bottom-right'}\n positioning={buttonProps.positioning ?? 'fixed'}\n offset={buttonProps.offset ?? {}}\n dir={buttonProps.dir ?? 'ltr'}\n >\n {open ? <View style={groupActionsLayoutStyle(direction)}>{actionItems}</View> : null}\n <FloatButton\n {...(buttonProps as FloatButtonProps)}\n icon={triggerIcon}\n {...(trigger === 'click' ? { onPress: toggle } : {})}\n {...(trigger === 'longPress' ? { onLongPress: toggle } : {})}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n />\n </GroupLayout>\n </FloatButtonGroupContext.Provider>\n );\n};\n\n// (assignment moved to the bottom-of-file Object.assign)\n\n// =============================================================================\n// FloatButton.BackToTop\n// =============================================================================\n\nexport type FloatButtonBackToTopProps = Omit<FloatButtonProps, 'icon' | 'onPress' | 'onClick' | 'visible'> & {\n /** Scroll target ref — RN ScrollView. Defaults to window on web. */\n scrollRef?: { current: ScrollView | null };\n /** Show only when the scroll target is past this many px from the top. @defaultValue 400 */\n visibilityThreshold?: number;\n};\n\nconst FloatButtonBackToTop: FC<FloatButtonBackToTopProps> = ({\n scrollRef,\n visibilityThreshold = 400,\n variant = 'surface',\n ...rest\n}) => {\n const { t } = useTranslation();\n const [visible, setVisible] = useState(false);\n\n // Web: bind to window scroll. Native: caller wires onScroll on their\n // ScrollView and updates an external state — we expose a passive read here.\n useEffect(() => {\n if (Platform.OS !== 'web' || typeof window === 'undefined') {\n return;\n }\n const onScroll = () => setVisible(window.scrollY > visibilityThreshold);\n onScroll();\n window.addEventListener('scroll', onScroll, { passive: true });\n return () => window.removeEventListener('scroll', onScroll);\n }, [visibilityThreshold]);\n\n const onPress = useCallback(() => {\n if (Platform.OS === 'web' && typeof window !== 'undefined') {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n return;\n }\n scrollRef?.current?.scrollTo?.({ y: 0, animated: true });\n }, [scrollRef]);\n\n return (\n <FloatButton\n {...(rest as FloatButtonProps)}\n variant={variant}\n visible={visible}\n icon={<defaultSemanticIcons.chevronUp size={20} />}\n accessibilityLabel={rest.accessibilityLabel ?? t('floatButton.backToTop', { defaultValue: 'Back to top' })}\n onPress={onPress}\n />\n );\n};\n\n// (assignment moved to the bottom-of-file Object.assign)\n\n/**\n * Public `FloatButton` value — the root function plus its `.Group` and\n * `.BackToTop` static members. `Object.assign` produces a value whose\n * inferred type carries the static properties, so `.d.ts` consumers can\n * write `<FloatButton.Group>` without a separate import.\n */\nexport const FloatButton = Object.assign(FloatButtonRoot, {\n Group: FloatButtonGroup,\n BackToTop: FloatButtonBackToTop,\n});\n\n// =============================================================================\n// Subcomponents\n// =============================================================================\n\nconst TooltipChip = ({ text }: { text: string }) => {\n const colors = useThemeColors();\n return (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: px(colors.radius.sm) + 2,\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 4,\n ...(Platform.OS === 'web' ? ({ boxShadow: '0 1px 2px rgba(0,0,0,0.06)' } as object) : null),\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: 13,\n lineHeight: 16,\n }}\n >\n {text}\n </RNText>\n </View>\n );\n};\n\nconst BadgeOverlay = ({ badge, size }: { badge: FloatButtonBadge; size: FloatButtonSize }) => {\n const offsetTop = size === 'large' ? -6 : -4;\n const offsetRight = size === 'large' ? -6 : -4;\n return (\n <View\n pointerEvents=\"none\"\n style={{\n position: 'absolute',\n top: offsetTop,\n right: offsetRight,\n zIndex: 1,\n }}\n >\n {badge.dot ? (\n <Badge tone={badge.tone ?? 'danger'} appearance=\"solid\">\n {' '}\n </Badge>\n ) : (\n <Badge tone={badge.tone ?? 'danger'} appearance=\"solid\">\n {String(badge.count ?? 0)}\n </Badge>\n )}\n </View>\n );\n};\n\nconst SmallSpinner = ({ color, size }: { color: string; size: number }) => {\n // Tiny CSS spinner on web; on native, defer to an opacity pulse for v1\n // (avoids importing the spinner component into the FloatButton bundle).\n if (Platform.OS === 'web') {\n return (\n <View\n style={\n {\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: 2,\n borderColor: 'transparent',\n borderTopColor: color,\n animationName: 'fb-spin',\n animationDuration: '700ms',\n animationIterationCount: 'infinite',\n animationTimingFunction: 'linear',\n } as unknown as ViewStyle\n }\n />\n );\n }\n return (\n <View\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: 2,\n borderColor: color,\n opacity: 0.6,\n }}\n />\n );\n};\n\nconst Backdrop = ({ onPress, positioning }: { onPress: () => void; positioning: 'fixed' | 'absolute' }) => {\n return (\n <Pressable\n onPress={onPress}\n accessibilityLabel=\"Close\"\n style={{\n position:\n Platform.OS === 'web' && positioning === 'fixed' ? ('fixed' as unknown as 'absolute') : 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.32)',\n zIndex: 49,\n }}\n />\n );\n};\n\nconst RotatedIcon = ({ node, color }: { node: ReactNode; color?: string }) => {\n // Forward the color from the outer `tintIcon` clone down to the inner\n // node — otherwise the morph-to-X icon stays at its default tint while\n // the surrounding FAB icons inherit the variant fg.\n const tintedNode =\n color && isValidElement(node) ? cloneElement(node as ReactElement<{ color?: string }>, { color }) : node;\n return (\n <View\n style={\n {\n transform: [{ rotate: '45deg' }],\n // CSS `color` cascades to nested `currentColor` SVGs on web.\n ...(color ? { color } : null),\n ...(Platform.OS === 'web'\n ? {\n transitionProperty: 'transform',\n transitionDuration: '200ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n }\n : null),\n } as unknown as ViewStyle\n }\n >\n {tintedNode}\n </View>\n );\n};\n\nconst GroupLayout = ({\n direction,\n placement,\n positioning,\n offset,\n dir,\n children,\n}: {\n direction: FloatButtonGroupDirection;\n placement: FloatButtonPlacement;\n positioning: 'fixed' | 'absolute';\n offset: { x?: number; y?: number };\n dir: 'ltr' | 'rtl';\n children: ReactNode;\n}) => {\n // Read the context directly (instead of `useSafeAreaInsets()`) so the\n // component degrades silently when no `<SafeAreaProvider>` is mounted —\n // the canonical case on web. With a provider, real insets flow through;\n // without one, we get zeros and no console warning.\n const insets = useContext(SafeAreaInsetsContext) ?? { top: 0, right: 0, bottom: 0, left: 0 };\n const { width: viewportWidth } = useWindowDimensions();\n const positionStyle = resolvePositionStyle({\n placement,\n positioning,\n offset,\n dir,\n insets,\n viewportWidth,\n respectSafeArea: false,\n });\n return (\n <View\n style={{\n ...positionStyle,\n flexDirection: direction === 'left' || direction === 'right' ? 'row' : 'column',\n alignItems: direction === 'left' || direction === 'right' ? 'center' : 'flex-end',\n justifyContent: direction === 'up' ? 'flex-end' : 'flex-start',\n }}\n >\n {direction === 'up' || direction === 'left'\n ? children\n : Array.isArray(children)\n ? [...children].reverse()\n : children}\n </View>\n );\n};\n\nfunction groupActionsLayoutStyle(direction: FloatButtonGroupDirection): ViewStyle {\n const isVertical = direction === 'up' || direction === 'down';\n return {\n flexDirection: isVertical ? 'column' : 'row',\n alignItems: 'flex-end',\n gap: 12,\n marginBottom: direction === 'up' ? 12 : 0,\n marginTop: direction === 'down' ? 12 : 0,\n marginRight: direction === 'left' ? 12 : 0,\n marginLeft: direction === 'right' ? 12 : 0,\n };\n}\n\n// =============================================================================\n// Style resolvers\n// =============================================================================\n\nfunction resolveVariantStyle(\n variant: FloatButtonVariant,\n colors: ReturnType<typeof useThemeColors>\n): { bg: string; bgHover: string; bgPressed: string; fg: string; borderColor?: string } {\n switch (variant) {\n case 'primary':\n return {\n bg: colors.semantic.interactive.primary,\n bgHover: colors.semantic.interactive.primaryHover,\n bgPressed: colors.semantic.interactive.primaryPressed,\n fg: colors.semantic.text.inverted,\n };\n case 'secondary':\n return {\n bg: colors.semantic.background.subtle,\n bgHover: colors.semantic.background.elevated,\n bgPressed: colors.semantic.background.subtle,\n fg: colors.semantic.text.default,\n borderColor: colors.semantic.border.default,\n };\n case 'tertiary':\n return {\n bg: 'transparent',\n bgHover: withAlpha(colors.semantic.interactive.primary, 0.08),\n bgPressed: withAlpha(colors.semantic.interactive.primary, 0.12),\n fg: colors.semantic.interactive.primary,\n borderColor: colors.semantic.interactive.primary,\n };\n case 'surface':\n return {\n bg: colors.semantic.background.elevated,\n bgHover: colors.semantic.background.subtle,\n bgPressed: colors.semantic.background.subtle,\n fg: colors.semantic.text.default,\n borderColor: colors.semantic.border.default,\n };\n }\n}\n\nfunction resolveShadowStyle(\n variant: FloatButtonVariant,\n colors: ReturnType<typeof useThemeColors>\n): { resting: ViewStyle; hover: ViewStyle; pressed: ViewStyle } {\n if (Platform.OS !== 'web') {\n // RN's elevation prop on Android maps via boxShadow polyfill; keep\n // it minimal to avoid the chunky M3 look. On iOS we rely on RN's\n // native shadow* props.\n return {\n resting: {\n shadowColor: variant === 'primary' ? colors.semantic.interactive.primary : '#000',\n shadowOffset: { width: 0, height: 6 },\n shadowOpacity: variant === 'primary' ? 0.25 : 0.12,\n shadowRadius: 16,\n elevation: 6,\n } as unknown as ViewStyle,\n hover: {} as ViewStyle,\n pressed: {\n shadowOffset: { width: 0, height: 2 },\n shadowRadius: 6,\n elevation: 2,\n } as unknown as ViewStyle,\n };\n }\n const tint = variant === 'primary' ? colors.semantic.interactive.primary : '#000';\n return {\n resting: {\n ...({\n boxShadow: `0 1px 2px rgba(0,0,0,0.06), 0 8px 24px -6px ${withAlpha(tint, variant === 'primary' ? 0.32 : 0.08)}`,\n } as unknown as ViewStyle),\n },\n hover: {\n ...({\n boxShadow: `0 2px 4px rgba(0,0,0,0.08), 0 12px 28px -6px ${withAlpha(tint, variant === 'primary' ? 0.4 : 0.12)}`,\n } as unknown as ViewStyle),\n },\n pressed: {\n ...({ boxShadow: `0 1px 2px rgba(0,0,0,0.06)` } as unknown as ViewStyle),\n },\n };\n}\n\nfunction resolvePositionStyle({\n placement,\n positioning = 'fixed',\n offset,\n dir,\n insets,\n viewportWidth,\n respectSafeArea,\n}: {\n placement: FloatButtonPlacement;\n positioning?: 'fixed' | 'absolute';\n offset: { x?: number; y?: number };\n dir: 'ltr' | 'rtl';\n insets: { top: number; right: number; bottom: number; left: number };\n viewportWidth: number;\n respectSafeArea: boolean;\n}): ViewStyle {\n const defaultOffset = Platform.OS === 'web' ? DEFAULT_OFFSET_WEB : DEFAULT_OFFSET_NATIVE;\n const x = offset.x ?? defaultOffset;\n const y = offset.y ?? defaultOffset;\n const safeBottom = Platform.OS !== 'web' && respectSafeArea ? insets.bottom : 0;\n const safeTop = Platform.OS !== 'web' && respectSafeArea ? insets.top : 0;\n\n // RTL flips left/right placements.\n const flippedPlacement: FloatButtonPlacement =\n dir === 'rtl'\n ? placement === 'bottom-right'\n ? 'bottom-left'\n : placement === 'bottom-left'\n ? 'bottom-right'\n : placement === 'top-right'\n ? 'top-left'\n : 'top-right'\n : placement;\n\n // RN doesn't have `position: 'fixed'` — only `'absolute'`. On web RN-Web\n // accepts the cast. The `positioning` prop also lets consumers force\n // `'absolute'` so the FAB pins to a positioned ancestor (docs previews).\n const cssPosition: ViewStyle['position'] =\n Platform.OS === 'web' && positioning === 'fixed' ? ('fixed' as unknown as 'absolute') : 'absolute';\n const base: ViewStyle = {\n position: cssPosition,\n zIndex: 50,\n };\n\n switch (flippedPlacement) {\n case 'bottom-right':\n return { ...base, bottom: y + safeBottom, right: x };\n case 'bottom-left':\n return { ...base, bottom: y + safeBottom, left: x };\n case 'top-right':\n return { ...base, top: y + safeTop, right: x };\n case 'top-left':\n return { ...base, top: y + safeTop, left: x };\n }\n // Suppress viewportWidth warning — reserved for future RTL/horizontal logic.\n void viewportWidth;\n return base;\n}\n\n/**\n * Force the icon's color to match the FAB's variant fg. Works for our\n * `IconComponentProps`-shaped icons (which accept `{ size, color }`) by\n * cloning the element with the resolved color; raw nodes pass through\n * unchanged and rely on the wrapper's CSS `color` for `currentColor`-based\n * SVGs. Consumer-supplied colors are intentionally overridden — inside a\n * primary FAB the icon should always read against the primary surface.\n */\nfunction tintIcon(icon: ReactNode, color: string): ReactNode {\n if (!isValidElement(icon)) {\n return icon;\n }\n return cloneElement(icon as ReactElement<{ color?: string }>, { color });\n}\n\nfunction withAlpha(color: string, alpha: number): string {\n if (color.startsWith('#') && (color.length === 7 || color.length === 4)) {\n const expanded =\n color.length === 4 ? `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` : color;\n const r = Number.parseInt(expanded.slice(1, 3), 16);\n const g = Number.parseInt(expanded.slice(3, 5), 16);\n const b = Number.parseInt(expanded.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return color;\n}\n\n// Suppress unused — ComponentProps reserved for future href-prop polymorphism.\ntype _Unused = ComponentProps<'button'>;\n"]}
|