@nori-ui/core 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Table.shared-BymRgTnY.d.cts +54 -0
- package/dist/Table.shared-BymRgTnY.d.ts +54 -0
- package/dist/{chunk-ND7MRYW7.js → chunk-2HMQDJ22.js} +4 -4
- package/dist/{chunk-ND7MRYW7.js.map → chunk-2HMQDJ22.js.map} +1 -1
- package/dist/{chunk-KCLWPSV5.js → chunk-2RL6WCFC.js} +4 -4
- package/dist/{chunk-KCLWPSV5.js.map → chunk-2RL6WCFC.js.map} +1 -1
- package/dist/{chunk-FDBQOQMW.js → chunk-3BDDPFCI.js} +3 -3
- package/dist/{chunk-FDBQOQMW.js.map → chunk-3BDDPFCI.js.map} +1 -1
- package/dist/{chunk-WOF67PKT.js → chunk-3CEJ5TB4.js} +3 -3
- package/dist/{chunk-WOF67PKT.js.map → chunk-3CEJ5TB4.js.map} +1 -1
- package/dist/{chunk-BNDUQNG7.js → chunk-3OIWAS2P.js} +3 -3
- package/dist/{chunk-BNDUQNG7.js.map → chunk-3OIWAS2P.js.map} +1 -1
- package/dist/{chunk-6JVUVBZH.js → chunk-4PUPKWEP.js} +5 -5
- package/dist/{chunk-6JVUVBZH.js.map → chunk-4PUPKWEP.js.map} +1 -1
- package/dist/{chunk-6PO2IWB3.js → chunk-4UFAZLSZ.js} +5 -3
- package/dist/chunk-4UFAZLSZ.js.map +1 -0
- package/dist/{chunk-76FZF4GM.js → chunk-5PSC5HT4.js} +8 -125
- package/dist/chunk-5PSC5HT4.js.map +1 -0
- package/dist/{chunk-LWQZ257T.js → chunk-5XEGZFG5.js} +3 -3
- package/dist/{chunk-LWQZ257T.js.map → chunk-5XEGZFG5.js.map} +1 -1
- package/dist/{chunk-WAKKQROH.js → chunk-6AD6KCVB.js} +3 -3
- package/dist/{chunk-WAKKQROH.js.map → chunk-6AD6KCVB.js.map} +1 -1
- package/dist/chunk-73CUV7MW.js +125 -0
- package/dist/chunk-73CUV7MW.js.map +1 -0
- package/dist/{chunk-GRDVE3IR.js → chunk-BZLT6R62.js} +3 -3
- package/dist/{chunk-GRDVE3IR.js.map → chunk-BZLT6R62.js.map} +1 -1
- package/dist/{chunk-Y4ZRSW35.js → chunk-CCUXO2HN.js} +3 -3
- package/dist/{chunk-Y4ZRSW35.js.map → chunk-CCUXO2HN.js.map} +1 -1
- package/dist/{chunk-2UXKXUX2.js → chunk-CPIKN4BX.js} +3 -3
- package/dist/{chunk-2UXKXUX2.js.map → chunk-CPIKN4BX.js.map} +1 -1
- package/dist/{chunk-46OT4PA6.js → chunk-DDGMLLS3.js} +3 -3
- package/dist/{chunk-46OT4PA6.js.map → chunk-DDGMLLS3.js.map} +1 -1
- package/dist/{chunk-XP55RZ3D.js → chunk-FEPTH5RV.js} +3 -3
- package/dist/{chunk-XP55RZ3D.js.map → chunk-FEPTH5RV.js.map} +1 -1
- package/dist/{chunk-MJ4AGXS7.js → chunk-GJMHNEQ3.js} +3 -3
- package/dist/{chunk-MJ4AGXS7.js.map → chunk-GJMHNEQ3.js.map} +1 -1
- package/dist/{chunk-VCJF75T2.js → chunk-JQQ3FBN7.js} +3 -3
- package/dist/{chunk-VCJF75T2.js.map → chunk-JQQ3FBN7.js.map} +1 -1
- package/dist/{chunk-O4NMS3KB.js → chunk-JXLEMBDB.js} +3 -3
- package/dist/{chunk-O4NMS3KB.js.map → chunk-JXLEMBDB.js.map} +1 -1
- package/dist/{chunk-W3HMOOON.js → chunk-JZ774T7U.js} +3 -3
- package/dist/{chunk-W3HMOOON.js.map → chunk-JZ774T7U.js.map} +1 -1
- package/dist/{chunk-SINLREQV.js → chunk-MKSDYRWQ.js} +3 -3
- package/dist/{chunk-SINLREQV.js.map → chunk-MKSDYRWQ.js.map} +1 -1
- package/dist/{chunk-AFQIK6JI.js → chunk-MRJWPRCX.js} +3 -3
- package/dist/{chunk-AFQIK6JI.js.map → chunk-MRJWPRCX.js.map} +1 -1
- package/dist/{chunk-EFK7726V.js → chunk-NF7XG2FG.js} +3 -3
- package/dist/{chunk-EFK7726V.js.map → chunk-NF7XG2FG.js.map} +1 -1
- package/dist/{chunk-WTNDPO2V.js → chunk-NNFJKRXZ.js} +3 -3
- package/dist/{chunk-WTNDPO2V.js.map → chunk-NNFJKRXZ.js.map} +1 -1
- package/dist/{chunk-CGQIVFCN.js → chunk-NRYWNOG5.js} +3 -3
- package/dist/{chunk-CGQIVFCN.js.map → chunk-NRYWNOG5.js.map} +1 -1
- package/dist/{chunk-HTF6FDB6.js → chunk-OMU4R4Y5.js} +3 -3
- package/dist/{chunk-HTF6FDB6.js.map → chunk-OMU4R4Y5.js.map} +1 -1
- package/dist/{chunk-C6TRLHMW.js → chunk-PABG3IJ6.js} +3 -3
- package/dist/{chunk-C6TRLHMW.js.map → chunk-PABG3IJ6.js.map} +1 -1
- package/dist/{chunk-RM5TSXVE.js → chunk-PNP7L4TA.js} +3 -3
- package/dist/{chunk-RM5TSXVE.js.map → chunk-PNP7L4TA.js.map} +1 -1
- package/dist/{chunk-L5X4SYJ4.js → chunk-PZS4A4VQ.js} +3 -3
- package/dist/{chunk-L5X4SYJ4.js.map → chunk-PZS4A4VQ.js.map} +1 -1
- package/dist/{chunk-4I37QSEM.js → chunk-QJVS2VXS.js} +5 -5
- package/dist/{chunk-4I37QSEM.js.map → chunk-QJVS2VXS.js.map} +1 -1
- package/dist/{chunk-H7MFAFV4.js → chunk-RUWD35UI.js} +4 -4
- package/dist/{chunk-H7MFAFV4.js.map → chunk-RUWD35UI.js.map} +1 -1
- package/dist/{chunk-5BM6H2CD.js → chunk-SFNDR6DI.js} +3 -3
- package/dist/{chunk-5BM6H2CD.js.map → chunk-SFNDR6DI.js.map} +1 -1
- package/dist/{chunk-UF5OENHV.js → chunk-TLS54G6Y.js} +3 -3
- package/dist/{chunk-UF5OENHV.js.map → chunk-TLS54G6Y.js.map} +1 -1
- package/dist/{chunk-UUXWRDWW.js → chunk-UJWCEGQY.js} +3 -3
- package/dist/{chunk-UUXWRDWW.js.map → chunk-UJWCEGQY.js.map} +1 -1
- package/dist/{chunk-UJ5KFRDE.js → chunk-UZD77M3J.js} +3 -3
- package/dist/{chunk-UJ5KFRDE.js.map → chunk-UZD77M3J.js.map} +1 -1
- package/dist/chunk-VP7DRJUZ.js +3 -0
- package/dist/chunk-VP7DRJUZ.js.map +1 -0
- package/dist/{chunk-UPVNZPFV.js → chunk-VYRJ7OE5.js} +3 -3
- package/dist/{chunk-UPVNZPFV.js.map → chunk-VYRJ7OE5.js.map} +1 -1
- package/dist/{chunk-IGLMPAWE.js → chunk-WGT345SV.js} +3 -3
- package/dist/{chunk-IGLMPAWE.js.map → chunk-WGT345SV.js.map} +1 -1
- package/dist/{chunk-F7G6R373.js → chunk-WP2Z2ATO.js} +5 -5
- package/dist/{chunk-F7G6R373.js.map → chunk-WP2Z2ATO.js.map} +1 -1
- package/dist/chunk-WYPGQVDV.js +145 -0
- package/dist/chunk-WYPGQVDV.js.map +1 -0
- package/dist/{chunk-GELLSU64.js → chunk-XALU6LOT.js} +3 -3
- package/dist/{chunk-GELLSU64.js.map → chunk-XALU6LOT.js.map} +1 -1
- package/dist/{chunk-VMAGFYHG.js → chunk-Y5TJ7CAX.js} +3 -3
- package/dist/{chunk-VMAGFYHG.js.map → chunk-Y5TJ7CAX.js.map} +1 -1
- package/dist/chunk-YZ27OS2R.js +202 -0
- package/dist/chunk-YZ27OS2R.js.map +1 -0
- package/dist/client.cjs +449 -119
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +3 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.js +50 -46
- 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 +3 -1
- 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 +3 -1
- 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.js +2 -2
- package/dist/components/Combobox/index.js +3 -3
- package/dist/components/ContextMenu/index.js +4 -4
- package/dist/components/DataTable/index.cjs +770 -0
- package/dist/components/DataTable/index.cjs.map +1 -0
- package/dist/components/DataTable/index.d.cts +53 -0
- package/dist/components/DataTable/index.d.ts +53 -0
- package/dist/components/DataTable/index.js +8 -0
- package/dist/components/DataTable/index.js.map +1 -0
- package/dist/components/DatePicker/index.cjs +3 -1
- package/dist/components/DatePicker/index.cjs.map +1 -1
- package/dist/components/DatePicker/index.js +7 -7
- package/dist/components/Dialog/index.js +2 -2
- package/dist/components/DropdownMenu/index.js +3 -3
- package/dist/components/Field/index.cjs +3 -1
- package/dist/components/Field/index.cjs.map +1 -1
- package/dist/components/Field/index.d.cts +2 -2
- package/dist/components/Field/index.d.ts +2 -2
- package/dist/components/Field/index.js +3 -3
- package/dist/components/FloatButton/index.cjs +3 -1
- 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.js +2 -2
- package/dist/components/Label/index.cjs +3 -1
- package/dist/components/Label/index.cjs.map +1 -1
- package/dist/components/Label/index.js +3 -3
- package/dist/components/Pagination/index.cjs +3 -1
- package/dist/components/Pagination/index.cjs.map +1 -1
- package/dist/components/Pagination/index.js +6 -5
- package/dist/components/Popover/index.js +2 -2
- package/dist/components/Progress/index.js +2 -2
- package/dist/components/Radio/index.js +2 -2
- package/dist/components/SegmentedControl/index.js +2 -2
- package/dist/components/Select/index.js +2 -2
- package/dist/components/Sheet/index.js +2 -2
- package/dist/components/Switch/index.js +2 -2
- package/dist/components/Table/index.cjs +461 -0
- package/dist/components/Table/index.cjs.map +1 -0
- package/dist/components/Table/index.d.cts +16 -0
- package/dist/components/Table/index.d.ts +16 -0
- package/dist/components/Table/index.js +7 -0
- package/dist/components/Table/index.js.map +1 -0
- package/dist/components/Tabs/index.js +2 -2
- package/dist/components/Text/index.js +2 -2
- package/dist/components/TextArea/index.js +3 -3
- 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 +3 -1
- package/dist/i18n/index.cjs.map +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/index.cjs +449 -119
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +47 -43
- package/dist/slot/index.d.cts +2 -2
- package/dist/slot/index.d.ts +2 -2
- package/package.json +1 -1
- package/dist/chunk-6PO2IWB3.js.map +0 -1
- package/dist/chunk-76FZF4GM.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/i18n/default-dictionary.ts","../../../src/i18n/resolve.ts","../../../src/i18n/context.tsx","../../../src/i18n/use-translation.ts","../../../src/slot/compose-refs.ts","../../../src/slot/slot.tsx","../../../src/theme/px.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/utils/cn.ts","../../../src/components/Popover/Popover.tsx","../../../src/components/Breadcrumb/Breadcrumb.tsx"],"names":["createContext","useContext","forwardRef","Slot","isValidElement","Children","cloneElement","Platform","useState","Appearance","useEffect","useCallback","useId","useRef","jsx","Pressable","RNText","content","Dimensions","View","Modal","useMemo","Fragment","jsxs","ScrollView"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Dictionary } from './types';\n\n/**\n * Default English strings used by library components.\n *\n * Key naming convention:\n * <component>.<purpose>[_plural-form]\n *\n * Plural suffixes follow i18next: `_zero`, `_one`, `_two`, `_few`, `_many`, `_other`.\n * Interpolation uses `{{name}}` — double braces, no spaces, by convention.\n */\nexport const defaultDictionary: Dictionary = {\n // generic / shared\n 'common.cancel': 'Cancel',\n 'common.confirm': 'Confirm',\n 'common.close': 'Close',\n 'common.back': 'Back',\n 'common.loading': 'Loading',\n 'common.error': 'Something went wrong',\n 'common.retry': 'Try again',\n\n // breadcrumb\n 'breadcrumb.ariaLabel': 'Breadcrumb',\n 'breadcrumb.expandLabel': 'Show full path',\n 'breadcrumb.ellipsisLabel': 'More',\n 'breadcrumb.currentPageLabel': 'Current page',\n 'breadcrumb.siblingMenuLabel': 'Open sibling pages',\n\n // pagination\n 'pagination.ariaLabel': 'Pagination',\n 'pagination.previous': 'Previous page',\n 'pagination.next': 'Next page',\n 'pagination.first': 'First page',\n 'pagination.last': 'Last page',\n 'pagination.ellipsis': 'More pages',\n 'pagination.currentPage': 'Current page',\n 'pagination.gotoPage': 'Go to page {{page}}',\n 'pagination.range': 'Showing {{from}}–{{to}} of {{total}}',\n 'pagination.pageOf': 'Page {{page}} of {{total}}',\n 'pagination.pageSizeLabel': 'Items per page',\n 'pagination.jumperLabel': 'Go to page',\n 'pagination.jumperPlaceholder': '#',\n\n // floatButton\n 'floatButton.backToTop': 'Back to top',\n\n // calendar\n 'calendar.header.previous': 'Previous month',\n 'calendar.header.next': 'Next month',\n 'calendar.header.openMonthView': 'Open month picker',\n 'calendar.header.openYearView': 'Open year picker',\n 'calendar.header.openDayView': 'Open day picker',\n 'calendar.today': 'Today',\n 'calendar.clear': 'Clear',\n\n // button\n 'button.loadingLabel': 'Loading',\n\n // input\n 'input.clear': 'Clear',\n 'input.passwordShow': 'Show password',\n 'input.passwordHide': 'Hide password',\n\n // checkbox / switch\n 'checkbox.checked': 'Checked',\n 'checkbox.unchecked': 'Unchecked',\n 'switch.on': 'On',\n 'switch.off': 'Off',\n\n // field\n 'field.requiredIndicator': '*',\n 'field.requiredLabel': 'required',\n};\n","import type { Dictionary, I18nInput, I18nOptions, TranslateFn } from './types';\n\n/**\n * Normalizes the consumer's i18n input (undefined | dictionary | function) into a\n * uniform TranslateFn. Internal code only calls the returned function.\n *\n * Precedence for a given key lookup:\n * 1. consumer function (if provided) — called verbatim, no further fallback\n * 2. consumer dictionary (if provided)\n * 3. library defaults\n * 4. options.defaultValue\n * 5. the key itself (so missing strings are visible in dev, not silent)\n */\nexport function resolveI18n(input: I18nInput, defaults: Dictionary): TranslateFn {\n if (typeof input === 'function') {\n // Wrap so the consumer fn is always invoked with (key, options) — enables\n // Jest `toHaveBeenCalledWith(key, undefined)` assertions and mirrors i18next's\n // own call signature exactly.\n return (keyOrKeys, options) => input(keyOrKeys, options);\n }\n\n const dict = input ?? {};\n\n return (keyOrKeys, options) => {\n const keys = Array.isArray(keyOrKeys) ? keyOrKeys : [keyOrKeys];\n for (const rawKey of keys) {\n const key = pluralize(rawKey, options?.count);\n const template = dict[key] ?? defaults[key];\n if (template !== undefined) {\n return interpolate(template, options);\n }\n }\n // exhausted the key list\n const lastKey = keys[keys.length - 1];\n if (options?.defaultValue !== undefined) {\n return interpolate(options.defaultValue, options);\n }\n return lastKey ?? '';\n };\n}\n\nfunction pluralize(key: string, count: number | undefined): string {\n if (count === undefined) {\n return key;\n }\n // Minimal English pluralization — extend with ICU rules later if needed.\n if (count === 1) {\n return `${key}_one`;\n }\n return `${key}_other`;\n}\n\nfunction interpolate(template: string, options: I18nOptions | undefined): string {\n if (!options) {\n return template;\n }\n return template.replace(/\\{\\{\\s*([A-Za-z0-9_.-]+)\\s*\\}\\}/g, (_match, name: string) => {\n const value = options[name];\n return value === undefined || value === null ? '' : String(value);\n });\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext, useMemo } from 'react';\nimport { defaultDictionary } from './default-dictionary';\nimport { resolveI18n } from './resolve';\nimport type { I18nInput, TranslateFn } from './types';\n\nexport type I18nContextValue = {\n t: TranslateFn;\n};\n\n// Default context value uses the built-in English dictionary; consumers without\n// a provider still get a working t().\nconst defaultValue: I18nContextValue = {\n t: resolveI18n(undefined, defaultDictionary),\n};\n\nexport const I18nContext = createContext<I18nContextValue>(defaultValue);\nI18nContext.displayName = 'I18nContext';\n\nexport type I18nProviderProps = {\n i18n?: I18nInput;\n children?: ReactNode;\n};\n\nexport function I18nProvider({ i18n, children }: I18nProviderProps) {\n const value = useMemo<I18nContextValue>(() => ({ t: resolveI18n(i18n, defaultDictionary) }), [i18n]);\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n","'use client';\n\nimport { useContext } from 'react';\nimport { I18nContext, type I18nContextValue } from './context';\n\nexport function useTranslation(): I18nContextValue {\n return useContext(I18nContext);\n}\n","// composeRefs — merges multiple React refs (callback or object) into a single callback.\n// Derived from Radix UI's approach; reimplemented here so we don't take a Radix dependency.\n\nimport type { MutableRefObject, Ref, RefCallback } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\nexport function composeRefs<T>(...refs: Array<PossibleRef<T>>): RefCallback<T> {\n return (node: T | null) => {\n for (const ref of refs) {\n if (ref == null) {\n continue;\n }\n if (typeof ref === 'function') {\n ref(node);\n } else {\n // React's MutableRefObject typing — we assign .current directly.\n (ref as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n","import type { CSSProperties, ReactElement, Ref } from 'react';\nimport { Children, cloneElement, forwardRef, isValidElement } from 'react';\nimport { composeRefs } from './compose-refs';\n\ntype AnyProps = Record<string, unknown>;\n\nexport type SlotProps = {\n children?: React.ReactNode;\n} & AnyProps;\n\nexport const Slot = forwardRef<unknown, SlotProps>(function Slot(props, forwardedRef) {\n const { children, ...slotProps } = props;\n\n if (!isValidElement(children)) {\n return null;\n }\n\n // Assert that children is a single React element with props — we've narrowed above.\n const child = Children.only(children) as ReactElement<AnyProps> & { ref?: Ref<unknown> };\n const merged = mergeProps(slotProps, child.props);\n\n // Merge refs: Slot's forwarded ref + the child's own ref (if any).\n const childRef = (child as unknown as { ref?: Ref<unknown> }).ref;\n if (forwardedRef || childRef) {\n (merged as AnyProps).ref = composeRefs(forwardedRef, childRef);\n }\n\n return cloneElement(child, merged);\n});\nSlot.displayName = 'Slot';\n\nfunction mergeProps(outer: AnyProps, inner: AnyProps): AnyProps {\n // Inner (child) wins for everything except: className (concatenated), style (merged), and\n // event handlers (composed — outer runs first, then inner).\n const merged: AnyProps = { ...outer };\n\n for (const key of Object.keys(inner)) {\n const outerValue = outer[key];\n const innerValue = inner[key];\n\n if (key === 'className' || key === 'class') {\n merged[key] = joinClass(outerValue, innerValue);\n continue;\n }\n\n if (key === 'style') {\n merged[key] = {\n ...(outerValue as CSSProperties | undefined),\n ...(innerValue as CSSProperties | undefined),\n };\n continue;\n }\n\n if (isEventHandler(key, outerValue, innerValue)) {\n merged[key] = composeHandlers(outerValue as Fn, innerValue as Fn);\n continue;\n }\n\n merged[key] = innerValue;\n }\n\n return merged;\n}\n\nfunction joinClass(outer: unknown, inner: unknown): string | undefined {\n const a = typeof outer === 'string' ? outer : '';\n const b = typeof inner === 'string' ? inner : '';\n const joined = [a, b].filter(Boolean).join(' ');\n return joined.length > 0 ? joined : undefined;\n}\n\ntype Fn = (...args: unknown[]) => unknown;\n\nfunction isEventHandler(key: string, outer: unknown, inner: unknown): boolean {\n if (!key.startsWith('on') || key.length < 3) {\n return false;\n }\n if (key[2] !== key[2]?.toUpperCase()) {\n return false;\n }\n return typeof outer === 'function' && typeof inner === 'function';\n}\n\nfunction composeHandlers(outer: Fn, inner: Fn): Fn {\n return (...args: unknown[]) => {\n outer(...args);\n inner(...args);\n };\n}\n","/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#fafafa\",\n elevated: \"#ffffff\",\n subtle: \"#f4f4f5\",\n },\n border: {\n default: \"#e4e4e7\",\n strong: \"#d4d4d8\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#0d9488\",\n primaryHover: \"#0f766e\",\n primaryPressed: \"#115e59\",\n },\n text: {\n default: \"#18181b\",\n inverted: \"#fafafa\",\n muted: \"#52525b\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n\n// Dark mode overrides\n// Generated for dark mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const themeDark = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#18181b\",\n elevated: \"#3f3f46\",\n subtle: \"#27272a\",\n },\n border: {\n default: \"#3f3f46\",\n strong: \"#52525b\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#2dd4bf\",\n primaryHover: \"#5eead4\",\n primaryPressed: \"#99f6e4\",\n },\n text: {\n default: \"#fafafa\",\n inverted: \"#18181b\",\n muted: \"#a1a1aa\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\n","'use client';\n\nimport { themeDark as defaultDark, theme as defaultLight, type Theme } from '@nori-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\n\n/**\n * A `NoriTheme` is a paired light/dark palette. The active half is picked\n * by `useColorScheme()` so the same theme object covers both schemes.\n *\n * Build one yourself by spreading the defaults and overriding the colors\n * you care about, or pick a preset from `@nori-ui/core/themes` (see the\n * Theming docs for examples).\n */\nexport type NoriTheme = {\n light: Theme;\n dark: Theme;\n};\n\n/**\n * Default Nori palette — teal primary on a warm-paper light surface, and\n * teal-400 primary on a deep-zinc dark surface. Mirrors the `theme` /\n * `themeDark` exports from @nori-ui/tokens.\n */\nexport const defaultTheme: NoriTheme = {\n light: defaultLight,\n dark: defaultDark as unknown as Theme,\n};\n\n// Context value is the FULL pair, not the active half. `useThemeColors`\n// (the hook components reach for) resolves it to the right one based on\n// the current color scheme. Storing the pair means a parent only has to\n// declare the theme once — switching scheme is a separate concern.\nexport const ThemeContext = createContext<NoriTheme>(defaultTheme);\nThemeContext.displayName = 'ThemeContext';\n\nexport type ThemeProviderProps = {\n /**\n * The theme to apply to descendants. Pass either:\n * - a full `NoriTheme` (`{ light, dark }`) — both schemes covered\n * - a single `Theme` — used for both light and dark (rare; mostly\n * useful when you ONLY ever render in one scheme)\n * - omit — falls back to the Nori default (teal palette)\n */\n theme?: NoriTheme | Theme;\n children?: ReactNode;\n};\n\nconst isFullTheme = (t: NoriTheme | Theme): t is NoriTheme => 'light' in t && 'dark' in t;\n\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const value: NoriTheme =\n theme === undefined ? defaultTheme : isFullTheme(theme) ? theme : { light: theme, dark: theme };\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n","'use client';\n\nimport { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\nimport { Appearance, Platform } from 'react-native';\n\nexport type ColorScheme = 'light' | 'dark';\n\n// Override channel so a parent can force a scheme (e.g. an app shell with\n// hard-coded dark chrome that wants nested components to render against\n// the dark token half regardless of the OS Appearance). `null` means\n// \"no override — use the system signal\".\nconst ColorSchemeOverrideContext = createContext<ColorScheme | null>(null);\nColorSchemeOverrideContext.displayName = 'ColorSchemeOverrideContext';\n\nexport type ColorSchemeProviderProps = {\n /** Force a specific scheme for descendants. */\n value: ColorScheme;\n children?: ReactNode;\n};\n\n/**\n * Forces a color scheme for all descendants. Useful when a screen's chrome\n * is hard-coded to one scheme (e.g. a forced-dark editorial surface) and\n * you want library components inside it to follow that, not the OS.\n */\nexport function ColorSchemeProvider({ value, children }: ColorSchemeProviderProps) {\n return <ColorSchemeOverrideContext.Provider value={value}>{children}</ColorSchemeOverrideContext.Provider>;\n}\n\nconst isWeb = Platform.OS === 'web';\n\n// Web: a document is \"in dark mode\" when the root <html> element carries\n// the `dark` class (Tailwind / Fumadocs convention) OR a `data-theme=\"dark\"`\n// attribute (matches the `darkMode` selectors in our Tailwind preset).\n// We deliberately don't fall back to `prefers-color-scheme` — the app\n// usually owns that decision and writes it onto <html>; tracking the system\n// preference too would fight the app's chosen value.\nfunction readWebScheme(): ColorScheme {\n if (typeof document === 'undefined') {\n return 'light';\n }\n const root = document.documentElement;\n if (root.classList.contains('dark')) {\n return 'dark';\n }\n if (root.getAttribute('data-theme') === 'dark') {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Returns the current color scheme — `'light'` or `'dark'`.\n *\n * On web: observes the root `<html>` element's `class=\"dark\"` and\n * `data-theme=\"dark\"` attribute (the same signals our Tailwind preset\n * keys on). Updates live as those flip.\n *\n * On native: delegates to `react-native`'s `Appearance` API so the hook\n * tracks the OS preference without extra wiring.\n *\n * Components consume this indirectly via `useThemeColors()`; reach for\n * this directly when you need the raw scheme (e.g. to swap an icon).\n */\nexport function useColorScheme(): ColorScheme {\n // A `<ColorSchemeProvider value=\"dark\">` ancestor (or NoriProvider's\n // `colorScheme` prop, which mounts one) wins over the OS signal — the\n // app shell knows which scheme its chrome is locked to.\n const override = useContext(ColorSchemeOverrideContext);\n\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (isWeb) {\n return readWebScheme();\n }\n return (Appearance.getColorScheme() ?? 'light') as ColorScheme;\n });\n\n useEffect(() => {\n if (isWeb) {\n const root = document.documentElement;\n const update = () => setScheme(readWebScheme());\n const observer = new MutationObserver(update);\n observer.observe(root, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n // Sync once after mount in case SSR shipped a different value.\n update();\n return () => observer.disconnect();\n }\n\n const sub = Appearance.addChangeListener(({ colorScheme }) => {\n setScheme((colorScheme ?? 'light') as ColorScheme);\n });\n return () => sub.remove();\n }, []);\n\n return override ?? scheme;\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport { useContext } from 'react';\nimport { ThemeContext } from './context';\nimport { useColorScheme } from './use-color-scheme';\n\n/**\n * Returns the active token palette — `theme.light` in light mode,\n * `theme.dark` in dark mode. Resolves the theme via `ThemeContext` so\n * any ancestor `<ThemeProvider theme={...}>` flows through. With no\n * provider in the tree, the default Nori palette (teal) is used.\n *\n * Use this **inside a component** when you need a hex value for a React\n * Native `style` prop (`backgroundColor`, `borderColor`, etc.).\n *\n * Note: className-based styles (e.g. `bg-semantic-interactive-primary`)\n * compile against the @nori-ui/tokens palette at build time and don't\n * follow `<ThemeProvider>` overrides today. Inline styles via this hook\n * always do — and inline beats class on CSS specificity, so the visible\n * color you see is whatever the hook resolves to. CSS-variable theming\n * for the className path is a planned follow-up.\n */\nexport function useThemeColors(): Theme {\n const scheme = useColorScheme();\n const themePair = useContext(ThemeContext);\n return scheme === 'dark' ? themePair.dark : themePair.light;\n}\n","// cn — class-name merger. clsx-compatible shape.\n//\n// Intentionally does NOT deduplicate Tailwind conflicts (e.g. \"text-sm text-lg\").\n// That's `tailwind-merge`'s job; we defer adding it until a component actually\n// needs it, to keep the core tree-shakable and the runtime zero-dep.\n\nexport type ClassInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | ClassInput[]\n | Record<string, boolean | number | null | undefined>;\n\nexport function cn(...inputs: ClassInput[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n append(out, input);\n }\n return out.join(' ');\n}\n\nfunction append(out: string[], input: ClassInput): void {\n if (!input) {\n return;\n }\n if (typeof input === 'string') {\n if (input.length > 0) {\n out.push(input);\n }\n return;\n }\n if (typeof input === 'number') {\n return; // numbers are never class names\n }\n if (Array.isArray(input)) {\n for (const inner of input) {\n append(out, inner);\n }\n return;\n }\n if (typeof input === 'object') {\n for (const key of Object.keys(input)) {\n if (input[key]) {\n out.push(key);\n }\n }\n }\n}\n","'use client';\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Dimensions, Modal, Platform, Pressable, Text as RNText, View } from 'react-native';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type PopoverSide = 'top' | 'right' | 'bottom' | 'left';\nexport type PopoverAlign = 'start' | 'center' | 'end';\n\ntype TriggerRect = { top: number; left: number; width: number; height: number };\n\ntype PopoverContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n contentId: string;\n triggerRef: { current: HTMLElement | null };\n contentRef: { current: HTMLDivElement | null };\n triggerRect: TriggerRect | null;\n measureTrigger: () => void;\n};\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null);\n\nconst usePopoverContext = (label: string): PopoverContextValue => {\n const ctx = useContext(PopoverContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Popover>.`);\n }\n return ctx;\n};\n\n/**\n * @internal — exposes the Popover context so higher-level overlay components\n * (DropdownMenu, ContextMenu) can interact with trigger measurement and open\n * state without going through PopoverTrigger.\n */\nexport { usePopoverContext };\n\nexport type PopoverProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n};\n\n/**\n * Non-modal floating panel anchored to a trigger element. Use for help\n * tooltips with rich content, color pickers, or profile previews.\n *\n * Composition: `Popover` (root, owns open state), `PopoverTrigger`\n * (forwards events to its child via Slot when `asChild`), `PopoverContent`\n * (the floating surface).\n *\n * Differences from `Dialog`: non-modal — does NOT trap focus or lock\n * scroll. Tab moves outside as normal. Differences from `Tooltip`: can\n * contain interactive content (buttons, inputs, links) and dismisses on\n * outside-click + Escape rather than mouse-leave.\n *\n * Behavior:\n * - Trigger click toggles open/close.\n * - Click outside the content (and outside the trigger) closes.\n * - Escape closes.\n *\n * Cross-platform: uses RN `<Modal>` as the visibility/portal primitive on\n * native (transparent backdrop, tap-outside-to-close). On web, the content\n * uses `position: fixed` + a measured trigger rect so it escapes any\n * ancestor `overflow: hidden`.\n */\nconst PopoverRoot = ({ open, defaultOpen = false, onOpenChange, children }: PopoverProps) => {\n const [inner, setInner] = useState<boolean>(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? open : inner;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const baseId = useId();\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n // Measure the trigger so the content can render with `position: fixed` +\n // computed coords. position:fixed escapes any ancestor's overflow:hidden\n // (e.g. fumadocs Tabs panes, our Preview frame), which is the single\n // biggest source of \"the popup got cut off\" bugs.\n const [triggerRect, setTriggerRect] = useState<TriggerRect | null>(null);\n const measureTrigger = useCallback(() => {\n const node = triggerRef.current;\n if (!node || typeof node.getBoundingClientRect !== 'function') {\n return;\n }\n const rect = node.getBoundingClientRect();\n setTriggerRect({ top: rect.top, left: rect.left, width: rect.width, height: rect.height });\n }, []);\n\n const ctxValue: PopoverContextValue = {\n open: current,\n setOpen,\n contentId: `${baseId}-content`,\n triggerRef,\n contentRef,\n triggerRect,\n measureTrigger,\n };\n\n return <PopoverContext.Provider value={ctxValue}>{children}</PopoverContext.Provider>;\n};\n\nexport type PopoverTriggerProps = {\n /** Render the child as the trigger (Slot pattern). Default true — pass `false` for an inline pressable. */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Element that toggles the popover. Uses `asChild` by default so any\n * element (Button, Link, custom Pressable) becomes the trigger.\n *\n * The trigger element gets `aria-haspopup=\"dialog\"` and `aria-expanded`\n * so assistive tech announces the relationship.\n */\nexport const PopoverTrigger = ({ asChild = true, children, className, testID }: PopoverTriggerProps) => {\n const ctx = usePopoverContext('PopoverTrigger');\n const onPress = useCallback(() => {\n ctx.measureTrigger();\n ctx.setOpen(!ctx.open);\n }, [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n // Pass both onClick (web HTML buttons) AND onPress (RN Pressable /\n // our own Button) so the trigger fires regardless of which event\n // model the wrapped child speaks. The child's existing handler\n // runs first, then we toggle.\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.measureTrigger();\n ctx.setOpen(!ctx.open);\n };\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }}\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n aria-controls={ctx.contentId}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n ref={(node) => {\n ctx.triggerRef.current = node as unknown as HTMLElement | null;\n }}\n onPress={onPress}\n {...({\n 'aria-haspopup': 'dialog',\n 'aria-expanded': ctx.open,\n 'aria-controls': ctx.contentId,\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// On native, raw strings rendered as children of a non-Text component\n// throw \"Text strings must be rendered within a <Text> component\". On\n// web, react-native-web silently tolerates it. Wrap any string/number\n// children in an RNText so the same JSX renders cleanly on both\n// platforms. Non-string children are passed through unchanged.\nfunction wrapStringChildren(children: ReactNode): ReactNode {\n if (typeof children === 'string' || typeof children === 'number') {\n return <RNText>{children}</RNText>;\n }\n return children;\n}\n\nconst GAP = 4; // visual gap between trigger and content\nconst MIN_WIDTH = 200;\n// Margin reserved on each side so the popover never butts against the\n// viewport edge. Matches the 8px safe-area we use for native modal pads.\nconst VIEWPORT_MARGIN = 8;\n\nfunction computePosition(\n rect: TriggerRect,\n side: PopoverSide,\n align: PopoverAlign,\n contentSize: { width: number; height: number } | null\n): { top: number; left: number } {\n const cw = contentSize?.width ?? MIN_WIDTH;\n const ch = contentSize?.height ?? 0;\n\n let top = 0;\n let left = 0;\n\n switch (side) {\n case 'top':\n top = rect.top - GAP - ch;\n break;\n case 'bottom':\n top = rect.top + rect.height + GAP;\n break;\n case 'left':\n left = rect.left - GAP - cw;\n break;\n case 'right':\n left = rect.left + rect.width + GAP;\n break;\n }\n\n if (side === 'top' || side === 'bottom') {\n switch (align) {\n case 'start':\n left = rect.left;\n break;\n case 'center':\n left = rect.left + rect.width / 2 - cw / 2;\n break;\n case 'end':\n left = rect.left + rect.width - cw;\n break;\n }\n } else {\n switch (align) {\n case 'start':\n top = rect.top;\n break;\n case 'center':\n top = rect.top + rect.height / 2 - ch / 2;\n break;\n case 'end':\n top = rect.top + rect.height - ch;\n break;\n }\n }\n\n return { top, left };\n}\n\nexport type PopoverContentProps = {\n /** Side of the trigger to anchor on. @defaultValue 'bottom' */\n side?: PopoverSide;\n /** Alignment along the trigger edge. @defaultValue 'center' */\n align?: PopoverAlign;\n children?: ReactNode;\n className?: string;\n testID?: string;\n /** Accessible label when no visible heading is present. */\n 'aria-label'?: string;\n};\n\n/**\n * The floating popover surface. Renders only while open. On web uses\n * `position: fixed` with a measured trigger rect so it escapes any\n * ancestor `overflow: hidden`. Non-modal: focus is NOT trapped inside —\n * the user can tab back out as normal.\n *\n * ARIA: `role=\"dialog\"` (without `aria-modal`) so assistive tech\n * announces it as a grouping but doesn't suppress the rest of the page.\n */\nexport const PopoverContent = ({\n side = 'bottom',\n align = 'center',\n children,\n className,\n testID,\n ...rest\n}: PopoverContentProps) => {\n const ctx = usePopoverContext('PopoverContent');\n const colors = useThemeColors();\n const ariaLabel = rest['aria-label'];\n\n // Measure content size after first paint so we can anchor `top`-style\n // popups (which need to know content height to render above the trigger).\n const [contentSize, setContentSize] = useState<{ width: number; height: number } | null>(null);\n\n // Web-only side effects: outside-click close, Escape close, re-measure\n // on resize. RN Modal handles its own dismissal on native (tap-outside\n // is the transparent overlay's onPress).\n useEffect(() => {\n if (!ctx.open) {\n return;\n }\n if (Platform.OS !== 'web') {\n return;\n }\n if (typeof document === 'undefined') {\n return;\n }\n\n ctx.measureTrigger();\n\n const onDocMouseDown = (event: MouseEvent) => {\n const target = event.target as Node;\n const trigger = ctx.triggerRef.current;\n const content = ctx.contentRef.current;\n if (trigger?.contains(target)) {\n return;\n }\n if (content?.contains(target)) {\n return;\n }\n ctx.setOpen(false);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n ctx.setOpen(false);\n }\n };\n const onResize = () => ctx.measureTrigger();\n const onScroll = () => ctx.measureTrigger();\n\n document.addEventListener('mousedown', onDocMouseDown);\n document.addEventListener('keydown', onKeyDown);\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n return () => {\n document.removeEventListener('mousedown', onDocMouseDown);\n document.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('resize', onResize);\n window.removeEventListener('scroll', onScroll, true);\n };\n // ctx is the provider's stable identity; we only care about open transitions.\n }, [ctx.open, ctx.measureTrigger, ctx.setOpen, ctx.triggerRef, ctx.contentRef]);\n\n // Reset measured size when popover closes so reopening re-measures fresh.\n useEffect(() => {\n if (!ctx.open) {\n setContentSize(null);\n }\n }, [ctx.open]);\n\n if (!ctx.open) {\n return null;\n }\n\n const position = ctx.triggerRect ? computePosition(ctx.triggerRect, side, align, contentSize) : null;\n\n // Viewport-aware max width. Web uses Dimensions.get('window') which\n // react-native-web maps to window.innerWidth; native uses the same API\n // for the device window. Subtract margin on both sides so content\n // doesn't kiss the screen edge.\n const viewportWidth = Dimensions.get('window').width;\n const maxContentWidth = Math.max(MIN_WIDTH, viewportWidth - VIEWPORT_MARGIN * 2);\n\n const contentBaseStyle: ViewStyle = {\n minWidth: MIN_WIDTH,\n maxWidth: maxContentWidth,\n borderRadius: px(colors.radius.lg),\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n backgroundColor: colors.semantic.background.elevated,\n padding: px(colors.spacing['4']),\n ...(Platform.OS === 'web'\n ? ({\n boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n // Subtle scale-in. Skipped on native (do nothing fancy there).\n transition: 'opacity 120ms ease-out, transform 120ms ease-out',\n transform: 'scale(1)',\n opacity: 1,\n } as ViewStyle)\n : { elevation: 8 }),\n };\n\n // Clamp `left` so the popover stays within the viewport even when the\n // trigger sits near the right edge. First-paint fallback uses\n // `maxContentWidth` (the cap we apply via maxWidth above) — content\n // is allowed to grow up to that size, so assuming worst-case avoids\n // a one-frame overflow before measurement settles.\n const measuredWidth = contentSize?.width ?? maxContentWidth;\n const clampedLeft = position\n ? Math.min(\n Math.max(VIEWPORT_MARGIN, position.left),\n Math.max(VIEWPORT_MARGIN, viewportWidth - measuredWidth - VIEWPORT_MARGIN)\n )\n : 0;\n\n const positionedStyle: ViewStyle =\n Platform.OS === 'web'\n ? position\n ? ({\n position: 'fixed' as unknown as 'absolute',\n top: position.top,\n left: clampedLeft,\n zIndex: 50,\n } as ViewStyle)\n : ({\n // Trigger not yet measured — render off-screen for a\n // frame to avoid a flash at (0,0).\n position: 'fixed' as unknown as 'absolute',\n top: -9999,\n left: -9999,\n zIndex: 50,\n } as ViewStyle)\n : {};\n\n const content = (\n <View\n ref={(node) => {\n ctx.contentRef.current = node as unknown as HTMLDivElement | null;\n if (Platform.OS !== 'web') {\n return;\n }\n if (!node) {\n return;\n }\n if (typeof (node as unknown as HTMLDivElement).getBoundingClientRect !== 'function') {\n return;\n }\n const rect = (node as unknown as HTMLDivElement).getBoundingClientRect();\n if (!contentSize || contentSize.width !== rect.width || contentSize.height !== rect.height) {\n setContentSize({ width: rect.width, height: rect.height });\n }\n }}\n {...({\n role: 'dialog',\n id: ctx.contentId,\n ...(ariaLabel !== undefined ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n className={cn(\n 'rounded-lg border border-semantic-border-default bg-semantic-background-elevated',\n className\n )}\n style={[contentBaseStyle, positionedStyle]}\n >\n {children}\n </View>\n );\n\n if (Platform.OS === 'web') {\n return content;\n }\n\n // Native: use Modal as the floating layer with a transparent backdrop.\n // Tap on the backdrop closes the popover.\n return (\n <Modal visible={ctx.open} transparent animationType=\"fade\" onRequestClose={() => ctx.setOpen(false)}>\n <Pressable\n accessibilityRole=\"none\"\n aria-hidden={true}\n onPress={() => ctx.setOpen(false)}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'transparent',\n }}\n >\n <Pressable\n onPress={(event) => event.stopPropagation?.()}\n style={{\n position: 'absolute',\n top: ctx.triggerRect\n ? side === 'top'\n ? Math.max(VIEWPORT_MARGIN, ctx.triggerRect.top - GAP - 80)\n : ctx.triggerRect.top + ctx.triggerRect.height + GAP\n : 80,\n // Clamp horizontally so a wide popover near the\n // right edge can still grow leftward without\n // overflowing the screen.\n left: ctx.triggerRect\n ? Math.min(\n Math.max(VIEWPORT_MARGIN, ctx.triggerRect.left),\n Math.max(VIEWPORT_MARGIN, viewportWidth - measuredWidth - VIEWPORT_MARGIN)\n )\n : VIEWPORT_MARGIN * 2,\n }}\n >\n {content}\n </Pressable>\n </Pressable>\n </Modal>\n );\n};\n\n/**\n * Public `Popover` value — the root function plus its `.Trigger` and `.Content`\n * static members. `Object.assign` produces a value whose inferred type carries\n * the static properties, so `.d.ts` consumers can write `<Popover.Trigger>`\n * without a separate import.\n */\nexport const Popover = Object.assign(PopoverRoot, {\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n});\n","'use client';\n\n// Breadcrumb — cross-platform, agent-friendly, width-aware.\n//\n// Two equivalent APIs:\n//\n// 1. Items-array (terse, agent-friendly, full-feature):\n//\n// <Breadcrumb\n// items={[\n// { label: 'Home', href: '/' },\n// { label: 'Docs', href: '/docs' },\n// { label: 'Breadcrumb', current: true },\n// ]}\n// separator=\"/\"\n// collapseOnOverflow\n// />\n//\n// 2. Compound (full JSX control):\n//\n// <Breadcrumb separator=\"/\">\n// <Breadcrumb.List>\n// <Breadcrumb.Item><Breadcrumb.Link href=\"/\">Home</Breadcrumb.Link></Breadcrumb.Item>\n// <Breadcrumb.Item><Breadcrumb.Link href=\"/docs\">Docs</Breadcrumb.Link></Breadcrumb.Item>\n// <Breadcrumb.Item><Breadcrumb.Page>Breadcrumb</Breadcrumb.Page></Breadcrumb.Item>\n// </Breadcrumb.List>\n// </Breadcrumb>\n//\n// Key design notes:\n// - Width-based collapse works on BOTH platforms via React Native's\n// `onLayout` (which react-native-web shims via ResizeObserver). A\n// hidden measurement copy of the full list reports per-item widths;\n// the visible list renders only the items that fit.\n// - Auto-`aria-current=\"page\"` on the last item or any item flagged\n// `current`.\n// - JSON-LD BreadcrumbList schema emitted on web for SEO + LLM ingest\n// (opt-out via `schemaOrg={false}`). Injected client-side via\n// `document.head`; SSR consumers can use the exported\n// `getBreadcrumbJsonLd()` helper with their framework's metadata API.\n// - Per-item `siblings` opens a sibling menu (the VSCode/file-path\n// pattern). Uses our `Popover` primitive.\n\nimport {\n Children,\n type ComponentType,\n createContext,\n Fragment,\n isValidElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { LayoutChangeEvent, ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, ScrollView, View } from 'react-native';\nimport { useTranslation } from '../../i18n/use-translation';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Popover } from '../Popover';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Where the ellipsis sends the user when tapped/clicked. */\nexport type BreadcrumbExpandBehavior =\n /** Replace `…` with all hidden items inline (MUI). Web default. */\n | 'inline'\n /** Open a popover/sheet listing the hidden items (Primer / iOS). Native default. */\n | 'menu'\n /** Don't collapse — fall back to a horizontal scroll container. Useful for IDE-style file paths. */\n | 'scroll'\n /** Render `…` but don't react to interaction. Pure visual hint. */\n | 'none';\n\nexport type BreadcrumbSeparatorContext = {\n /** Index of the item PRECEDING this separator. */\n fromIndex: number;\n /** Total visible items. */\n visibleCount: number;\n /** Reading direction at render time. */\n dir: 'ltr' | 'rtl';\n};\n\nexport type BreadcrumbSeparatorValue = string | ReactNode | ((ctx: BreadcrumbSeparatorContext) => ReactNode);\n\nexport type BreadcrumbIcon = ComponentType<{ size?: number; color?: string }>;\n\nexport type BreadcrumbSibling = {\n /** Visible label. */\n label: ReactNode;\n /** Link target. Omit for an `onSelect`-driven sibling. */\n href?: string;\n /** Optional leading icon. */\n icon?: BreadcrumbIcon;\n /** Click / tap handler. */\n onSelect?: () => void;\n /** Render as inactive in the sibling menu. */\n disabled?: boolean;\n};\n\nexport type BreadcrumbItemData = {\n /** Visible label. Strings are wrapped in `<Text>`; ReactNode passes through. */\n label: ReactNode;\n /** Link target. When omitted and not `current`, the item renders as a button (use with `onSelect`). */\n href?: string;\n /** Leading icon component (lucide, custom, …). Sized to the line height. */\n icon?: BreadcrumbIcon;\n /** Marks this item as the current page. The last item is auto-flagged when no item is explicitly current. */\n current?: boolean;\n /** Sibling list — when provided, the item gets a chevron and opens a popover menu of siblings on tap. */\n siblings?: BreadcrumbSibling[];\n /** Render a skeleton instead of the label — useful while async paths resolve. */\n loading?: boolean;\n /** Click / tap handler when `href` is absent. */\n onSelect?: () => void;\n /** Stable key for React's reconciler. Defaults to the item index. */\n key?: string | number;\n /** Override per-item label truncation in characters. 0 disables truncation. */\n maxLabelLength?: number;\n};\n\nexport type BreadcrumbProps = {\n /** Items-array mode. When provided, `children` is ignored. */\n items?: ReadonlyArray<BreadcrumbItemData>;\n /**\n * Visual separator between items. Strings render as plain text; nodes\n * render as-is; functions receive `(ctx)` and return a node.\n * @defaultValue a chevron glyph (auto-flips for RTL)\n */\n separator?: BreadcrumbSeparatorValue;\n /**\n * Maximum number of visible items. The middle is collapsed into a\n * single ellipsis; the first / last items are kept by default.\n * Pass `0` or `undefined` to disable count-based collapse.\n */\n maxItems?: number;\n /** How many items at the START of the list stay visible when the middle collapses. @defaultValue 1 */\n itemsBeforeCollapse?: number;\n /** How many items at the END of the list stay visible when the middle collapses. @defaultValue 1 */\n itemsAfterCollapse?: number;\n /**\n * Width-based collapse using `onLayout` (works on RN-Web via the\n * built-in ResizeObserver shim and on native via the layout system).\n * The library renders a hidden measurement copy of every item, then\n * shows only the items that fit the container — middle items are\n * folded into the ellipsis. Pass `false` to opt out and let the row\n * grow to its natural width (it will overflow its parent if the\n * parent does not provide its own scroll/clip handling).\n * @defaultValue true\n */\n collapseOnOverflow?: boolean;\n /**\n * What the ellipsis does when tapped/clicked.\n * @defaultValue 'inline' on web, 'menu' on native\n */\n expandBehavior?: BreadcrumbExpandBehavior;\n /** Override the default i18n string for the \"show full path\" SR label. */\n expandLabel?: string;\n /** Override the default i18n string for the ellipsis SR label. */\n ellipsisLabel?: string;\n /**\n * Visually-hidden prefix announced before the current page's label.\n * Helps screen readers convey \"Current page: Settings\" instead of \"Settings\".\n */\n currentPageLabel?: string;\n /** Override the SR label for sibling menus opened from a crumb. */\n siblingMenuLabel?: string;\n /** Visible aria-label on the wrapping `<nav>`. @defaultValue translated \"Breadcrumb\" */\n ariaLabel?: string;\n /**\n * Emit JSON-LD `BreadcrumbList` structured data for SEO + LLM\n * ingest. Web only; ignored on native.\n * @defaultValue true (only when `items` is provided AND on web)\n */\n schemaOrg?: boolean;\n /**\n * Reading direction. RTL flips the default chevron separator and the\n * collapse logic so the start/end stay anchored to the right edge.\n * @defaultValue 'ltr'\n */\n dir?: 'ltr' | 'rtl';\n /**\n * Truncate each item's label after this many characters. Per-item\n * `maxLabelLength` overrides this. @defaultValue 0 (no truncation)\n */\n maxLabelLength?: number;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// =============================================================================\n// Context (compound mode only)\n// =============================================================================\n\ntype BreadcrumbContextValue = {\n separator: BreadcrumbSeparatorValue;\n dir: 'ltr' | 'rtl';\n currentPageLabel: string;\n siblingMenuLabel: string;\n maxLabelLength: number;\n};\n\nconst BreadcrumbContext = createContext<BreadcrumbContextValue | null>(null);\n\nconst useBreadcrumbContext = (label: string): BreadcrumbContextValue => {\n const ctx = useContext(BreadcrumbContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Breadcrumb>.`);\n }\n return ctx;\n};\n\n// =============================================================================\n// Defaults / markers\n// =============================================================================\n\nconst DEFAULT_ITEMS_BEFORE = 1;\nconst DEFAULT_ITEMS_AFTER = 1;\n\ntype CompoundChildKind = 'item' | 'separator';\nconst COMPOUND_KIND_KEY = '__nori_breadcrumb_kind__';\n\nfunction tagComponent<T>(component: T, kind: CompoundChildKind): T {\n (component as unknown as Record<string, unknown>)[COMPOUND_KIND_KEY] = kind;\n return component;\n}\n\nfunction getCompoundKind(node: ReactNode): CompoundChildKind | undefined {\n if (!isValidElement(node)) {\n return undefined;\n }\n const type = node.type as unknown as { [k: string]: unknown };\n const tagged = type?.[COMPOUND_KIND_KEY];\n return tagged === 'item' || tagged === 'separator' ? tagged : undefined;\n}\n\n// =============================================================================\n// Default chevron separator\n// =============================================================================\n\nconst DefaultChevron = ({ dir }: { dir: 'ltr' | 'rtl' }) => {\n const colors = useThemeColors();\n const flipped = dir === 'rtl';\n if (Platform.OS === 'web') {\n return (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors.semantic.text.muted}\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{ transform: flipped ? 'scaleX(-1)' : undefined, flexShrink: 0 }}\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n }\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n fontSize: 14,\n lineHeight: 20,\n color: colors.semantic.text.muted,\n transform: flipped ? [{ scaleX: -1 }] : undefined,\n }}\n >\n ›\n </RNText>\n );\n};\n\nconst SeparatorText = ({ children }: { children: ReactNode }) => {\n const colors = useThemeColors();\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n fontSize: px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.md) * 1.4,\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n paddingHorizontal: 2,\n }}\n >\n {children}\n </RNText>\n );\n};\n\nfunction renderSeparator(separator: BreadcrumbSeparatorValue | undefined, ctx: BreadcrumbSeparatorContext): ReactNode {\n if (separator === undefined) {\n return <DefaultChevron dir={ctx.dir} />;\n }\n if (typeof separator === 'function') {\n return separator(ctx);\n }\n if (typeof separator === 'string') {\n return <SeparatorText>{separator}</SeparatorText>;\n }\n return separator;\n}\n\n// =============================================================================\n// Width-based overflow fit\n// =============================================================================\n\ntype OverflowFitArgs = {\n enabled: boolean;\n /** Total candidate items (after count-collapse). */\n itemCount: number;\n itemsBeforeCollapse: number;\n itemsAfterCollapse: number;\n};\n\ntype OverflowFitState = {\n visibleIndices: Set<number>;\n ready: boolean;\n onContainerLayout: (event: LayoutChangeEvent) => void;\n onItemLayout: (index: number) => (event: LayoutChangeEvent) => void;\n onEllipsisLayout: (event: LayoutChangeEvent) => void;\n onSeparatorLayout: (event: LayoutChangeEvent) => void;\n};\n\nfunction useOverflowFit({\n enabled,\n itemCount,\n itemsBeforeCollapse,\n itemsAfterCollapse,\n}: OverflowFitArgs): OverflowFitState {\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n const itemWidthsRef = useRef<Map<number, number>>(new Map());\n const ellipsisWidthRef = useRef<number>(0);\n const separatorWidthRef = useRef<number>(0);\n // The widths above live in refs so we can write to them inside layout\n // callbacks without React's setState quotas. But the fit algorithm\n // depends on them — so any change has to invalidate the visibleIndices\n // memo. Bumping `widthsTick` does both: triggers a re-render AND adds\n // a memo dependency that actually changes between writes.\n const [widthsTick, setWidthsTick] = useState(0);\n\n const onContainerLayout = useCallback((event: LayoutChangeEvent) => {\n const w = event.nativeEvent.layout.width;\n setContainerWidth((prev) => (prev !== null && Math.abs(prev - w) < 0.5 ? prev : w));\n }, []);\n\n const onItemLayout = useCallback(\n (index: number) => (event: LayoutChangeEvent) => {\n const w = event.nativeEvent.layout.width;\n const prev = itemWidthsRef.current.get(index);\n if (prev === undefined || Math.abs(prev - w) >= 0.5) {\n itemWidthsRef.current.set(index, w);\n setWidthsTick((t) => t + 1);\n }\n },\n []\n );\n\n const onEllipsisLayout = useCallback((event: LayoutChangeEvent) => {\n const w = event.nativeEvent.layout.width;\n if (Math.abs(ellipsisWidthRef.current - w) >= 0.5) {\n ellipsisWidthRef.current = w;\n setWidthsTick((t) => t + 1);\n }\n }, []);\n\n const onSeparatorLayout = useCallback((event: LayoutChangeEvent) => {\n const w = event.nativeEvent.layout.width;\n if (Math.abs(separatorWidthRef.current - w) >= 0.5) {\n separatorWidthRef.current = w;\n setWidthsTick((t) => t + 1);\n }\n }, []);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: widthsTick is a manual invalidation signal for ref-stored measurements; the algorithm reads itemWidthsRef/ellipsisWidthRef/separatorWidthRef which biome can't see through\n const visibleIndices = useMemo<Set<number>>(() => {\n const all = new Set<number>();\n for (let i = 0; i < itemCount; i += 1) {\n all.add(i);\n }\n if (!enabled || containerWidth === null || itemCount === 0) {\n return all;\n }\n const widths = itemWidthsRef.current;\n // Wait for every item to report a width — incomplete measurements\n // can collapse a long item that actually fits.\n if (widths.size < itemCount) {\n return all;\n }\n const sep = separatorWidthRef.current;\n const ell = ellipsisWidthRef.current;\n\n // Total of the full list = sum(items) + sep * (count - 1).\n let total = 0;\n for (let i = 0; i < itemCount; i += 1) {\n total += widths.get(i) ?? 0;\n }\n total += sep * Math.max(0, itemCount - 1);\n if (total <= containerWidth) {\n return all;\n }\n\n const before = Math.max(0, Math.min(itemsBeforeCollapse, itemCount));\n const after = Math.max(0, Math.min(itemsAfterCollapse, itemCount - before));\n\n // Anchors are the items the user has guaranteed to keep visible.\n // Start with them, plus the ellipsis cell, then grow inward as\n // long as we have budget.\n const anchorIndices = new Set<number>();\n for (let i = 0; i < before; i += 1) {\n anchorIndices.add(i);\n }\n for (let i = itemCount - after; i < itemCount; i += 1) {\n anchorIndices.add(i);\n }\n let used = 0;\n for (const idx of anchorIndices) {\n used += widths.get(idx) ?? 0;\n }\n // ellipsis takes one cell + separators on each side that has anchors.\n used += ell;\n const sepCount = Math.max(0, anchorIndices.size + 1 - 1);\n used += sep * sepCount;\n\n if (used > containerWidth) {\n // Even the anchors don't fit — drop one anchor at a time\n // from the inner edge until the budget covers what's left\n // (always keeping at least one anchor on each side that had any).\n const beforeIdx: number[] = [];\n for (let i = 0; i < before; i += 1) {\n beforeIdx.push(i);\n }\n const afterIdx: number[] = [];\n for (let i = itemCount - after; i < itemCount; i += 1) {\n afterIdx.push(i);\n }\n const minBefore = before > 0 ? 1 : 0;\n const minAfter = after > 0 ? 1 : 0;\n while (used > containerWidth && (beforeIdx.length > minBefore || afterIdx.length > minAfter)) {\n if (beforeIdx.length > minBefore) {\n const dropped = beforeIdx.pop();\n if (dropped !== undefined) {\n used -= (widths.get(dropped) ?? 0) + sep;\n anchorIndices.delete(dropped);\n }\n }\n if (used <= containerWidth) {\n break;\n }\n if (afterIdx.length > minAfter) {\n const dropped = afterIdx.shift();\n if (dropped !== undefined) {\n used -= (widths.get(dropped) ?? 0) + sep;\n anchorIndices.delete(dropped);\n }\n }\n }\n return anchorIndices;\n }\n\n // Try to grow back: include adjacent items as long as they fit.\n // Alternate left and right so context near both edges is balanced.\n let leftCursor = before;\n let rightCursor = itemCount - after - 1;\n while (leftCursor <= rightCursor) {\n const w = widths.get(leftCursor) ?? 0;\n if (used + w + sep <= containerWidth) {\n anchorIndices.add(leftCursor);\n used += w + sep;\n leftCursor += 1;\n } else {\n break;\n }\n if (leftCursor > rightCursor) {\n break;\n }\n const w2 = widths.get(rightCursor) ?? 0;\n if (used + w2 + sep <= containerWidth) {\n anchorIndices.add(rightCursor);\n used += w2 + sep;\n rightCursor -= 1;\n } else {\n break;\n }\n }\n return anchorIndices;\n }, [containerWidth, itemCount, itemsBeforeCollapse, itemsAfterCollapse, enabled, widthsTick]);\n\n const ready = !enabled || (containerWidth !== null && itemWidthsRef.current.size >= itemCount);\n\n return {\n visibleIndices,\n ready,\n onContainerLayout,\n onItemLayout,\n onEllipsisLayout,\n onSeparatorLayout,\n };\n}\n\n// =============================================================================\n// Count-based collapse helper\n// =============================================================================\n\nfunction applyCountCollapse(\n items: ReadonlyArray<BreadcrumbItemData>,\n maxItems: number | undefined,\n before: number,\n after: number\n): { visible: ReadonlyArray<BreadcrumbItemData>; hidden: ReadonlyArray<BreadcrumbItemData>; collapseAt: number } {\n if (!maxItems || items.length <= maxItems) {\n return { visible: items, hidden: [], collapseAt: -1 };\n }\n const beforeArr = items.slice(0, Math.max(0, Math.min(before, items.length)));\n const afterArr = after > 0 ? items.slice(Math.max(beforeArr.length, items.length - after)) : [];\n const hidden = items.slice(beforeArr.length, items.length - afterArr.length);\n const visible = [...beforeArr, ...afterArr];\n return { visible, hidden, collapseAt: beforeArr.length };\n}\n\n// =============================================================================\n// JSON-LD\n// =============================================================================\n\n/**\n * Build a JSON-LD `BreadcrumbList` document from a list of items. Use it\n * with your framework's metadata API for SSR-time emission:\n *\n * ```tsx\n * // Next.js App Router metadata\n * export async function generateMetadata() {\n * return { other: { 'application/ld+json': getBreadcrumbJsonLd(items) } };\n * }\n * ```\n *\n * The component renders this client-side via `document.head` injection\n * automatically — but framework-driven SSR is preferred for reliable\n * search-engine pickup, hence this exported helper.\n */\nexport function getBreadcrumbJsonLd(items: ReadonlyArray<BreadcrumbItemData>): string {\n const elements = items\n .map((it, idx) => {\n const name = typeof it.label === 'string' ? it.label : undefined;\n if (!name) {\n return null;\n }\n const entry: Record<string, unknown> = {\n '@type': 'ListItem',\n position: idx + 1,\n name,\n };\n if (it.href) {\n entry.item = it.href;\n }\n return entry;\n })\n .filter((x): x is Record<string, unknown> => x !== null);\n return JSON.stringify({\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: elements,\n });\n}\n\nfunction useBreadcrumbJsonLdInjection(items: ReadonlyArray<BreadcrumbItemData>, enabled: boolean) {\n useEffect(() => {\n if (!enabled || Platform.OS !== 'web' || typeof document === 'undefined') {\n return;\n }\n const json = getBreadcrumbJsonLd(items);\n // Skip emitting an empty BreadcrumbList — no items resolve to a\n // string label means nothing useful for crawlers.\n if (!json.includes('\"itemListElement\":[{')) {\n return;\n }\n const script = document.createElement('script');\n script.type = 'application/ld+json';\n // Use textContent (not innerHTML) — the browser doesn't parse it as\n // HTML, so XSS via label content can't leak out of the script tag.\n script.textContent = json;\n script.setAttribute('data-nori-breadcrumb', 'true');\n document.head.appendChild(script);\n return () => {\n if (script.parentNode === document.head) {\n document.head.removeChild(script);\n }\n };\n }, [items, enabled]);\n}\n\n// =============================================================================\n// Truncated label\n// =============================================================================\n\nfunction truncateString(input: string, max: number): string {\n if (max <= 0 || input.length <= max) {\n return input;\n }\n if (max <= 1) {\n return '…';\n }\n return `${input.slice(0, max - 1)}…`;\n}\n\n// =============================================================================\n// Root\n// =============================================================================\n\nconst BreadcrumbRoot = ({\n items,\n separator,\n maxItems,\n itemsBeforeCollapse = DEFAULT_ITEMS_BEFORE,\n itemsAfterCollapse = DEFAULT_ITEMS_AFTER,\n collapseOnOverflow,\n expandBehavior,\n expandLabel,\n ellipsisLabel,\n currentPageLabel,\n siblingMenuLabel,\n ariaLabel,\n schemaOrg,\n dir = 'ltr',\n maxLabelLength = 0,\n children,\n className,\n testID,\n}: BreadcrumbProps) => {\n const { t } = useTranslation();\n const colors = useThemeColors();\n const resolvedAriaLabel = ariaLabel ?? t('breadcrumb.ariaLabel', { defaultValue: 'Breadcrumb' });\n const resolvedExpandLabel = expandLabel ?? t('breadcrumb.expandLabel', { defaultValue: 'Show full path' });\n const resolvedEllipsisLabel = ellipsisLabel ?? t('breadcrumb.ellipsisLabel', { defaultValue: 'More' });\n const resolvedCurrentPageLabel =\n currentPageLabel ?? t('breadcrumb.currentPageLabel', { defaultValue: 'Current page' });\n const resolvedSiblingMenuLabel =\n siblingMenuLabel ?? t('breadcrumb.siblingMenuLabel', { defaultValue: 'Open sibling pages' });\n\n const resolvedExpandBehavior: BreadcrumbExpandBehavior =\n expandBehavior ?? (Platform.OS === 'web' ? 'inline' : 'menu');\n\n if (items && items.length > 0) {\n return (\n <BreadcrumbItemsRenderer\n items={items}\n separator={separator}\n maxItems={maxItems}\n itemsBeforeCollapse={itemsBeforeCollapse}\n itemsAfterCollapse={itemsAfterCollapse}\n collapseOnOverflow={collapseOnOverflow ?? true}\n expandBehavior={resolvedExpandBehavior}\n expandLabel={resolvedExpandLabel}\n ellipsisLabel={resolvedEllipsisLabel}\n currentPageLabel={resolvedCurrentPageLabel}\n siblingMenuLabel={resolvedSiblingMenuLabel}\n ariaLabel={resolvedAriaLabel}\n schemaOrg={schemaOrg}\n dir={dir}\n maxLabelLength={maxLabelLength}\n {...(className !== undefined ? { className } : {})}\n {...(testID !== undefined ? { testID } : {})}\n />\n );\n }\n\n // Compound mode — context only; the list / items render themselves.\n const ctxValue: BreadcrumbContextValue = {\n separator: separator ?? '',\n dir,\n currentPageLabel: resolvedCurrentPageLabel,\n siblingMenuLabel: resolvedSiblingMenuLabel,\n maxLabelLength,\n };\n\n return (\n <BreadcrumbContext.Provider value={ctxValue}>\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={resolvedAriaLabel}\n accessible\n accessibilityLabel={resolvedAriaLabel}\n className={cn('flex-row items-center', className)}\n style={\n {\n flexDirection: 'row',\n alignItems: 'center',\n direction: dir as ViewStyle['direction'],\n fontFamily: colors.fontFamily.body,\n } as ViewStyle\n }\n >\n {children}\n </View>\n </BreadcrumbContext.Provider>\n );\n};\n\n// =============================================================================\n// Items-mode renderer\n// =============================================================================\n\ntype ItemsRendererProps = {\n items: ReadonlyArray<BreadcrumbItemData>;\n separator: BreadcrumbSeparatorValue | undefined;\n maxItems: number | undefined;\n itemsBeforeCollapse: number;\n itemsAfterCollapse: number;\n collapseOnOverflow: boolean;\n expandBehavior: BreadcrumbExpandBehavior;\n expandLabel: string;\n ellipsisLabel: string;\n currentPageLabel: string;\n siblingMenuLabel: string;\n ariaLabel: string;\n schemaOrg: boolean | undefined;\n dir: 'ltr' | 'rtl';\n maxLabelLength: number;\n className?: string;\n testID?: string;\n};\n\nconst BreadcrumbItemsRenderer = ({\n items,\n separator,\n maxItems,\n itemsBeforeCollapse,\n itemsAfterCollapse,\n collapseOnOverflow,\n expandBehavior,\n expandLabel,\n ellipsisLabel,\n currentPageLabel,\n siblingMenuLabel,\n ariaLabel,\n schemaOrg,\n dir,\n maxLabelLength,\n className,\n testID,\n}: ItemsRendererProps) => {\n const [inlineExpanded, setInlineExpanded] = useState(false);\n\n // Auto-flag the last item as current when nobody else claims it.\n const normalizedItems = useMemo<ReadonlyArray<BreadcrumbItemData>>(() => {\n if (items.length === 0) {\n return items;\n }\n const anyCurrent = items.some((it) => it.current);\n if (anyCurrent) {\n return items;\n }\n const last = items[items.length - 1];\n if (!last) {\n return items;\n }\n const out: BreadcrumbItemData[] = [...items];\n out[out.length - 1] = { ...last, current: true };\n return out;\n }, [items]);\n\n useBreadcrumbJsonLdInjection(normalizedItems, schemaOrg !== false);\n\n // -------- COUNT-BASED COLLAPSE --------\n const countCollapse = useMemo(\n () =>\n applyCountCollapse(\n normalizedItems,\n inlineExpanded ? undefined : maxItems,\n itemsBeforeCollapse,\n itemsAfterCollapse\n ),\n [normalizedItems, maxItems, itemsBeforeCollapse, itemsAfterCollapse, inlineExpanded]\n );\n\n // -------- WIDTH-BASED COLLAPSE --------\n // Width-based fit runs on the post-count-collapse list — count is\n // always the ceiling. Width may further shrink the visible set.\n const widthFit = useOverflowFit({\n enabled: collapseOnOverflow && expandBehavior !== 'scroll' && !inlineExpanded,\n itemCount: countCollapse.visible.length,\n itemsBeforeCollapse,\n itemsAfterCollapse,\n });\n\n const widthHiddenItems = useMemo(() => {\n if (!collapseOnOverflow || expandBehavior === 'scroll' || inlineExpanded) {\n return [] as ReadonlyArray<BreadcrumbItemData>;\n }\n return countCollapse.visible.filter((_, idx) => !widthFit.visibleIndices.has(idx));\n }, [collapseOnOverflow, expandBehavior, inlineExpanded, countCollapse.visible, widthFit.visibleIndices]);\n\n const allHiddenItems = useMemo<ReadonlyArray<BreadcrumbItemData>>(() => {\n if (inlineExpanded) {\n return [];\n }\n return [...countCollapse.hidden, ...widthHiddenItems];\n }, [countCollapse.hidden, widthHiddenItems, inlineExpanded]);\n\n const visibleItemsForRender = useMemo<ReadonlyArray<BreadcrumbItemData>>(() => {\n if (inlineExpanded) {\n return normalizedItems;\n }\n return countCollapse.visible.filter((_, idx) =>\n collapseOnOverflow && expandBehavior !== 'scroll' ? widthFit.visibleIndices.has(idx) : true\n );\n }, [\n countCollapse.visible,\n widthFit.visibleIndices,\n collapseOnOverflow,\n expandBehavior,\n inlineExpanded,\n normalizedItems,\n ]);\n\n // Where to insert the ellipsis. Heuristic: after `itemsBeforeCollapse`\n // visible items from the start (clamped to the visible length).\n const ellipsisInsertAt = useMemo(() => {\n if (inlineExpanded || allHiddenItems.length === 0) {\n return -1;\n }\n return Math.min(itemsBeforeCollapse, visibleItemsForRender.length);\n }, [allHiddenItems.length, inlineExpanded, visibleItemsForRender.length, itemsBeforeCollapse]);\n\n const renderedCells: ReactNode[] = [];\n const measurementCells: ReactNode[] = [];\n\n visibleItemsForRender.forEach((item, idx) => {\n if (idx === ellipsisInsertAt && allHiddenItems.length > 0) {\n renderedCells.push(\n <Fragment key=\"__ellipsis__\">\n <BreadcrumbEllipsisInternal\n ellipsisLabel={ellipsisLabel}\n expandLabel={expandLabel}\n expandBehavior={expandBehavior}\n hiddenItems={allHiddenItems}\n onExpandInline={() => setInlineExpanded(true)}\n />\n </Fragment>\n );\n renderedCells.push(\n <Fragment key=\"__sep_ellipsis__\">\n {renderSeparator(separator, {\n fromIndex: idx - 1,\n visibleCount: visibleItemsForRender.length + 1,\n dir,\n })}\n </Fragment>\n );\n }\n\n const itemKey = item.key ?? `item-${normalizedItems.indexOf(item)}`;\n renderedCells.push(\n <Fragment key={itemKey}>\n <BreadcrumbItemRenderer\n item={item}\n currentPageLabel={currentPageLabel}\n siblingMenuLabel={siblingMenuLabel}\n maxLabelLength={maxLabelLength}\n />\n </Fragment>\n );\n const isLast = idx === visibleItemsForRender.length - 1;\n if (!isLast) {\n renderedCells.push(\n <Fragment key={`sep-${itemKey}`}>\n {renderSeparator(separator, {\n fromIndex: idx,\n visibleCount: visibleItemsForRender.length,\n dir,\n })}\n </Fragment>\n );\n }\n });\n\n if (collapseOnOverflow && expandBehavior !== 'scroll') {\n countCollapse.visible.forEach((item, idx) => {\n const itemKey = item.key ?? `m-${idx}`;\n measurementCells.push(\n <View key={itemKey} onLayout={widthFit.onItemLayout(idx)}>\n <BreadcrumbItemRenderer\n item={item}\n currentPageLabel={currentPageLabel}\n siblingMenuLabel={siblingMenuLabel}\n maxLabelLength={maxLabelLength}\n />\n </View>\n );\n });\n measurementCells.push(\n <View key=\"__m_sep__\" onLayout={widthFit.onSeparatorLayout}>\n {renderSeparator(separator, {\n fromIndex: 0,\n visibleCount: countCollapse.visible.length,\n dir,\n })}\n </View>\n );\n measurementCells.push(\n <View key=\"__m_ellipsis__\" onLayout={widthFit.onEllipsisLayout}>\n <BreadcrumbEllipsisInternal\n ellipsisLabel={ellipsisLabel}\n expandLabel={expandLabel}\n expandBehavior=\"none\"\n hiddenItems={[]}\n onExpandInline={() => undefined}\n />\n </View>\n );\n }\n\n const list = (\n <View\n role=\"list\"\n accessibilityRole=\"list\"\n className={cn('flex-row items-center')}\n style={{ flexDirection: 'row', alignItems: 'center', flexShrink: 1, minWidth: 0 }}\n >\n {renderedCells}\n </View>\n );\n\n // When width-based collapse is on, the wrapper MUST measure the\n // available width — not its content's natural width. Without an\n // explicit `width: '100%'` (or `alignSelf: 'stretch'`) the wrapper\n // hugs its row of items on native, so `containerWidth` from\n // `onLayout` equals the items' total — and the algorithm\n // never sees an overflow. With `width: '100%'`, the wrapper fills\n // its parent's cross-axis (which is the row width in a typical\n // column-flex parent), giving us a real budget to compare against.\n const wrapperStyle: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n direction: dir as ViewStyle['direction'],\n flexShrink: 1,\n minWidth: 0,\n ...(collapseOnOverflow && expandBehavior !== 'scroll' ? { width: '100%' } : null),\n // `overflow: 'hidden'` keeps the visible row from blowing past\n // its container before the first measurement settles. Without\n // it, native renders the natural-width row briefly on the first\n // paint, even though the JS layout reports the correct measured\n // width on the very next tick.\n ...(collapseOnOverflow ? { overflow: 'hidden' as ViewStyle['overflow'] } : null),\n };\n\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={ariaLabel}\n accessible\n accessibilityLabel={ariaLabel}\n className={cn('flex-row items-center', className)}\n style={wrapperStyle}\n onLayout={collapseOnOverflow && expandBehavior !== 'scroll' ? widthFit.onContainerLayout : undefined}\n >\n {expandBehavior === 'scroll' ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={{ flexDirection: 'row', alignItems: 'center' }}\n style={{ flexGrow: 1 }}\n >\n {list}\n </ScrollView>\n ) : (\n list\n )}\n\n {/* Hidden measurement copy. Offscreen on both platforms. */}\n {collapseOnOverflow && expandBehavior !== 'scroll' ? (\n <View\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n position: 'absolute',\n opacity: 0,\n flexDirection: 'row',\n alignItems: 'center',\n left: -99999,\n top: 0,\n // `pointerEvents` lives on the style object now —\n // the prop form is deprecated in RN 0.71+ / RN-Web\n // 0.20+ and emits a runtime warning every render.\n pointerEvents: 'none' as ViewStyle['pointerEvents'],\n }}\n >\n {measurementCells}\n </View>\n ) : null}\n </View>\n );\n};\n\n// =============================================================================\n// Item renderer (items-mode)\n// =============================================================================\n\ntype ItemRendererProps = {\n item: BreadcrumbItemData;\n currentPageLabel: string;\n siblingMenuLabel: string;\n maxLabelLength: number;\n};\n\nconst BreadcrumbItemRenderer = ({ item, currentPageLabel, siblingMenuLabel, maxLabelLength }: ItemRendererProps) => {\n const colors = useThemeColors();\n const Icon = item.icon;\n const isLink = !item.current && (item.href !== undefined || item.onSelect !== undefined);\n\n const effectiveMax = item.maxLabelLength ?? maxLabelLength;\n const renderLabel = (): ReactNode => {\n if (item.loading) {\n return (\n <View\n style={{\n backgroundColor: colors.semantic.background.subtle,\n borderRadius: px(colors.radius.sm),\n height: px(colors.fontSize.sm),\n width: 64,\n }}\n />\n );\n }\n if (typeof item.label === 'string' || typeof item.label === 'number') {\n const text = String(item.label);\n const truncated = effectiveMax > 0 ? truncateString(text, effectiveMax) : text;\n return (\n <RNText\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: item.current ? colors.semantic.text.default : colors.semantic.text.muted,\n fontWeight: item.current\n ? (colors.fontWeight.semibold as '600')\n : (colors.fontWeight.regular as '400'),\n }}\n >\n {truncated}\n </RNText>\n );\n }\n return item.label;\n };\n\n const inner = (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['1']),\n }}\n >\n {Icon ? (\n <Icon size={14} color={item.current ? colors.semantic.text.default : colors.semantic.text.muted} />\n ) : null}\n {renderLabel()}\n </View>\n );\n\n if (item.current) {\n return (\n <View\n role=\"listitem\"\n accessibilityRole=\"text\"\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n <RNText\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n opacity: 0,\n }}\n >\n {currentPageLabel}:{' '}\n </RNText>\n <View aria-current=\"page\">{inner}</View>\n </View>\n );\n }\n\n if (item.siblings && item.siblings.length > 0) {\n return (\n <View role=\"listitem\" style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}>\n <BreadcrumbInteractive item={item}>{inner}</BreadcrumbInteractive>\n <BreadcrumbSiblingMenu item={item} siblingMenuLabel={siblingMenuLabel} />\n </View>\n );\n }\n\n if (isLink) {\n return (\n <View role=\"listitem\" style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}>\n <BreadcrumbInteractive item={item}>{inner}</BreadcrumbInteractive>\n </View>\n );\n }\n\n return (\n <View role=\"listitem\" style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}>\n {inner}\n </View>\n );\n};\n\nconst BreadcrumbInteractive = ({ item, children }: { item: BreadcrumbItemData; children: ReactNode }) => {\n const colors = useThemeColors();\n const handlePress = useCallback(() => {\n item.onSelect?.();\n }, [item]);\n\n if (Platform.OS === 'web' && item.href) {\n // When the consumer passes `onSelect`, treat it as the action and\n // suppress the default `<a>` navigation. This is the standard\n // pattern for \"link-styled button\" use-cases (router Links,\n // analytics-only handlers, demo pseudo-links).\n const handleClick = item.onSelect\n ? (event: { preventDefault: () => void }) => {\n event.preventDefault();\n item.onSelect?.();\n }\n : undefined;\n return (\n <a\n href={item.href}\n onClick={handleClick}\n style={{\n color: colors.semantic.interactive.primary,\n textDecoration: 'none',\n fontFamily: colors.fontFamily.body,\n }}\n >\n {children}\n </a>\n );\n }\n\n return (\n <Pressable onPress={handlePress} accessibilityRole=\"link\" role=\"link\">\n {children}\n </Pressable>\n );\n};\n\nconst BreadcrumbSiblingMenu = ({ item, siblingMenuLabel }: { item: BreadcrumbItemData; siblingMenuLabel: string }) => {\n const colors = useThemeColors();\n const siblings = item.siblings ?? [];\n return (\n <Popover>\n <Popover.Trigger asChild={false}>\n <View\n accessibilityLabel={siblingMenuLabel}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 2,\n paddingVertical: 4,\n }}\n >\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: 10, color: colors.semantic.text.muted }}\n >\n ▾\n </RNText>\n </View>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"start\">\n <View style={{ minWidth: 200, paddingVertical: 4 }}>\n {siblings.map((sib, idx) => (\n <SiblingRow key={sib.href ?? idx} sibling={sib} />\n ))}\n </View>\n </Popover.Content>\n </Popover>\n );\n};\n\nconst SiblingRow = ({ sibling }: { sibling: BreadcrumbSibling }) => {\n const colors = useThemeColors();\n const Icon = sibling.icon;\n const handlePress = useCallback(() => {\n sibling.onSelect?.();\n }, [sibling]);\n\n const inner = (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['2']),\n paddingVertical: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['3']),\n opacity: sibling.disabled ? 0.5 : 1,\n }}\n >\n {Icon ? <Icon size={14} color={colors.semantic.text.muted} /> : null}\n {typeof sibling.label === 'string' || typeof sibling.label === 'number' ? (\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n }}\n >\n {String(sibling.label)}\n </RNText>\n ) : (\n sibling.label\n )}\n </View>\n );\n\n if (Platform.OS === 'web' && sibling.href && !sibling.disabled) {\n const handleClick = sibling.onSelect\n ? (event: { preventDefault: () => void }) => {\n event.preventDefault();\n sibling.onSelect?.();\n }\n : undefined;\n return (\n <a href={sibling.href} onClick={handleClick} style={{ textDecoration: 'none', color: 'inherit' }}>\n {inner}\n </a>\n );\n }\n return (\n <Pressable onPress={sibling.disabled ? undefined : handlePress} accessibilityRole=\"menuitem\">\n {inner}\n </Pressable>\n );\n};\n\n// =============================================================================\n// Ellipsis (internal — used by the items-mode renderer)\n// =============================================================================\n\ntype EllipsisProps = {\n ellipsisLabel: string;\n expandLabel: string;\n expandBehavior: BreadcrumbExpandBehavior;\n hiddenItems: ReadonlyArray<BreadcrumbItemData>;\n onExpandInline: () => void;\n};\n\nconst BreadcrumbEllipsisInternal = ({\n ellipsisLabel,\n expandLabel,\n expandBehavior,\n hiddenItems,\n onExpandInline,\n}: EllipsisProps) => {\n const colors = useThemeColors();\n const renderDots = () => (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n paddingHorizontal: 4,\n }}\n >\n …\n </RNText>\n );\n\n if (expandBehavior === 'none' || hiddenItems.length === 0) {\n return (\n <View\n accessibilityLabel={ellipsisLabel}\n aria-label={ellipsisLabel}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n {renderDots()}\n </View>\n );\n }\n\n if (expandBehavior === 'inline') {\n return (\n <Pressable\n onPress={onExpandInline}\n accessibilityRole=\"button\"\n role=\"button\"\n accessibilityLabel={expandLabel}\n aria-label={expandLabel}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n {renderDots()}\n </Pressable>\n );\n }\n\n // Menu mode: ellipsis triggers a popover with the hidden items.\n return (\n <Popover>\n <Popover.Trigger asChild={false}>\n <View\n accessibilityLabel={expandLabel}\n aria-label={expandLabel}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n {renderDots()}\n </View>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"start\">\n <View style={{ minWidth: 200, paddingVertical: 4 }}>\n {hiddenItems.map((it, idx) => {\n const sib: BreadcrumbSibling = { label: it.label };\n if (it.href !== undefined) {\n sib.href = it.href;\n }\n if (it.icon !== undefined) {\n sib.icon = it.icon;\n }\n if (it.onSelect !== undefined) {\n sib.onSelect = it.onSelect;\n }\n return (\n <SiblingRow\n key={typeof it.key === 'string' || typeof it.key === 'number' ? it.key : idx}\n sibling={sib}\n />\n );\n })}\n </View>\n </Popover.Content>\n </Popover>\n );\n};\n\n// =============================================================================\n// Compound subcomponents\n// =============================================================================\n\nexport type BreadcrumbListProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbList = ({ children, className, testID }: BreadcrumbListProps) => {\n useBreadcrumbContext('Breadcrumb.List');\n // Auto-insert separators between consecutive `Breadcrumb.Item`s\n // unless the user provided their own. Lets users write the terse form:\n // <List><Item/><Item/><Item/></List>\n const childArray = Children.toArray(children);\n const out: ReactNode[] = [];\n let lastWasItem = false;\n childArray.forEach((child, idx) => {\n const kind = getCompoundKind(child);\n if (kind === 'item') {\n if (lastWasItem) {\n out.push(\n // biome-ignore lint/suspicious/noArrayIndexKey: separator position is deterministic from its preceding item index\n <Fragment key={`__autosep_${idx}`}>\n <BreadcrumbSeparator />\n </Fragment>\n );\n }\n out.push(child);\n lastWasItem = true;\n } else {\n out.push(child);\n lastWasItem = false;\n }\n });\n\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"list\"\n accessibilityRole=\"list\"\n className={cn('flex-row items-center', className)}\n style={{ flexDirection: 'row', alignItems: 'center', flexShrink: 1, minWidth: 0 }}\n >\n {out}\n </View>\n );\n};\n\nexport type BreadcrumbItemProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbItem = ({ children, className, testID }: BreadcrumbItemProps) => {\n useBreadcrumbContext('Breadcrumb.Item');\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"listitem\"\n accessibilityRole=\"text\"\n className={cn('flex-row items-center', className)}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n {children}\n </View>\n );\n};\ntagComponent(BreadcrumbItem, 'item');\n\nexport type BreadcrumbLinkProps = {\n href?: string;\n onPress?: () => void;\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbLink = ({ href, onPress, asChild, children, className, testID }: BreadcrumbLinkProps) => {\n const colors = useThemeColors();\n\n if (asChild) {\n return (\n <Slot\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {children}\n </Slot>\n );\n }\n\n if (Platform.OS === 'web' && href) {\n // `onPress` overrides the default `<a>` navigation — same pattern\n // as the items-mode `onSelect`. Lets consumers use `<Link>` from\n // a router or build pseudo-links for demos.\n const handleClick = onPress\n ? (event: { preventDefault: () => void }) => {\n event.preventDefault();\n onPress?.();\n }\n : undefined;\n return (\n <a\n href={href}\n onClick={handleClick}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n style={{\n color: colors.semantic.interactive.primary,\n textDecoration: 'none',\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {typeof children === 'string' || typeof children === 'number' ? (\n <RNText\n style={{\n color: colors.semantic.interactive.primary,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n )}\n </a>\n );\n }\n\n return (\n <Pressable onPress={onPress} accessibilityRole=\"link\" role=\"link\" {...(testID !== undefined ? { testID } : {})}>\n {typeof children === 'string' || typeof children === 'number' ? (\n <RNText\n style={{\n color: colors.semantic.interactive.primary,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n )}\n </Pressable>\n );\n};\n\nexport type BreadcrumbPageProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbPage = ({ children, className, testID }: BreadcrumbPageProps) => {\n const ctx = useBreadcrumbContext('Breadcrumb.Page');\n const colors = useThemeColors();\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n accessibilityRole=\"text\"\n aria-current=\"page\"\n className={cn('flex-row items-center', className)}\n style={{ flexDirection: 'row', alignItems: 'center' }}\n >\n <RNText\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n opacity: 0,\n }}\n >\n {ctx.currentPageLabel}:{' '}\n </RNText>\n {typeof children === 'string' || typeof children === 'number' ? (\n <RNText\n numberOfLines={1}\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.semibold as '600',\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n )}\n </View>\n );\n};\n\nexport type BreadcrumbSeparatorProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbSeparator = ({ children, className, testID }: BreadcrumbSeparatorProps) => {\n const ctx = useBreadcrumbContext('Breadcrumb.Separator');\n const node = children ?? renderSeparator(ctx.separator, { fromIndex: 0, visibleCount: 0, dir: ctx.dir });\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n role=\"presentation\"\n className={cn('flex-row items-center', className)}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 2 }}\n >\n {node}\n </View>\n );\n};\ntagComponent(BreadcrumbSeparator, 'separator');\n\nexport type BreadcrumbEllipsisProps = {\n ellipsisLabel?: string;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbEllipsis = ({ ellipsisLabel, className, testID }: BreadcrumbEllipsisProps) => {\n useBreadcrumbContext('Breadcrumb.Ellipsis');\n const { t } = useTranslation();\n const colors = useThemeColors();\n const label = ellipsisLabel ?? t('breadcrumb.ellipsisLabel', { defaultValue: 'More' });\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n accessibilityLabel={label}\n aria-label={label}\n className={cn('flex-row items-center', className)}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n }}\n >\n …\n </RNText>\n </View>\n );\n};\n\n// =============================================================================\n// Public surface\n// =============================================================================\n\nexport const Breadcrumb = Object.assign(BreadcrumbRoot, {\n List: BreadcrumbList,\n Item: BreadcrumbItem,\n Link: BreadcrumbLink,\n Page: BreadcrumbPage,\n Separator: BreadcrumbSeparator,\n Ellipsis: BreadcrumbEllipsis,\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/i18n/default-dictionary.ts","../../../src/i18n/resolve.ts","../../../src/i18n/context.tsx","../../../src/i18n/use-translation.ts","../../../src/slot/compose-refs.ts","../../../src/slot/slot.tsx","../../../src/theme/px.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/utils/cn.ts","../../../src/components/Popover/Popover.tsx","../../../src/components/Breadcrumb/Breadcrumb.tsx"],"names":["createContext","useContext","forwardRef","Slot","isValidElement","Children","cloneElement","Platform","useState","Appearance","useEffect","useCallback","useId","useRef","jsx","Pressable","RNText","content","Dimensions","View","Modal","useMemo","Fragment","jsxs","ScrollView"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Dictionary } from './types';\n\n/**\n * Default English strings used by library components.\n *\n * Key naming convention:\n * <component>.<purpose>[_plural-form]\n *\n * Plural suffixes follow i18next: `_zero`, `_one`, `_two`, `_few`, `_many`, `_other`.\n * Interpolation uses `{{name}}` — double braces, no spaces, by convention.\n */\nexport const defaultDictionary: Dictionary = {\n // generic / shared\n 'common.cancel': 'Cancel',\n 'common.confirm': 'Confirm',\n 'common.close': 'Close',\n 'common.back': 'Back',\n 'common.loading': 'Loading',\n 'common.error': 'Something went wrong',\n 'common.retry': 'Try again',\n\n // breadcrumb\n 'breadcrumb.ariaLabel': 'Breadcrumb',\n 'breadcrumb.expandLabel': 'Show full path',\n 'breadcrumb.ellipsisLabel': 'More',\n 'breadcrumb.currentPageLabel': 'Current page',\n 'breadcrumb.siblingMenuLabel': 'Open sibling pages',\n\n // pagination\n 'pagination.ariaLabel': 'Pagination',\n 'pagination.previous': 'Previous page',\n 'pagination.next': 'Next page',\n 'pagination.first': 'First page',\n 'pagination.last': 'Last page',\n 'pagination.ellipsis': 'More pages',\n 'pagination.currentPage': 'Current page',\n 'pagination.gotoPage': 'Go to page {{page}}',\n 'pagination.range': 'Showing {{from}}–{{to}} of {{total}}',\n 'pagination.pageOf': 'Page {{page}} of {{total}}',\n 'pagination.pageSizeLabel': 'Items per page',\n 'pagination.jumperLabel': 'Go to page',\n 'pagination.jumperPlaceholder': '#',\n\n // floatButton\n 'floatButton.backToTop': 'Back to top',\n\n // calendar\n 'calendar.header.previous': 'Previous month',\n 'calendar.header.next': 'Next month',\n 'calendar.header.openMonthView': 'Open month picker',\n 'calendar.header.openYearView': 'Open year picker',\n 'calendar.header.openDayView': 'Open day picker',\n 'calendar.today': 'Today',\n 'calendar.clear': 'Clear',\n\n // button\n 'button.loadingLabel': 'Loading',\n\n // input\n 'input.clear': 'Clear',\n 'input.passwordShow': 'Show password',\n 'input.passwordHide': 'Hide password',\n\n // checkbox / switch\n 'checkbox.checked': 'Checked',\n 'checkbox.unchecked': 'Unchecked',\n 'switch.on': 'On',\n 'switch.off': 'Off',\n\n // field\n 'field.requiredIndicator': '*',\n 'field.requiredLabel': 'required',\n\n // table / dataTable\n 'table.empty': 'No data',\n};\n","import type { Dictionary, I18nInput, I18nOptions, TranslateFn } from './types';\n\n/**\n * Normalizes the consumer's i18n input (undefined | dictionary | function) into a\n * uniform TranslateFn. Internal code only calls the returned function.\n *\n * Precedence for a given key lookup:\n * 1. consumer function (if provided) — called verbatim, no further fallback\n * 2. consumer dictionary (if provided)\n * 3. library defaults\n * 4. options.defaultValue\n * 5. the key itself (so missing strings are visible in dev, not silent)\n */\nexport function resolveI18n(input: I18nInput, defaults: Dictionary): TranslateFn {\n if (typeof input === 'function') {\n // Wrap so the consumer fn is always invoked with (key, options) — enables\n // Jest `toHaveBeenCalledWith(key, undefined)` assertions and mirrors i18next's\n // own call signature exactly.\n return (keyOrKeys, options) => input(keyOrKeys, options);\n }\n\n const dict = input ?? {};\n\n return (keyOrKeys, options) => {\n const keys = Array.isArray(keyOrKeys) ? keyOrKeys : [keyOrKeys];\n for (const rawKey of keys) {\n const key = pluralize(rawKey, options?.count);\n const template = dict[key] ?? defaults[key];\n if (template !== undefined) {\n return interpolate(template, options);\n }\n }\n // exhausted the key list\n const lastKey = keys[keys.length - 1];\n if (options?.defaultValue !== undefined) {\n return interpolate(options.defaultValue, options);\n }\n return lastKey ?? '';\n };\n}\n\nfunction pluralize(key: string, count: number | undefined): string {\n if (count === undefined) {\n return key;\n }\n // Minimal English pluralization — extend with ICU rules later if needed.\n if (count === 1) {\n return `${key}_one`;\n }\n return `${key}_other`;\n}\n\nfunction interpolate(template: string, options: I18nOptions | undefined): string {\n if (!options) {\n return template;\n }\n return template.replace(/\\{\\{\\s*([A-Za-z0-9_.-]+)\\s*\\}\\}/g, (_match, name: string) => {\n const value = options[name];\n return value === undefined || value === null ? '' : String(value);\n });\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext, useMemo } from 'react';\nimport { defaultDictionary } from './default-dictionary';\nimport { resolveI18n } from './resolve';\nimport type { I18nInput, TranslateFn } from './types';\n\nexport type I18nContextValue = {\n t: TranslateFn;\n};\n\n// Default context value uses the built-in English dictionary; consumers without\n// a provider still get a working t().\nconst defaultValue: I18nContextValue = {\n t: resolveI18n(undefined, defaultDictionary),\n};\n\nexport const I18nContext = createContext<I18nContextValue>(defaultValue);\nI18nContext.displayName = 'I18nContext';\n\nexport type I18nProviderProps = {\n i18n?: I18nInput;\n children?: ReactNode;\n};\n\nexport function I18nProvider({ i18n, children }: I18nProviderProps) {\n const value = useMemo<I18nContextValue>(() => ({ t: resolveI18n(i18n, defaultDictionary) }), [i18n]);\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n","'use client';\n\nimport { useContext } from 'react';\nimport { I18nContext, type I18nContextValue } from './context';\n\nexport function useTranslation(): I18nContextValue {\n return useContext(I18nContext);\n}\n","// composeRefs — merges multiple React refs (callback or object) into a single callback.\n// Derived from Radix UI's approach; reimplemented here so we don't take a Radix dependency.\n\nimport type { MutableRefObject, Ref, RefCallback } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\nexport function composeRefs<T>(...refs: Array<PossibleRef<T>>): RefCallback<T> {\n return (node: T | null) => {\n for (const ref of refs) {\n if (ref == null) {\n continue;\n }\n if (typeof ref === 'function') {\n ref(node);\n } else {\n // React's MutableRefObject typing — we assign .current directly.\n (ref as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n","import type { CSSProperties, ReactElement, Ref } from 'react';\nimport { Children, cloneElement, forwardRef, isValidElement } from 'react';\nimport { composeRefs } from './compose-refs';\n\ntype AnyProps = Record<string, unknown>;\n\nexport type SlotProps = {\n children?: React.ReactNode;\n} & AnyProps;\n\nexport const Slot = forwardRef<unknown, SlotProps>(function Slot(props, forwardedRef) {\n const { children, ...slotProps } = props;\n\n if (!isValidElement(children)) {\n return null;\n }\n\n // Assert that children is a single React element with props — we've narrowed above.\n const child = Children.only(children) as ReactElement<AnyProps> & { ref?: Ref<unknown> };\n const merged = mergeProps(slotProps, child.props);\n\n // Merge refs: Slot's forwarded ref + the child's own ref (if any).\n const childRef = (child as unknown as { ref?: Ref<unknown> }).ref;\n if (forwardedRef || childRef) {\n (merged as AnyProps).ref = composeRefs(forwardedRef, childRef);\n }\n\n return cloneElement(child, merged);\n});\nSlot.displayName = 'Slot';\n\nfunction mergeProps(outer: AnyProps, inner: AnyProps): AnyProps {\n // Inner (child) wins for everything except: className (concatenated), style (merged), and\n // event handlers (composed — outer runs first, then inner).\n const merged: AnyProps = { ...outer };\n\n for (const key of Object.keys(inner)) {\n const outerValue = outer[key];\n const innerValue = inner[key];\n\n if (key === 'className' || key === 'class') {\n merged[key] = joinClass(outerValue, innerValue);\n continue;\n }\n\n if (key === 'style') {\n merged[key] = {\n ...(outerValue as CSSProperties | undefined),\n ...(innerValue as CSSProperties | undefined),\n };\n continue;\n }\n\n if (isEventHandler(key, outerValue, innerValue)) {\n merged[key] = composeHandlers(outerValue as Fn, innerValue as Fn);\n continue;\n }\n\n merged[key] = innerValue;\n }\n\n return merged;\n}\n\nfunction joinClass(outer: unknown, inner: unknown): string | undefined {\n const a = typeof outer === 'string' ? outer : '';\n const b = typeof inner === 'string' ? inner : '';\n const joined = [a, b].filter(Boolean).join(' ');\n return joined.length > 0 ? joined : undefined;\n}\n\ntype Fn = (...args: unknown[]) => unknown;\n\nfunction isEventHandler(key: string, outer: unknown, inner: unknown): boolean {\n if (!key.startsWith('on') || key.length < 3) {\n return false;\n }\n if (key[2] !== key[2]?.toUpperCase()) {\n return false;\n }\n return typeof outer === 'function' && typeof inner === 'function';\n}\n\nfunction composeHandlers(outer: Fn, inner: Fn): Fn {\n return (...args: unknown[]) => {\n outer(...args);\n inner(...args);\n };\n}\n","/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#fafafa\",\n elevated: \"#ffffff\",\n subtle: \"#f4f4f5\",\n },\n border: {\n default: \"#e4e4e7\",\n strong: \"#d4d4d8\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#0d9488\",\n primaryHover: \"#0f766e\",\n primaryPressed: \"#115e59\",\n },\n text: {\n default: \"#18181b\",\n inverted: \"#fafafa\",\n muted: \"#52525b\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n\n// Dark mode overrides\n// Generated for dark mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const themeDark = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#18181b\",\n elevated: \"#3f3f46\",\n subtle: \"#27272a\",\n },\n border: {\n default: \"#3f3f46\",\n strong: \"#52525b\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#2dd4bf\",\n primaryHover: \"#5eead4\",\n primaryPressed: \"#99f6e4\",\n },\n text: {\n default: \"#fafafa\",\n inverted: \"#18181b\",\n muted: \"#a1a1aa\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\n","'use client';\n\nimport { themeDark as defaultDark, theme as defaultLight, type Theme } from '@nori-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\n\n/**\n * A `NoriTheme` is a paired light/dark palette. The active half is picked\n * by `useColorScheme()` so the same theme object covers both schemes.\n *\n * Build one yourself by spreading the defaults and overriding the colors\n * you care about, or pick a preset from `@nori-ui/core/themes` (see the\n * Theming docs for examples).\n */\nexport type NoriTheme = {\n light: Theme;\n dark: Theme;\n};\n\n/**\n * Default Nori palette — teal primary on a warm-paper light surface, and\n * teal-400 primary on a deep-zinc dark surface. Mirrors the `theme` /\n * `themeDark` exports from @nori-ui/tokens.\n */\nexport const defaultTheme: NoriTheme = {\n light: defaultLight,\n dark: defaultDark as unknown as Theme,\n};\n\n// Context value is the FULL pair, not the active half. `useThemeColors`\n// (the hook components reach for) resolves it to the right one based on\n// the current color scheme. Storing the pair means a parent only has to\n// declare the theme once — switching scheme is a separate concern.\nexport const ThemeContext = createContext<NoriTheme>(defaultTheme);\nThemeContext.displayName = 'ThemeContext';\n\nexport type ThemeProviderProps = {\n /**\n * The theme to apply to descendants. Pass either:\n * - a full `NoriTheme` (`{ light, dark }`) — both schemes covered\n * - a single `Theme` — used for both light and dark (rare; mostly\n * useful when you ONLY ever render in one scheme)\n * - omit — falls back to the Nori default (teal palette)\n */\n theme?: NoriTheme | Theme;\n children?: ReactNode;\n};\n\nconst isFullTheme = (t: NoriTheme | Theme): t is NoriTheme => 'light' in t && 'dark' in t;\n\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const value: NoriTheme =\n theme === undefined ? defaultTheme : isFullTheme(theme) ? theme : { light: theme, dark: theme };\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n","'use client';\n\nimport { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\nimport { Appearance, Platform } from 'react-native';\n\nexport type ColorScheme = 'light' | 'dark';\n\n// Override channel so a parent can force a scheme (e.g. an app shell with\n// hard-coded dark chrome that wants nested components to render against\n// the dark token half regardless of the OS Appearance). `null` means\n// \"no override — use the system signal\".\nconst ColorSchemeOverrideContext = createContext<ColorScheme | null>(null);\nColorSchemeOverrideContext.displayName = 'ColorSchemeOverrideContext';\n\nexport type ColorSchemeProviderProps = {\n /** Force a specific scheme for descendants. */\n value: ColorScheme;\n children?: ReactNode;\n};\n\n/**\n * Forces a color scheme for all descendants. Useful when a screen's chrome\n * is hard-coded to one scheme (e.g. a forced-dark editorial surface) and\n * you want library components inside it to follow that, not the OS.\n */\nexport function ColorSchemeProvider({ value, children }: ColorSchemeProviderProps) {\n return <ColorSchemeOverrideContext.Provider value={value}>{children}</ColorSchemeOverrideContext.Provider>;\n}\n\nconst isWeb = Platform.OS === 'web';\n\n// Web: a document is \"in dark mode\" when the root <html> element carries\n// the `dark` class (Tailwind / Fumadocs convention) OR a `data-theme=\"dark\"`\n// attribute (matches the `darkMode` selectors in our Tailwind preset).\n// We deliberately don't fall back to `prefers-color-scheme` — the app\n// usually owns that decision and writes it onto <html>; tracking the system\n// preference too would fight the app's chosen value.\nfunction readWebScheme(): ColorScheme {\n if (typeof document === 'undefined') {\n return 'light';\n }\n const root = document.documentElement;\n if (root.classList.contains('dark')) {\n return 'dark';\n }\n if (root.getAttribute('data-theme') === 'dark') {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Returns the current color scheme — `'light'` or `'dark'`.\n *\n * On web: observes the root `<html>` element's `class=\"dark\"` and\n * `data-theme=\"dark\"` attribute (the same signals our Tailwind preset\n * keys on). Updates live as those flip.\n *\n * On native: delegates to `react-native`'s `Appearance` API so the hook\n * tracks the OS preference without extra wiring.\n *\n * Components consume this indirectly via `useThemeColors()`; reach for\n * this directly when you need the raw scheme (e.g. to swap an icon).\n */\nexport function useColorScheme(): ColorScheme {\n // A `<ColorSchemeProvider value=\"dark\">` ancestor (or NoriProvider's\n // `colorScheme` prop, which mounts one) wins over the OS signal — the\n // app shell knows which scheme its chrome is locked to.\n const override = useContext(ColorSchemeOverrideContext);\n\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (isWeb) {\n return readWebScheme();\n }\n return (Appearance.getColorScheme() ?? 'light') as ColorScheme;\n });\n\n useEffect(() => {\n if (isWeb) {\n const root = document.documentElement;\n const update = () => setScheme(readWebScheme());\n const observer = new MutationObserver(update);\n observer.observe(root, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n // Sync once after mount in case SSR shipped a different value.\n update();\n return () => observer.disconnect();\n }\n\n const sub = Appearance.addChangeListener(({ colorScheme }) => {\n setScheme((colorScheme ?? 'light') as ColorScheme);\n });\n return () => sub.remove();\n }, []);\n\n return override ?? scheme;\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport { useContext } from 'react';\nimport { ThemeContext } from './context';\nimport { useColorScheme } from './use-color-scheme';\n\n/**\n * Returns the active token palette — `theme.light` in light mode,\n * `theme.dark` in dark mode. Resolves the theme via `ThemeContext` so\n * any ancestor `<ThemeProvider theme={...}>` flows through. With no\n * provider in the tree, the default Nori palette (teal) is used.\n *\n * Use this **inside a component** when you need a hex value for a React\n * Native `style` prop (`backgroundColor`, `borderColor`, etc.).\n *\n * Note: className-based styles (e.g. `bg-semantic-interactive-primary`)\n * compile against the @nori-ui/tokens palette at build time and don't\n * follow `<ThemeProvider>` overrides today. Inline styles via this hook\n * always do — and inline beats class on CSS specificity, so the visible\n * color you see is whatever the hook resolves to. CSS-variable theming\n * for the className path is a planned follow-up.\n */\nexport function useThemeColors(): Theme {\n const scheme = useColorScheme();\n const themePair = useContext(ThemeContext);\n return scheme === 'dark' ? themePair.dark : themePair.light;\n}\n","// cn — class-name merger. clsx-compatible shape.\n//\n// Intentionally does NOT deduplicate Tailwind conflicts (e.g. \"text-sm text-lg\").\n// That's `tailwind-merge`'s job; we defer adding it until a component actually\n// needs it, to keep the core tree-shakable and the runtime zero-dep.\n\nexport type ClassInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | ClassInput[]\n | Record<string, boolean | number | null | undefined>;\n\nexport function cn(...inputs: ClassInput[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n append(out, input);\n }\n return out.join(' ');\n}\n\nfunction append(out: string[], input: ClassInput): void {\n if (!input) {\n return;\n }\n if (typeof input === 'string') {\n if (input.length > 0) {\n out.push(input);\n }\n return;\n }\n if (typeof input === 'number') {\n return; // numbers are never class names\n }\n if (Array.isArray(input)) {\n for (const inner of input) {\n append(out, inner);\n }\n return;\n }\n if (typeof input === 'object') {\n for (const key of Object.keys(input)) {\n if (input[key]) {\n out.push(key);\n }\n }\n }\n}\n","'use client';\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Dimensions, Modal, Platform, Pressable, Text as RNText, View } from 'react-native';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type PopoverSide = 'top' | 'right' | 'bottom' | 'left';\nexport type PopoverAlign = 'start' | 'center' | 'end';\n\ntype TriggerRect = { top: number; left: number; width: number; height: number };\n\ntype PopoverContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n contentId: string;\n triggerRef: { current: HTMLElement | null };\n contentRef: { current: HTMLDivElement | null };\n triggerRect: TriggerRect | null;\n measureTrigger: () => void;\n};\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null);\n\nconst usePopoverContext = (label: string): PopoverContextValue => {\n const ctx = useContext(PopoverContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Popover>.`);\n }\n return ctx;\n};\n\n/**\n * @internal — exposes the Popover context so higher-level overlay components\n * (DropdownMenu, ContextMenu) can interact with trigger measurement and open\n * state without going through PopoverTrigger.\n */\nexport { usePopoverContext };\n\nexport type PopoverProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n};\n\n/**\n * Non-modal floating panel anchored to a trigger element. Use for help\n * tooltips with rich content, color pickers, or profile previews.\n *\n * Composition: `Popover` (root, owns open state), `PopoverTrigger`\n * (forwards events to its child via Slot when `asChild`), `PopoverContent`\n * (the floating surface).\n *\n * Differences from `Dialog`: non-modal — does NOT trap focus or lock\n * scroll. Tab moves outside as normal. Differences from `Tooltip`: can\n * contain interactive content (buttons, inputs, links) and dismisses on\n * outside-click + Escape rather than mouse-leave.\n *\n * Behavior:\n * - Trigger click toggles open/close.\n * - Click outside the content (and outside the trigger) closes.\n * - Escape closes.\n *\n * Cross-platform: uses RN `<Modal>` as the visibility/portal primitive on\n * native (transparent backdrop, tap-outside-to-close). On web, the content\n * uses `position: fixed` + a measured trigger rect so it escapes any\n * ancestor `overflow: hidden`.\n */\nconst PopoverRoot = ({ open, defaultOpen = false, onOpenChange, children }: PopoverProps) => {\n const [inner, setInner] = useState<boolean>(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? open : inner;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const baseId = useId();\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n // Measure the trigger so the content can render with `position: fixed` +\n // computed coords. position:fixed escapes any ancestor's overflow:hidden\n // (e.g. fumadocs Tabs panes, our Preview frame), which is the single\n // biggest source of \"the popup got cut off\" bugs.\n const [triggerRect, setTriggerRect] = useState<TriggerRect | null>(null);\n const measureTrigger = useCallback(() => {\n const node = triggerRef.current;\n if (!node || typeof node.getBoundingClientRect !== 'function') {\n return;\n }\n const rect = node.getBoundingClientRect();\n setTriggerRect({ top: rect.top, left: rect.left, width: rect.width, height: rect.height });\n }, []);\n\n const ctxValue: PopoverContextValue = {\n open: current,\n setOpen,\n contentId: `${baseId}-content`,\n triggerRef,\n contentRef,\n triggerRect,\n measureTrigger,\n };\n\n return <PopoverContext.Provider value={ctxValue}>{children}</PopoverContext.Provider>;\n};\n\nexport type PopoverTriggerProps = {\n /** Render the child as the trigger (Slot pattern). Default true — pass `false` for an inline pressable. */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Element that toggles the popover. Uses `asChild` by default so any\n * element (Button, Link, custom Pressable) becomes the trigger.\n *\n * The trigger element gets `aria-haspopup=\"dialog\"` and `aria-expanded`\n * so assistive tech announces the relationship.\n */\nexport const PopoverTrigger = ({ asChild = true, children, className, testID }: PopoverTriggerProps) => {\n const ctx = usePopoverContext('PopoverTrigger');\n const onPress = useCallback(() => {\n ctx.measureTrigger();\n ctx.setOpen(!ctx.open);\n }, [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n // Pass both onClick (web HTML buttons) AND onPress (RN Pressable /\n // our own Button) so the trigger fires regardless of which event\n // model the wrapped child speaks. The child's existing handler\n // runs first, then we toggle.\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.measureTrigger();\n ctx.setOpen(!ctx.open);\n };\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }}\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n aria-controls={ctx.contentId}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n ref={(node) => {\n ctx.triggerRef.current = node as unknown as HTMLElement | null;\n }}\n onPress={onPress}\n {...({\n 'aria-haspopup': 'dialog',\n 'aria-expanded': ctx.open,\n 'aria-controls': ctx.contentId,\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// On native, raw strings rendered as children of a non-Text component\n// throw \"Text strings must be rendered within a <Text> component\". On\n// web, react-native-web silently tolerates it. Wrap any string/number\n// children in an RNText so the same JSX renders cleanly on both\n// platforms. Non-string children are passed through unchanged.\nfunction wrapStringChildren(children: ReactNode): ReactNode {\n if (typeof children === 'string' || typeof children === 'number') {\n return <RNText>{children}</RNText>;\n }\n return children;\n}\n\nconst GAP = 4; // visual gap between trigger and content\nconst MIN_WIDTH = 200;\n// Margin reserved on each side so the popover never butts against the\n// viewport edge. Matches the 8px safe-area we use for native modal pads.\nconst VIEWPORT_MARGIN = 8;\n\nfunction computePosition(\n rect: TriggerRect,\n side: PopoverSide,\n align: PopoverAlign,\n contentSize: { width: number; height: number } | null\n): { top: number; left: number } {\n const cw = contentSize?.width ?? MIN_WIDTH;\n const ch = contentSize?.height ?? 0;\n\n let top = 0;\n let left = 0;\n\n switch (side) {\n case 'top':\n top = rect.top - GAP - ch;\n break;\n case 'bottom':\n top = rect.top + rect.height + GAP;\n break;\n case 'left':\n left = rect.left - GAP - cw;\n break;\n case 'right':\n left = rect.left + rect.width + GAP;\n break;\n }\n\n if (side === 'top' || side === 'bottom') {\n switch (align) {\n case 'start':\n left = rect.left;\n break;\n case 'center':\n left = rect.left + rect.width / 2 - cw / 2;\n break;\n case 'end':\n left = rect.left + rect.width - cw;\n break;\n }\n } else {\n switch (align) {\n case 'start':\n top = rect.top;\n break;\n case 'center':\n top = rect.top + rect.height / 2 - ch / 2;\n break;\n case 'end':\n top = rect.top + rect.height - ch;\n break;\n }\n }\n\n return { top, left };\n}\n\nexport type PopoverContentProps = {\n /** Side of the trigger to anchor on. @defaultValue 'bottom' */\n side?: PopoverSide;\n /** Alignment along the trigger edge. @defaultValue 'center' */\n align?: PopoverAlign;\n children?: ReactNode;\n className?: string;\n testID?: string;\n /** Accessible label when no visible heading is present. */\n 'aria-label'?: string;\n};\n\n/**\n * The floating popover surface. Renders only while open. On web uses\n * `position: fixed` with a measured trigger rect so it escapes any\n * ancestor `overflow: hidden`. Non-modal: focus is NOT trapped inside —\n * the user can tab back out as normal.\n *\n * ARIA: `role=\"dialog\"` (without `aria-modal`) so assistive tech\n * announces it as a grouping but doesn't suppress the rest of the page.\n */\nexport const PopoverContent = ({\n side = 'bottom',\n align = 'center',\n children,\n className,\n testID,\n ...rest\n}: PopoverContentProps) => {\n const ctx = usePopoverContext('PopoverContent');\n const colors = useThemeColors();\n const ariaLabel = rest['aria-label'];\n\n // Measure content size after first paint so we can anchor `top`-style\n // popups (which need to know content height to render above the trigger).\n const [contentSize, setContentSize] = useState<{ width: number; height: number } | null>(null);\n\n // Web-only side effects: outside-click close, Escape close, re-measure\n // on resize. RN Modal handles its own dismissal on native (tap-outside\n // is the transparent overlay's onPress).\n useEffect(() => {\n if (!ctx.open) {\n return;\n }\n if (Platform.OS !== 'web') {\n return;\n }\n if (typeof document === 'undefined') {\n return;\n }\n\n ctx.measureTrigger();\n\n const onDocMouseDown = (event: MouseEvent) => {\n const target = event.target as Node;\n const trigger = ctx.triggerRef.current;\n const content = ctx.contentRef.current;\n if (trigger?.contains(target)) {\n return;\n }\n if (content?.contains(target)) {\n return;\n }\n ctx.setOpen(false);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n ctx.setOpen(false);\n }\n };\n const onResize = () => ctx.measureTrigger();\n const onScroll = () => ctx.measureTrigger();\n\n document.addEventListener('mousedown', onDocMouseDown);\n document.addEventListener('keydown', onKeyDown);\n window.addEventListener('resize', onResize);\n window.addEventListener('scroll', onScroll, true);\n return () => {\n document.removeEventListener('mousedown', onDocMouseDown);\n document.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('resize', onResize);\n window.removeEventListener('scroll', onScroll, true);\n };\n // ctx is the provider's stable identity; we only care about open transitions.\n }, [ctx.open, ctx.measureTrigger, ctx.setOpen, ctx.triggerRef, ctx.contentRef]);\n\n // Reset measured size when popover closes so reopening re-measures fresh.\n useEffect(() => {\n if (!ctx.open) {\n setContentSize(null);\n }\n }, [ctx.open]);\n\n if (!ctx.open) {\n return null;\n }\n\n const position = ctx.triggerRect ? computePosition(ctx.triggerRect, side, align, contentSize) : null;\n\n // Viewport-aware max width. Web uses Dimensions.get('window') which\n // react-native-web maps to window.innerWidth; native uses the same API\n // for the device window. Subtract margin on both sides so content\n // doesn't kiss the screen edge.\n const viewportWidth = Dimensions.get('window').width;\n const maxContentWidth = Math.max(MIN_WIDTH, viewportWidth - VIEWPORT_MARGIN * 2);\n\n const contentBaseStyle: ViewStyle = {\n minWidth: MIN_WIDTH,\n maxWidth: maxContentWidth,\n borderRadius: px(colors.radius.lg),\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n backgroundColor: colors.semantic.background.elevated,\n padding: px(colors.spacing['4']),\n ...(Platform.OS === 'web'\n ? ({\n boxShadow: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n // Subtle scale-in. Skipped on native (do nothing fancy there).\n transition: 'opacity 120ms ease-out, transform 120ms ease-out',\n transform: 'scale(1)',\n opacity: 1,\n } as ViewStyle)\n : { elevation: 8 }),\n };\n\n // Clamp `left` so the popover stays within the viewport even when the\n // trigger sits near the right edge. First-paint fallback uses\n // `maxContentWidth` (the cap we apply via maxWidth above) — content\n // is allowed to grow up to that size, so assuming worst-case avoids\n // a one-frame overflow before measurement settles.\n const measuredWidth = contentSize?.width ?? maxContentWidth;\n const clampedLeft = position\n ? Math.min(\n Math.max(VIEWPORT_MARGIN, position.left),\n Math.max(VIEWPORT_MARGIN, viewportWidth - measuredWidth - VIEWPORT_MARGIN)\n )\n : 0;\n\n const positionedStyle: ViewStyle =\n Platform.OS === 'web'\n ? position\n ? ({\n position: 'fixed' as unknown as 'absolute',\n top: position.top,\n left: clampedLeft,\n zIndex: 50,\n } as ViewStyle)\n : ({\n // Trigger not yet measured — render off-screen for a\n // frame to avoid a flash at (0,0).\n position: 'fixed' as unknown as 'absolute',\n top: -9999,\n left: -9999,\n zIndex: 50,\n } as ViewStyle)\n : {};\n\n const content = (\n <View\n ref={(node) => {\n ctx.contentRef.current = node as unknown as HTMLDivElement | null;\n if (Platform.OS !== 'web') {\n return;\n }\n if (!node) {\n return;\n }\n if (typeof (node as unknown as HTMLDivElement).getBoundingClientRect !== 'function') {\n return;\n }\n const rect = (node as unknown as HTMLDivElement).getBoundingClientRect();\n if (!contentSize || contentSize.width !== rect.width || contentSize.height !== rect.height) {\n setContentSize({ width: rect.width, height: rect.height });\n }\n }}\n {...({\n role: 'dialog',\n id: ctx.contentId,\n ...(ariaLabel !== undefined ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n className={cn(\n 'rounded-lg border border-semantic-border-default bg-semantic-background-elevated',\n className\n )}\n style={[contentBaseStyle, positionedStyle]}\n >\n {children}\n </View>\n );\n\n if (Platform.OS === 'web') {\n return content;\n }\n\n // Native: use Modal as the floating layer with a transparent backdrop.\n // Tap on the backdrop closes the popover.\n return (\n <Modal visible={ctx.open} transparent animationType=\"fade\" onRequestClose={() => ctx.setOpen(false)}>\n <Pressable\n accessibilityRole=\"none\"\n aria-hidden={true}\n onPress={() => ctx.setOpen(false)}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'transparent',\n }}\n >\n <Pressable\n onPress={(event) => event.stopPropagation?.()}\n style={{\n position: 'absolute',\n top: ctx.triggerRect\n ? side === 'top'\n ? Math.max(VIEWPORT_MARGIN, ctx.triggerRect.top - GAP - 80)\n : ctx.triggerRect.top + ctx.triggerRect.height + GAP\n : 80,\n // Clamp horizontally so a wide popover near the\n // right edge can still grow leftward without\n // overflowing the screen.\n left: ctx.triggerRect\n ? Math.min(\n Math.max(VIEWPORT_MARGIN, ctx.triggerRect.left),\n Math.max(VIEWPORT_MARGIN, viewportWidth - measuredWidth - VIEWPORT_MARGIN)\n )\n : VIEWPORT_MARGIN * 2,\n }}\n >\n {content}\n </Pressable>\n </Pressable>\n </Modal>\n );\n};\n\n/**\n * Public `Popover` value — the root function plus its `.Trigger` and `.Content`\n * static members. `Object.assign` produces a value whose inferred type carries\n * the static properties, so `.d.ts` consumers can write `<Popover.Trigger>`\n * without a separate import.\n */\nexport const Popover = Object.assign(PopoverRoot, {\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n});\n","'use client';\n\n// Breadcrumb — cross-platform, agent-friendly, width-aware.\n//\n// Two equivalent APIs:\n//\n// 1. Items-array (terse, agent-friendly, full-feature):\n//\n// <Breadcrumb\n// items={[\n// { label: 'Home', href: '/' },\n// { label: 'Docs', href: '/docs' },\n// { label: 'Breadcrumb', current: true },\n// ]}\n// separator=\"/\"\n// collapseOnOverflow\n// />\n//\n// 2. Compound (full JSX control):\n//\n// <Breadcrumb separator=\"/\">\n// <Breadcrumb.List>\n// <Breadcrumb.Item><Breadcrumb.Link href=\"/\">Home</Breadcrumb.Link></Breadcrumb.Item>\n// <Breadcrumb.Item><Breadcrumb.Link href=\"/docs\">Docs</Breadcrumb.Link></Breadcrumb.Item>\n// <Breadcrumb.Item><Breadcrumb.Page>Breadcrumb</Breadcrumb.Page></Breadcrumb.Item>\n// </Breadcrumb.List>\n// </Breadcrumb>\n//\n// Key design notes:\n// - Width-based collapse works on BOTH platforms via React Native's\n// `onLayout` (which react-native-web shims via ResizeObserver). A\n// hidden measurement copy of the full list reports per-item widths;\n// the visible list renders only the items that fit.\n// - Auto-`aria-current=\"page\"` on the last item or any item flagged\n// `current`.\n// - JSON-LD BreadcrumbList schema emitted on web for SEO + LLM ingest\n// (opt-out via `schemaOrg={false}`). Injected client-side via\n// `document.head`; SSR consumers can use the exported\n// `getBreadcrumbJsonLd()` helper with their framework's metadata API.\n// - Per-item `siblings` opens a sibling menu (the VSCode/file-path\n// pattern). Uses our `Popover` primitive.\n\nimport {\n Children,\n type ComponentType,\n createContext,\n Fragment,\n isValidElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { LayoutChangeEvent, ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, ScrollView, View } from 'react-native';\nimport { useTranslation } from '../../i18n/use-translation';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Popover } from '../Popover';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Where the ellipsis sends the user when tapped/clicked. */\nexport type BreadcrumbExpandBehavior =\n /** Replace `…` with all hidden items inline (MUI). Web default. */\n | 'inline'\n /** Open a popover/sheet listing the hidden items (Primer / iOS). Native default. */\n | 'menu'\n /** Don't collapse — fall back to a horizontal scroll container. Useful for IDE-style file paths. */\n | 'scroll'\n /** Render `…` but don't react to interaction. Pure visual hint. */\n | 'none';\n\nexport type BreadcrumbSeparatorContext = {\n /** Index of the item PRECEDING this separator. */\n fromIndex: number;\n /** Total visible items. */\n visibleCount: number;\n /** Reading direction at render time. */\n dir: 'ltr' | 'rtl';\n};\n\nexport type BreadcrumbSeparatorValue = string | ReactNode | ((ctx: BreadcrumbSeparatorContext) => ReactNode);\n\nexport type BreadcrumbIcon = ComponentType<{ size?: number; color?: string }>;\n\nexport type BreadcrumbSibling = {\n /** Visible label. */\n label: ReactNode;\n /** Link target. Omit for an `onSelect`-driven sibling. */\n href?: string;\n /** Optional leading icon. */\n icon?: BreadcrumbIcon;\n /** Click / tap handler. */\n onSelect?: () => void;\n /** Render as inactive in the sibling menu. */\n disabled?: boolean;\n};\n\nexport type BreadcrumbItemData = {\n /** Visible label. Strings are wrapped in `<Text>`; ReactNode passes through. */\n label: ReactNode;\n /** Link target. When omitted and not `current`, the item renders as a button (use with `onSelect`). */\n href?: string;\n /** Leading icon component (lucide, custom, …). Sized to the line height. */\n icon?: BreadcrumbIcon;\n /** Marks this item as the current page. The last item is auto-flagged when no item is explicitly current. */\n current?: boolean;\n /** Sibling list — when provided, the item gets a chevron and opens a popover menu of siblings on tap. */\n siblings?: BreadcrumbSibling[];\n /** Render a skeleton instead of the label — useful while async paths resolve. */\n loading?: boolean;\n /** Click / tap handler when `href` is absent. */\n onSelect?: () => void;\n /** Stable key for React's reconciler. Defaults to the item index. */\n key?: string | number;\n /** Override per-item label truncation in characters. 0 disables truncation. */\n maxLabelLength?: number;\n};\n\nexport type BreadcrumbProps = {\n /** Items-array mode. When provided, `children` is ignored. */\n items?: ReadonlyArray<BreadcrumbItemData>;\n /**\n * Visual separator between items. Strings render as plain text; nodes\n * render as-is; functions receive `(ctx)` and return a node.\n * @defaultValue a chevron glyph (auto-flips for RTL)\n */\n separator?: BreadcrumbSeparatorValue;\n /**\n * Maximum number of visible items. The middle is collapsed into a\n * single ellipsis; the first / last items are kept by default.\n * Pass `0` or `undefined` to disable count-based collapse.\n */\n maxItems?: number;\n /** How many items at the START of the list stay visible when the middle collapses. @defaultValue 1 */\n itemsBeforeCollapse?: number;\n /** How many items at the END of the list stay visible when the middle collapses. @defaultValue 1 */\n itemsAfterCollapse?: number;\n /**\n * Width-based collapse using `onLayout` (works on RN-Web via the\n * built-in ResizeObserver shim and on native via the layout system).\n * The library renders a hidden measurement copy of every item, then\n * shows only the items that fit the container — middle items are\n * folded into the ellipsis. Pass `false` to opt out and let the row\n * grow to its natural width (it will overflow its parent if the\n * parent does not provide its own scroll/clip handling).\n * @defaultValue true\n */\n collapseOnOverflow?: boolean;\n /**\n * What the ellipsis does when tapped/clicked.\n * @defaultValue 'inline' on web, 'menu' on native\n */\n expandBehavior?: BreadcrumbExpandBehavior;\n /** Override the default i18n string for the \"show full path\" SR label. */\n expandLabel?: string;\n /** Override the default i18n string for the ellipsis SR label. */\n ellipsisLabel?: string;\n /**\n * Visually-hidden prefix announced before the current page's label.\n * Helps screen readers convey \"Current page: Settings\" instead of \"Settings\".\n */\n currentPageLabel?: string;\n /** Override the SR label for sibling menus opened from a crumb. */\n siblingMenuLabel?: string;\n /** Visible aria-label on the wrapping `<nav>`. @defaultValue translated \"Breadcrumb\" */\n ariaLabel?: string;\n /**\n * Emit JSON-LD `BreadcrumbList` structured data for SEO + LLM\n * ingest. Web only; ignored on native.\n * @defaultValue true (only when `items` is provided AND on web)\n */\n schemaOrg?: boolean;\n /**\n * Reading direction. RTL flips the default chevron separator and the\n * collapse logic so the start/end stay anchored to the right edge.\n * @defaultValue 'ltr'\n */\n dir?: 'ltr' | 'rtl';\n /**\n * Truncate each item's label after this many characters. Per-item\n * `maxLabelLength` overrides this. @defaultValue 0 (no truncation)\n */\n maxLabelLength?: number;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// =============================================================================\n// Context (compound mode only)\n// =============================================================================\n\ntype BreadcrumbContextValue = {\n separator: BreadcrumbSeparatorValue;\n dir: 'ltr' | 'rtl';\n currentPageLabel: string;\n siblingMenuLabel: string;\n maxLabelLength: number;\n};\n\nconst BreadcrumbContext = createContext<BreadcrumbContextValue | null>(null);\n\nconst useBreadcrumbContext = (label: string): BreadcrumbContextValue => {\n const ctx = useContext(BreadcrumbContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Breadcrumb>.`);\n }\n return ctx;\n};\n\n// =============================================================================\n// Defaults / markers\n// =============================================================================\n\nconst DEFAULT_ITEMS_BEFORE = 1;\nconst DEFAULT_ITEMS_AFTER = 1;\n\ntype CompoundChildKind = 'item' | 'separator';\nconst COMPOUND_KIND_KEY = '__nori_breadcrumb_kind__';\n\nfunction tagComponent<T>(component: T, kind: CompoundChildKind): T {\n (component as unknown as Record<string, unknown>)[COMPOUND_KIND_KEY] = kind;\n return component;\n}\n\nfunction getCompoundKind(node: ReactNode): CompoundChildKind | undefined {\n if (!isValidElement(node)) {\n return undefined;\n }\n const type = node.type as unknown as { [k: string]: unknown };\n const tagged = type?.[COMPOUND_KIND_KEY];\n return tagged === 'item' || tagged === 'separator' ? tagged : undefined;\n}\n\n// =============================================================================\n// Default chevron separator\n// =============================================================================\n\nconst DefaultChevron = ({ dir }: { dir: 'ltr' | 'rtl' }) => {\n const colors = useThemeColors();\n const flipped = dir === 'rtl';\n if (Platform.OS === 'web') {\n return (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors.semantic.text.muted}\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{ transform: flipped ? 'scaleX(-1)' : undefined, flexShrink: 0 }}\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n }\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n fontSize: 14,\n lineHeight: 20,\n color: colors.semantic.text.muted,\n transform: flipped ? [{ scaleX: -1 }] : undefined,\n }}\n >\n ›\n </RNText>\n );\n};\n\nconst SeparatorText = ({ children }: { children: ReactNode }) => {\n const colors = useThemeColors();\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n fontSize: px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.md) * 1.4,\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n paddingHorizontal: 2,\n }}\n >\n {children}\n </RNText>\n );\n};\n\nfunction renderSeparator(separator: BreadcrumbSeparatorValue | undefined, ctx: BreadcrumbSeparatorContext): ReactNode {\n if (separator === undefined) {\n return <DefaultChevron dir={ctx.dir} />;\n }\n if (typeof separator === 'function') {\n return separator(ctx);\n }\n if (typeof separator === 'string') {\n return <SeparatorText>{separator}</SeparatorText>;\n }\n return separator;\n}\n\n// =============================================================================\n// Width-based overflow fit\n// =============================================================================\n\ntype OverflowFitArgs = {\n enabled: boolean;\n /** Total candidate items (after count-collapse). */\n itemCount: number;\n itemsBeforeCollapse: number;\n itemsAfterCollapse: number;\n};\n\ntype OverflowFitState = {\n visibleIndices: Set<number>;\n ready: boolean;\n onContainerLayout: (event: LayoutChangeEvent) => void;\n onItemLayout: (index: number) => (event: LayoutChangeEvent) => void;\n onEllipsisLayout: (event: LayoutChangeEvent) => void;\n onSeparatorLayout: (event: LayoutChangeEvent) => void;\n};\n\nfunction useOverflowFit({\n enabled,\n itemCount,\n itemsBeforeCollapse,\n itemsAfterCollapse,\n}: OverflowFitArgs): OverflowFitState {\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n const itemWidthsRef = useRef<Map<number, number>>(new Map());\n const ellipsisWidthRef = useRef<number>(0);\n const separatorWidthRef = useRef<number>(0);\n // The widths above live in refs so we can write to them inside layout\n // callbacks without React's setState quotas. But the fit algorithm\n // depends on them — so any change has to invalidate the visibleIndices\n // memo. Bumping `widthsTick` does both: triggers a re-render AND adds\n // a memo dependency that actually changes between writes.\n const [widthsTick, setWidthsTick] = useState(0);\n\n const onContainerLayout = useCallback((event: LayoutChangeEvent) => {\n const w = event.nativeEvent.layout.width;\n setContainerWidth((prev) => (prev !== null && Math.abs(prev - w) < 0.5 ? prev : w));\n }, []);\n\n const onItemLayout = useCallback(\n (index: number) => (event: LayoutChangeEvent) => {\n const w = event.nativeEvent.layout.width;\n const prev = itemWidthsRef.current.get(index);\n if (prev === undefined || Math.abs(prev - w) >= 0.5) {\n itemWidthsRef.current.set(index, w);\n setWidthsTick((t) => t + 1);\n }\n },\n []\n );\n\n const onEllipsisLayout = useCallback((event: LayoutChangeEvent) => {\n const w = event.nativeEvent.layout.width;\n if (Math.abs(ellipsisWidthRef.current - w) >= 0.5) {\n ellipsisWidthRef.current = w;\n setWidthsTick((t) => t + 1);\n }\n }, []);\n\n const onSeparatorLayout = useCallback((event: LayoutChangeEvent) => {\n const w = event.nativeEvent.layout.width;\n if (Math.abs(separatorWidthRef.current - w) >= 0.5) {\n separatorWidthRef.current = w;\n setWidthsTick((t) => t + 1);\n }\n }, []);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: widthsTick is a manual invalidation signal for ref-stored measurements; the algorithm reads itemWidthsRef/ellipsisWidthRef/separatorWidthRef which biome can't see through\n const visibleIndices = useMemo<Set<number>>(() => {\n const all = new Set<number>();\n for (let i = 0; i < itemCount; i += 1) {\n all.add(i);\n }\n if (!enabled || containerWidth === null || itemCount === 0) {\n return all;\n }\n const widths = itemWidthsRef.current;\n // Wait for every item to report a width — incomplete measurements\n // can collapse a long item that actually fits.\n if (widths.size < itemCount) {\n return all;\n }\n const sep = separatorWidthRef.current;\n const ell = ellipsisWidthRef.current;\n\n // Total of the full list = sum(items) + sep * (count - 1).\n let total = 0;\n for (let i = 0; i < itemCount; i += 1) {\n total += widths.get(i) ?? 0;\n }\n total += sep * Math.max(0, itemCount - 1);\n if (total <= containerWidth) {\n return all;\n }\n\n const before = Math.max(0, Math.min(itemsBeforeCollapse, itemCount));\n const after = Math.max(0, Math.min(itemsAfterCollapse, itemCount - before));\n\n // Anchors are the items the user has guaranteed to keep visible.\n // Start with them, plus the ellipsis cell, then grow inward as\n // long as we have budget.\n const anchorIndices = new Set<number>();\n for (let i = 0; i < before; i += 1) {\n anchorIndices.add(i);\n }\n for (let i = itemCount - after; i < itemCount; i += 1) {\n anchorIndices.add(i);\n }\n let used = 0;\n for (const idx of anchorIndices) {\n used += widths.get(idx) ?? 0;\n }\n // ellipsis takes one cell + separators on each side that has anchors.\n used += ell;\n const sepCount = Math.max(0, anchorIndices.size + 1 - 1);\n used += sep * sepCount;\n\n if (used > containerWidth) {\n // Even the anchors don't fit — drop one anchor at a time\n // from the inner edge until the budget covers what's left\n // (always keeping at least one anchor on each side that had any).\n const beforeIdx: number[] = [];\n for (let i = 0; i < before; i += 1) {\n beforeIdx.push(i);\n }\n const afterIdx: number[] = [];\n for (let i = itemCount - after; i < itemCount; i += 1) {\n afterIdx.push(i);\n }\n const minBefore = before > 0 ? 1 : 0;\n const minAfter = after > 0 ? 1 : 0;\n while (used > containerWidth && (beforeIdx.length > minBefore || afterIdx.length > minAfter)) {\n if (beforeIdx.length > minBefore) {\n const dropped = beforeIdx.pop();\n if (dropped !== undefined) {\n used -= (widths.get(dropped) ?? 0) + sep;\n anchorIndices.delete(dropped);\n }\n }\n if (used <= containerWidth) {\n break;\n }\n if (afterIdx.length > minAfter) {\n const dropped = afterIdx.shift();\n if (dropped !== undefined) {\n used -= (widths.get(dropped) ?? 0) + sep;\n anchorIndices.delete(dropped);\n }\n }\n }\n return anchorIndices;\n }\n\n // Try to grow back: include adjacent items as long as they fit.\n // Alternate left and right so context near both edges is balanced.\n let leftCursor = before;\n let rightCursor = itemCount - after - 1;\n while (leftCursor <= rightCursor) {\n const w = widths.get(leftCursor) ?? 0;\n if (used + w + sep <= containerWidth) {\n anchorIndices.add(leftCursor);\n used += w + sep;\n leftCursor += 1;\n } else {\n break;\n }\n if (leftCursor > rightCursor) {\n break;\n }\n const w2 = widths.get(rightCursor) ?? 0;\n if (used + w2 + sep <= containerWidth) {\n anchorIndices.add(rightCursor);\n used += w2 + sep;\n rightCursor -= 1;\n } else {\n break;\n }\n }\n return anchorIndices;\n }, [containerWidth, itemCount, itemsBeforeCollapse, itemsAfterCollapse, enabled, widthsTick]);\n\n const ready = !enabled || (containerWidth !== null && itemWidthsRef.current.size >= itemCount);\n\n return {\n visibleIndices,\n ready,\n onContainerLayout,\n onItemLayout,\n onEllipsisLayout,\n onSeparatorLayout,\n };\n}\n\n// =============================================================================\n// Count-based collapse helper\n// =============================================================================\n\nfunction applyCountCollapse(\n items: ReadonlyArray<BreadcrumbItemData>,\n maxItems: number | undefined,\n before: number,\n after: number\n): { visible: ReadonlyArray<BreadcrumbItemData>; hidden: ReadonlyArray<BreadcrumbItemData>; collapseAt: number } {\n if (!maxItems || items.length <= maxItems) {\n return { visible: items, hidden: [], collapseAt: -1 };\n }\n const beforeArr = items.slice(0, Math.max(0, Math.min(before, items.length)));\n const afterArr = after > 0 ? items.slice(Math.max(beforeArr.length, items.length - after)) : [];\n const hidden = items.slice(beforeArr.length, items.length - afterArr.length);\n const visible = [...beforeArr, ...afterArr];\n return { visible, hidden, collapseAt: beforeArr.length };\n}\n\n// =============================================================================\n// JSON-LD\n// =============================================================================\n\n/**\n * Build a JSON-LD `BreadcrumbList` document from a list of items. Use it\n * with your framework's metadata API for SSR-time emission:\n *\n * ```tsx\n * // Next.js App Router metadata\n * export async function generateMetadata() {\n * return { other: { 'application/ld+json': getBreadcrumbJsonLd(items) } };\n * }\n * ```\n *\n * The component renders this client-side via `document.head` injection\n * automatically — but framework-driven SSR is preferred for reliable\n * search-engine pickup, hence this exported helper.\n */\nexport function getBreadcrumbJsonLd(items: ReadonlyArray<BreadcrumbItemData>): string {\n const elements = items\n .map((it, idx) => {\n const name = typeof it.label === 'string' ? it.label : undefined;\n if (!name) {\n return null;\n }\n const entry: Record<string, unknown> = {\n '@type': 'ListItem',\n position: idx + 1,\n name,\n };\n if (it.href) {\n entry.item = it.href;\n }\n return entry;\n })\n .filter((x): x is Record<string, unknown> => x !== null);\n return JSON.stringify({\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: elements,\n });\n}\n\nfunction useBreadcrumbJsonLdInjection(items: ReadonlyArray<BreadcrumbItemData>, enabled: boolean) {\n useEffect(() => {\n if (!enabled || Platform.OS !== 'web' || typeof document === 'undefined') {\n return;\n }\n const json = getBreadcrumbJsonLd(items);\n // Skip emitting an empty BreadcrumbList — no items resolve to a\n // string label means nothing useful for crawlers.\n if (!json.includes('\"itemListElement\":[{')) {\n return;\n }\n const script = document.createElement('script');\n script.type = 'application/ld+json';\n // Use textContent (not innerHTML) — the browser doesn't parse it as\n // HTML, so XSS via label content can't leak out of the script tag.\n script.textContent = json;\n script.setAttribute('data-nori-breadcrumb', 'true');\n document.head.appendChild(script);\n return () => {\n if (script.parentNode === document.head) {\n document.head.removeChild(script);\n }\n };\n }, [items, enabled]);\n}\n\n// =============================================================================\n// Truncated label\n// =============================================================================\n\nfunction truncateString(input: string, max: number): string {\n if (max <= 0 || input.length <= max) {\n return input;\n }\n if (max <= 1) {\n return '…';\n }\n return `${input.slice(0, max - 1)}…`;\n}\n\n// =============================================================================\n// Root\n// =============================================================================\n\nconst BreadcrumbRoot = ({\n items,\n separator,\n maxItems,\n itemsBeforeCollapse = DEFAULT_ITEMS_BEFORE,\n itemsAfterCollapse = DEFAULT_ITEMS_AFTER,\n collapseOnOverflow,\n expandBehavior,\n expandLabel,\n ellipsisLabel,\n currentPageLabel,\n siblingMenuLabel,\n ariaLabel,\n schemaOrg,\n dir = 'ltr',\n maxLabelLength = 0,\n children,\n className,\n testID,\n}: BreadcrumbProps) => {\n const { t } = useTranslation();\n const colors = useThemeColors();\n const resolvedAriaLabel = ariaLabel ?? t('breadcrumb.ariaLabel', { defaultValue: 'Breadcrumb' });\n const resolvedExpandLabel = expandLabel ?? t('breadcrumb.expandLabel', { defaultValue: 'Show full path' });\n const resolvedEllipsisLabel = ellipsisLabel ?? t('breadcrumb.ellipsisLabel', { defaultValue: 'More' });\n const resolvedCurrentPageLabel =\n currentPageLabel ?? t('breadcrumb.currentPageLabel', { defaultValue: 'Current page' });\n const resolvedSiblingMenuLabel =\n siblingMenuLabel ?? t('breadcrumb.siblingMenuLabel', { defaultValue: 'Open sibling pages' });\n\n const resolvedExpandBehavior: BreadcrumbExpandBehavior =\n expandBehavior ?? (Platform.OS === 'web' ? 'inline' : 'menu');\n\n if (items && items.length > 0) {\n return (\n <BreadcrumbItemsRenderer\n items={items}\n separator={separator}\n maxItems={maxItems}\n itemsBeforeCollapse={itemsBeforeCollapse}\n itemsAfterCollapse={itemsAfterCollapse}\n collapseOnOverflow={collapseOnOverflow ?? true}\n expandBehavior={resolvedExpandBehavior}\n expandLabel={resolvedExpandLabel}\n ellipsisLabel={resolvedEllipsisLabel}\n currentPageLabel={resolvedCurrentPageLabel}\n siblingMenuLabel={resolvedSiblingMenuLabel}\n ariaLabel={resolvedAriaLabel}\n schemaOrg={schemaOrg}\n dir={dir}\n maxLabelLength={maxLabelLength}\n {...(className !== undefined ? { className } : {})}\n {...(testID !== undefined ? { testID } : {})}\n />\n );\n }\n\n // Compound mode — context only; the list / items render themselves.\n const ctxValue: BreadcrumbContextValue = {\n separator: separator ?? '',\n dir,\n currentPageLabel: resolvedCurrentPageLabel,\n siblingMenuLabel: resolvedSiblingMenuLabel,\n maxLabelLength,\n };\n\n return (\n <BreadcrumbContext.Provider value={ctxValue}>\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={resolvedAriaLabel}\n accessible\n accessibilityLabel={resolvedAriaLabel}\n className={cn('flex-row items-center', className)}\n style={\n {\n flexDirection: 'row',\n alignItems: 'center',\n direction: dir as ViewStyle['direction'],\n fontFamily: colors.fontFamily.body,\n } as ViewStyle\n }\n >\n {children}\n </View>\n </BreadcrumbContext.Provider>\n );\n};\n\n// =============================================================================\n// Items-mode renderer\n// =============================================================================\n\ntype ItemsRendererProps = {\n items: ReadonlyArray<BreadcrumbItemData>;\n separator: BreadcrumbSeparatorValue | undefined;\n maxItems: number | undefined;\n itemsBeforeCollapse: number;\n itemsAfterCollapse: number;\n collapseOnOverflow: boolean;\n expandBehavior: BreadcrumbExpandBehavior;\n expandLabel: string;\n ellipsisLabel: string;\n currentPageLabel: string;\n siblingMenuLabel: string;\n ariaLabel: string;\n schemaOrg: boolean | undefined;\n dir: 'ltr' | 'rtl';\n maxLabelLength: number;\n className?: string;\n testID?: string;\n};\n\nconst BreadcrumbItemsRenderer = ({\n items,\n separator,\n maxItems,\n itemsBeforeCollapse,\n itemsAfterCollapse,\n collapseOnOverflow,\n expandBehavior,\n expandLabel,\n ellipsisLabel,\n currentPageLabel,\n siblingMenuLabel,\n ariaLabel,\n schemaOrg,\n dir,\n maxLabelLength,\n className,\n testID,\n}: ItemsRendererProps) => {\n const [inlineExpanded, setInlineExpanded] = useState(false);\n\n // Auto-flag the last item as current when nobody else claims it.\n const normalizedItems = useMemo<ReadonlyArray<BreadcrumbItemData>>(() => {\n if (items.length === 0) {\n return items;\n }\n const anyCurrent = items.some((it) => it.current);\n if (anyCurrent) {\n return items;\n }\n const last = items[items.length - 1];\n if (!last) {\n return items;\n }\n const out: BreadcrumbItemData[] = [...items];\n out[out.length - 1] = { ...last, current: true };\n return out;\n }, [items]);\n\n useBreadcrumbJsonLdInjection(normalizedItems, schemaOrg !== false);\n\n // -------- COUNT-BASED COLLAPSE --------\n const countCollapse = useMemo(\n () =>\n applyCountCollapse(\n normalizedItems,\n inlineExpanded ? undefined : maxItems,\n itemsBeforeCollapse,\n itemsAfterCollapse\n ),\n [normalizedItems, maxItems, itemsBeforeCollapse, itemsAfterCollapse, inlineExpanded]\n );\n\n // -------- WIDTH-BASED COLLAPSE --------\n // Width-based fit runs on the post-count-collapse list — count is\n // always the ceiling. Width may further shrink the visible set.\n const widthFit = useOverflowFit({\n enabled: collapseOnOverflow && expandBehavior !== 'scroll' && !inlineExpanded,\n itemCount: countCollapse.visible.length,\n itemsBeforeCollapse,\n itemsAfterCollapse,\n });\n\n const widthHiddenItems = useMemo(() => {\n if (!collapseOnOverflow || expandBehavior === 'scroll' || inlineExpanded) {\n return [] as ReadonlyArray<BreadcrumbItemData>;\n }\n return countCollapse.visible.filter((_, idx) => !widthFit.visibleIndices.has(idx));\n }, [collapseOnOverflow, expandBehavior, inlineExpanded, countCollapse.visible, widthFit.visibleIndices]);\n\n const allHiddenItems = useMemo<ReadonlyArray<BreadcrumbItemData>>(() => {\n if (inlineExpanded) {\n return [];\n }\n return [...countCollapse.hidden, ...widthHiddenItems];\n }, [countCollapse.hidden, widthHiddenItems, inlineExpanded]);\n\n const visibleItemsForRender = useMemo<ReadonlyArray<BreadcrumbItemData>>(() => {\n if (inlineExpanded) {\n return normalizedItems;\n }\n return countCollapse.visible.filter((_, idx) =>\n collapseOnOverflow && expandBehavior !== 'scroll' ? widthFit.visibleIndices.has(idx) : true\n );\n }, [\n countCollapse.visible,\n widthFit.visibleIndices,\n collapseOnOverflow,\n expandBehavior,\n inlineExpanded,\n normalizedItems,\n ]);\n\n // Where to insert the ellipsis. Heuristic: after `itemsBeforeCollapse`\n // visible items from the start (clamped to the visible length).\n const ellipsisInsertAt = useMemo(() => {\n if (inlineExpanded || allHiddenItems.length === 0) {\n return -1;\n }\n return Math.min(itemsBeforeCollapse, visibleItemsForRender.length);\n }, [allHiddenItems.length, inlineExpanded, visibleItemsForRender.length, itemsBeforeCollapse]);\n\n const renderedCells: ReactNode[] = [];\n const measurementCells: ReactNode[] = [];\n\n visibleItemsForRender.forEach((item, idx) => {\n if (idx === ellipsisInsertAt && allHiddenItems.length > 0) {\n renderedCells.push(\n <Fragment key=\"__ellipsis__\">\n <BreadcrumbEllipsisInternal\n ellipsisLabel={ellipsisLabel}\n expandLabel={expandLabel}\n expandBehavior={expandBehavior}\n hiddenItems={allHiddenItems}\n onExpandInline={() => setInlineExpanded(true)}\n />\n </Fragment>\n );\n renderedCells.push(\n <Fragment key=\"__sep_ellipsis__\">\n {renderSeparator(separator, {\n fromIndex: idx - 1,\n visibleCount: visibleItemsForRender.length + 1,\n dir,\n })}\n </Fragment>\n );\n }\n\n const itemKey = item.key ?? `item-${normalizedItems.indexOf(item)}`;\n renderedCells.push(\n <Fragment key={itemKey}>\n <BreadcrumbItemRenderer\n item={item}\n currentPageLabel={currentPageLabel}\n siblingMenuLabel={siblingMenuLabel}\n maxLabelLength={maxLabelLength}\n />\n </Fragment>\n );\n const isLast = idx === visibleItemsForRender.length - 1;\n if (!isLast) {\n renderedCells.push(\n <Fragment key={`sep-${itemKey}`}>\n {renderSeparator(separator, {\n fromIndex: idx,\n visibleCount: visibleItemsForRender.length,\n dir,\n })}\n </Fragment>\n );\n }\n });\n\n if (collapseOnOverflow && expandBehavior !== 'scroll') {\n countCollapse.visible.forEach((item, idx) => {\n const itemKey = item.key ?? `m-${idx}`;\n measurementCells.push(\n <View key={itemKey} onLayout={widthFit.onItemLayout(idx)}>\n <BreadcrumbItemRenderer\n item={item}\n currentPageLabel={currentPageLabel}\n siblingMenuLabel={siblingMenuLabel}\n maxLabelLength={maxLabelLength}\n />\n </View>\n );\n });\n measurementCells.push(\n <View key=\"__m_sep__\" onLayout={widthFit.onSeparatorLayout}>\n {renderSeparator(separator, {\n fromIndex: 0,\n visibleCount: countCollapse.visible.length,\n dir,\n })}\n </View>\n );\n measurementCells.push(\n <View key=\"__m_ellipsis__\" onLayout={widthFit.onEllipsisLayout}>\n <BreadcrumbEllipsisInternal\n ellipsisLabel={ellipsisLabel}\n expandLabel={expandLabel}\n expandBehavior=\"none\"\n hiddenItems={[]}\n onExpandInline={() => undefined}\n />\n </View>\n );\n }\n\n const list = (\n <View\n role=\"list\"\n accessibilityRole=\"list\"\n className={cn('flex-row items-center')}\n style={{ flexDirection: 'row', alignItems: 'center', flexShrink: 1, minWidth: 0 }}\n >\n {renderedCells}\n </View>\n );\n\n // When width-based collapse is on, the wrapper MUST measure the\n // available width — not its content's natural width. Without an\n // explicit `width: '100%'` (or `alignSelf: 'stretch'`) the wrapper\n // hugs its row of items on native, so `containerWidth` from\n // `onLayout` equals the items' total — and the algorithm\n // never sees an overflow. With `width: '100%'`, the wrapper fills\n // its parent's cross-axis (which is the row width in a typical\n // column-flex parent), giving us a real budget to compare against.\n const wrapperStyle: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n direction: dir as ViewStyle['direction'],\n flexShrink: 1,\n minWidth: 0,\n ...(collapseOnOverflow && expandBehavior !== 'scroll' ? { width: '100%' } : null),\n // `overflow: 'hidden'` keeps the visible row from blowing past\n // its container before the first measurement settles. Without\n // it, native renders the natural-width row briefly on the first\n // paint, even though the JS layout reports the correct measured\n // width on the very next tick.\n ...(collapseOnOverflow ? { overflow: 'hidden' as ViewStyle['overflow'] } : null),\n };\n\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={ariaLabel}\n accessible\n accessibilityLabel={ariaLabel}\n className={cn('flex-row items-center', className)}\n style={wrapperStyle}\n onLayout={collapseOnOverflow && expandBehavior !== 'scroll' ? widthFit.onContainerLayout : undefined}\n >\n {expandBehavior === 'scroll' ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={{ flexDirection: 'row', alignItems: 'center' }}\n style={{ flexGrow: 1 }}\n >\n {list}\n </ScrollView>\n ) : (\n list\n )}\n\n {/* Hidden measurement copy. Offscreen on both platforms. */}\n {collapseOnOverflow && expandBehavior !== 'scroll' ? (\n <View\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n position: 'absolute',\n opacity: 0,\n flexDirection: 'row',\n alignItems: 'center',\n left: -99999,\n top: 0,\n // `pointerEvents` lives on the style object now —\n // the prop form is deprecated in RN 0.71+ / RN-Web\n // 0.20+ and emits a runtime warning every render.\n pointerEvents: 'none' as ViewStyle['pointerEvents'],\n }}\n >\n {measurementCells}\n </View>\n ) : null}\n </View>\n );\n};\n\n// =============================================================================\n// Item renderer (items-mode)\n// =============================================================================\n\ntype ItemRendererProps = {\n item: BreadcrumbItemData;\n currentPageLabel: string;\n siblingMenuLabel: string;\n maxLabelLength: number;\n};\n\nconst BreadcrumbItemRenderer = ({ item, currentPageLabel, siblingMenuLabel, maxLabelLength }: ItemRendererProps) => {\n const colors = useThemeColors();\n const Icon = item.icon;\n const isLink = !item.current && (item.href !== undefined || item.onSelect !== undefined);\n\n const effectiveMax = item.maxLabelLength ?? maxLabelLength;\n const renderLabel = (): ReactNode => {\n if (item.loading) {\n return (\n <View\n style={{\n backgroundColor: colors.semantic.background.subtle,\n borderRadius: px(colors.radius.sm),\n height: px(colors.fontSize.sm),\n width: 64,\n }}\n />\n );\n }\n if (typeof item.label === 'string' || typeof item.label === 'number') {\n const text = String(item.label);\n const truncated = effectiveMax > 0 ? truncateString(text, effectiveMax) : text;\n return (\n <RNText\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: item.current ? colors.semantic.text.default : colors.semantic.text.muted,\n fontWeight: item.current\n ? (colors.fontWeight.semibold as '600')\n : (colors.fontWeight.regular as '400'),\n }}\n >\n {truncated}\n </RNText>\n );\n }\n return item.label;\n };\n\n const inner = (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['1']),\n }}\n >\n {Icon ? (\n <Icon size={14} color={item.current ? colors.semantic.text.default : colors.semantic.text.muted} />\n ) : null}\n {renderLabel()}\n </View>\n );\n\n if (item.current) {\n return (\n <View\n role=\"listitem\"\n accessibilityRole=\"text\"\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n <RNText\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n opacity: 0,\n }}\n >\n {currentPageLabel}:{' '}\n </RNText>\n <View aria-current=\"page\">{inner}</View>\n </View>\n );\n }\n\n if (item.siblings && item.siblings.length > 0) {\n return (\n <View role=\"listitem\" style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}>\n <BreadcrumbInteractive item={item}>{inner}</BreadcrumbInteractive>\n <BreadcrumbSiblingMenu item={item} siblingMenuLabel={siblingMenuLabel} />\n </View>\n );\n }\n\n if (isLink) {\n return (\n <View role=\"listitem\" style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}>\n <BreadcrumbInteractive item={item}>{inner}</BreadcrumbInteractive>\n </View>\n );\n }\n\n return (\n <View role=\"listitem\" style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}>\n {inner}\n </View>\n );\n};\n\nconst BreadcrumbInteractive = ({ item, children }: { item: BreadcrumbItemData; children: ReactNode }) => {\n const colors = useThemeColors();\n const handlePress = useCallback(() => {\n item.onSelect?.();\n }, [item]);\n\n if (Platform.OS === 'web' && item.href) {\n // When the consumer passes `onSelect`, treat it as the action and\n // suppress the default `<a>` navigation. This is the standard\n // pattern for \"link-styled button\" use-cases (router Links,\n // analytics-only handlers, demo pseudo-links).\n const handleClick = item.onSelect\n ? (event: { preventDefault: () => void }) => {\n event.preventDefault();\n item.onSelect?.();\n }\n : undefined;\n return (\n <a\n href={item.href}\n onClick={handleClick}\n style={{\n color: colors.semantic.interactive.primary,\n textDecoration: 'none',\n fontFamily: colors.fontFamily.body,\n }}\n >\n {children}\n </a>\n );\n }\n\n return (\n <Pressable onPress={handlePress} accessibilityRole=\"link\" role=\"link\">\n {children}\n </Pressable>\n );\n};\n\nconst BreadcrumbSiblingMenu = ({ item, siblingMenuLabel }: { item: BreadcrumbItemData; siblingMenuLabel: string }) => {\n const colors = useThemeColors();\n const siblings = item.siblings ?? [];\n return (\n <Popover>\n <Popover.Trigger asChild={false}>\n <View\n accessibilityLabel={siblingMenuLabel}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 2,\n paddingVertical: 4,\n }}\n >\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: 10, color: colors.semantic.text.muted }}\n >\n ▾\n </RNText>\n </View>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"start\">\n <View style={{ minWidth: 200, paddingVertical: 4 }}>\n {siblings.map((sib, idx) => (\n <SiblingRow key={sib.href ?? idx} sibling={sib} />\n ))}\n </View>\n </Popover.Content>\n </Popover>\n );\n};\n\nconst SiblingRow = ({ sibling }: { sibling: BreadcrumbSibling }) => {\n const colors = useThemeColors();\n const Icon = sibling.icon;\n const handlePress = useCallback(() => {\n sibling.onSelect?.();\n }, [sibling]);\n\n const inner = (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['2']),\n paddingVertical: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['3']),\n opacity: sibling.disabled ? 0.5 : 1,\n }}\n >\n {Icon ? <Icon size={14} color={colors.semantic.text.muted} /> : null}\n {typeof sibling.label === 'string' || typeof sibling.label === 'number' ? (\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n }}\n >\n {String(sibling.label)}\n </RNText>\n ) : (\n sibling.label\n )}\n </View>\n );\n\n if (Platform.OS === 'web' && sibling.href && !sibling.disabled) {\n const handleClick = sibling.onSelect\n ? (event: { preventDefault: () => void }) => {\n event.preventDefault();\n sibling.onSelect?.();\n }\n : undefined;\n return (\n <a href={sibling.href} onClick={handleClick} style={{ textDecoration: 'none', color: 'inherit' }}>\n {inner}\n </a>\n );\n }\n return (\n <Pressable onPress={sibling.disabled ? undefined : handlePress} accessibilityRole=\"menuitem\">\n {inner}\n </Pressable>\n );\n};\n\n// =============================================================================\n// Ellipsis (internal — used by the items-mode renderer)\n// =============================================================================\n\ntype EllipsisProps = {\n ellipsisLabel: string;\n expandLabel: string;\n expandBehavior: BreadcrumbExpandBehavior;\n hiddenItems: ReadonlyArray<BreadcrumbItemData>;\n onExpandInline: () => void;\n};\n\nconst BreadcrumbEllipsisInternal = ({\n ellipsisLabel,\n expandLabel,\n expandBehavior,\n hiddenItems,\n onExpandInline,\n}: EllipsisProps) => {\n const colors = useThemeColors();\n const renderDots = () => (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n paddingHorizontal: 4,\n }}\n >\n …\n </RNText>\n );\n\n if (expandBehavior === 'none' || hiddenItems.length === 0) {\n return (\n <View\n accessibilityLabel={ellipsisLabel}\n aria-label={ellipsisLabel}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n {renderDots()}\n </View>\n );\n }\n\n if (expandBehavior === 'inline') {\n return (\n <Pressable\n onPress={onExpandInline}\n accessibilityRole=\"button\"\n role=\"button\"\n accessibilityLabel={expandLabel}\n aria-label={expandLabel}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n {renderDots()}\n </Pressable>\n );\n }\n\n // Menu mode: ellipsis triggers a popover with the hidden items.\n return (\n <Popover>\n <Popover.Trigger asChild={false}>\n <View\n accessibilityLabel={expandLabel}\n aria-label={expandLabel}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n {renderDots()}\n </View>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"start\">\n <View style={{ minWidth: 200, paddingVertical: 4 }}>\n {hiddenItems.map((it, idx) => {\n const sib: BreadcrumbSibling = { label: it.label };\n if (it.href !== undefined) {\n sib.href = it.href;\n }\n if (it.icon !== undefined) {\n sib.icon = it.icon;\n }\n if (it.onSelect !== undefined) {\n sib.onSelect = it.onSelect;\n }\n return (\n <SiblingRow\n key={typeof it.key === 'string' || typeof it.key === 'number' ? it.key : idx}\n sibling={sib}\n />\n );\n })}\n </View>\n </Popover.Content>\n </Popover>\n );\n};\n\n// =============================================================================\n// Compound subcomponents\n// =============================================================================\n\nexport type BreadcrumbListProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbList = ({ children, className, testID }: BreadcrumbListProps) => {\n useBreadcrumbContext('Breadcrumb.List');\n // Auto-insert separators between consecutive `Breadcrumb.Item`s\n // unless the user provided their own. Lets users write the terse form:\n // <List><Item/><Item/><Item/></List>\n const childArray = Children.toArray(children);\n const out: ReactNode[] = [];\n let lastWasItem = false;\n childArray.forEach((child, idx) => {\n const kind = getCompoundKind(child);\n if (kind === 'item') {\n if (lastWasItem) {\n out.push(\n // biome-ignore lint/suspicious/noArrayIndexKey: separator position is deterministic from its preceding item index\n <Fragment key={`__autosep_${idx}`}>\n <BreadcrumbSeparator />\n </Fragment>\n );\n }\n out.push(child);\n lastWasItem = true;\n } else {\n out.push(child);\n lastWasItem = false;\n }\n });\n\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"list\"\n accessibilityRole=\"list\"\n className={cn('flex-row items-center', className)}\n style={{ flexDirection: 'row', alignItems: 'center', flexShrink: 1, minWidth: 0 }}\n >\n {out}\n </View>\n );\n};\n\nexport type BreadcrumbItemProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbItem = ({ children, className, testID }: BreadcrumbItemProps) => {\n useBreadcrumbContext('Breadcrumb.Item');\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"listitem\"\n accessibilityRole=\"text\"\n className={cn('flex-row items-center', className)}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n {children}\n </View>\n );\n};\ntagComponent(BreadcrumbItem, 'item');\n\nexport type BreadcrumbLinkProps = {\n href?: string;\n onPress?: () => void;\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbLink = ({ href, onPress, asChild, children, className, testID }: BreadcrumbLinkProps) => {\n const colors = useThemeColors();\n\n if (asChild) {\n return (\n <Slot\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {children}\n </Slot>\n );\n }\n\n if (Platform.OS === 'web' && href) {\n // `onPress` overrides the default `<a>` navigation — same pattern\n // as the items-mode `onSelect`. Lets consumers use `<Link>` from\n // a router or build pseudo-links for demos.\n const handleClick = onPress\n ? (event: { preventDefault: () => void }) => {\n event.preventDefault();\n onPress?.();\n }\n : undefined;\n return (\n <a\n href={href}\n onClick={handleClick}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n style={{\n color: colors.semantic.interactive.primary,\n textDecoration: 'none',\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {typeof children === 'string' || typeof children === 'number' ? (\n <RNText\n style={{\n color: colors.semantic.interactive.primary,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n )}\n </a>\n );\n }\n\n return (\n <Pressable onPress={onPress} accessibilityRole=\"link\" role=\"link\" {...(testID !== undefined ? { testID } : {})}>\n {typeof children === 'string' || typeof children === 'number' ? (\n <RNText\n style={{\n color: colors.semantic.interactive.primary,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n )}\n </Pressable>\n );\n};\n\nexport type BreadcrumbPageProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbPage = ({ children, className, testID }: BreadcrumbPageProps) => {\n const ctx = useBreadcrumbContext('Breadcrumb.Page');\n const colors = useThemeColors();\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n accessibilityRole=\"text\"\n aria-current=\"page\"\n className={cn('flex-row items-center', className)}\n style={{ flexDirection: 'row', alignItems: 'center' }}\n >\n <RNText\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n opacity: 0,\n }}\n >\n {ctx.currentPageLabel}:{' '}\n </RNText>\n {typeof children === 'string' || typeof children === 'number' ? (\n <RNText\n numberOfLines={1}\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.semibold as '600',\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n )}\n </View>\n );\n};\n\nexport type BreadcrumbSeparatorProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbSeparator = ({ children, className, testID }: BreadcrumbSeparatorProps) => {\n const ctx = useBreadcrumbContext('Breadcrumb.Separator');\n const node = children ?? renderSeparator(ctx.separator, { fromIndex: 0, visibleCount: 0, dir: ctx.dir });\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n role=\"presentation\"\n className={cn('flex-row items-center', className)}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 2 }}\n >\n {node}\n </View>\n );\n};\ntagComponent(BreadcrumbSeparator, 'separator');\n\nexport type BreadcrumbEllipsisProps = {\n ellipsisLabel?: string;\n className?: string;\n testID?: string;\n};\n\nexport const BreadcrumbEllipsis = ({ ellipsisLabel, className, testID }: BreadcrumbEllipsisProps) => {\n useBreadcrumbContext('Breadcrumb.Ellipsis');\n const { t } = useTranslation();\n const colors = useThemeColors();\n const label = ellipsisLabel ?? t('breadcrumb.ellipsisLabel', { defaultValue: 'More' });\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n accessibilityLabel={label}\n aria-label={label}\n className={cn('flex-row items-center', className)}\n style={{ flexDirection: 'row', alignItems: 'center', paddingHorizontal: 4 }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n }}\n >\n …\n </RNText>\n </View>\n );\n};\n\n// =============================================================================\n// Public surface\n// =============================================================================\n\nexport const Breadcrumb = Object.assign(BreadcrumbRoot, {\n List: BreadcrumbList,\n Item: BreadcrumbItem,\n Link: BreadcrumbLink,\n Page: BreadcrumbPage,\n Separator: BreadcrumbSeparator,\n Ellipsis: BreadcrumbEllipsis,\n});\n"]}
|