@nori-ui/core 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-V2AWSDDZ.js → chunk-76FZF4GM.js} +3 -3
- package/dist/{chunk-V2AWSDDZ.js.map → chunk-76FZF4GM.js.map} +1 -1
- package/dist/{chunk-XXBN6CIK.js → chunk-F7G6R373.js} +3 -3
- package/dist/{chunk-XXBN6CIK.js.map → chunk-F7G6R373.js.map} +1 -1
- package/dist/{chunk-HZKXPN6B.js → chunk-ND7MRYW7.js} +3 -3
- package/dist/{chunk-HZKXPN6B.js.map → chunk-ND7MRYW7.js.map} +1 -1
- package/dist/chunk-O4NMS3KB.js +11 -0
- package/dist/chunk-O4NMS3KB.js.map +1 -0
- package/dist/client.cjs +4 -0
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +1 -0
- package/dist/client.d.ts +1 -0
- package/dist/client.js +9 -8
- package/dist/client.js.map +1 -1
- package/dist/components/Calendar/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/DatePicker/index.js +3 -3
- package/dist/components/Pagination/index.js +2 -2
- package/dist/index.cjs +4 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +8 -7
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Select } from './chunk-UJ5KFRDE.js';
|
|
2
1
|
import { useTranslation } from './chunk-MJ4AGXS7.js';
|
|
2
|
+
import { Select } from './chunk-UJ5KFRDE.js';
|
|
3
3
|
import { Slot } from './chunk-ZIBNLXIV.js';
|
|
4
4
|
import { cn } from './chunk-CHXHRJNZ.js';
|
|
5
5
|
import { px } from './chunk-5A2QOOVN.js';
|
|
@@ -963,5 +963,5 @@ var Pagination = Object.assign(PaginationRoot, {
|
|
|
963
963
|
});
|
|
964
964
|
|
|
965
965
|
export { PAGINATION_COMPACT_BREAKPOINT, Pagination, usePagination };
|
|
966
|
-
//# sourceMappingURL=chunk-
|
|
967
|
-
//# sourceMappingURL=chunk-
|
|
966
|
+
//# sourceMappingURL=chunk-76FZF4GM.js.map
|
|
967
|
+
//# sourceMappingURL=chunk-76FZF4GM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Pagination/use-pagination.ts","../src/components/Pagination/Pagination.tsx"],"names":["next","RNText","useState","useMemo","useRef","useCallback","RNTextInput"],"mappings":"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","file":"chunk-V2AWSDDZ.js","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","'use client';\n\nimport {\n type ComponentProps,\n createContext,\n type FC,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, TextInput as RNTextInput, useWindowDimensions, 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 { Select, type SelectOption } from '../Select';\nimport { type PaginationItemDescriptor, type PaginationItemType, usePagination } from './use-pagination';\n\n// =============================================================================\n// Public types\n// =============================================================================\n\nexport { type UsePaginationArgs, type UsePaginationReturn, usePagination } from './use-pagination';\nexport type { PaginationItemDescriptor, PaginationItemType };\n\nexport type PaginationVariant = 'auto' | 'numbered' | 'compact';\n\nexport type PaginationRenderItemArgs = {\n type: PaginationItemType;\n page?: number;\n selected: boolean;\n disabled: boolean;\n ariaLabel: string;\n ariaCurrent?: 'page';\n children: ReactNode;\n onPress: () => void;\n};\n\nexport type PaginationOnPageChange = (page: number, meta?: { pageSize?: number }) => void;\n\nexport type PaginationProps = {\n /** Controlled current page (1-indexed). */\n page?: number;\n /** Initial page when uncontrolled (1-indexed). @defaultValue 1 */\n defaultPage?: number;\n /** Total number of pages. Required. */\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 /** Show first/last buttons. @defaultValue false */\n showFirstLast?: boolean;\n /** Hide the entire component when `pageCount <= 1`. @defaultValue true */\n hideOnSinglePage?: boolean;\n /**\n * Force a UI variant. `auto` swaps to `compact` on viewports under\n * `PAGINATION_COMPACT_BREAKPOINT` px wide.\n * @defaultValue 'auto'\n */\n variant?: PaginationVariant;\n /** Render the \"Showing X–Y of Z\" range automatically. @defaultValue false */\n showRange?: boolean;\n /** Total item count — needed by `Pagination.Range` and `Pagination.PageSize`. */\n itemCount?: number;\n /** Items per page — needed by `Pagination.Range` and `Pagination.PageSize`. */\n pageSize?: number;\n /** Fired on every page (or page-size) change. */\n onPageChange?: PaginationOnPageChange;\n /** Render-prop slot for each item. Same signature on web + native. */\n renderItem?: (args: PaginationRenderItemArgs) => ReactNode;\n /** RTL override. @defaultValue 'ltr' */\n dir?: 'ltr' | 'rtl';\n /** Override individual labels (otherwise sourced from `useTranslation`). */\n previousLabel?: string;\n nextLabel?: string;\n firstLabel?: string;\n lastLabel?: string;\n /** Override the nav landmark label. */\n ariaLabel?: string;\n className?: string;\n testID?: string;\n /** Provide compound children to opt out of the items-array shorthand. */\n children?: ReactNode;\n};\n\n/** Viewport width below which `variant=\"auto\"` switches to `compact`. */\nexport const PAGINATION_COMPACT_BREAKPOINT = 480;\n\n// =============================================================================\n// Context (used by both compound parts and the shorthand's internal layout)\n// =============================================================================\n\ntype PaginationContextValue = {\n page: number;\n pageCount: number;\n pageSize: number | undefined;\n itemCount: number | undefined;\n siblingCount: number;\n boundaryCount: number;\n showFirstLast: boolean;\n dir: 'ltr' | 'rtl';\n labels: {\n prev: string;\n next: string;\n first: string;\n last: string;\n gotoPage: (page: number) => string;\n ellipsis: string;\n currentPage: string;\n rangeFmt: (from: number, to: number, total: number) => string;\n pageOfFmt: (page: number, total: number) => string;\n pageSize: string;\n jumperLabel: string;\n jumperPlaceholder: string;\n };\n renderItem?: (args: PaginationRenderItemArgs) => ReactNode;\n goToPage: (page: number) => void;\n setPageSize: (next: number) => void;\n};\n\nconst PaginationContext = createContext<PaginationContextValue | null>(null);\n\nconst usePaginationContext = (label: string): PaginationContextValue => {\n const ctx = useContext(PaginationContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Pagination> or <Pagination.Root>.`);\n }\n return ctx;\n};\n\n// =============================================================================\n// Default item button (used when `renderItem` is not provided)\n// =============================================================================\n\ntype ItemButtonProps = {\n type: PaginationItemType;\n page?: number;\n selected: boolean;\n disabled: boolean;\n ariaLabel: string;\n ariaCurrent?: 'page';\n label: ReactNode;\n onPress: () => void;\n testID?: string;\n};\n\nconst ItemButton = ({ type, selected, disabled, ariaLabel, ariaCurrent, label, onPress, testID }: ItemButtonProps) => {\n const colors = useThemeColors();\n const isChevron = type === 'prev' || type === 'next' || type === 'first' || type === 'last';\n const isInteractive = !disabled && type !== 'ellipsis';\n const size = px(colors.spacing['8']); // 32px — minimum touch target\n\n if (type === 'ellipsis') {\n // Ellipsis is presentational; no button chrome, no padding — just a\n // balanced spacer that keeps the row's rhythm intact.\n return (\n <View\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n minWidth: size,\n minHeight: size,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n // Optical adjust so the dots sit on the row baseline.\n marginTop: -2,\n letterSpacing: 1,\n }}\n >\n {label}\n </RNText>\n </View>\n );\n }\n\n // Pre-compute the static style so the Pressable's function form only has\n // to overlay press/hover deltas. This is more robust on native, where\n // some renderers were observed to drop properties from the function-form\n // result intermittently — especially the selected pill's `backgroundColor`,\n // producing white text on a white background.\n const baseStyle: ViewStyle = {\n minWidth: size,\n height: size,\n paddingHorizontal: px(colors.spacing['2']),\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: px(colors.radius.md),\n // Selected: filled pill in primary. Default: transparent. Press/hover\n // deltas overlay this in the style fn below.\n backgroundColor: selected ? colors.semantic.interactive.primary : 'transparent',\n // A 1px transparent border is reserved on every item so the layout\n // stays stable when the selected one shows its accent border.\n borderWidth: 1,\n borderColor: selected ? colors.semantic.interactive.primary : 'transparent',\n opacity: disabled ? 0.35 : 1,\n };\n\n // Web-only CSS transitions; merged into the static base on web.\n const webExtras =\n Platform.OS === 'web'\n ? ({\n transitionProperty: 'background-color, color, border-color',\n transitionDuration: '120ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n } as unknown as ViewStyle)\n : null;\n const staticStyle: ViewStyle = { ...baseStyle, ...(webExtras ?? {}) };\n\n return (\n <Pressable\n {...(testID !== undefined ? { testID } : {})}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={ariaLabel}\n aria-label={ariaLabel}\n {...(ariaCurrent ? { 'aria-current': ariaCurrent } : {})}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n onPress={isInteractive ? onPress : undefined}\n // Use a function form ONLY on web so Pressable can read `hovered`.\n // On native the function form was observed to occasionally drop\n // its returned style block on iOS — so we pass a plain object,\n // which renders reliably.\n style={\n Platform.OS === 'web'\n ? (state) => {\n const { pressed, hovered } = state as { pressed: boolean; hovered?: boolean };\n const interactive =\n !selected && (pressed || hovered)\n ? colors.semantic.background.subtle\n : staticStyle.backgroundColor;\n return { ...staticStyle, backgroundColor: interactive };\n }\n : staticStyle\n }\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: isChevron ? px(colors.fontSize.md) : px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.md),\n color: selected\n ? colors.semantic.text.inverted\n : disabled\n ? colors.semantic.text.muted\n : colors.semantic.text.default,\n fontWeight: selected ? (colors.fontWeight.semibold as '600') : (colors.fontWeight.medium as '500'),\n fontVariant: ['tabular-nums'],\n // Chevron glyphs sit a hair high in most fonts.\n marginTop: isChevron ? -1 : 0,\n }}\n >\n {label}\n </RNText>\n </Pressable>\n );\n};\n\n// =============================================================================\n// Live region for screen readers (web only — RN announces via accessibilityLiveRegion)\n// =============================================================================\n\nconst LiveRegion = ({ message }: { message: string }) => {\n if (Platform.OS === 'web') {\n return (\n <View\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n opacity: 0,\n }}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic\n >\n <RNText accessibilityLiveRegion=\"polite\">{message}</RNText>\n </View>\n );\n }\n return (\n <View accessibilityLiveRegion=\"polite\" style={{ width: 0, height: 0 }}>\n <RNText>{message}</RNText>\n </View>\n );\n};\n\n// =============================================================================\n// Items renderer (the shorthand UI)\n// =============================================================================\n\ntype ItemsRendererProps = {\n items: ReadonlyArray<PaginationItemDescriptor>;\n onItemPress: (item: PaginationItemDescriptor) => void;\n};\n\nconst ItemsRenderer = ({ items, onItemPress }: ItemsRendererProps) => {\n const { labels, renderItem, dir } = usePaginationContext('Pagination.Items');\n\n const elements = items.map((item, idx) => {\n const key = `${item.type}-${item.page ?? idx}-${idx}`;\n const ariaLabel = ariaLabelFor(item, labels);\n const ariaCurrent = item.selected ? ('page' as const) : undefined;\n const display = displayLabelFor(item, labels, dir);\n const onPress = () => onItemPress(item);\n\n if (renderItem && item.type !== 'ellipsis') {\n return (\n <View key={key}>\n {renderItem({\n type: item.type,\n ...(item.page !== undefined ? { page: item.page } : {}),\n selected: item.selected ?? false,\n disabled: item.disabled ?? false,\n ariaLabel,\n ...(ariaCurrent ? { ariaCurrent } : {}),\n children: display,\n onPress,\n })}\n </View>\n );\n }\n\n return (\n <ItemButton\n key={key}\n type={item.type}\n {...(item.page !== undefined ? { page: item.page } : {})}\n selected={item.selected ?? false}\n disabled={item.disabled ?? false}\n ariaLabel={ariaLabel}\n {...(ariaCurrent ? { ariaCurrent } : {})}\n label={display}\n onPress={onPress}\n />\n );\n });\n\n return <>{elements}</>;\n};\n\nfunction ariaLabelFor(item: PaginationItemDescriptor, labels: PaginationContextValue['labels']): string {\n switch (item.type) {\n case 'first':\n return labels.first;\n case 'prev':\n return labels.prev;\n case 'next':\n return labels.next;\n case 'last':\n return labels.last;\n case 'ellipsis':\n return labels.ellipsis;\n case 'page':\n return item.selected ? labels.currentPage : labels.gotoPage(item.page ?? 0);\n }\n}\n\nfunction displayLabelFor(\n item: PaginationItemDescriptor,\n labels: PaginationContextValue['labels'],\n dir: 'ltr' | 'rtl'\n): ReactNode {\n const flip = dir === 'rtl';\n switch (item.type) {\n case 'first':\n return flip ? '»' : '«';\n case 'last':\n return flip ? '«' : '»';\n case 'prev':\n return flip ? '›' : '‹';\n case 'next':\n return flip ? '‹' : '›';\n case 'ellipsis':\n return '…';\n case 'page':\n return String(item.page ?? '');\n }\n}\n\n// =============================================================================\n// Compact variant\n// =============================================================================\n\nconst CompactView = ({\n onPrev,\n onNext,\n canPrev,\n canNext,\n pageLabel,\n}: {\n onPrev: () => void;\n onNext: () => void;\n canPrev: boolean;\n canNext: boolean;\n pageLabel: string;\n}) => {\n const colors = useThemeColors();\n const { labels, dir } = usePaginationContext('Pagination(compact)');\n const flip = dir === 'rtl';\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: px(colors.spacing['1']),\n flexGrow: 1,\n }}\n >\n <ItemButton\n type=\"prev\"\n selected={false}\n disabled={!canPrev}\n ariaLabel={labels.prev}\n label={flip ? '›' : '‹'}\n onPress={onPrev}\n />\n <View\n style={{\n flexGrow: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: px(colors.spacing['3']),\n }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n fontWeight: colors.fontWeight.medium as '500',\n fontVariant: ['tabular-nums'],\n }}\n >\n {pageLabel}\n </RNText>\n </View>\n <ItemButton\n type=\"next\"\n selected={false}\n disabled={!canNext}\n ariaLabel={labels.next}\n label={flip ? '‹' : '›'}\n onPress={onNext}\n />\n </View>\n );\n};\n\n// =============================================================================\n// Root (the `<Pagination>` symbol — also serves as the shorthand)\n// =============================================================================\n\nconst ANNOUNCE_DEBOUNCE_MS = 150;\n\nconst PaginationRoot = (props: PaginationProps) => {\n const {\n page: controlledPage,\n defaultPage = 1,\n pageCount,\n siblingCount = 1,\n boundaryCount = 1,\n showFirstLast = false,\n hideOnSinglePage = true,\n variant = 'auto',\n showRange = false,\n itemCount,\n pageSize: pageSizeProp,\n onPageChange,\n renderItem,\n dir = 'ltr',\n previousLabel,\n nextLabel,\n firstLabel,\n lastLabel,\n ariaLabel,\n className,\n testID,\n children,\n } = props;\n\n const { t } = useTranslation();\n const colors = useThemeColors();\n const { width } = useWindowDimensions();\n\n const [internalPageSize, setInternalPageSize] = useState<number | undefined>(pageSizeProp);\n useEffect(() => {\n setInternalPageSize(pageSizeProp);\n }, [pageSizeProp]);\n const effectivePageSize = pageSizeProp ?? internalPageSize;\n\n const labels = useMemo<PaginationContextValue['labels']>(\n () => ({\n prev: previousLabel ?? t('pagination.previous', { defaultValue: 'Previous page' }),\n next: nextLabel ?? t('pagination.next', { defaultValue: 'Next page' }),\n first: firstLabel ?? t('pagination.first', { defaultValue: 'First page' }),\n last: lastLabel ?? t('pagination.last', { defaultValue: 'Last page' }),\n ellipsis: t('pagination.ellipsis', { defaultValue: 'More pages' }),\n currentPage: t('pagination.currentPage', { defaultValue: 'Current page' }),\n gotoPage: (n) => t('pagination.gotoPage', { page: n, defaultValue: `Go to page ${n}` }),\n rangeFmt: (from, to, total) =>\n t('pagination.range', {\n from,\n to,\n total,\n defaultValue: `Showing ${from}–${to} of ${total}`,\n }),\n pageOfFmt: (p, total) => t('pagination.pageOf', { page: p, total, defaultValue: `Page ${p} of ${total}` }),\n pageSize: t('pagination.pageSizeLabel', { defaultValue: 'Items per page' }),\n jumperLabel: t('pagination.jumperLabel', { defaultValue: 'Go to page' }),\n jumperPlaceholder: t('pagination.jumperPlaceholder', { defaultValue: '#' }),\n }),\n [t, previousLabel, nextLabel, firstLabel, lastLabel]\n );\n\n // Live-region message — debounced so rapid clicks don't spam SR.\n const [announcement, setAnnouncement] = useState('');\n const announceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => {\n return () => {\n if (announceTimer.current) {\n clearTimeout(announceTimer.current);\n }\n };\n }, []);\n\n const handlePageChange = useCallback(\n (next: number) => {\n onPageChange?.(next, effectivePageSize !== undefined ? { pageSize: effectivePageSize } : undefined);\n if (announceTimer.current) {\n clearTimeout(announceTimer.current);\n }\n announceTimer.current = setTimeout(() => {\n setAnnouncement(labels.pageOfFmt(next, Math.max(1, pageCount)));\n }, ANNOUNCE_DEBOUNCE_MS);\n },\n [onPageChange, effectivePageSize, labels, pageCount]\n );\n\n const setPageSize = useCallback(\n (next: number) => {\n if (pageSizeProp === undefined) {\n setInternalPageSize(next);\n }\n onPageChange?.(1, { pageSize: next });\n },\n [onPageChange, pageSizeProp]\n );\n\n const pagination = usePagination({\n ...(controlledPage !== undefined ? { page: controlledPage } : {}),\n defaultPage,\n pageCount,\n siblingCount,\n boundaryCount,\n showFirstLast,\n onPageChange: handlePageChange,\n });\n\n if (hideOnSinglePage && Math.max(1, pageCount) <= 1) {\n return null;\n }\n\n const ctxValue: PaginationContextValue = {\n page: pagination.page,\n pageCount: Math.max(1, pageCount),\n pageSize: effectivePageSize,\n itemCount,\n siblingCount,\n boundaryCount,\n showFirstLast,\n dir,\n labels,\n ...(renderItem ? { renderItem } : {}),\n goToPage: pagination.goToPage,\n setPageSize,\n };\n\n // Compound mode — caller supplies the layout. We still wrap children in\n // a flex-row that wraps on overflow so a long compound chain\n // (Items + Range + PageSize + Jumper) doesn't blow off the right edge\n // of a phone-width container.\n if (children !== undefined) {\n return (\n <PaginationContext.Provider value={ctxValue}>\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessibilityLabel={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessible\n className={cn('flex-row items-center flex-wrap', className)}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n flexWrap: 'wrap',\n rowGap: px(colors.spacing['2']),\n columnGap: px(colors.spacing['1']),\n direction: dir as ViewStyle['direction'],\n }}\n >\n {children}\n </View>\n <LiveRegion message={announcement} />\n </PaginationContext.Provider>\n );\n }\n\n // Shorthand mode — pick variant + render the items row.\n const isCompact =\n variant === 'compact' || (variant === 'auto' && width > 0 && width < PAGINATION_COMPACT_BREAKPOINT);\n\n const onItemPress = (item: PaginationItemDescriptor) => {\n if (item.disabled) {\n return;\n }\n switch (item.type) {\n case 'first':\n pagination.first();\n return;\n case 'prev':\n pagination.prev();\n return;\n case 'next':\n pagination.next();\n return;\n case 'last':\n pagination.last();\n return;\n case 'page':\n if (item.page !== undefined) {\n pagination.goToPage(item.page);\n }\n return;\n case 'ellipsis':\n return;\n }\n };\n\n const showRangeBlock = showRange && itemCount !== undefined && effectivePageSize !== undefined;\n\n return (\n <PaginationContext.Provider value={ctxValue}>\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessibilityLabel={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessible\n className={cn(isCompact ? 'flex-col items-stretch' : 'flex-row items-center flex-wrap', className)}\n style={{\n // Compact mode lays out as a column so the Range/PageSize\n // block falls below the controls instead of overflowing\n // a phone-width row. Numbered mode wraps on overflow.\n flexDirection: isCompact ? 'column' : 'row',\n alignItems: isCompact ? 'stretch' : 'center',\n flexWrap: isCompact ? 'nowrap' : 'wrap',\n rowGap: px(colors.spacing['2']),\n columnGap: px(colors.spacing['1']),\n direction: dir as ViewStyle['direction'],\n }}\n >\n {isCompact ? (\n <CompactView\n onPrev={pagination.prev}\n onNext={pagination.next}\n canPrev={pagination.canPrev}\n canNext={pagination.canNext}\n pageLabel={labels.pageOfFmt(pagination.page, Math.max(1, pageCount))}\n />\n ) : (\n <ItemsRenderer items={pagination.pages} onItemPress={onItemPress} />\n )}\n {showRangeBlock ? <PaginationRange /> : null}\n </View>\n <LiveRegion message={announcement} />\n </PaginationContext.Provider>\n );\n};\n\n// =============================================================================\n// Compound parts\n// =============================================================================\n\ntype CompoundButtonProps = {\n asChild?: boolean;\n children?: ReactNode;\n testID?: string;\n};\n\nconst CompoundActionButton = ({\n actionType,\n asChild,\n children,\n testID,\n}: CompoundButtonProps & { actionType: 'prev' | 'next' | 'first' | 'last' }) => {\n const ctx = usePaginationContext(`Pagination.${actionType[0]!.toUpperCase() + actionType.slice(1)}`);\n const disabled = actionType === 'prev' || actionType === 'first' ? ctx.page <= 1 : ctx.page >= ctx.pageCount;\n const onPress = () => {\n if (disabled) {\n return;\n }\n switch (actionType) {\n case 'first':\n ctx.goToPage(1);\n return;\n case 'prev':\n ctx.goToPage(ctx.page - 1);\n return;\n case 'next':\n ctx.goToPage(ctx.page + 1);\n return;\n case 'last':\n ctx.goToPage(ctx.pageCount);\n return;\n }\n };\n const ariaLabel =\n actionType === 'prev'\n ? ctx.labels.prev\n : actionType === 'next'\n ? ctx.labels.next\n : actionType === 'first'\n ? ctx.labels.first\n : ctx.labels.last;\n\n if (asChild) {\n return (\n <Slot\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n onPress={onPress}\n onClick={onPress as unknown as ComponentProps<'button'>['onClick']}\n >\n {children}\n </Slot>\n );\n }\n const fallbackGlyph =\n actionType === 'prev' ? '‹' : actionType === 'next' ? '›' : actionType === 'first' ? '«' : '»';\n return (\n <ItemButton\n type={actionType}\n selected={false}\n disabled={disabled}\n ariaLabel={ariaLabel}\n label={children ?? fallbackGlyph}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n />\n );\n};\n\nconst PaginationPrev: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'prev',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationNext: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'next',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationFirst: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'first',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationLast: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'last',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\n\nconst PaginationItem: FC<{ page: number; asChild?: boolean; children?: ReactNode; testID?: string }> = ({\n page,\n asChild,\n children,\n testID,\n}) => {\n const ctx = usePaginationContext('Pagination.Item');\n const selected = page === ctx.page;\n const onPress = () => ctx.goToPage(page);\n const ariaLabel = selected ? ctx.labels.currentPage : ctx.labels.gotoPage(page);\n\n if (asChild) {\n return (\n <Slot\n aria-label={ariaLabel}\n {...(selected ? { 'aria-current': 'page' as const } : {})}\n onPress={onPress}\n onClick={onPress as unknown as ComponentProps<'button'>['onClick']}\n >\n {children}\n </Slot>\n );\n }\n return (\n <ItemButton\n type=\"page\"\n page={page}\n selected={selected}\n disabled={false}\n ariaLabel={ariaLabel}\n {...(selected ? { ariaCurrent: 'page' as const } : {})}\n label={children ?? String(page)}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n />\n );\n};\n\nconst PaginationItems: FC<{ children?: ReactNode }> = ({ children }) => {\n const ctx = usePaginationContext('Pagination.Items');\n // Always run the hook so React's call order is stable across renders;\n // the result is discarded when explicit `children` were supplied.\n const result = usePagination({\n page: ctx.page,\n pageCount: ctx.pageCount,\n siblingCount: ctx.siblingCount,\n boundaryCount: ctx.boundaryCount,\n showFirstLast: false,\n showPrevNext: false,\n });\n if (children !== undefined) {\n return <>{children}</>;\n }\n return (\n <ItemsRenderer\n items={result.pages}\n onItemPress={(item) => {\n if (item.type === 'page' && item.page !== undefined) {\n ctx.goToPage(item.page);\n }\n }}\n />\n );\n};\n\nconst PaginationEllipsis: FC<{ children?: ReactNode }> = ({ children }) => {\n const ctx = usePaginationContext('Pagination.Ellipsis');\n return (\n <ItemButton\n type=\"ellipsis\"\n selected={false}\n disabled\n label={children ?? '…'}\n ariaLabel={ctx.labels.ellipsis}\n onPress={() => {}}\n />\n );\n};\n\nconst PaginationRange: FC = () => {\n const ctx = usePaginationContext('Pagination.Range');\n const colors = useThemeColors();\n if (ctx.itemCount === undefined || ctx.pageSize === undefined) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('<Pagination.Range> requires both `itemCount` and `pageSize` on <Pagination>.');\n }\n return null;\n }\n const from = (ctx.page - 1) * ctx.pageSize + 1;\n const to = Math.min(ctx.itemCount, ctx.page * ctx.pageSize);\n const message = ctx.labels.rangeFmt(from, to, ctx.itemCount);\n return (\n <RNText\n role=\"status\"\n aria-live=\"polite\"\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n fontVariant: ['tabular-nums'],\n paddingHorizontal: px(colors.spacing['2']),\n // Sits on the same baseline as the 32px buttons.\n lineHeight: px(colors.spacing['8']),\n }}\n >\n {message}\n </RNText>\n );\n};\n\nconst PaginationPageSize: FC<{ options: ReadonlyArray<number>; testID?: string }> = ({ options, testID }) => {\n const ctx = usePaginationContext('Pagination.PageSize');\n const colors = useThemeColors();\n const value = ctx.pageSize !== undefined ? String(ctx.pageSize) : '';\n const selectOptions = useMemo<SelectOption[]>(\n () => options.map((n) => ({ value: String(n), label: String(n) })),\n [options]\n );\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['2']),\n }}\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 {ctx.labels.pageSize}\n </RNText>\n <Select\n {...(testID !== undefined ? { testID } : {})}\n aria-label={ctx.labels.pageSize}\n options={selectOptions}\n value={value}\n onChange={(v) => {\n const n = Number(v);\n if (Number.isFinite(n) && n > 0) {\n ctx.setPageSize(n);\n }\n }}\n />\n </View>\n );\n};\n\ntype PaginationJumperProps = {\n /** Show a separate visible \"Go to page\" label before the input. The aria-label is always set regardless. @defaultValue false */\n showLabel?: boolean;\n /** Override the visible label / accessible name. */\n label?: string;\n /** Override the input placeholder. @defaultValue the localized \"Go to\" hint */\n placeholder?: string;\n /** Width of the input in px. @defaultValue 56 */\n inputWidth?: number;\n testID?: string;\n};\n\n/**\n * Compact, purpose-built jumper. Built directly from RN's `TextInput`\n * primitive so we can render the exact 32px-tall borderless-then-focused\n * treatment that fits in a pagination row, instead of inheriting the full\n * form-field chrome (label, helper text, error slot) of `<TextInput>`.\n */\nconst PaginationJumper: FC<PaginationJumperProps> = ({\n showLabel = false,\n label,\n placeholder,\n inputWidth = 56,\n testID,\n}) => {\n const ctx = usePaginationContext('Pagination.Jumper');\n const colors = useThemeColors();\n const [draft, setDraft] = useState('');\n const [focused, setFocused] = useState(false);\n const [hovered, setHovered] = useState(false);\n const visibleLabel = label ?? ctx.labels.jumperLabel;\n const placeholderText = placeholder ?? ctx.labels.jumperPlaceholder;\n\n const submit = () => {\n const trimmed = draft.trim();\n if (trimmed === '') {\n return;\n }\n const n = Number(trimmed);\n if (!Number.isFinite(n) || n < 1) {\n setDraft('');\n return;\n }\n const clamped = Math.min(Math.max(1, Math.floor(n)), ctx.pageCount);\n ctx.goToPage(clamped);\n setDraft('');\n };\n\n const borderColor = focused\n ? colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.border.strong\n : colors.semantic.border.default;\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['2']),\n }}\n >\n {showLabel ? (\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n }}\n >\n {visibleLabel}\n </RNText>\n ) : null}\n <View\n // The wrapper carries the visual chrome so the bare TextInput\n // can stay completely unstyled — it's just text + caret.\n onPointerEnter={Platform.OS === 'web' ? () => setHovered(true) : undefined}\n onPointerLeave={Platform.OS === 'web' ? () => setHovered(false) : undefined}\n style={\n {\n width: inputWidth,\n height: px(colors.spacing['8']),\n borderWidth: 1,\n borderColor,\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.background.elevated,\n paddingHorizontal: px(colors.spacing['2']),\n justifyContent: 'center',\n // Web-only properties (silently dropped on native).\n ...(focused\n ? {\n boxShadow: `0 0 0 3px ${withAlpha(colors.semantic.interactive.primary, 0.15)}`,\n }\n : null),\n transitionProperty: 'border-color, box-shadow',\n transitionDuration: '120ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n } as unknown as ViewStyle\n }\n >\n <RNTextInput\n {...(testID !== undefined ? { testID } : {})}\n value={draft}\n onChangeText={setDraft}\n onSubmitEditing={submit}\n onBlur={() => {\n setFocused(false);\n submit();\n }}\n onFocus={() => setFocused(true)}\n keyboardType=\"number-pad\"\n inputMode=\"numeric\"\n placeholder={placeholderText}\n placeholderTextColor={colors.semantic.text.muted}\n aria-label={visibleLabel}\n accessibilityLabel={visibleLabel}\n returnKeyType=\"go\"\n selectTextOnFocus\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n fontVariant: ['tabular-nums'],\n textAlign: 'center',\n // Strip the browser's default outline — we draw our own\n // focus ring on the wrapper.\n ...(Platform.OS === 'web' ? ({ outline: 'none' } as object) : null),\n }}\n />\n </View>\n </View>\n );\n};\n\n/**\n * Apply an alpha channel to any of our token color strings (hex / rgb / hsl).\n * Cheap, zero-dep helper just for the focus glow.\n */\nfunction withAlpha(color: string, alpha: number): string {\n if (color.startsWith('#') && (color.length === 7 || color.length === 4)) {\n const expanded =\n color.length === 4 ? `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` : color;\n const r = Number.parseInt(expanded.slice(1, 3), 16);\n const g = Number.parseInt(expanded.slice(3, 5), 16);\n const b = Number.parseInt(expanded.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return color;\n}\n\nexport type { PaginationJumperProps };\n\n// =============================================================================\n// Public symbol — Pagination + compound parts\n// =============================================================================\n\nexport const Pagination = Object.assign(PaginationRoot, {\n Items: PaginationItems,\n Item: PaginationItem,\n Prev: PaginationPrev,\n Next: PaginationNext,\n First: PaginationFirst,\n Last: PaginationLast,\n Ellipsis: PaginationEllipsis,\n Range: PaginationRange,\n PageSize: PaginationPageSize,\n Jumper: PaginationJumper,\n});\n\n// Suppress unused — ReactElement / KeyboardEvent are reserved for future kbd-nav extension.\ntype _Unused = ReactElement | KeyboardEvent;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Pagination/use-pagination.ts","../src/components/Pagination/Pagination.tsx"],"names":["next","RNText","useState","useMemo","useRef","useCallback","RNTextInput"],"mappings":"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","file":"chunk-76FZF4GM.js","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","'use client';\n\nimport {\n type ComponentProps,\n createContext,\n type FC,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, TextInput as RNTextInput, useWindowDimensions, 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 { Select, type SelectOption } from '../Select';\nimport { type PaginationItemDescriptor, type PaginationItemType, usePagination } from './use-pagination';\n\n// =============================================================================\n// Public types\n// =============================================================================\n\nexport { type UsePaginationArgs, type UsePaginationReturn, usePagination } from './use-pagination';\nexport type { PaginationItemDescriptor, PaginationItemType };\n\nexport type PaginationVariant = 'auto' | 'numbered' | 'compact';\n\nexport type PaginationRenderItemArgs = {\n type: PaginationItemType;\n page?: number;\n selected: boolean;\n disabled: boolean;\n ariaLabel: string;\n ariaCurrent?: 'page';\n children: ReactNode;\n onPress: () => void;\n};\n\nexport type PaginationOnPageChange = (page: number, meta?: { pageSize?: number }) => void;\n\nexport type PaginationProps = {\n /** Controlled current page (1-indexed). */\n page?: number;\n /** Initial page when uncontrolled (1-indexed). @defaultValue 1 */\n defaultPage?: number;\n /** Total number of pages. Required. */\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 /** Show first/last buttons. @defaultValue false */\n showFirstLast?: boolean;\n /** Hide the entire component when `pageCount <= 1`. @defaultValue true */\n hideOnSinglePage?: boolean;\n /**\n * Force a UI variant. `auto` swaps to `compact` on viewports under\n * `PAGINATION_COMPACT_BREAKPOINT` px wide.\n * @defaultValue 'auto'\n */\n variant?: PaginationVariant;\n /** Render the \"Showing X–Y of Z\" range automatically. @defaultValue false */\n showRange?: boolean;\n /** Total item count — needed by `Pagination.Range` and `Pagination.PageSize`. */\n itemCount?: number;\n /** Items per page — needed by `Pagination.Range` and `Pagination.PageSize`. */\n pageSize?: number;\n /** Fired on every page (or page-size) change. */\n onPageChange?: PaginationOnPageChange;\n /** Render-prop slot for each item. Same signature on web + native. */\n renderItem?: (args: PaginationRenderItemArgs) => ReactNode;\n /** RTL override. @defaultValue 'ltr' */\n dir?: 'ltr' | 'rtl';\n /** Override individual labels (otherwise sourced from `useTranslation`). */\n previousLabel?: string;\n nextLabel?: string;\n firstLabel?: string;\n lastLabel?: string;\n /** Override the nav landmark label. */\n ariaLabel?: string;\n className?: string;\n testID?: string;\n /** Provide compound children to opt out of the items-array shorthand. */\n children?: ReactNode;\n};\n\n/** Viewport width below which `variant=\"auto\"` switches to `compact`. */\nexport const PAGINATION_COMPACT_BREAKPOINT = 480;\n\n// =============================================================================\n// Context (used by both compound parts and the shorthand's internal layout)\n// =============================================================================\n\ntype PaginationContextValue = {\n page: number;\n pageCount: number;\n pageSize: number | undefined;\n itemCount: number | undefined;\n siblingCount: number;\n boundaryCount: number;\n showFirstLast: boolean;\n dir: 'ltr' | 'rtl';\n labels: {\n prev: string;\n next: string;\n first: string;\n last: string;\n gotoPage: (page: number) => string;\n ellipsis: string;\n currentPage: string;\n rangeFmt: (from: number, to: number, total: number) => string;\n pageOfFmt: (page: number, total: number) => string;\n pageSize: string;\n jumperLabel: string;\n jumperPlaceholder: string;\n };\n renderItem?: (args: PaginationRenderItemArgs) => ReactNode;\n goToPage: (page: number) => void;\n setPageSize: (next: number) => void;\n};\n\nconst PaginationContext = createContext<PaginationContextValue | null>(null);\n\nconst usePaginationContext = (label: string): PaginationContextValue => {\n const ctx = useContext(PaginationContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Pagination> or <Pagination.Root>.`);\n }\n return ctx;\n};\n\n// =============================================================================\n// Default item button (used when `renderItem` is not provided)\n// =============================================================================\n\ntype ItemButtonProps = {\n type: PaginationItemType;\n page?: number;\n selected: boolean;\n disabled: boolean;\n ariaLabel: string;\n ariaCurrent?: 'page';\n label: ReactNode;\n onPress: () => void;\n testID?: string;\n};\n\nconst ItemButton = ({ type, selected, disabled, ariaLabel, ariaCurrent, label, onPress, testID }: ItemButtonProps) => {\n const colors = useThemeColors();\n const isChevron = type === 'prev' || type === 'next' || type === 'first' || type === 'last';\n const isInteractive = !disabled && type !== 'ellipsis';\n const size = px(colors.spacing['8']); // 32px — minimum touch target\n\n if (type === 'ellipsis') {\n // Ellipsis is presentational; no button chrome, no padding — just a\n // balanced spacer that keeps the row's rhythm intact.\n return (\n <View\n aria-hidden\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n minWidth: size,\n minHeight: size,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n // Optical adjust so the dots sit on the row baseline.\n marginTop: -2,\n letterSpacing: 1,\n }}\n >\n {label}\n </RNText>\n </View>\n );\n }\n\n // Pre-compute the static style so the Pressable's function form only has\n // to overlay press/hover deltas. This is more robust on native, where\n // some renderers were observed to drop properties from the function-form\n // result intermittently — especially the selected pill's `backgroundColor`,\n // producing white text on a white background.\n const baseStyle: ViewStyle = {\n minWidth: size,\n height: size,\n paddingHorizontal: px(colors.spacing['2']),\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: px(colors.radius.md),\n // Selected: filled pill in primary. Default: transparent. Press/hover\n // deltas overlay this in the style fn below.\n backgroundColor: selected ? colors.semantic.interactive.primary : 'transparent',\n // A 1px transparent border is reserved on every item so the layout\n // stays stable when the selected one shows its accent border.\n borderWidth: 1,\n borderColor: selected ? colors.semantic.interactive.primary : 'transparent',\n opacity: disabled ? 0.35 : 1,\n };\n\n // Web-only CSS transitions; merged into the static base on web.\n const webExtras =\n Platform.OS === 'web'\n ? ({\n transitionProperty: 'background-color, color, border-color',\n transitionDuration: '120ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n } as unknown as ViewStyle)\n : null;\n const staticStyle: ViewStyle = { ...baseStyle, ...(webExtras ?? {}) };\n\n return (\n <Pressable\n {...(testID !== undefined ? { testID } : {})}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={ariaLabel}\n aria-label={ariaLabel}\n {...(ariaCurrent ? { 'aria-current': ariaCurrent } : {})}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n onPress={isInteractive ? onPress : undefined}\n // Use a function form ONLY on web so Pressable can read `hovered`.\n // On native the function form was observed to occasionally drop\n // its returned style block on iOS — so we pass a plain object,\n // which renders reliably.\n style={\n Platform.OS === 'web'\n ? (state) => {\n const { pressed, hovered } = state as { pressed: boolean; hovered?: boolean };\n const interactive =\n !selected && (pressed || hovered)\n ? colors.semantic.background.subtle\n : staticStyle.backgroundColor;\n return { ...staticStyle, backgroundColor: interactive };\n }\n : staticStyle\n }\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: isChevron ? px(colors.fontSize.md) : px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.md),\n color: selected\n ? colors.semantic.text.inverted\n : disabled\n ? colors.semantic.text.muted\n : colors.semantic.text.default,\n fontWeight: selected ? (colors.fontWeight.semibold as '600') : (colors.fontWeight.medium as '500'),\n fontVariant: ['tabular-nums'],\n // Chevron glyphs sit a hair high in most fonts.\n marginTop: isChevron ? -1 : 0,\n }}\n >\n {label}\n </RNText>\n </Pressable>\n );\n};\n\n// =============================================================================\n// Live region for screen readers (web only — RN announces via accessibilityLiveRegion)\n// =============================================================================\n\nconst LiveRegion = ({ message }: { message: string }) => {\n if (Platform.OS === 'web') {\n return (\n <View\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n opacity: 0,\n }}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic\n >\n <RNText accessibilityLiveRegion=\"polite\">{message}</RNText>\n </View>\n );\n }\n return (\n <View accessibilityLiveRegion=\"polite\" style={{ width: 0, height: 0 }}>\n <RNText>{message}</RNText>\n </View>\n );\n};\n\n// =============================================================================\n// Items renderer (the shorthand UI)\n// =============================================================================\n\ntype ItemsRendererProps = {\n items: ReadonlyArray<PaginationItemDescriptor>;\n onItemPress: (item: PaginationItemDescriptor) => void;\n};\n\nconst ItemsRenderer = ({ items, onItemPress }: ItemsRendererProps) => {\n const { labels, renderItem, dir } = usePaginationContext('Pagination.Items');\n\n const elements = items.map((item, idx) => {\n const key = `${item.type}-${item.page ?? idx}-${idx}`;\n const ariaLabel = ariaLabelFor(item, labels);\n const ariaCurrent = item.selected ? ('page' as const) : undefined;\n const display = displayLabelFor(item, labels, dir);\n const onPress = () => onItemPress(item);\n\n if (renderItem && item.type !== 'ellipsis') {\n return (\n <View key={key}>\n {renderItem({\n type: item.type,\n ...(item.page !== undefined ? { page: item.page } : {}),\n selected: item.selected ?? false,\n disabled: item.disabled ?? false,\n ariaLabel,\n ...(ariaCurrent ? { ariaCurrent } : {}),\n children: display,\n onPress,\n })}\n </View>\n );\n }\n\n return (\n <ItemButton\n key={key}\n type={item.type}\n {...(item.page !== undefined ? { page: item.page } : {})}\n selected={item.selected ?? false}\n disabled={item.disabled ?? false}\n ariaLabel={ariaLabel}\n {...(ariaCurrent ? { ariaCurrent } : {})}\n label={display}\n onPress={onPress}\n />\n );\n });\n\n return <>{elements}</>;\n};\n\nfunction ariaLabelFor(item: PaginationItemDescriptor, labels: PaginationContextValue['labels']): string {\n switch (item.type) {\n case 'first':\n return labels.first;\n case 'prev':\n return labels.prev;\n case 'next':\n return labels.next;\n case 'last':\n return labels.last;\n case 'ellipsis':\n return labels.ellipsis;\n case 'page':\n return item.selected ? labels.currentPage : labels.gotoPage(item.page ?? 0);\n }\n}\n\nfunction displayLabelFor(\n item: PaginationItemDescriptor,\n labels: PaginationContextValue['labels'],\n dir: 'ltr' | 'rtl'\n): ReactNode {\n const flip = dir === 'rtl';\n switch (item.type) {\n case 'first':\n return flip ? '»' : '«';\n case 'last':\n return flip ? '«' : '»';\n case 'prev':\n return flip ? '›' : '‹';\n case 'next':\n return flip ? '‹' : '›';\n case 'ellipsis':\n return '…';\n case 'page':\n return String(item.page ?? '');\n }\n}\n\n// =============================================================================\n// Compact variant\n// =============================================================================\n\nconst CompactView = ({\n onPrev,\n onNext,\n canPrev,\n canNext,\n pageLabel,\n}: {\n onPrev: () => void;\n onNext: () => void;\n canPrev: boolean;\n canNext: boolean;\n pageLabel: string;\n}) => {\n const colors = useThemeColors();\n const { labels, dir } = usePaginationContext('Pagination(compact)');\n const flip = dir === 'rtl';\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: px(colors.spacing['1']),\n flexGrow: 1,\n }}\n >\n <ItemButton\n type=\"prev\"\n selected={false}\n disabled={!canPrev}\n ariaLabel={labels.prev}\n label={flip ? '›' : '‹'}\n onPress={onPrev}\n />\n <View\n style={{\n flexGrow: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: px(colors.spacing['3']),\n }}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n fontWeight: colors.fontWeight.medium as '500',\n fontVariant: ['tabular-nums'],\n }}\n >\n {pageLabel}\n </RNText>\n </View>\n <ItemButton\n type=\"next\"\n selected={false}\n disabled={!canNext}\n ariaLabel={labels.next}\n label={flip ? '‹' : '›'}\n onPress={onNext}\n />\n </View>\n );\n};\n\n// =============================================================================\n// Root (the `<Pagination>` symbol — also serves as the shorthand)\n// =============================================================================\n\nconst ANNOUNCE_DEBOUNCE_MS = 150;\n\nconst PaginationRoot = (props: PaginationProps) => {\n const {\n page: controlledPage,\n defaultPage = 1,\n pageCount,\n siblingCount = 1,\n boundaryCount = 1,\n showFirstLast = false,\n hideOnSinglePage = true,\n variant = 'auto',\n showRange = false,\n itemCount,\n pageSize: pageSizeProp,\n onPageChange,\n renderItem,\n dir = 'ltr',\n previousLabel,\n nextLabel,\n firstLabel,\n lastLabel,\n ariaLabel,\n className,\n testID,\n children,\n } = props;\n\n const { t } = useTranslation();\n const colors = useThemeColors();\n const { width } = useWindowDimensions();\n\n const [internalPageSize, setInternalPageSize] = useState<number | undefined>(pageSizeProp);\n useEffect(() => {\n setInternalPageSize(pageSizeProp);\n }, [pageSizeProp]);\n const effectivePageSize = pageSizeProp ?? internalPageSize;\n\n const labels = useMemo<PaginationContextValue['labels']>(\n () => ({\n prev: previousLabel ?? t('pagination.previous', { defaultValue: 'Previous page' }),\n next: nextLabel ?? t('pagination.next', { defaultValue: 'Next page' }),\n first: firstLabel ?? t('pagination.first', { defaultValue: 'First page' }),\n last: lastLabel ?? t('pagination.last', { defaultValue: 'Last page' }),\n ellipsis: t('pagination.ellipsis', { defaultValue: 'More pages' }),\n currentPage: t('pagination.currentPage', { defaultValue: 'Current page' }),\n gotoPage: (n) => t('pagination.gotoPage', { page: n, defaultValue: `Go to page ${n}` }),\n rangeFmt: (from, to, total) =>\n t('pagination.range', {\n from,\n to,\n total,\n defaultValue: `Showing ${from}–${to} of ${total}`,\n }),\n pageOfFmt: (p, total) => t('pagination.pageOf', { page: p, total, defaultValue: `Page ${p} of ${total}` }),\n pageSize: t('pagination.pageSizeLabel', { defaultValue: 'Items per page' }),\n jumperLabel: t('pagination.jumperLabel', { defaultValue: 'Go to page' }),\n jumperPlaceholder: t('pagination.jumperPlaceholder', { defaultValue: '#' }),\n }),\n [t, previousLabel, nextLabel, firstLabel, lastLabel]\n );\n\n // Live-region message — debounced so rapid clicks don't spam SR.\n const [announcement, setAnnouncement] = useState('');\n const announceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => {\n return () => {\n if (announceTimer.current) {\n clearTimeout(announceTimer.current);\n }\n };\n }, []);\n\n const handlePageChange = useCallback(\n (next: number) => {\n onPageChange?.(next, effectivePageSize !== undefined ? { pageSize: effectivePageSize } : undefined);\n if (announceTimer.current) {\n clearTimeout(announceTimer.current);\n }\n announceTimer.current = setTimeout(() => {\n setAnnouncement(labels.pageOfFmt(next, Math.max(1, pageCount)));\n }, ANNOUNCE_DEBOUNCE_MS);\n },\n [onPageChange, effectivePageSize, labels, pageCount]\n );\n\n const setPageSize = useCallback(\n (next: number) => {\n if (pageSizeProp === undefined) {\n setInternalPageSize(next);\n }\n onPageChange?.(1, { pageSize: next });\n },\n [onPageChange, pageSizeProp]\n );\n\n const pagination = usePagination({\n ...(controlledPage !== undefined ? { page: controlledPage } : {}),\n defaultPage,\n pageCount,\n siblingCount,\n boundaryCount,\n showFirstLast,\n onPageChange: handlePageChange,\n });\n\n if (hideOnSinglePage && Math.max(1, pageCount) <= 1) {\n return null;\n }\n\n const ctxValue: PaginationContextValue = {\n page: pagination.page,\n pageCount: Math.max(1, pageCount),\n pageSize: effectivePageSize,\n itemCount,\n siblingCount,\n boundaryCount,\n showFirstLast,\n dir,\n labels,\n ...(renderItem ? { renderItem } : {}),\n goToPage: pagination.goToPage,\n setPageSize,\n };\n\n // Compound mode — caller supplies the layout. We still wrap children in\n // a flex-row that wraps on overflow so a long compound chain\n // (Items + Range + PageSize + Jumper) doesn't blow off the right edge\n // of a phone-width container.\n if (children !== undefined) {\n return (\n <PaginationContext.Provider value={ctxValue}>\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessibilityLabel={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessible\n className={cn('flex-row items-center flex-wrap', className)}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n flexWrap: 'wrap',\n rowGap: px(colors.spacing['2']),\n columnGap: px(colors.spacing['1']),\n direction: dir as ViewStyle['direction'],\n }}\n >\n {children}\n </View>\n <LiveRegion message={announcement} />\n </PaginationContext.Provider>\n );\n }\n\n // Shorthand mode — pick variant + render the items row.\n const isCompact =\n variant === 'compact' || (variant === 'auto' && width > 0 && width < PAGINATION_COMPACT_BREAKPOINT);\n\n const onItemPress = (item: PaginationItemDescriptor) => {\n if (item.disabled) {\n return;\n }\n switch (item.type) {\n case 'first':\n pagination.first();\n return;\n case 'prev':\n pagination.prev();\n return;\n case 'next':\n pagination.next();\n return;\n case 'last':\n pagination.last();\n return;\n case 'page':\n if (item.page !== undefined) {\n pagination.goToPage(item.page);\n }\n return;\n case 'ellipsis':\n return;\n }\n };\n\n const showRangeBlock = showRange && itemCount !== undefined && effectivePageSize !== undefined;\n\n return (\n <PaginationContext.Provider value={ctxValue}>\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"navigation\"\n aria-label={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessibilityLabel={ariaLabel ?? t('pagination.ariaLabel', { defaultValue: 'Pagination' })}\n accessible\n className={cn(isCompact ? 'flex-col items-stretch' : 'flex-row items-center flex-wrap', className)}\n style={{\n // Compact mode lays out as a column so the Range/PageSize\n // block falls below the controls instead of overflowing\n // a phone-width row. Numbered mode wraps on overflow.\n flexDirection: isCompact ? 'column' : 'row',\n alignItems: isCompact ? 'stretch' : 'center',\n flexWrap: isCompact ? 'nowrap' : 'wrap',\n rowGap: px(colors.spacing['2']),\n columnGap: px(colors.spacing['1']),\n direction: dir as ViewStyle['direction'],\n }}\n >\n {isCompact ? (\n <CompactView\n onPrev={pagination.prev}\n onNext={pagination.next}\n canPrev={pagination.canPrev}\n canNext={pagination.canNext}\n pageLabel={labels.pageOfFmt(pagination.page, Math.max(1, pageCount))}\n />\n ) : (\n <ItemsRenderer items={pagination.pages} onItemPress={onItemPress} />\n )}\n {showRangeBlock ? <PaginationRange /> : null}\n </View>\n <LiveRegion message={announcement} />\n </PaginationContext.Provider>\n );\n};\n\n// =============================================================================\n// Compound parts\n// =============================================================================\n\ntype CompoundButtonProps = {\n asChild?: boolean;\n children?: ReactNode;\n testID?: string;\n};\n\nconst CompoundActionButton = ({\n actionType,\n asChild,\n children,\n testID,\n}: CompoundButtonProps & { actionType: 'prev' | 'next' | 'first' | 'last' }) => {\n const ctx = usePaginationContext(`Pagination.${actionType[0]!.toUpperCase() + actionType.slice(1)}`);\n const disabled = actionType === 'prev' || actionType === 'first' ? ctx.page <= 1 : ctx.page >= ctx.pageCount;\n const onPress = () => {\n if (disabled) {\n return;\n }\n switch (actionType) {\n case 'first':\n ctx.goToPage(1);\n return;\n case 'prev':\n ctx.goToPage(ctx.page - 1);\n return;\n case 'next':\n ctx.goToPage(ctx.page + 1);\n return;\n case 'last':\n ctx.goToPage(ctx.pageCount);\n return;\n }\n };\n const ariaLabel =\n actionType === 'prev'\n ? ctx.labels.prev\n : actionType === 'next'\n ? ctx.labels.next\n : actionType === 'first'\n ? ctx.labels.first\n : ctx.labels.last;\n\n if (asChild) {\n return (\n <Slot\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n onPress={onPress}\n onClick={onPress as unknown as ComponentProps<'button'>['onClick']}\n >\n {children}\n </Slot>\n );\n }\n const fallbackGlyph =\n actionType === 'prev' ? '‹' : actionType === 'next' ? '›' : actionType === 'first' ? '«' : '»';\n return (\n <ItemButton\n type={actionType}\n selected={false}\n disabled={disabled}\n ariaLabel={ariaLabel}\n label={children ?? fallbackGlyph}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n />\n );\n};\n\nconst PaginationPrev: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'prev',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationNext: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'next',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationFirst: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'first',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\nconst PaginationLast: FC<CompoundButtonProps> = ({ asChild, children, testID }) =>\n CompoundActionButton({\n actionType: 'last',\n ...(asChild !== undefined ? { asChild } : {}),\n ...(children !== undefined ? { children } : {}),\n ...(testID !== undefined ? { testID } : {}),\n });\n\nconst PaginationItem: FC<{ page: number; asChild?: boolean; children?: ReactNode; testID?: string }> = ({\n page,\n asChild,\n children,\n testID,\n}) => {\n const ctx = usePaginationContext('Pagination.Item');\n const selected = page === ctx.page;\n const onPress = () => ctx.goToPage(page);\n const ariaLabel = selected ? ctx.labels.currentPage : ctx.labels.gotoPage(page);\n\n if (asChild) {\n return (\n <Slot\n aria-label={ariaLabel}\n {...(selected ? { 'aria-current': 'page' as const } : {})}\n onPress={onPress}\n onClick={onPress as unknown as ComponentProps<'button'>['onClick']}\n >\n {children}\n </Slot>\n );\n }\n return (\n <ItemButton\n type=\"page\"\n page={page}\n selected={selected}\n disabled={false}\n ariaLabel={ariaLabel}\n {...(selected ? { ariaCurrent: 'page' as const } : {})}\n label={children ?? String(page)}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n />\n );\n};\n\nconst PaginationItems: FC<{ children?: ReactNode }> = ({ children }) => {\n const ctx = usePaginationContext('Pagination.Items');\n // Always run the hook so React's call order is stable across renders;\n // the result is discarded when explicit `children` were supplied.\n const result = usePagination({\n page: ctx.page,\n pageCount: ctx.pageCount,\n siblingCount: ctx.siblingCount,\n boundaryCount: ctx.boundaryCount,\n showFirstLast: false,\n showPrevNext: false,\n });\n if (children !== undefined) {\n return <>{children}</>;\n }\n return (\n <ItemsRenderer\n items={result.pages}\n onItemPress={(item) => {\n if (item.type === 'page' && item.page !== undefined) {\n ctx.goToPage(item.page);\n }\n }}\n />\n );\n};\n\nconst PaginationEllipsis: FC<{ children?: ReactNode }> = ({ children }) => {\n const ctx = usePaginationContext('Pagination.Ellipsis');\n return (\n <ItemButton\n type=\"ellipsis\"\n selected={false}\n disabled\n label={children ?? '…'}\n ariaLabel={ctx.labels.ellipsis}\n onPress={() => {}}\n />\n );\n};\n\nconst PaginationRange: FC = () => {\n const ctx = usePaginationContext('Pagination.Range');\n const colors = useThemeColors();\n if (ctx.itemCount === undefined || ctx.pageSize === undefined) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('<Pagination.Range> requires both `itemCount` and `pageSize` on <Pagination>.');\n }\n return null;\n }\n const from = (ctx.page - 1) * ctx.pageSize + 1;\n const to = Math.min(ctx.itemCount, ctx.page * ctx.pageSize);\n const message = ctx.labels.rangeFmt(from, to, ctx.itemCount);\n return (\n <RNText\n role=\"status\"\n aria-live=\"polite\"\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n fontVariant: ['tabular-nums'],\n paddingHorizontal: px(colors.spacing['2']),\n // Sits on the same baseline as the 32px buttons.\n lineHeight: px(colors.spacing['8']),\n }}\n >\n {message}\n </RNText>\n );\n};\n\nconst PaginationPageSize: FC<{ options: ReadonlyArray<number>; testID?: string }> = ({ options, testID }) => {\n const ctx = usePaginationContext('Pagination.PageSize');\n const colors = useThemeColors();\n const value = ctx.pageSize !== undefined ? String(ctx.pageSize) : '';\n const selectOptions = useMemo<SelectOption[]>(\n () => options.map((n) => ({ value: String(n), label: String(n) })),\n [options]\n );\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['2']),\n }}\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 {ctx.labels.pageSize}\n </RNText>\n <Select\n {...(testID !== undefined ? { testID } : {})}\n aria-label={ctx.labels.pageSize}\n options={selectOptions}\n value={value}\n onChange={(v) => {\n const n = Number(v);\n if (Number.isFinite(n) && n > 0) {\n ctx.setPageSize(n);\n }\n }}\n />\n </View>\n );\n};\n\ntype PaginationJumperProps = {\n /** Show a separate visible \"Go to page\" label before the input. The aria-label is always set regardless. @defaultValue false */\n showLabel?: boolean;\n /** Override the visible label / accessible name. */\n label?: string;\n /** Override the input placeholder. @defaultValue the localized \"Go to\" hint */\n placeholder?: string;\n /** Width of the input in px. @defaultValue 56 */\n inputWidth?: number;\n testID?: string;\n};\n\n/**\n * Compact, purpose-built jumper. Built directly from RN's `TextInput`\n * primitive so we can render the exact 32px-tall borderless-then-focused\n * treatment that fits in a pagination row, instead of inheriting the full\n * form-field chrome (label, helper text, error slot) of `<TextInput>`.\n */\nconst PaginationJumper: FC<PaginationJumperProps> = ({\n showLabel = false,\n label,\n placeholder,\n inputWidth = 56,\n testID,\n}) => {\n const ctx = usePaginationContext('Pagination.Jumper');\n const colors = useThemeColors();\n const [draft, setDraft] = useState('');\n const [focused, setFocused] = useState(false);\n const [hovered, setHovered] = useState(false);\n const visibleLabel = label ?? ctx.labels.jumperLabel;\n const placeholderText = placeholder ?? ctx.labels.jumperPlaceholder;\n\n const submit = () => {\n const trimmed = draft.trim();\n if (trimmed === '') {\n return;\n }\n const n = Number(trimmed);\n if (!Number.isFinite(n) || n < 1) {\n setDraft('');\n return;\n }\n const clamped = Math.min(Math.max(1, Math.floor(n)), ctx.pageCount);\n ctx.goToPage(clamped);\n setDraft('');\n };\n\n const borderColor = focused\n ? colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.border.strong\n : colors.semantic.border.default;\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: px(colors.spacing['2']),\n }}\n >\n {showLabel ? (\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n }}\n >\n {visibleLabel}\n </RNText>\n ) : null}\n <View\n // The wrapper carries the visual chrome so the bare TextInput\n // can stay completely unstyled — it's just text + caret.\n onPointerEnter={Platform.OS === 'web' ? () => setHovered(true) : undefined}\n onPointerLeave={Platform.OS === 'web' ? () => setHovered(false) : undefined}\n style={\n {\n width: inputWidth,\n height: px(colors.spacing['8']),\n borderWidth: 1,\n borderColor,\n borderRadius: px(colors.radius.md),\n backgroundColor: colors.semantic.background.elevated,\n paddingHorizontal: px(colors.spacing['2']),\n justifyContent: 'center',\n // Web-only properties (silently dropped on native).\n ...(focused\n ? {\n boxShadow: `0 0 0 3px ${withAlpha(colors.semantic.interactive.primary, 0.15)}`,\n }\n : null),\n transitionProperty: 'border-color, box-shadow',\n transitionDuration: '120ms',\n transitionTimingFunction: 'cubic-bezier(0.2, 0, 0, 1)',\n } as unknown as ViewStyle\n }\n >\n <RNTextInput\n {...(testID !== undefined ? { testID } : {})}\n value={draft}\n onChangeText={setDraft}\n onSubmitEditing={submit}\n onBlur={() => {\n setFocused(false);\n submit();\n }}\n onFocus={() => setFocused(true)}\n keyboardType=\"number-pad\"\n inputMode=\"numeric\"\n placeholder={placeholderText}\n placeholderTextColor={colors.semantic.text.muted}\n aria-label={visibleLabel}\n accessibilityLabel={visibleLabel}\n returnKeyType=\"go\"\n selectTextOnFocus\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.default,\n fontVariant: ['tabular-nums'],\n textAlign: 'center',\n // Strip the browser's default outline — we draw our own\n // focus ring on the wrapper.\n ...(Platform.OS === 'web' ? ({ outline: 'none' } as object) : null),\n }}\n />\n </View>\n </View>\n );\n};\n\n/**\n * Apply an alpha channel to any of our token color strings (hex / rgb / hsl).\n * Cheap, zero-dep helper just for the focus glow.\n */\nfunction withAlpha(color: string, alpha: number): string {\n if (color.startsWith('#') && (color.length === 7 || color.length === 4)) {\n const expanded =\n color.length === 4 ? `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` : color;\n const r = Number.parseInt(expanded.slice(1, 3), 16);\n const g = Number.parseInt(expanded.slice(3, 5), 16);\n const b = Number.parseInt(expanded.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return color;\n}\n\nexport type { PaginationJumperProps };\n\n// =============================================================================\n// Public symbol — Pagination + compound parts\n// =============================================================================\n\nexport const Pagination = Object.assign(PaginationRoot, {\n Items: PaginationItems,\n Item: PaginationItem,\n Prev: PaginationPrev,\n Next: PaginationNext,\n First: PaginationFirst,\n Last: PaginationLast,\n Ellipsis: PaginationEllipsis,\n Range: PaginationRange,\n PageSize: PaginationPageSize,\n Jumper: PaginationJumper,\n});\n\n// Suppress unused — ReactElement / KeyboardEvent are reserved for future kbd-nav extension.\ntype _Unused = ReactElement | KeyboardEvent;\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useLocale, Calendar } from './chunk-
|
|
1
|
+
import { useLocale, Calendar } from './chunk-ND7MRYW7.js';
|
|
2
2
|
import { Popover } from './chunk-L5X4SYJ4.js';
|
|
3
3
|
import { cn } from './chunk-CHXHRJNZ.js';
|
|
4
4
|
import { px } from './chunk-5A2QOOVN.js';
|
|
@@ -339,5 +339,5 @@ var DatePicker = Object.assign(DatePickerRoot, {
|
|
|
339
339
|
});
|
|
340
340
|
|
|
341
341
|
export { DatePicker };
|
|
342
|
-
//# sourceMappingURL=chunk-
|
|
343
|
-
//# sourceMappingURL=chunk-
|
|
342
|
+
//# sourceMappingURL=chunk-F7G6R373.js.map
|
|
343
|
+
//# sourceMappingURL=chunk-F7G6R373.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/DatePicker/DatePicker.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-XXBN6CIK.js","sourcesContent":["'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { getLocalTimeZone } from '@internationalized/date';\nimport { useCallback, useState } from 'react';\nimport { Platform, Pressable, Text as RNText, View } from 'react-native';\nimport { useLocale } from '../../i18n/locale';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport type { DateRange } from '../Calendar';\nimport { Calendar } from '../Calendar';\nimport { Popover } from '../Popover';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Format a single CalendarDate for display using Intl. */\nfunction formatDate(date: CalendarDate, locale: string): string {\n try {\n return new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(date.toDate(getLocalTimeZone()));\n } catch {\n return `${date.year}-${String(date.month).padStart(2, '0')}-${String(date.day).padStart(2, '0')}`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Calendar icon\n// ---------------------------------------------------------------------------\n\nfunction CalendarIcon({ size = 16, color = 'currentColor' }: { size?: number; color?: string }) {\n const colors = useThemeColors();\n\n if (Platform.OS === 'web') {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M8 2v4M16 2v4M3 10h18M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z\" />\n </svg>\n );\n }\n\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.muted : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {'📅'}\n </RNText>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type DatePickerProps = {\n value?: CalendarDate | null;\n defaultValue?: CalendarDate | null;\n onChange?: (date: CalendarDate | null) => void;\n\n /** BCP 47 locale; defaults from NoriProvider's i18n context. */\n locale?: string;\n\n /** Min/max selectable date. */\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n\n /** Custom unavailable predicate. */\n isDateUnavailable?: (date: CalendarDate) => boolean;\n\n /** First day of week override (0=Sun, 1=Mon, ...). Defaults from locale. */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n /** Placeholder text shown when no value. */\n placeholder?: string;\n\n /** Disable the whole picker. */\n disabled?: boolean;\n\n // A11y / Field.Control hook props\n id?: string;\n name?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n\n testID?: string;\n className?: string;\n};\n\nexport type DateRangeValue = { start: CalendarDate | null; end: CalendarDate | null };\n\nexport type DatePickerRangeProps = {\n value?: DateRangeValue;\n defaultValue?: DateRangeValue;\n onChange?: (range: DateRangeValue) => void;\n\n locale?: string;\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n placeholder?: string;\n disabled?: boolean;\n\n id?: string;\n name?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n\n testID?: string;\n className?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Shared Calendar optional props builder\n// ---------------------------------------------------------------------------\n\ntype CalendarOptional = {\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n};\n\nfunction buildCalendarOptional(\n minValue: CalendarDate | undefined,\n maxValue: CalendarDate | undefined,\n isDateUnavailable: ((date: CalendarDate) => boolean) | undefined,\n firstDayOfWeek: (0 | 1 | 2 | 3 | 4 | 5 | 6) | undefined\n): CalendarOptional {\n const out: CalendarOptional = {};\n if (minValue !== undefined) {\n out.minValue = minValue;\n }\n if (maxValue !== undefined) {\n out.maxValue = maxValue;\n }\n if (isDateUnavailable !== undefined) {\n out.isDateUnavailable = isDateUnavailable;\n }\n if (firstDayOfWeek !== undefined) {\n out.firstDayOfWeek = firstDayOfWeek;\n }\n return out;\n}\n\nfunction buildTriggerAriaProps(ariaProps: {\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n}): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (ariaProps['aria-labelledby'] !== undefined) {\n out['aria-labelledby'] = ariaProps['aria-labelledby'];\n }\n if (ariaProps['aria-describedby'] !== undefined) {\n out['aria-describedby'] = ariaProps['aria-describedby'];\n }\n if (ariaProps['aria-invalid'] !== undefined) {\n out['aria-invalid'] = ariaProps['aria-invalid'];\n }\n if (ariaProps['aria-required'] !== undefined) {\n out['aria-required'] = ariaProps['aria-required'];\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// DatePicker (single)\n//\n// Uses Popover.Trigger + asChild so the Popover correctly sets the trigger\n// ref for web positioning and handles outside-click dismissal.\n// The trigger renders as a Pressable (via Popover.Trigger asChild pattern).\n// ---------------------------------------------------------------------------\n\nconst DatePickerRoot = ({\n value,\n defaultValue,\n onChange,\n locale: localeProp,\n minValue,\n maxValue,\n isDateUnavailable,\n firstDayOfWeek,\n placeholder,\n disabled = false,\n id,\n name: _name,\n className,\n testID,\n ...ariaProps\n}: DatePickerProps) => {\n const providerLocale = useLocale();\n const locale = localeProp ?? providerLocale;\n\n const [open, setOpen] = useState(false);\n\n const isControlled = value !== undefined;\n const [inner, setInner] = useState<CalendarDate | null>(defaultValue ?? null);\n const current = isControlled ? (value ?? null) : inner;\n\n const handleChange = useCallback(\n (date: CalendarDate | null) => {\n if (!isControlled) {\n setInner(date);\n }\n onChange?.(date);\n setOpen(false);\n },\n [isControlled, onChange]\n );\n\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (!disabled) {\n setOpen(next);\n }\n },\n [disabled]\n );\n\n const displayValue = current ? formatDate(current, locale) : null;\n const calendarOptional = buildCalendarOptional(minValue, maxValue, isDateUnavailable, firstDayOfWeek);\n const triggerAriaProps = buildTriggerAriaProps(ariaProps);\n\n const colors = useThemeColors();\n const hasError = ariaProps['aria-invalid'] === true || (ariaProps['aria-invalid'] as unknown as string) === 'true';\n\n const pressableStyle = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n borderWidth: 1,\n borderRadius: px(colors.radius.md),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: hasError ? colors.color.danger : colors.semantic.border.default,\n opacity: disabled ? 0.6 : 1,\n };\n\n const textStyle = {\n flex: 1,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: displayValue ? colors.semantic.text.default : colors.semantic.text.muted,\n };\n\n // Extra a11y props for the trigger\n const triggerExtraProps: Record<string, unknown> = {\n role: 'combobox',\n accessibilityRole: 'button',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n ...triggerAriaProps,\n };\n if (id !== undefined) {\n triggerExtraProps.id = id;\n triggerExtraProps.nativeID = id;\n }\n if (testID !== undefined) {\n triggerExtraProps.testID = testID;\n }\n if (hasError) {\n triggerExtraProps['aria-invalid'] = true;\n }\n if (ariaProps['aria-required']) {\n triggerExtraProps['aria-required'] = true;\n }\n if (disabled) {\n triggerExtraProps['aria-disabled'] = true;\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild={false} className={cn(className)}>\n <Pressable\n onPress={disabled ? undefined : () => setOpen(!open)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center rounded-md border px-3 py-2',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={pressableStyle}\n {...(triggerExtraProps as Record<string, unknown>)}\n >\n <RNText style={textStyle} numberOfLines={1}>\n {displayValue ?? placeholder ?? ''}\n </RNText>\n <View style={{ marginLeft: px(colors.spacing['2']) }}>\n <CalendarIcon size={16} color={colors.semantic.text.muted} />\n </View>\n </Pressable>\n </Popover.Trigger>\n <Popover.Content aria-label=\"Date picker\" side=\"bottom\" align=\"start\">\n <Calendar\n mode=\"single\"\n value={current}\n onChange={(date) => {\n handleChange(date as CalendarDate | null);\n }}\n locale={locale}\n {...calendarOptional}\n />\n </Popover.Content>\n </Popover>\n );\n};\n\n// ---------------------------------------------------------------------------\n// DatePicker.Range\n// ---------------------------------------------------------------------------\n\nconst DatePickerRange = ({\n value,\n defaultValue,\n onChange,\n locale: localeProp,\n minValue,\n maxValue,\n isDateUnavailable,\n firstDayOfWeek,\n placeholder,\n disabled = false,\n id,\n name: _name,\n className,\n testID,\n ...ariaProps\n}: DatePickerRangeProps) => {\n const providerLocale = useLocale();\n const locale = localeProp ?? providerLocale;\n\n const [open, setOpen] = useState(false);\n\n const isControlled = value !== undefined;\n const [inner, setInner] = useState<DateRangeValue>(defaultValue ?? { start: null, end: null });\n const current = isControlled ? (value ?? { start: null, end: null }) : inner;\n\n const calendarValue: DateRange | null = current.start !== null ? { start: current.start, end: current.end } : null;\n\n const handleChange = useCallback(\n (calRange: DateRange | null) => {\n const next: DateRangeValue = {\n start: calRange?.start ?? null,\n end: calRange?.end ?? null,\n };\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n if (next.start !== null && next.end !== null) {\n setOpen(false);\n }\n },\n [isControlled, onChange]\n );\n\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (!disabled) {\n setOpen(next);\n }\n },\n [disabled]\n );\n\n let displayValue: string | null = null;\n if (current.start !== null) {\n const startStr = formatDate(current.start, locale);\n const endStr = current.end !== null ? formatDate(current.end, locale) : '';\n displayValue = `${startStr} – ${endStr}`;\n }\n\n const calendarOptional = buildCalendarOptional(minValue, maxValue, isDateUnavailable, firstDayOfWeek);\n const triggerAriaProps = buildTriggerAriaProps(ariaProps);\n\n const colors = useThemeColors();\n const hasError = ariaProps['aria-invalid'] === true || (ariaProps['aria-invalid'] as unknown as string) === 'true';\n\n const pressableStyle = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n borderWidth: 1,\n borderRadius: px(colors.radius.md),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: hasError ? colors.color.danger : colors.semantic.border.default,\n opacity: disabled ? 0.6 : 1,\n };\n\n const textStyle = {\n flex: 1,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: displayValue ? colors.semantic.text.default : colors.semantic.text.muted,\n };\n\n const triggerExtraProps: Record<string, unknown> = {\n role: 'combobox',\n accessibilityRole: 'button',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n ...triggerAriaProps,\n };\n if (id !== undefined) {\n triggerExtraProps.id = id;\n triggerExtraProps.nativeID = id;\n }\n if (testID !== undefined) {\n triggerExtraProps.testID = testID;\n }\n if (hasError) {\n triggerExtraProps['aria-invalid'] = true;\n }\n if (ariaProps['aria-required']) {\n triggerExtraProps['aria-required'] = true;\n }\n if (disabled) {\n triggerExtraProps['aria-disabled'] = true;\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild={false} className={cn(className)}>\n <Pressable\n onPress={disabled ? undefined : () => setOpen(!open)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center rounded-md border px-3 py-2',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={pressableStyle}\n {...(triggerExtraProps as Record<string, unknown>)}\n >\n <RNText style={textStyle} numberOfLines={1}>\n {displayValue ?? placeholder ?? ''}\n </RNText>\n <View style={{ marginLeft: px(colors.spacing['2']) }}>\n <CalendarIcon size={16} color={colors.semantic.text.muted} />\n </View>\n </Pressable>\n </Popover.Trigger>\n <Popover.Content aria-label=\"Date range picker\" side=\"bottom\" align=\"start\">\n <Calendar\n mode=\"range\"\n value={calendarValue}\n onChange={(range) => {\n handleChange(range as DateRange | null);\n }}\n locale={locale}\n {...calendarOptional}\n />\n </Popover.Content>\n </Popover>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public export\n// ---------------------------------------------------------------------------\n\nexport const DatePicker = Object.assign(DatePickerRoot, {\n Range: DatePickerRange,\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/DatePicker/DatePicker.tsx"],"names":["RNText"],"mappings":";;;;;;;;;;;AAmBA,SAAS,UAAA,CAAW,MAAoB,MAAA,EAAwB;AAC5D,EAAA,IAAI;AACA,IAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,EAAE,SAAA,EAAW,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,gBAAA,EAAkB,CAAC,CAAA;AAAA,EAC1G,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,CAAA,EAAG,KAAK,IAAI,CAAA,CAAA,EAAI,OAAO,IAAA,CAAK,KAAK,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,OAAO,IAAA,CAAK,GAAG,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,EACnG;AACJ;AANS,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AAYT,SAAS,aAAa,EAAE,IAAA,GAAO,EAAA,EAAI,KAAA,GAAQ,gBAAe,EAAsC;AAC5F,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,uBACI,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO,IAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,OAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAQ,KAAA;AAAA,QACR,WAAA,EAAY,GAAA;AAAA,QACZ,aAAA,EAAc,OAAA;AAAA,QACd,cAAA,EAAe,OAAA;AAAA,QACf,aAAA,EAAY,MAAA;AAAA,QAEZ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8FAAA,EAA+F;AAAA;AAAA,KAC3G;AAAA,EAER;AAEA,EAAA,MAAM,gBAAgB,KAAA,KAAU,cAAA,GAAiB,MAAA,CAAO,QAAA,CAAS,KAAK,KAAA,GAAQ,KAAA;AAC9E,EAAA,uBACI,GAAA;AAAA,IAACA,IAAA;AAAA,IAAA;AAAA,MACG,2BAAA,EAA2B,IAAA;AAAA,MAC3B,yBAAA,EAA0B,qBAAA;AAAA,MAC1B,OAAO,EAAE,QAAA,EAAU,MAAM,UAAA,EAAY,IAAA,EAAM,OAAO,aAAA,EAAc;AAAA,MAE/D,QAAA,EAAA;AAAA;AAAA,GACL;AAER;AA/BS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AA8GT,SAAS,qBAAA,CACL,QAAA,EACA,QAAA,EACA,iBAAA,EACA,cAAA,EACgB;AAChB,EAAA,MAAM,MAAwB,EAAC;AAC/B,EAAA,IAAI,aAAa,MAAA,EAAW;AACxB,IAAA,GAAA,CAAI,QAAA,GAAW,QAAA;AAAA,EACnB;AACA,EAAA,IAAI,aAAa,MAAA,EAAW;AACxB,IAAA,GAAA,CAAI,QAAA,GAAW,QAAA;AAAA,EACnB;AACA,EAAA,IAAI,sBAAsB,MAAA,EAAW;AACjC,IAAA,GAAA,CAAI,iBAAA,GAAoB,iBAAA;AAAA,EAC5B;AACA,EAAA,IAAI,mBAAmB,MAAA,EAAW;AAC9B,IAAA,GAAA,CAAI,cAAA,GAAiB,cAAA;AAAA,EACzB;AACA,EAAA,OAAO,GAAA;AACX;AApBS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAsBT,SAAS,sBAAsB,SAAA,EAKH;AACxB,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,IAAI,SAAA,CAAU,iBAAiB,CAAA,KAAM,MAAA,EAAW;AAC5C,IAAA,GAAA,CAAI,iBAAiB,CAAA,GAAI,SAAA,CAAU,iBAAiB,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,SAAA,CAAU,kBAAkB,CAAA,KAAM,MAAA,EAAW;AAC7C,IAAA,GAAA,CAAI,kBAAkB,CAAA,GAAI,SAAA,CAAU,kBAAkB,CAAA;AAAA,EAC1D;AACA,EAAA,IAAI,SAAA,CAAU,cAAc,CAAA,KAAM,MAAA,EAAW;AACzC,IAAA,GAAA,CAAI,cAAc,CAAA,GAAI,SAAA,CAAU,cAAc,CAAA;AAAA,EAClD;AACA,EAAA,IAAI,SAAA,CAAU,eAAe,CAAA,KAAM,MAAA,EAAW;AAC1C,IAAA,GAAA,CAAI,eAAe,CAAA,GAAI,SAAA,CAAU,eAAe,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,GAAA;AACX;AApBS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AA8BT,IAAM,iCAAiB,MAAA,CAAA,CAAC;AAAA,EACpB,KAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA,EAAQ,UAAA;AAAA,EACR,QAAA;AAAA,EACA,QAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,EAAA;AAAA,EACA,IAAA,EAAM,KAAA;AAAA,EACN,SAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAuB;AACnB,EAAA,MAAM,iBAAiB,SAAA,EAAU;AACjC,EAAA,MAAM,SAAS,UAAA,IAAc,cAAA;AAE7B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAA8B,gBAAgB,IAAI,CAAA;AAC5E,EAAA,MAAM,OAAA,GAAU,YAAA,GAAgB,KAAA,IAAS,IAAA,GAAQ,KAAA;AAEjD,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACjB,CAAC,IAAA,KAA8B;AAC3B,MAAA,IAAI,CAAC,YAAA,EAAc;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACjB;AACA,MAAA,QAAA,GAAW,IAAI,CAAA;AACf,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GAC3B;AAEA,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACrB,CAAC,IAAA,KAAkB;AACf,MAAA,IAAI,CAAC,QAAA,EAAU;AACX,QAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,MAChB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACb;AAEA,EAAA,MAAM,YAAA,GAAe,OAAA,GAAU,UAAA,CAAW,OAAA,EAAS,MAAM,CAAA,GAAI,IAAA;AAC7D,EAAA,MAAM,gBAAA,GAAmB,qBAAA,CAAsB,QAAA,EAAU,QAAA,EAAU,mBAAmB,cAAc,CAAA;AACpG,EAAA,MAAM,gBAAA,GAAmB,sBAAsB,SAAS,CAAA;AAExD,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,WAAW,SAAA,CAAU,cAAc,MAAM,IAAA,IAAS,SAAA,CAAU,cAAc,CAAA,KAA4B,MAAA;AAE5G,EAAA,MAAM,cAAA,GAAiB;AAAA,IACnB,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,WAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAc,EAAA,CAAG,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,IACjC,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACzC,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACvC,eAAA,EAAiB,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,QAAA;AAAA,IAC5C,aAAa,QAAA,GAAW,MAAA,CAAO,MAAM,MAAA,GAAS,MAAA,CAAO,SAAS,MAAA,CAAO,OAAA;AAAA,IACrE,OAAA,EAAS,WAAW,GAAA,GAAM;AAAA,GAC9B;AAEA,EAAA,MAAM,SAAA,GAAY;AAAA,IACd,IAAA,EAAM,CAAA;AAAA,IACN,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,IAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,IAC/B,KAAA,EAAO,eAAe,MAAA,CAAO,QAAA,CAAS,KAAK,OAAA,GAAU,MAAA,CAAO,SAAS,IAAA,CAAK;AAAA,GAC9E;AAGA,EAAA,MAAM,iBAAA,GAA6C;AAAA,IAC/C,IAAA,EAAM,UAAA;AAAA,IACN,iBAAA,EAAmB,QAAA;AAAA,IACnB,eAAA,EAAiB,QAAA;AAAA,IACjB,eAAA,EAAiB,IAAA;AAAA,IACjB,GAAG;AAAA,GACP;AACA,EAAA,IAAI,OAAO,MAAA,EAAW;AAClB,IAAA,iBAAA,CAAkB,EAAA,GAAK,EAAA;AACvB,IAAA,iBAAA,CAAkB,QAAA,GAAW,EAAA;AAAA,EACjC;AACA,EAAA,IAAI,WAAW,MAAA,EAAW;AACtB,IAAA,iBAAA,CAAkB,MAAA,GAAS,MAAA;AAAA,EAC/B;AACA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,iBAAA,CAAkB,cAAc,CAAA,GAAI,IAAA;AAAA,EACxC;AACA,EAAA,IAAI,SAAA,CAAU,eAAe,CAAA,EAAG;AAC5B,IAAA,iBAAA,CAAkB,eAAe,CAAA,GAAI,IAAA;AAAA,EACzC;AACA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,iBAAA,CAAkB,eAAe,CAAA,GAAI,IAAA;AAAA,EACzC;AAEA,EAAA,uBACI,IAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,YAAA,EAAc,gBAAA,EAC/B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,OAAA,CAAQ,SAAR,EAAgB,OAAA,EAAS,OAAO,SAAA,EAAW,EAAA,CAAG,SAAS,CAAA,EACpD,QAAA,kBAAA,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACG,SAAS,QAAA,GAAW,MAAA,GAAY,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,QACnD,QAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACP,mDAAA;AAAA,UACA,WAAW,yCAAA,GAA4C,gCAAA;AAAA,UACvD,WAAW,YAAA,GAAe,MAAA;AAAA,UAC1B;AAAA,SACJ;AAAA,QACA,KAAA,EAAO,cAAA;AAAA,QACN,GAAI,iBAAA;AAAA,QAEL,QAAA,EAAA;AAAA,0BAAA,GAAA,CAACA,QAAO,KAAA,EAAO,SAAA,EAAW,eAAe,CAAA,EACpC,QAAA,EAAA,YAAA,IAAgB,eAAe,EAAA,EACpC,CAAA;AAAA,0BACA,GAAA,CAAC,QAAK,KAAA,EAAO,EAAE,YAAY,EAAA,CAAG,MAAA,CAAO,QAAQ,GAAG,CAAC,GAAE,EAC/C,QAAA,kBAAA,GAAA,CAAC,gBAAa,IAAA,EAAM,EAAA,EAAI,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,CAAA,EAC/D;AAAA;AAAA;AAAA,KACJ,EACJ,CAAA;AAAA,oBACA,GAAA,CAAC,QAAQ,OAAA,EAAR,EAAgB,cAAW,aAAA,EAAc,IAAA,EAAK,QAAA,EAAS,KAAA,EAAM,OAAA,EAC1D,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAK,QAAA;AAAA,QACL,KAAA,EAAO,OAAA;AAAA,QACP,QAAA,EAAU,CAAC,IAAA,KAAS;AAChB,UAAA,YAAA,CAAa,IAA2B,CAAA;AAAA,QAC5C,CAAA;AAAA,QACA,MAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACR,EACJ;AAAA,GAAA,EACJ,CAAA;AAER,CAAA,EArIuB,gBAAA,CAAA;AA2IvB,IAAM,kCAAkB,MAAA,CAAA,CAAC;AAAA,EACrB,KAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA,EAAQ,UAAA;AAAA,EACR,QAAA;AAAA,EACA,QAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,EAAA;AAAA,EACA,IAAA,EAAM,KAAA;AAAA,EACN,SAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAG;AACP,CAAA,KAA4B;AACxB,EAAA,MAAM,iBAAiB,SAAA,EAAU;AACjC,EAAA,MAAM,SAAS,UAAA,IAAc,cAAA;AAE7B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAAyB,YAAA,IAAgB,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,CAAA;AAC7F,EAAA,MAAM,OAAA,GAAU,eAAgB,KAAA,IAAS,EAAE,OAAO,IAAA,EAAM,GAAA,EAAK,MAAK,GAAK,KAAA;AAEvE,EAAA,MAAM,aAAA,GAAkC,OAAA,CAAQ,KAAA,KAAU,IAAA,GAAO,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,GAAA,EAAK,OAAA,CAAQ,GAAA,EAAI,GAAI,IAAA;AAE9G,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACjB,CAAC,QAAA,KAA+B;AAC5B,MAAA,MAAM,IAAA,GAAuB;AAAA,QACzB,KAAA,EAAO,UAAU,KAAA,IAAS,IAAA;AAAA,QAC1B,GAAA,EAAK,UAAU,GAAA,IAAO;AAAA,OAC1B;AACA,MAAA,IAAI,CAAC,YAAA,EAAc;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACjB;AACA,MAAA,QAAA,GAAW,IAAI,CAAA;AACf,MAAA,IAAI,IAAA,CAAK,KAAA,KAAU,IAAA,IAAQ,IAAA,CAAK,QAAQ,IAAA,EAAM;AAC1C,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACjB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,cAAc,QAAQ;AAAA,GAC3B;AAEA,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACrB,CAAC,IAAA,KAAkB;AACf,MAAA,IAAI,CAAC,QAAA,EAAU;AACX,QAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,MAChB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACb;AAEA,EAAA,IAAI,YAAA,GAA8B,IAAA;AAClC,EAAA,IAAI,OAAA,CAAQ,UAAU,IAAA,EAAM;AACxB,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS,QAAQ,GAAA,KAAQ,IAAA,GAAO,WAAW,OAAA,CAAQ,GAAA,EAAK,MAAM,CAAA,GAAI,EAAA;AACxE,IAAA,YAAA,GAAe,CAAA,EAAG,QAAQ,CAAA,QAAA,EAAM,MAAM,CAAA,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,gBAAA,GAAmB,qBAAA,CAAsB,QAAA,EAAU,QAAA,EAAU,mBAAmB,cAAc,CAAA;AACpG,EAAA,MAAM,gBAAA,GAAmB,sBAAsB,SAAS,CAAA;AAExD,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,WAAW,SAAA,CAAU,cAAc,MAAM,IAAA,IAAS,SAAA,CAAU,cAAc,CAAA,KAA4B,MAAA;AAE5G,EAAA,MAAM,cAAA,GAAiB;AAAA,IACnB,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,WAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAc,EAAA,CAAG,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,IACjC,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACzC,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACvC,eAAA,EAAiB,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,QAAA;AAAA,IAC5C,aAAa,QAAA,GAAW,MAAA,CAAO,MAAM,MAAA,GAAS,MAAA,CAAO,SAAS,MAAA,CAAO,OAAA;AAAA,IACrE,OAAA,EAAS,WAAW,GAAA,GAAM;AAAA,GAC9B;AAEA,EAAA,MAAM,SAAA,GAAY;AAAA,IACd,IAAA,EAAM,CAAA;AAAA,IACN,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,IAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,IAC/B,KAAA,EAAO,eAAe,MAAA,CAAO,QAAA,CAAS,KAAK,OAAA,GAAU,MAAA,CAAO,SAAS,IAAA,CAAK;AAAA,GAC9E;AAEA,EAAA,MAAM,iBAAA,GAA6C;AAAA,IAC/C,IAAA,EAAM,UAAA;AAAA,IACN,iBAAA,EAAmB,QAAA;AAAA,IACnB,eAAA,EAAiB,QAAA;AAAA,IACjB,eAAA,EAAiB,IAAA;AAAA,IACjB,GAAG;AAAA,GACP;AACA,EAAA,IAAI,OAAO,MAAA,EAAW;AAClB,IAAA,iBAAA,CAAkB,EAAA,GAAK,EAAA;AACvB,IAAA,iBAAA,CAAkB,QAAA,GAAW,EAAA;AAAA,EACjC;AACA,EAAA,IAAI,WAAW,MAAA,EAAW;AACtB,IAAA,iBAAA,CAAkB,MAAA,GAAS,MAAA;AAAA,EAC/B;AACA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,iBAAA,CAAkB,cAAc,CAAA,GAAI,IAAA;AAAA,EACxC;AACA,EAAA,IAAI,SAAA,CAAU,eAAe,CAAA,EAAG;AAC5B,IAAA,iBAAA,CAAkB,eAAe,CAAA,GAAI,IAAA;AAAA,EACzC;AACA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,iBAAA,CAAkB,eAAe,CAAA,GAAI,IAAA;AAAA,EACzC;AAEA,EAAA,uBACI,IAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,YAAA,EAAc,gBAAA,EAC/B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,OAAA,CAAQ,SAAR,EAAgB,OAAA,EAAS,OAAO,SAAA,EAAW,EAAA,CAAG,SAAS,CAAA,EACpD,QAAA,kBAAA,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACG,SAAS,QAAA,GAAW,MAAA,GAAY,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,QACnD,QAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACP,mDAAA;AAAA,UACA,WAAW,yCAAA,GAA4C,gCAAA;AAAA,UACvD,WAAW,YAAA,GAAe,MAAA;AAAA,UAC1B;AAAA,SACJ;AAAA,QACA,KAAA,EAAO,cAAA;AAAA,QACN,GAAI,iBAAA;AAAA,QAEL,QAAA,EAAA;AAAA,0BAAA,GAAA,CAACA,QAAO,KAAA,EAAO,SAAA,EAAW,eAAe,CAAA,EACpC,QAAA,EAAA,YAAA,IAAgB,eAAe,EAAA,EACpC,CAAA;AAAA,0BACA,GAAA,CAAC,QAAK,KAAA,EAAO,EAAE,YAAY,EAAA,CAAG,MAAA,CAAO,QAAQ,GAAG,CAAC,GAAE,EAC/C,QAAA,kBAAA,GAAA,CAAC,gBAAa,IAAA,EAAM,EAAA,EAAI,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,CAAA,EAC/D;AAAA;AAAA;AAAA,KACJ,EACJ,CAAA;AAAA,oBACA,GAAA,CAAC,QAAQ,OAAA,EAAR,EAAgB,cAAW,mBAAA,EAAoB,IAAA,EAAK,QAAA,EAAS,KAAA,EAAM,OAAA,EAChE,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAK,OAAA;AAAA,QACL,KAAA,EAAO,aAAA;AAAA,QACP,QAAA,EAAU,CAAC,KAAA,KAAU;AACjB,UAAA,YAAA,CAAa,KAAyB,CAAA;AAAA,QAC1C,CAAA;AAAA,QACA,MAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACR,EACJ;AAAA,GAAA,EACJ,CAAA;AAER,CAAA,EAlJwB,iBAAA,CAAA;AAwJjB,IAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,cAAA,EAAgB;AAAA,EACpD,KAAA,EAAO;AACX,CAAC","file":"chunk-F7G6R373.js","sourcesContent":["'use client';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport { getLocalTimeZone } from '@internationalized/date';\nimport { useCallback, useState } from 'react';\nimport { Platform, Pressable, Text as RNText, View } from 'react-native';\nimport { useLocale } from '../../i18n/locale';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport type { DateRange } from '../Calendar';\nimport { Calendar } from '../Calendar';\nimport { Popover } from '../Popover';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Format a single CalendarDate for display using Intl. */\nfunction formatDate(date: CalendarDate, locale: string): string {\n try {\n return new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(date.toDate(getLocalTimeZone()));\n } catch {\n return `${date.year}-${String(date.month).padStart(2, '0')}-${String(date.day).padStart(2, '0')}`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Calendar icon\n// ---------------------------------------------------------------------------\n\nfunction CalendarIcon({ size = 16, color = 'currentColor' }: { size?: number; color?: string }) {\n const colors = useThemeColors();\n\n if (Platform.OS === 'web') {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M8 2v4M16 2v4M3 10h18M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z\" />\n </svg>\n );\n }\n\n const resolvedColor = color === 'currentColor' ? colors.semantic.text.muted : color;\n return (\n <RNText\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ fontSize: size, lineHeight: size, color: resolvedColor }}\n >\n {'📅'}\n </RNText>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type DatePickerProps = {\n value?: CalendarDate | null;\n defaultValue?: CalendarDate | null;\n onChange?: (date: CalendarDate | null) => void;\n\n /** BCP 47 locale; defaults from NoriProvider's i18n context. */\n locale?: string;\n\n /** Min/max selectable date. */\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n\n /** Custom unavailable predicate. */\n isDateUnavailable?: (date: CalendarDate) => boolean;\n\n /** First day of week override (0=Sun, 1=Mon, ...). Defaults from locale. */\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n /** Placeholder text shown when no value. */\n placeholder?: string;\n\n /** Disable the whole picker. */\n disabled?: boolean;\n\n // A11y / Field.Control hook props\n id?: string;\n name?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n\n testID?: string;\n className?: string;\n};\n\nexport type DateRangeValue = { start: CalendarDate | null; end: CalendarDate | null };\n\nexport type DatePickerRangeProps = {\n value?: DateRangeValue;\n defaultValue?: DateRangeValue;\n onChange?: (range: DateRangeValue) => void;\n\n locale?: string;\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n placeholder?: string;\n disabled?: boolean;\n\n id?: string;\n name?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n\n testID?: string;\n className?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Shared Calendar optional props builder\n// ---------------------------------------------------------------------------\n\ntype CalendarOptional = {\n minValue?: CalendarDate;\n maxValue?: CalendarDate;\n isDateUnavailable?: (date: CalendarDate) => boolean;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n};\n\nfunction buildCalendarOptional(\n minValue: CalendarDate | undefined,\n maxValue: CalendarDate | undefined,\n isDateUnavailable: ((date: CalendarDate) => boolean) | undefined,\n firstDayOfWeek: (0 | 1 | 2 | 3 | 4 | 5 | 6) | undefined\n): CalendarOptional {\n const out: CalendarOptional = {};\n if (minValue !== undefined) {\n out.minValue = minValue;\n }\n if (maxValue !== undefined) {\n out.maxValue = maxValue;\n }\n if (isDateUnavailable !== undefined) {\n out.isDateUnavailable = isDateUnavailable;\n }\n if (firstDayOfWeek !== undefined) {\n out.firstDayOfWeek = firstDayOfWeek;\n }\n return out;\n}\n\nfunction buildTriggerAriaProps(ariaProps: {\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n}): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (ariaProps['aria-labelledby'] !== undefined) {\n out['aria-labelledby'] = ariaProps['aria-labelledby'];\n }\n if (ariaProps['aria-describedby'] !== undefined) {\n out['aria-describedby'] = ariaProps['aria-describedby'];\n }\n if (ariaProps['aria-invalid'] !== undefined) {\n out['aria-invalid'] = ariaProps['aria-invalid'];\n }\n if (ariaProps['aria-required'] !== undefined) {\n out['aria-required'] = ariaProps['aria-required'];\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// DatePicker (single)\n//\n// Uses Popover.Trigger + asChild so the Popover correctly sets the trigger\n// ref for web positioning and handles outside-click dismissal.\n// The trigger renders as a Pressable (via Popover.Trigger asChild pattern).\n// ---------------------------------------------------------------------------\n\nconst DatePickerRoot = ({\n value,\n defaultValue,\n onChange,\n locale: localeProp,\n minValue,\n maxValue,\n isDateUnavailable,\n firstDayOfWeek,\n placeholder,\n disabled = false,\n id,\n name: _name,\n className,\n testID,\n ...ariaProps\n}: DatePickerProps) => {\n const providerLocale = useLocale();\n const locale = localeProp ?? providerLocale;\n\n const [open, setOpen] = useState(false);\n\n const isControlled = value !== undefined;\n const [inner, setInner] = useState<CalendarDate | null>(defaultValue ?? null);\n const current = isControlled ? (value ?? null) : inner;\n\n const handleChange = useCallback(\n (date: CalendarDate | null) => {\n if (!isControlled) {\n setInner(date);\n }\n onChange?.(date);\n setOpen(false);\n },\n [isControlled, onChange]\n );\n\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (!disabled) {\n setOpen(next);\n }\n },\n [disabled]\n );\n\n const displayValue = current ? formatDate(current, locale) : null;\n const calendarOptional = buildCalendarOptional(minValue, maxValue, isDateUnavailable, firstDayOfWeek);\n const triggerAriaProps = buildTriggerAriaProps(ariaProps);\n\n const colors = useThemeColors();\n const hasError = ariaProps['aria-invalid'] === true || (ariaProps['aria-invalid'] as unknown as string) === 'true';\n\n const pressableStyle = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n borderWidth: 1,\n borderRadius: px(colors.radius.md),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: hasError ? colors.color.danger : colors.semantic.border.default,\n opacity: disabled ? 0.6 : 1,\n };\n\n const textStyle = {\n flex: 1,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: displayValue ? colors.semantic.text.default : colors.semantic.text.muted,\n };\n\n // Extra a11y props for the trigger\n const triggerExtraProps: Record<string, unknown> = {\n role: 'combobox',\n accessibilityRole: 'button',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n ...triggerAriaProps,\n };\n if (id !== undefined) {\n triggerExtraProps.id = id;\n triggerExtraProps.nativeID = id;\n }\n if (testID !== undefined) {\n triggerExtraProps.testID = testID;\n }\n if (hasError) {\n triggerExtraProps['aria-invalid'] = true;\n }\n if (ariaProps['aria-required']) {\n triggerExtraProps['aria-required'] = true;\n }\n if (disabled) {\n triggerExtraProps['aria-disabled'] = true;\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild={false} className={cn(className)}>\n <Pressable\n onPress={disabled ? undefined : () => setOpen(!open)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center rounded-md border px-3 py-2',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={pressableStyle}\n {...(triggerExtraProps as Record<string, unknown>)}\n >\n <RNText style={textStyle} numberOfLines={1}>\n {displayValue ?? placeholder ?? ''}\n </RNText>\n <View style={{ marginLeft: px(colors.spacing['2']) }}>\n <CalendarIcon size={16} color={colors.semantic.text.muted} />\n </View>\n </Pressable>\n </Popover.Trigger>\n <Popover.Content aria-label=\"Date picker\" side=\"bottom\" align=\"start\">\n <Calendar\n mode=\"single\"\n value={current}\n onChange={(date) => {\n handleChange(date as CalendarDate | null);\n }}\n locale={locale}\n {...calendarOptional}\n />\n </Popover.Content>\n </Popover>\n );\n};\n\n// ---------------------------------------------------------------------------\n// DatePicker.Range\n// ---------------------------------------------------------------------------\n\nconst DatePickerRange = ({\n value,\n defaultValue,\n onChange,\n locale: localeProp,\n minValue,\n maxValue,\n isDateUnavailable,\n firstDayOfWeek,\n placeholder,\n disabled = false,\n id,\n name: _name,\n className,\n testID,\n ...ariaProps\n}: DatePickerRangeProps) => {\n const providerLocale = useLocale();\n const locale = localeProp ?? providerLocale;\n\n const [open, setOpen] = useState(false);\n\n const isControlled = value !== undefined;\n const [inner, setInner] = useState<DateRangeValue>(defaultValue ?? { start: null, end: null });\n const current = isControlled ? (value ?? { start: null, end: null }) : inner;\n\n const calendarValue: DateRange | null = current.start !== null ? { start: current.start, end: current.end } : null;\n\n const handleChange = useCallback(\n (calRange: DateRange | null) => {\n const next: DateRangeValue = {\n start: calRange?.start ?? null,\n end: calRange?.end ?? null,\n };\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n if (next.start !== null && next.end !== null) {\n setOpen(false);\n }\n },\n [isControlled, onChange]\n );\n\n const handleOpenChange = useCallback(\n (next: boolean) => {\n if (!disabled) {\n setOpen(next);\n }\n },\n [disabled]\n );\n\n let displayValue: string | null = null;\n if (current.start !== null) {\n const startStr = formatDate(current.start, locale);\n const endStr = current.end !== null ? formatDate(current.end, locale) : '';\n displayValue = `${startStr} – ${endStr}`;\n }\n\n const calendarOptional = buildCalendarOptional(minValue, maxValue, isDateUnavailable, firstDayOfWeek);\n const triggerAriaProps = buildTriggerAriaProps(ariaProps);\n\n const colors = useThemeColors();\n const hasError = ariaProps['aria-invalid'] === true || (ariaProps['aria-invalid'] as unknown as string) === 'true';\n\n const pressableStyle = {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n borderWidth: 1,\n borderRadius: px(colors.radius.md),\n paddingHorizontal: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['2']),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: hasError ? colors.color.danger : colors.semantic.border.default,\n opacity: disabled ? 0.6 : 1,\n };\n\n const textStyle = {\n flex: 1,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: displayValue ? colors.semantic.text.default : colors.semantic.text.muted,\n };\n\n const triggerExtraProps: Record<string, unknown> = {\n role: 'combobox',\n accessibilityRole: 'button',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n ...triggerAriaProps,\n };\n if (id !== undefined) {\n triggerExtraProps.id = id;\n triggerExtraProps.nativeID = id;\n }\n if (testID !== undefined) {\n triggerExtraProps.testID = testID;\n }\n if (hasError) {\n triggerExtraProps['aria-invalid'] = true;\n }\n if (ariaProps['aria-required']) {\n triggerExtraProps['aria-required'] = true;\n }\n if (disabled) {\n triggerExtraProps['aria-disabled'] = true;\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild={false} className={cn(className)}>\n <Pressable\n onPress={disabled ? undefined : () => setOpen(!open)}\n disabled={disabled}\n className={cn(\n 'flex-row items-center rounded-md border px-3 py-2',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={pressableStyle}\n {...(triggerExtraProps as Record<string, unknown>)}\n >\n <RNText style={textStyle} numberOfLines={1}>\n {displayValue ?? placeholder ?? ''}\n </RNText>\n <View style={{ marginLeft: px(colors.spacing['2']) }}>\n <CalendarIcon size={16} color={colors.semantic.text.muted} />\n </View>\n </Pressable>\n </Popover.Trigger>\n <Popover.Content aria-label=\"Date range picker\" side=\"bottom\" align=\"start\">\n <Calendar\n mode=\"range\"\n value={calendarValue}\n onChange={(range) => {\n handleChange(range as DateRange | null);\n }}\n locale={locale}\n {...calendarOptional}\n />\n </Popover.Content>\n </Popover>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public export\n// ---------------------------------------------------------------------------\n\nexport const DatePicker = Object.assign(DatePickerRoot, {\n Range: DatePickerRange,\n});\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Select } from './chunk-UJ5KFRDE.js';
|
|
2
1
|
import { useTranslation } from './chunk-MJ4AGXS7.js';
|
|
2
|
+
import { Select } from './chunk-UJ5KFRDE.js';
|
|
3
3
|
import { useThemeColors } from './chunk-R5JMDDCB.js';
|
|
4
4
|
import { __name } from './chunk-WCQVDF3K.js';
|
|
5
5
|
import { today, getLocalTimeZone, CalendarDate, startOfMonth } from '@internationalized/date';
|
|
@@ -1682,5 +1682,5 @@ var Calendar = CalendarRoot;
|
|
|
1682
1682
|
Calendar.Caption = CalendarCaption;
|
|
1683
1683
|
|
|
1684
1684
|
export { Calendar, LocaleProvider, detectLocale, useCalendarCaption, useLocale };
|
|
1685
|
-
//# sourceMappingURL=chunk-
|
|
1686
|
-
//# sourceMappingURL=chunk-
|
|
1685
|
+
//# sourceMappingURL=chunk-ND7MRYW7.js.map
|
|
1686
|
+
//# sourceMappingURL=chunk-ND7MRYW7.js.map
|