@nori-ui/core 1.4.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-HZKXPN6B.js → chunk-2HMQDJ22.js} +4 -4
- package/dist/{chunk-HZKXPN6B.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-V2AWSDDZ.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-JXLEMBDB.js +11 -0
- package/dist/chunk-JXLEMBDB.js.map +1 -0
- 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-XXBN6CIK.js → chunk-WP2Z2ATO.js} +5 -5
- package/dist/{chunk-XXBN6CIK.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 +453 -119
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +4 -0
- package/dist/client.d.ts +4 -0
- package/dist/client.js +50 -45
- 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.cjs +1374 -0
- package/dist/components/Combobox/index.cjs.map +1 -0
- package/dist/components/Combobox/index.d.cts +17 -0
- package/dist/components/Combobox/index.d.ts +17 -0
- package/dist/components/Combobox/index.js +9 -0
- package/dist/components/Combobox/index.js.map +1 -0
- 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 +453 -119
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +47 -42
- 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-V2AWSDDZ.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Pagination/use-pagination.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/Table/Table.shared.tsx","../../../src/components/Table/Table.web.tsx","../../../src/components/DataTable/DataTable.tsx"],"names":["useState","useRef","useCallback","next","useMemo","createContext","Platform","useContext","Appearance","useEffect","jsx","View","jsxs","Pressable","RNText"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\nimport { useCallback, useMemo, useRef, useState } from 'react';\n\nexport type PaginationItemType = 'page' | 'prev' | 'next' | 'first' | 'last' | 'ellipsis';\n\n/**\n * One slot in the rendered pagination row, as produced by `usePagination`.\n * `page` is set on `'page'` items only; ellipsis carries no number.\n */\nexport type PaginationItemDescriptor = {\n type: PaginationItemType;\n page?: number;\n selected?: boolean;\n disabled?: boolean;\n};\n\nexport type UsePaginationArgs = {\n /** Controlled current page (1-indexed). Omit for uncontrolled. */\n page?: number;\n /** Initial page when uncontrolled (1-indexed). @defaultValue 1 */\n defaultPage?: number;\n /** Total number of pages. */\n pageCount: number;\n /** Pages on each side of the current page. @defaultValue 1 */\n siblingCount?: number;\n /** Pages always visible at start/end. @defaultValue 1 */\n boundaryCount?: number;\n /** Include first/last items in the `pages` list. @defaultValue false */\n showFirstLast?: boolean;\n /** Include prev/next items in the `pages` list. @defaultValue true */\n showPrevNext?: boolean;\n /** Fired on every page change. */\n onPageChange?: (page: number) => void;\n};\n\nexport type UsePaginationReturn = {\n /** Current page (1-indexed), clamped to [1, max(1, pageCount)]. */\n page: number;\n /** Item descriptors in render order. */\n pages: ReadonlyArray<PaginationItemDescriptor>;\n canPrev: boolean;\n canNext: boolean;\n goToPage: (page: number) => void;\n prev: () => void;\n next: () => void;\n first: () => void;\n last: () => void;\n};\n\nconst range = (from: number, to: number): number[] => {\n if (to < from) {\n return [];\n }\n const out = new Array<number>(to - from + 1);\n for (let i = 0; i < out.length; i += 1) {\n out[i] = from + i;\n }\n return out;\n};\n\n/**\n * Headless pagination math + state. Returns the items to render and the\n * actions that drive them — without a single DOM/RN element. Use this\n * directly for fully custom paginators, or let `<Pagination>` use it\n * internally.\n *\n * The math mirrors MUI's `usePagination` algorithm so its behavior is\n * predictable for anyone who has used the React ecosystem before.\n *\n * @example\n * const p = usePagination({ pageCount: 12, defaultPage: 3 });\n * p.pages.map((item) => …);\n */\nexport function usePagination(args: UsePaginationArgs): UsePaginationReturn {\n const {\n page: controlledPage,\n defaultPage = 1,\n pageCount,\n siblingCount = 1,\n boundaryCount = 1,\n showFirstLast = false,\n showPrevNext = true,\n onPageChange,\n } = args;\n\n const isControlled = controlledPage !== undefined;\n const [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);\n\n // Latest-callback ref so `goToPage` can stay referentially stable.\n const onChangeRef = useRef(onPageChange);\n onChangeRef.current = onPageChange;\n\n const safePageCount = Math.max(1, Math.floor(pageCount));\n const rawPage = isControlled ? (controlledPage as number) : uncontrolledPage;\n const currentPage = Math.min(Math.max(1, Math.floor(rawPage)), safePageCount);\n\n const goToPage = useCallback(\n (next: number) => {\n const clamped = Math.min(Math.max(1, Math.floor(next)), Math.max(1, Math.floor(pageCount)));\n if (!isControlled) {\n setUncontrolledPage(clamped);\n }\n onChangeRef.current?.(clamped);\n },\n [isControlled, pageCount]\n );\n\n const prev = useCallback(() => goToPage(currentPage - 1), [goToPage, currentPage]);\n const next = useCallback(() => goToPage(currentPage + 1), [goToPage, currentPage]);\n const first = useCallback(() => goToPage(1), [goToPage]);\n const last = useCallback(() => goToPage(safePageCount), [goToPage, safePageCount]);\n\n const pages = useMemo<ReadonlyArray<PaginationItemDescriptor>>(() => {\n const items: PaginationItemDescriptor[] = [];\n const safeSibling = Math.max(0, Math.floor(siblingCount));\n const safeBoundary = Math.max(0, Math.floor(boundaryCount));\n\n // First / Prev\n if (showFirstLast) {\n items.push({ type: 'first', disabled: currentPage <= 1 });\n }\n if (showPrevNext) {\n items.push({ type: 'prev', disabled: currentPage <= 1 });\n }\n\n // Page numbers + ellipses\n const startPages = range(1, Math.min(safeBoundary, safePageCount));\n const endPages = range(Math.max(safePageCount - safeBoundary + 1, safeBoundary + 1), safePageCount);\n\n const siblingsStart = Math.max(\n Math.min(currentPage - safeSibling, safePageCount - safeBoundary - safeSibling * 2 - 1),\n safeBoundary + 2\n );\n const siblingsEnd = Math.min(\n Math.max(currentPage + safeSibling, safeBoundary + safeSibling * 2 + 2),\n endPages.length > 0 ? endPages[0]! - 2 : safePageCount - 1\n );\n\n const middle: Array<number | 'ellipsis'> = [];\n // Start ellipsis\n if (siblingsStart > safeBoundary + 2) {\n middle.push('ellipsis');\n } else if (safeBoundary + 1 < safePageCount - safeBoundary) {\n middle.push(safeBoundary + 1);\n }\n // Middle pages\n for (const p of range(siblingsStart, siblingsEnd)) {\n middle.push(p);\n }\n // End ellipsis\n if (siblingsEnd < safePageCount - safeBoundary - 1) {\n middle.push('ellipsis');\n } else if (safePageCount - safeBoundary > safeBoundary) {\n middle.push(safePageCount - safeBoundary);\n }\n\n const seen = new Set<number>();\n const pushPage = (n: number) => {\n if (n < 1 || n > safePageCount || seen.has(n)) {\n return;\n }\n seen.add(n);\n items.push({ type: 'page', page: n, selected: n === currentPage });\n };\n\n for (const n of startPages) {\n pushPage(n);\n }\n for (const m of middle) {\n if (m === 'ellipsis') {\n items.push({ type: 'ellipsis' });\n } else {\n pushPage(m);\n }\n }\n for (const n of endPages) {\n pushPage(n);\n }\n\n // Next / Last\n if (showPrevNext) {\n items.push({ type: 'next', disabled: currentPage >= safePageCount });\n }\n if (showFirstLast) {\n items.push({ type: 'last', disabled: currentPage >= safePageCount });\n }\n\n return items;\n }, [currentPage, safePageCount, siblingCount, boundaryCount, showFirstLast, showPrevNext]);\n\n return {\n page: currentPage,\n pages,\n canPrev: currentPage > 1,\n canNext: currentPage < safePageCount,\n goToPage,\n prev,\n next,\n first,\n last,\n };\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\n/**\n * Shared Table internals — context, types, and compound assembly.\n *\n * Imported by both `Table.web.tsx` and `Table.native.tsx`. The actual\n * render elements (semantic HTML vs. View grid) live in those platform\n * files. This module exports only types, context, and the Object.assign\n * compound builder so both platforms ship an identical API surface.\n */\n\nimport type { ReactNode } from 'react';\nimport { createContext, useContext } from 'react';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type TableAlign = 'left' | 'center' | 'right';\n\nexport type TableProps = {\n /** Alternating row background tinting. */\n striped?: boolean;\n /** Reduced cell padding for dense layouts. */\n compact?: boolean;\n /** Draw borders around all cells. */\n bordered?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport type TableRowProps = {\n /** Visually highlight this row as selected. */\n selected?: boolean;\n /** Press handler — makes the row interactive on both platforms. */\n onPress?: () => void;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport type TableCellProps = {\n /** Horizontal alignment of cell content. @defaultValue 'left' */\n align?: TableAlign;\n /** HTML colspan / native column span (visual only on native). */\n colSpan?: number;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport type TableHeaderCellProps = TableCellProps;\n\nexport type TableSectionProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport type TableCaptionProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nexport type TableContextValue = {\n striped: boolean;\n compact: boolean;\n bordered: boolean;\n /** Zero-based row index for striped row coloring — incremented per Body row */\n rowIndex: number;\n setRowIndex: (n: number) => void;\n};\n\nexport const TableContext = createContext<TableContextValue>({\n striped: false,\n compact: false,\n bordered: false,\n rowIndex: 0,\n setRowIndex: () => {},\n});\n\nexport const useTableContext = (): TableContextValue => useContext(TableContext);\n\n// ─── Compound builder ─────────────────────────────────────────────────────────\n\n/**\n * Attach sub-components to a Root component via `Object.assign` and return\n * the compound. Both `.web.tsx` and `.native.tsx` call this with their\n * platform-specific implementations so consumers get the same dot-notation API.\n */\nexport function buildTableCompound<\n Root extends React.ComponentType<TableProps>,\n Header extends React.ComponentType<TableSectionProps>,\n Body extends React.ComponentType<TableSectionProps>,\n Footer extends React.ComponentType<TableSectionProps>,\n Row extends React.ComponentType<TableRowProps>,\n HeaderCell extends React.ComponentType<TableHeaderCellProps>,\n Cell extends React.ComponentType<TableCellProps>,\n Caption extends React.ComponentType<TableCaptionProps>,\n>(parts: {\n Root: Root;\n Header: Header;\n Body: Body;\n Footer: Footer;\n Row: Row;\n HeaderCell: HeaderCell;\n Cell: Cell;\n Caption: Caption;\n}) {\n return Object.assign(parts.Root, {\n Header: parts.Header,\n Body: parts.Body,\n Footer: parts.Footer,\n Row: parts.Row,\n HeaderCell: parts.HeaderCell,\n Cell: parts.Cell,\n Caption: parts.Caption,\n });\n}\n\n// needed for the generic parameter above\nimport type React from 'react';\n","'use client';\n\n/**\n * Web Table implementation — uses semantic HTML table elements for full\n * accessibility. Metro never resolves this file; Vite / Next.js pick it up\n * via the `.web.tsx` extension.\n */\n\nimport { useCallback, useState } from 'react';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport {\n buildTableCompound,\n type TableCaptionProps,\n type TableCellProps,\n TableContext,\n type TableContextValue,\n type TableHeaderCellProps,\n type TableProps,\n type TableRowProps,\n type TableSectionProps,\n} from './Table.shared';\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nconst TableRoot = ({ striped = false, compact = false, bordered = false, children, className, testID }: TableProps) => {\n const [rowIndex, setRowIndex] = useState(0);\n const ctxValue: TableContextValue = {\n striped,\n compact,\n bordered,\n rowIndex,\n setRowIndex,\n };\n return (\n <TableContext.Provider value={ctxValue}>\n <div className={cn('w-full overflow-auto', className)}>\n <table\n className={cn(\n 'w-full caption-bottom text-sm',\n bordered && 'border border-semantic-border-default',\n className\n )}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n >\n {children}\n </table>\n </div>\n </TableContext.Provider>\n );\n};\n\n// ─── Header ───────────────────────────────────────────────────────────────────\n\nconst TableHeader = ({ children, className, testID }: TableSectionProps) => (\n <thead\n className={cn('[&_tr]:border-b [&_tr]:border-semantic-border-default', className)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n >\n {children}\n </thead>\n);\n\n// ─── Body ─────────────────────────────────────────────────────────────────────\n\nconst TableBody = ({ children, className, testID }: TableSectionProps) => (\n <tbody\n className={cn('[&_tr:last-child]:border-0', className)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n >\n {children}\n </tbody>\n);\n\n// ─── Footer ───────────────────────────────────────────────────────────────────\n\nconst TableFooter = ({ children, className, testID }: TableSectionProps) => (\n <tfoot\n className={cn('border-t border-semantic-border-default font-medium', className)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n >\n {children}\n </tfoot>\n);\n\n// ─── Row ──────────────────────────────────────────────────────────────────────\n\nconst TableRow = ({ selected = false, onPress, children, className, testID }: TableRowProps) => {\n const colors = useThemeColors();\n const handleClick = useCallback(() => {\n onPress?.();\n }, [onPress]);\n\n return (\n <tr\n className={cn(\n 'border-b border-semantic-border-default transition-colors',\n onPress && 'cursor-pointer hover:bg-semantic-background-subtle',\n selected && 'bg-semantic-background-subtle',\n className\n )}\n style={selected ? { backgroundColor: colors.semantic.background.subtle } : undefined}\n onClick={onPress ? handleClick : undefined}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n >\n {children}\n </tr>\n );\n};\n\n// ─── HeaderCell ───────────────────────────────────────────────────────────────\n\nconst TableHeaderCell = ({ align = 'left', colSpan, children, className, testID }: TableHeaderCellProps) => (\n <th\n className={cn(\n 'h-10 px-4 font-medium text-semantic-text-secondary',\n align === 'right' && 'text-right',\n align === 'center' && 'text-center',\n align === 'left' && 'text-left',\n className\n )}\n colSpan={colSpan}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n >\n {children}\n </th>\n);\n\n// ─── Cell ─────────────────────────────────────────────────────────────────────\n\nconst TableCell = ({ align = 'left', colSpan, children, className, testID }: TableCellProps) => (\n <td\n className={cn(\n 'p-4 align-middle',\n align === 'right' && 'text-right',\n align === 'center' && 'text-center',\n align === 'left' && 'text-left',\n className\n )}\n colSpan={colSpan}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n >\n {children}\n </td>\n);\n\n// ─── Caption ──────────────────────────────────────────────────────────────────\n\nconst TableCaption = ({ children, className, testID }: TableCaptionProps) => (\n <caption\n className={cn('mt-4 text-sm text-semantic-text-secondary', className)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n >\n {children}\n </caption>\n);\n\n// ─── Compound export ──────────────────────────────────────────────────────────\n\nexport const Table = buildTableCompound({\n Root: TableRoot,\n Header: TableHeader,\n Body: TableBody,\n Footer: TableFooter,\n Row: TableRow,\n HeaderCell: TableHeaderCell,\n Cell: TableCell,\n Caption: TableCaption,\n});\n\nexport type {\n TableAlign,\n TableCaptionProps,\n TableCellProps,\n TableHeaderCellProps,\n TableProps,\n TableRowProps,\n TableSectionProps,\n} from './Table.shared';\n","'use client';\n\n/**\n * DataTable — convenience wrapper around Table that renders rows from a\n * `columns` + `data` array, with in-memory sort and client-side pagination.\n *\n * Deferred to v2:\n * - Server-side data (custom `onSort` / `onPaginate` callbacks)\n * - Filtering, row selection, expanding rows\n * - Column resizing, sticky headers\n * - Variable-width columns on native (v1 uses equal flex)\n */\n\nimport { type ReactNode, useMemo, useState } from 'react';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { usePagination } from '../Pagination/use-pagination';\nimport { Table } from '../Table/Table';\nimport type { TableAlign } from '../Table/Table.shared';\n\n// ─── Column definition ────────────────────────────────────────────────────────\n\nexport type SortDirection = 'asc' | 'desc';\n\nexport type SortState = {\n id: string;\n direction: SortDirection;\n};\n\nexport type Column<T> = {\n /** Unique column identifier. Used as the sort key. */\n id: string;\n /** Content rendered in the header cell. */\n header: ReactNode;\n /** Render function for a data row. Receives the full row value. */\n cell: (row: T) => ReactNode;\n /** Enable click-to-sort on this column. @defaultValue false */\n sortable?: boolean;\n /** Horizontal alignment of cell content. @defaultValue 'left' */\n align?: TableAlign;\n};\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport type DataTableProps<T extends object> = {\n /** Row data array. */\n data: T[];\n /** Column definitions. */\n columns: Column<T>[];\n /**\n * Number of rows per page.\n * @defaultValue 10\n */\n pageSize?: number;\n /**\n * Initial sort state. Must reference a `sortable` column id.\n */\n defaultSort?: SortState;\n /**\n * Called when a row is pressed (native) or clicked (web).\n */\n onRowPress?: (row: T) => void;\n /** Content shown when `data` is empty. @defaultValue \"No data\" */\n emptyState?: ReactNode;\n /** Alternating row background tinting. */\n striped?: boolean;\n /** Reduce cell padding. */\n compact?: boolean;\n /** Draw borders around cells. */\n bordered?: boolean;\n className?: string;\n testID?: string;\n};\n\n// ─── Sort helpers ─────────────────────────────────────────────────────────────\n\nfunction sortData<T extends object>(data: T[], sort: SortState | null): T[] {\n if (!sort) {\n return data;\n }\n const key = sort.id as keyof T;\n return [...data].sort((a, b) => {\n const av = a[key];\n const bv = b[key];\n if (av == null && bv == null) {\n return 0;\n }\n if (av == null) {\n return 1;\n }\n if (bv == null) {\n return -1;\n }\n const cmp = av < bv ? -1 : av > bv ? 1 : 0;\n return sort.direction === 'asc' ? cmp : -cmp;\n });\n}\n\n// ─── Sort indicator ───────────────────────────────────────────────────────────\n\nfunction SortIndicator({ direction }: { direction?: SortDirection }) {\n if (direction === undefined) {\n return <span style={{ marginLeft: 4, opacity: 0.3 }}>⇅</span>;\n }\n return <span style={{ marginLeft: 4 }}>{direction === 'asc' ? '↑' : '↓'}</span>;\n}\n\n// ─── DataTable ────────────────────────────────────────────────────────────────\n\nexport function DataTable<T extends object>({\n data,\n columns,\n pageSize = 10,\n defaultSort,\n onRowPress,\n emptyState,\n striped,\n compact,\n bordered,\n testID,\n className,\n}: DataTableProps<T>) {\n const [sort, setSort] = useState<SortState | null>(defaultSort ?? null);\n\n const sorted = useMemo(() => sortData(data, sort), [data, sort]);\n\n const pageCount = Math.max(1, Math.ceil(sorted.length / pageSize));\n const { page, goToPage, canPrev, canNext } = usePagination({ pageCount, defaultPage: 1 });\n\n const pageSlice = useMemo(() => {\n const start = (page - 1) * pageSize;\n return sorted.slice(start, start + pageSize);\n }, [sorted, page, pageSize]);\n\n const handleSort = (colId: string) => {\n setSort((prev) => {\n if (prev?.id !== colId) {\n goToPage(1);\n return { id: colId, direction: 'asc' };\n }\n if (prev.direction === 'asc') {\n return { id: colId, direction: 'desc' };\n }\n goToPage(1);\n return null;\n });\n };\n\n // Build table props without spreading undefined into exactOptionalPropertyTypes\n const tableProps: {\n striped?: boolean;\n compact?: boolean;\n bordered?: boolean;\n testID?: string;\n className?: string;\n } = {};\n if (striped !== undefined) {\n tableProps.striped = striped;\n }\n if (compact !== undefined) {\n tableProps.compact = compact;\n }\n if (bordered !== undefined) {\n tableProps.bordered = bordered;\n }\n if (testID !== undefined) {\n tableProps.testID = testID;\n }\n if (className !== undefined) {\n tableProps.className = className;\n }\n\n return (\n <View style={{ width: '100%' }}>\n <Table {...tableProps}>\n <Table.Header>\n <Table.Row>\n {columns.map((col) => {\n const align = col.align;\n return (\n <Table.HeaderCell key={col.id} {...(align !== undefined ? { align } : {})}>\n {col.sortable ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Sort by ${col.id}`}\n aria-label={`Sort by ${col.id}`}\n onPress={() => handleSort(col.id)}\n style={{ flexDirection: 'row', alignItems: 'center' }}\n >\n {typeof col.header === 'string' ? (\n <RNText>{col.header}</RNText>\n ) : (\n col.header\n )}\n <SortIndicator\n {...(sort?.id === col.id ? { direction: sort.direction } : {})}\n />\n </Pressable>\n ) : (\n col.header\n )}\n </Table.HeaderCell>\n );\n })}\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {pageSlice.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={columns.length}>\n <EmptyState>{emptyState ?? 'No data'}</EmptyState>\n </Table.Cell>\n </Table.Row>\n ) : (\n pageSlice.map((row, i) => (\n <Table.Row\n // biome-ignore lint/suspicious/noArrayIndexKey: rows have no guaranteed stable id in v1; v2 will add keyExtractor\n key={i}\n {...(onRowPress !== undefined ? { onPress: () => onRowPress(row) } : {})}\n >\n {columns.map((col) => {\n const colAlign = col.align;\n return (\n <Table.Cell\n key={col.id}\n {...(colAlign !== undefined ? { align: colAlign } : {})}\n >\n {col.cell(row)}\n </Table.Cell>\n );\n })}\n </Table.Row>\n ))\n )}\n </Table.Body>\n </Table>\n\n {/* Pagination controls — only shown when there is more than one page */}\n {pageCount > 1 && (\n <PaginationControls\n page={page}\n pageCount={pageCount}\n canPrev={canPrev}\n canNext={canNext}\n goToPage={goToPage}\n />\n )}\n </View>\n );\n}\n\n// ─── Internal sub-components ──────────────────────────────────────────────────\n\nfunction EmptyState({ children }: { children: ReactNode }) {\n return (\n <View style={{ paddingVertical: 32, alignItems: 'center' }}>\n {typeof children === 'string' ? (\n <RNText style={{ color: '#888', fontSize: 14 }}>{children}</RNText>\n ) : (\n children\n )}\n </View>\n );\n}\n\nfunction PaginationControls({\n page,\n pageCount,\n canPrev,\n canNext,\n goToPage,\n}: {\n page: number;\n pageCount: number;\n canPrev: boolean;\n canNext: boolean;\n goToPage: (p: number) => void;\n}) {\n return (\n <View\n style={{\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'center',\n paddingVertical: 8,\n gap: 8,\n }}\n >\n <Pressable\n onPress={canPrev ? () => goToPage(page - 1) : undefined}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Previous page\"\n aria-label=\"Previous page\"\n aria-disabled={!canPrev}\n style={{ opacity: canPrev ? 1 : 0.4, paddingHorizontal: 8 }}\n >\n <RNText style={{ fontSize: 14 }}>‹ Prev</RNText>\n </Pressable>\n <RNText style={{ fontSize: 14 }} aria-live=\"polite\">\n {page} / {pageCount}\n </RNText>\n <Pressable\n onPress={canNext ? () => goToPage(page + 1) : undefined}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Next page\"\n aria-label=\"Next page\"\n aria-disabled={!canNext}\n style={{ opacity: canNext ? 1 : 0.4, paddingHorizontal: 8 }}\n >\n <RNText style={{ fontSize: 14 }}>Next ›</RNText>\n </Pressable>\n </View>\n );\n}\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { T as TableAlign } from '../../Table.shared-BymRgTnY.cjs';
|
|
4
|
+
|
|
5
|
+
type SortDirection = 'asc' | 'desc';
|
|
6
|
+
type SortState = {
|
|
7
|
+
id: string;
|
|
8
|
+
direction: SortDirection;
|
|
9
|
+
};
|
|
10
|
+
type Column<T> = {
|
|
11
|
+
/** Unique column identifier. Used as the sort key. */
|
|
12
|
+
id: string;
|
|
13
|
+
/** Content rendered in the header cell. */
|
|
14
|
+
header: ReactNode;
|
|
15
|
+
/** Render function for a data row. Receives the full row value. */
|
|
16
|
+
cell: (row: T) => ReactNode;
|
|
17
|
+
/** Enable click-to-sort on this column. @defaultValue false */
|
|
18
|
+
sortable?: boolean;
|
|
19
|
+
/** Horizontal alignment of cell content. @defaultValue 'left' */
|
|
20
|
+
align?: TableAlign;
|
|
21
|
+
};
|
|
22
|
+
type DataTableProps<T extends object> = {
|
|
23
|
+
/** Row data array. */
|
|
24
|
+
data: T[];
|
|
25
|
+
/** Column definitions. */
|
|
26
|
+
columns: Column<T>[];
|
|
27
|
+
/**
|
|
28
|
+
* Number of rows per page.
|
|
29
|
+
* @defaultValue 10
|
|
30
|
+
*/
|
|
31
|
+
pageSize?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Initial sort state. Must reference a `sortable` column id.
|
|
34
|
+
*/
|
|
35
|
+
defaultSort?: SortState;
|
|
36
|
+
/**
|
|
37
|
+
* Called when a row is pressed (native) or clicked (web).
|
|
38
|
+
*/
|
|
39
|
+
onRowPress?: (row: T) => void;
|
|
40
|
+
/** Content shown when `data` is empty. @defaultValue "No data" */
|
|
41
|
+
emptyState?: ReactNode;
|
|
42
|
+
/** Alternating row background tinting. */
|
|
43
|
+
striped?: boolean;
|
|
44
|
+
/** Reduce cell padding. */
|
|
45
|
+
compact?: boolean;
|
|
46
|
+
/** Draw borders around cells. */
|
|
47
|
+
bordered?: boolean;
|
|
48
|
+
className?: string;
|
|
49
|
+
testID?: string;
|
|
50
|
+
};
|
|
51
|
+
declare function DataTable<T extends object>({ data, columns, pageSize, defaultSort, onRowPress, emptyState, striped, compact, bordered, testID, className, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
52
|
+
|
|
53
|
+
export { type Column, DataTable, type DataTableProps, type SortDirection, type SortState };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { T as TableAlign } from '../../Table.shared-BymRgTnY.js';
|
|
4
|
+
|
|
5
|
+
type SortDirection = 'asc' | 'desc';
|
|
6
|
+
type SortState = {
|
|
7
|
+
id: string;
|
|
8
|
+
direction: SortDirection;
|
|
9
|
+
};
|
|
10
|
+
type Column<T> = {
|
|
11
|
+
/** Unique column identifier. Used as the sort key. */
|
|
12
|
+
id: string;
|
|
13
|
+
/** Content rendered in the header cell. */
|
|
14
|
+
header: ReactNode;
|
|
15
|
+
/** Render function for a data row. Receives the full row value. */
|
|
16
|
+
cell: (row: T) => ReactNode;
|
|
17
|
+
/** Enable click-to-sort on this column. @defaultValue false */
|
|
18
|
+
sortable?: boolean;
|
|
19
|
+
/** Horizontal alignment of cell content. @defaultValue 'left' */
|
|
20
|
+
align?: TableAlign;
|
|
21
|
+
};
|
|
22
|
+
type DataTableProps<T extends object> = {
|
|
23
|
+
/** Row data array. */
|
|
24
|
+
data: T[];
|
|
25
|
+
/** Column definitions. */
|
|
26
|
+
columns: Column<T>[];
|
|
27
|
+
/**
|
|
28
|
+
* Number of rows per page.
|
|
29
|
+
* @defaultValue 10
|
|
30
|
+
*/
|
|
31
|
+
pageSize?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Initial sort state. Must reference a `sortable` column id.
|
|
34
|
+
*/
|
|
35
|
+
defaultSort?: SortState;
|
|
36
|
+
/**
|
|
37
|
+
* Called when a row is pressed (native) or clicked (web).
|
|
38
|
+
*/
|
|
39
|
+
onRowPress?: (row: T) => void;
|
|
40
|
+
/** Content shown when `data` is empty. @defaultValue "No data" */
|
|
41
|
+
emptyState?: ReactNode;
|
|
42
|
+
/** Alternating row background tinting. */
|
|
43
|
+
striped?: boolean;
|
|
44
|
+
/** Reduce cell padding. */
|
|
45
|
+
compact?: boolean;
|
|
46
|
+
/** Draw borders around cells. */
|
|
47
|
+
bordered?: boolean;
|
|
48
|
+
className?: string;
|
|
49
|
+
testID?: string;
|
|
50
|
+
};
|
|
51
|
+
declare function DataTable<T extends object>({ data, columns, pageSize, defaultSort, onRowPress, emptyState, striped, compact, bordered, testID, className, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
52
|
+
|
|
53
|
+
export { type Column, DataTable, type DataTableProps, type SortDirection, type SortState };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { DataTable } from '../../chunk-YZ27OS2R.js';
|
|
2
|
+
import '../../chunk-WYPGQVDV.js';
|
|
3
|
+
import '../../chunk-73CUV7MW.js';
|
|
4
|
+
import '../../chunk-CHXHRJNZ.js';
|
|
5
|
+
import '../../chunk-R5JMDDCB.js';
|
|
6
|
+
import '../../chunk-WCQVDF3K.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -736,7 +736,9 @@ var defaultDictionary = {
|
|
|
736
736
|
"switch.off": "Off",
|
|
737
737
|
// field
|
|
738
738
|
"field.requiredIndicator": "*",
|
|
739
|
-
"field.requiredLabel": "required"
|
|
739
|
+
"field.requiredLabel": "required",
|
|
740
|
+
// table / dataTable
|
|
741
|
+
"table.empty": "No data"
|
|
740
742
|
};
|
|
741
743
|
|
|
742
744
|
// src/i18n/resolve.ts
|