@nocoo/basalt 2.2.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/ai/COMPATIBILITY.md +11 -1
- package/ai/DESIGN.md +398 -0
- package/ai/INTEGRATION.md +255 -129
- package/ai/RECIPES.md +51 -26
- package/ai/USAGE.md +4 -4
- package/ai/registry.json +3018 -271
- package/dist/charts/config.d.ts +11 -11
- package/dist/charts/config.js +4 -4
- package/dist/charts/config.js.map +1 -1
- package/dist/charts/date-navigation.js +10 -10
- package/dist/charts/date-navigation.js.map +1 -1
- package/dist/charts/donut.js +1 -1
- package/dist/charts/donut.js.map +1 -1
- package/dist/charts/frame.d.ts +1 -1
- package/dist/charts/frame.js +4 -4
- package/dist/charts/frame.js.map +1 -1
- package/dist/charts/gauge.js +5 -5
- package/dist/charts/gauge.js.map +1 -1
- package/dist/charts/heatmap-calendar.js +11 -11
- package/dist/charts/heatmap-calendar.js.map +1 -1
- package/dist/charts/heatmap-matrix.js +8 -8
- package/dist/charts/heatmap-matrix.js.map +1 -1
- package/dist/charts/item-list.js +1 -1
- package/dist/charts/item-list.js.map +1 -1
- package/dist/charts/legend.js +19 -19
- package/dist/charts/legend.js.map +1 -1
- package/dist/charts/palette.js +2 -2
- package/dist/charts/palette.js.map +1 -1
- package/dist/charts/slot-bar.js +2 -2
- package/dist/charts/slot-bar.js.map +1 -1
- package/dist/charts/sparkline.js +38 -23
- package/dist/charts/sparkline.js.map +1 -1
- package/dist/charts/stat-card.d.ts +2 -2
- package/dist/charts/stat-card.js +61 -58
- package/dist/charts/stat-card.js.map +1 -1
- package/dist/charts/timeline.js +18 -9
- package/dist/charts/timeline.js.map +1 -1
- package/dist/charts/tooltip.js +16 -16
- package/dist/charts/tooltip.js.map +1 -1
- package/dist/components/accordion.js +1 -1
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/alert-dialog.js +4 -4
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/app-header.js +8 -8
- package/dist/components/app-header.js.map +1 -1
- package/dist/components/app-shell.js +1 -1
- package/dist/components/app-shell.js.map +1 -1
- package/dist/components/approval-card.d.ts +13 -0
- package/dist/components/approval-card.js +161 -0
- package/dist/components/approval-card.js.map +1 -0
- package/dist/components/avatar.d.ts +12 -0
- package/dist/components/avatar.js +39 -18
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/badge.js +8 -8
- package/dist/components/badge.js.map +1 -1
- package/dist/components/banner.d.ts +2 -2
- package/dist/components/banner.js +9 -8
- package/dist/components/banner.js.map +1 -1
- package/dist/components/basalt-mark.js +1 -1
- package/dist/components/basalt-mark.js.map +1 -1
- package/dist/components/battery-meter.js +5 -5
- package/dist/components/battery-meter.js.map +1 -1
- package/dist/components/breadcrumbs.js +6 -6
- package/dist/components/breadcrumbs.js.map +1 -1
- package/dist/components/button.js +10 -10
- package/dist/components/button.js.map +1 -1
- package/dist/components/chat-bubble.js +4 -3
- package/dist/components/chat-bubble.js.map +1 -1
- package/dist/components/chat-composer.d.ts +21 -3
- package/dist/components/chat-composer.js +126 -60
- package/dist/components/chat-composer.js.map +1 -1
- package/dist/components/chat-header.js +6 -6
- package/dist/components/chat-header.js.map +1 -1
- package/dist/components/chat-inbox.js +34 -30
- package/dist/components/chat-inbox.js.map +1 -1
- package/dist/components/chat-markdown.d.ts +8 -0
- package/dist/components/chat-markdown.js +122 -0
- package/dist/components/chat-markdown.js.map +1 -0
- package/dist/components/chat-message.d.ts +26 -0
- package/dist/components/chat-message.js +145 -0
- package/dist/components/chat-message.js.map +1 -0
- package/dist/components/checkbox.js +11 -11
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/clipboard-text.js +3 -3
- package/dist/components/clipboard-text.js.map +1 -1
- package/dist/components/code.d.ts +22 -20
- package/dist/components/code.js +94 -32
- package/dist/components/code.js.map +1 -1
- package/dist/components/collapsible.js +8 -4
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/command-palette.js +73 -47
- package/dist/components/command-palette.js.map +1 -1
- package/dist/components/context-cards.d.ts +15 -0
- package/dist/components/context-cards.js +148 -0
- package/dist/components/context-cards.js.map +1 -0
- package/dist/components/context-menu.d.ts +1 -1
- package/dist/components/context-menu.js +18 -14
- package/dist/components/context-menu.js.map +1 -1
- package/dist/components/data-table.d.ts +14 -2
- package/dist/components/data-table.js +185 -135
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +13 -13
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/delete-resource.js +1 -1
- package/dist/components/delete-resource.js.map +1 -1
- package/dist/components/description-list.js +3 -3
- package/dist/components/description-list.js.map +1 -1
- package/dist/components/dialog.d.ts +2 -2
- package/dist/components/dialog.js +8 -8
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/diff-table.d.ts +15 -0
- package/dist/components/diff-table.js +151 -0
- package/dist/components/diff-table.js.map +1 -0
- package/dist/components/dock.js +2 -2
- package/dist/components/dock.js.map +1 -1
- package/dist/components/dropdown-menu.js +23 -18
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/editable-nav-item.js +63 -58
- package/dist/components/editable-nav-item.js.map +1 -1
- package/dist/components/empty.js +6 -6
- package/dist/components/empty.js.map +1 -1
- package/dist/components/fab.js +1 -1
- package/dist/components/fab.js.map +1 -1
- package/dist/components/field.js +3 -3
- package/dist/components/field.js.map +1 -1
- package/dist/components/file-dropzone.js +7 -7
- package/dist/components/file-dropzone.js.map +1 -1
- package/dist/components/filter-bar.js +6 -6
- package/dist/components/filter-bar.js.map +1 -1
- package/dist/components/flow.js +4 -3
- package/dist/components/flow.js.map +1 -1
- package/dist/components/grid.d.ts +3 -1
- package/dist/components/grid.js +15 -8
- package/dist/components/grid.js.map +1 -1
- package/dist/components/hover-card.js +1 -1
- package/dist/components/hover-card.js.map +1 -1
- package/dist/components/icon-picker.d.ts +8 -2
- package/dist/components/icon-picker.js +75 -47
- package/dist/components/icon-picker.js.map +1 -1
- package/dist/components/inline-editable.js +6 -6
- package/dist/components/inline-editable.js.map +1 -1
- package/dist/components/input-area.js +3 -3
- package/dist/components/input-area.js.map +1 -1
- package/dist/components/input-group.js +5 -5
- package/dist/components/input-group.js.map +1 -1
- package/dist/components/input.js +4 -4
- package/dist/components/input.js.map +1 -1
- package/dist/components/label.js +3 -3
- package/dist/components/label.js.map +1 -1
- package/dist/components/layer-card.d.ts +9 -4
- package/dist/components/layer-card.js +72 -67
- package/dist/components/layer-card.js.map +1 -1
- package/dist/components/loader.d.ts +16 -10
- package/dist/components/loader.js +46 -53
- package/dist/components/loader.js.map +1 -1
- package/dist/components/loading-screen.js +3 -3
- package/dist/components/loading-screen.js.map +1 -1
- package/dist/components/menu-bar.js +32 -27
- package/dist/components/menu-bar.js.map +1 -1
- package/dist/components/meter.d.ts +5 -5
- package/dist/components/meter.js +25 -12
- package/dist/components/meter.js.map +1 -1
- package/dist/components/multi-select.js +66 -62
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/navigation-menu.d.ts +2 -2
- package/dist/components/navigation-menu.js +22 -8
- package/dist/components/navigation-menu.js.map +1 -1
- package/dist/components/overlay.js +2 -2
- package/dist/components/overlay.js.map +1 -1
- package/dist/components/page-header.d.ts +3 -1
- package/dist/components/page-header.js +12 -12
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/pagination.js +3 -3
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/popover.js +18 -23
- package/dist/components/popover.js.map +1 -1
- package/dist/components/prompt-bar.d.ts +16 -0
- package/dist/components/prompt-bar.js +49 -0
- package/dist/components/prompt-bar.js.map +1 -0
- package/dist/components/radio.js +9 -9
- package/dist/components/radio.js.map +1 -1
- package/dist/components/recommendation-card.d.ts +13 -0
- package/dist/components/recommendation-card.js +123 -0
- package/dist/components/recommendation-card.js.map +1 -0
- package/dist/components/resource-list.js +1 -1
- package/dist/components/resource-list.js.map +1 -1
- package/dist/components/responsive-master-detail.js +4 -4
- package/dist/components/responsive-master-detail.js.map +1 -1
- package/dist/components/scroll-area.js +3 -3
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/section-rule.d.ts +5 -3
- package/dist/components/section-rule.js +12 -12
- package/dist/components/section-rule.js.map +1 -1
- package/dist/components/segment-control.js +3 -3
- package/dist/components/segment-control.js.map +1 -1
- package/dist/components/select.js +47 -32
- package/dist/components/select.js.map +1 -1
- package/dist/components/sensitive-input.js +17 -19
- package/dist/components/sensitive-input.js.map +1 -1
- package/dist/components/sheet.d.ts +4 -4
- package/dist/components/sheet.js +11 -10
- package/dist/components/sheet.js.map +1 -1
- package/dist/components/sidebar.js +149 -137
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/skeleton-line.d.ts +1 -1
- package/dist/components/skeleton-line.js +2 -2
- package/dist/components/skeleton-line.js.map +1 -1
- package/dist/components/slider.js +2 -2
- package/dist/components/slider.js.map +1 -1
- package/dist/components/stat-strip.js +5 -4
- package/dist/components/stat-strip.js.map +1 -1
- package/dist/components/switch.js +6 -6
- package/dist/components/switch.js.map +1 -1
- package/dist/components/table-of-contents.js +5 -5
- package/dist/components/table-of-contents.js.map +1 -1
- package/dist/components/table-pager.js +2 -2
- package/dist/components/table-pager.js.map +1 -1
- package/dist/components/table.d.ts +39 -2
- package/dist/components/table.js +48 -17
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.js +7 -6
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tag-badge.d.ts +10 -10
- package/dist/components/tag-badge.js +11 -11
- package/dist/components/tag-badge.js.map +1 -1
- package/dist/components/tag-color-picker.d.ts +8 -1
- package/dist/components/tag-color-picker.js +33 -25
- package/dist/components/tag-color-picker.js.map +1 -1
- package/dist/components/text.js +5 -5
- package/dist/components/text.js.map +1 -1
- package/dist/components/theme-toggle.js +1 -1
- package/dist/components/theme-toggle.js.map +1 -1
- package/dist/components/thinking.d.ts +16 -0
- package/dist/components/thinking.js +85 -0
- package/dist/components/thinking.js.map +1 -0
- package/dist/components/toast.js +25 -20
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle-group.js +6 -5
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle.js +6 -6
- package/dist/components/toggle.js.map +1 -1
- package/dist/components/tool-chips.d.ts +12 -0
- package/dist/components/tool-chips.js +138 -0
- package/dist/components/tool-chips.js.map +1 -0
- package/dist/components/toolbar.js +3 -3
- package/dist/components/toolbar.js.map +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/typeahead-field.js +59 -56
- package/dist/components/typeahead-field.js.map +1 -1
- package/dist/components/upload-queue.js +15 -14
- package/dist/components/upload-queue.js.map +1 -1
- package/dist/models/agent-feedback.d.ts +44 -0
- package/dist/models/agent-feedback.js +28 -0
- package/dist/models/agent-feedback.js.map +1 -0
- package/dist/models/avatar.d.ts +2 -0
- package/dist/models/avatar.js +15 -0
- package/dist/models/avatar.js.map +1 -0
- package/dist/models/code.d.ts +6 -0
- package/dist/models/code.js +24 -0
- package/dist/models/code.js.map +1 -0
- package/dist/models/context-cards.d.ts +13 -0
- package/dist/models/context-cards.js +17 -0
- package/dist/models/context-cards.js.map +1 -0
- package/dist/models/diff-table.d.ts +12 -0
- package/dist/models/diff-table.js +9 -0
- package/dist/models/diff-table.js.map +1 -0
- package/dist/models/recommendation.d.ts +26 -0
- package/dist/models/recommendation.js +23 -0
- package/dist/models/recommendation.js.map +1 -0
- package/dist/styles/base.css +14 -2
- package/dist/styles/standalone.css +1901 -943
- package/dist/styles/tailwind.css +180 -13
- package/dist/styles/tokens.css +681 -20
- package/dist/utils/cn.js +25 -4
- package/dist/utils/cn.js.map +1 -1
- package/dist/utils/control-surface.d.ts +1 -1
- package/dist/utils/control-surface.js +1 -1
- package/dist/utils/control-surface.js.map +1 -1
- package/dist/utils/navigation.d.ts +3 -0
- package/dist/utils/navigation.js +8 -0
- package/dist/utils/navigation.js.map +1 -0
- package/dist/utils/selection-indicator.d.ts +1 -1
- package/dist/utils/selection-indicator.js +49 -72
- package/dist/utils/selection-indicator.js.map +1 -1
- package/dist/utils/use-hover-highlight.d.ts +4 -0
- package/dist/utils/use-hover-highlight.js +82 -0
- package/dist/utils/use-hover-highlight.js.map +1 -0
- package/dist/viewmodels/use-approval-card.d.ts +20 -0
- package/dist/viewmodels/use-approval-card.js +83 -0
- package/dist/viewmodels/use-approval-card.js.map +1 -0
- package/dist/viewmodels/use-chat-composer.d.ts +16 -0
- package/dist/viewmodels/use-chat-composer.js +34 -0
- package/dist/viewmodels/use-chat-composer.js.map +1 -0
- package/dist/viewmodels/use-chat-message.d.ts +16 -0
- package/dist/viewmodels/use-chat-message.js +26 -0
- package/dist/viewmodels/use-chat-message.js.map +1 -0
- package/dist/viewmodels/use-code-block.d.ts +8 -0
- package/dist/viewmodels/use-code-block.js +38 -0
- package/dist/viewmodels/use-code-block.js.map +1 -0
- package/dist/viewmodels/use-context-cards.d.ts +17 -0
- package/dist/viewmodels/use-context-cards.js +18 -0
- package/dist/viewmodels/use-context-cards.js.map +1 -0
- package/dist/viewmodels/use-diff-table.d.ts +16 -0
- package/dist/viewmodels/use-diff-table.js +42 -0
- package/dist/viewmodels/use-diff-table.js.map +1 -0
- package/dist/viewmodels/use-loader.d.ts +4 -0
- package/dist/viewmodels/use-loader.js +22 -0
- package/dist/viewmodels/use-loader.js.map +1 -0
- package/dist/viewmodels/use-recommendation-card.d.ts +17 -0
- package/dist/viewmodels/use-recommendation-card.js +41 -0
- package/dist/viewmodels/use-recommendation-card.js.map +1 -0
- package/dist/viewmodels/use-thinking.d.ts +13 -0
- package/dist/viewmodels/use-thinking.js +18 -0
- package/dist/viewmodels/use-thinking.js.map +1 -0
- package/dist/viewmodels/use-tool-chips.d.ts +10 -0
- package/dist/viewmodels/use-tool-chips.js +20 -0
- package/dist/viewmodels/use-tool-chips.js.map +1 -0
- package/package.json +28 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.js","names":["rank","value","compareUnknown","leftRank","left","rightRank","right","a","b","leftStr","rightStr","primitiveKey","row","key","symbols","type","index","isInstanceKey","isRefRow","filterSource","column","rendered","publicSelectId","requested","getRowId","DataTable","controlledSort","ariaLabel","ariaDescribedBy","uncontrolledSort","setUncontrolledSort","useState","defaultSort","sort","requestSort","next","onSortChange","uncontrolledSelected","setUncontrolledSelected","defaultSelected","uncontrolledPage","setUncontrolledPage","defaultPage","rowIds","useRef","rowSeq","assignedKeys","lastOwner","lastKeyByCanonical","lastDupsByCanonical","symbolKeys","query","filter","rows","useMemo","identityOf","stored","canonicalOf","raw","used","nextLastKey","nextDups","nextAssigned","nextOwner","rememberKey","objectRow","list","canonical","dups","counts","pending","data","occurrence","item","previous","keyed","reserved","isRepeat","candidate","inherited","n","filtered","manualFiltering","columns","manualSorting","cmp","keys","selectable","selected","onSelectedChange","selectedIds","setSelectedIds","useCallback","rowCount","manualPagination","total","pageCount","pageSize","resolvedPage","page","setResolvedPage","onPageChange","lastCorrection","loading","correction","paged","colCount","toggleSelected","multiple","id","Table","cn","className","TableHeader","TableRow","TableHead","TableBody","TableCell","SkeletonLine","error","onRetry","Button","retryLabel","empty","isSelected","selectId","cell","Pagination"],"sources":["../../src/components/data-table.tsx"],"sourcesContent":["import {\n\ttype CSSProperties,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./button\";\nimport { Pagination } from \"./pagination\";\nimport { SkeletonLine } from \"./skeleton-line\";\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"./table\";\n\nexport type DataTableColumn<T> = {\n\tid: string;\n\theader: string;\n\taccessor: (row: T) => ReactNode;\n\tsortValue?: (row: T) => string | number | bigint;\n\tfilterValue?: (row: T) => string | number | bigint;\n\t/** Rich header content; header remains the plain text accessible name. */\n\theaderContent?: ReactNode;\n\t/** Whether the header changes sorting. @default true */\n\tsortable?: boolean;\n\t/** Width of the header and its column. */\n\twidth?: CSSProperties[\"width\"];\n\t/** Classes applied to the header cell. */\n\theaderClassName?: string;\n\t/** Classes applied to each data cell. */\n\tcellClassName?: string;\n};\n\nexport type DataTableSort = { id: string; dir: \"asc\" | \"desc\" };\n\nfunction rank(value: unknown): number {\n\tif (value === Number.NEGATIVE_INFINITY) {\n\t\treturn 0;\n\t}\n\tif (typeof value === \"bigint\" || (typeof value === \"number\" && Number.isFinite(value))) {\n\t\treturn 1;\n\t}\n\tif (value === Number.POSITIVE_INFINITY) {\n\t\treturn 2;\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn 3;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn 4;\n\t}\n\treturn 5;\n}\n\nfunction compareUnknown(left: unknown, right: unknown): number {\n\tconst leftRank = rank(left);\n\tconst rightRank = rank(right);\n\tif (leftRank !== rightRank) {\n\t\treturn leftRank - rightRank;\n\t}\n\tif (leftRank === 1) {\n\t\tconst a = left as number | bigint;\n\t\tconst b = right as number | bigint;\n\t\treturn a < b ? -1 : a > b ? 1 : 0;\n\t}\n\tconst leftStr = String(left);\n\tconst rightStr = String(right);\n\treturn leftStr < rightStr ? -1 : leftStr > rightStr ? 1 : 0;\n}\n\nfunction primitiveKey(\n\trow: unknown,\n\tindex: number,\n\tsymbols: Map<symbol, string>,\n\tseq: { current: number },\n): string {\n\tif (row === null) {\n\t\treturn \"prim:null\";\n\t}\n\tif (row === undefined) {\n\t\treturn \"prim:undefined\";\n\t}\n\tif (typeof row === \"symbol\") {\n\t\tlet key = symbols.get(row);\n\t\tif (!key) {\n\t\t\tkey = `prim:symbol:${seq.current++}`;\n\t\t\tsymbols.set(row, key);\n\t\t}\n\t\treturn key;\n\t}\n\tconst type = typeof row;\n\tif (type === \"number\") {\n\t\tif (Object.is(row, -0)) {\n\t\t\treturn \"prim:number:-0\";\n\t\t}\n\t\treturn `prim:number:${String(row)}`;\n\t}\n\tif (type === \"string\" || type === \"bigint\" || type === \"boolean\") {\n\t\treturn `prim:${type}:${String(row)}`;\n\t}\n\treturn `prim:${index}`;\n}\n\nfunction isInstanceKey(key: string) {\n\treturn key.startsWith(\"dup:\") || key.startsWith(\"gen:\");\n}\n\nfunction isRefRow(row: unknown): row is object {\n\treturn typeof row === \"function\" || (typeof row === \"object\" && row !== null);\n}\n\nfunction filterSource<T>(column: DataTableColumn<T>, row: T): string {\n\tif (column.filterValue) {\n\t\treturn String(column.filterValue(row));\n\t}\n\tif (column.sortValue) {\n\t\treturn String(column.sortValue(row));\n\t}\n\tconst rendered = column.accessor(row);\n\tif (\n\t\ttypeof rendered === \"string\" ||\n\t\ttypeof rendered === \"number\" ||\n\t\ttypeof rendered === \"bigint\"\n\t) {\n\t\treturn String(rendered);\n\t}\n\treturn \"\";\n}\n\nfunction publicSelectId<T>(\n\trow: T,\n\tindex: number,\n\tkey: string,\n\tgetRowId?: (row: T, index: number) => string,\n): string {\n\tconst requested = getRowId?.(row, index);\n\tif (requested !== undefined) {\n\t\treturn requested;\n\t}\n\tif (isRefRow(row) && \"id\" in row && row.id != null) {\n\t\treturn String(row.id);\n\t}\n\treturn key;\n}\n\nexport type DataTableProps<T = unknown> = {\n\t/**\n\t * Rows to render.\n\t */\n\tdata: T[];\n\t/**\n\t * Column descriptors.\n\t */\n\tcolumns: DataTableColumn<T>[];\n\t/**\n\t * Filter query matched against column values.\n\t * @default \"\"\n\t */\n\tfilter?: string;\n\t/**\n\t * Replace rows with a loading placeholder.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Copy shown when no rows remain after filtering.\n\t * @default \"No results\"\n\t */\n\tempty?: ReactNode;\n\t/**\n\t * Controlled selected row ids.\n\t */\n\tselected?: string[];\n\t/**\n\t * Uncontrolled initial selected row ids.\n\t */\n\tdefaultSelected?: string[];\n\t/**\n\t * Called when selected row ids change.\n\t */\n\tonSelectedChange?: (ids: string[]) => void;\n\t/**\n\t * Allow more than one selected row.\n\t * @default false\n\t */\n\tmultiple?: boolean;\n\t/**\n\t * Controlled 1-based page. Used with pageSize.\n\t */\n\tpage?: number;\n\t/**\n\t * Uncontrolled initial page.\n\t * @default 1\n\t */\n\tdefaultPage?: number;\n\t/**\n\t * Rows per page. Omit to show every row.\n\t */\n\tpageSize?: number;\n\t/**\n\t * Called when the page changes.\n\t */\n\tonPageChange?: (page: number) => void;\n\t/**\n\t * Stable id for a row.\n\t */\n\tgetRowId?: (row: T, index: number) => string;\n\t/**\n\t * Additional classes for the table.\n\t */\n\tclassName?: string;\n\t/** Controlled sorting. null explicitly disables sorting. */\n\tsort?: DataTableSort | null;\n\t/** Initial sorting for uncontrolled usage. @default null */\n\tdefaultSort?: DataTableSort | null;\n\t/** Reports header sorting requests. Controlled values change only when the caller accepts. */\n\tonSortChange?: (sort: DataTableSort | null) => void;\n\t/** Caller supplies sorted rows; headers only report requests. @default false */\n\tmanualSorting?: boolean;\n\t/** Caller supplies the current page; rows are never sliced again. Use stable row IDs across pages. @default false */\n\tmanualPagination?: boolean;\n\t/** Caller supplies filtered rows; filter is not applied locally. @default false */\n\tmanualFiltering?: boolean;\n\t/** Total matching row count in manualPagination mode; defaults to data.length. */\n\ttotal?: number;\n\t/** Error content replacing rows after loading finishes. */\n\terror?: ReactNode;\n\t/** Optional retry action for an error. The caller owns the request. */\n\tonRetry?: () => void;\n\t/** Retry button text. @default \"Try again\" */\n\tretryLabel?: string;\n\t/** Accessible table name. @default \"Data table\" */\n\t\"aria-label\"?: string;\n\t/** ID of additional table instructions or summary. */\n\t\"aria-describedby\"?: string;\n};\n\nexport function DataTable<T>({\n\tdata,\n\tcolumns,\n\tfilter = \"\",\n\tloading = false,\n\tempty = \"No results\",\n\tselected,\n\tdefaultSelected,\n\tonSelectedChange,\n\tmultiple = false,\n\tpage,\n\tdefaultPage = 1,\n\tpageSize,\n\tonPageChange,\n\tgetRowId,\n\tclassName,\n\tsort: controlledSort,\n\tdefaultSort = null,\n\tonSortChange,\n\tmanualSorting = false,\n\tmanualPagination = false,\n\tmanualFiltering = false,\n\ttotal,\n\terror,\n\tonRetry,\n\tretryLabel = \"Try again\",\n\t\"aria-label\": ariaLabel = \"Data table\",\n\t\"aria-describedby\": ariaDescribedBy,\n}: DataTableProps<T>) {\n\tconst [uncontrolledSort, setUncontrolledSort] = useState<DataTableSort | null>(defaultSort);\n\tconst sort = controlledSort === undefined ? uncontrolledSort : controlledSort;\n\tconst requestSort = (next: DataTableSort) => {\n\t\tif (controlledSort === undefined) setUncontrolledSort(next);\n\t\tonSortChange?.(next);\n\t};\n\tconst [uncontrolledSelected, setUncontrolledSelected] = useState<string[]>(defaultSelected ?? []);\n\tconst [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);\n\tconst rowIds = useRef(new WeakMap<object, string>());\n\tconst rowSeq = useRef(0);\n\tconst assignedKeys = useRef(new WeakMap<object, string[]>());\n\tconst lastOwner = useRef(new Map<string, object>());\n\tconst lastKeyByCanonical = useRef(new Map<string, string>());\n\tconst lastDupsByCanonical = useRef(new Map<string, string[]>());\n\tconst symbolKeys = useRef(new Map<symbol, string>());\n\tconst query = filter.trim().toLowerCase();\n\n\tconst rows = useMemo(() => {\n\t\tconst identityOf = (row: object) => {\n\t\t\tlet stored = rowIds.current.get(row);\n\t\t\tif (!stored) {\n\t\t\t\tstored = `basalt-row-${rowSeq.current++}`;\n\t\t\t\trowIds.current.set(row, stored);\n\t\t\t}\n\t\t\treturn stored;\n\t\t};\n\t\tconst canonicalOf = (row: T, index: number) => {\n\t\t\tconst requested = getRowId?.(row, index);\n\t\t\tif (requested !== undefined) {\n\t\t\t\treturn `get:${requested}`;\n\t\t\t}\n\t\t\tif (isRefRow(row) && \"id\" in row) {\n\t\t\t\tconst raw = (row as { id: unknown }).id;\n\t\t\t\tif (raw != null) {\n\t\t\t\t\treturn `id:${String(raw)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst used = new Set<string>();\n\t\tconst nextLastKey = new Map<string, string>();\n\t\tconst nextDups = new Map<string, string[]>();\n\t\tconst nextAssigned = new Map<object, string[]>();\n\t\tconst nextOwner = new Map<string, object>();\n\t\tconst rememberKey = (row: T, index: number, key: string, objectRow: object | null) => {\n\t\t\tif (!objectRow) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst list = nextAssigned.get(objectRow) ?? [];\n\t\t\tlist.push(key);\n\t\t\tnextAssigned.set(objectRow, list);\n\t\t\tnextOwner.set(key, objectRow);\n\t\t\tconst canonical = canonicalOf(row, index);\n\t\t\tif (!canonical) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnextLastKey.set(canonical, key);\n\t\t\tif (isInstanceKey(key)) {\n\t\t\t\tconst dups = nextDups.get(canonical) ?? [];\n\t\t\t\tdups.push(key);\n\t\t\t\tnextDups.set(canonical, dups);\n\t\t\t}\n\t\t};\n\t\tconst counts = new WeakMap<object, number>();\n\t\tconst pending = data.map((row, index) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tconst occurrence = objectRow ? (counts.get(objectRow) ?? 0) : 0;\n\t\t\tif (objectRow) {\n\t\t\t\tcounts.set(objectRow, occurrence + 1);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trow,\n\t\t\t\tindex,\n\t\t\t\toccurrence,\n\t\t\t\tkey: undefined as string | undefined,\n\t\t\t};\n\t\t});\n\t\tfor (const item of pending) {\n\t\t\tconst objectRow = isRefRow(item.row) ? item.row : null;\n\t\t\tif (!objectRow) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst previous = assignedKeys.current.get(objectRow)?.[item.occurrence];\n\t\t\tif (!previous || used.has(previous)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (lastOwner.current.get(previous) === objectRow) {\n\t\t\t\titem.key = previous;\n\t\t\t\tused.add(previous);\n\t\t\t}\n\t\t}\n\t\tconst keyed = pending.map(({ row, index, occurrence, key: reserved }) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tif (reserved) {\n\t\t\t\trememberKey(row, index, reserved, objectRow);\n\t\t\t\treturn {\n\t\t\t\t\trow,\n\t\t\t\t\tkey: reserved,\n\t\t\t\t\tselectId: publicSelectId(row, index, reserved, getRowId),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst isRepeat = occurrence > 0;\n\t\t\tlet key: string | undefined;\n\t\t\tconst requested = canonicalOf(row, index);\n\t\t\tif (requested) {\n\t\t\t\tkey = requested;\n\t\t\t}\n\t\t\tif (objectRow) {\n\t\t\t\tconst stored = identityOf(objectRow);\n\t\t\t\tif (!key) {\n\t\t\t\t\tkey = isRepeat ? `gen:${stored}#${occurrence}` : `gen:${stored}`;\n\t\t\t\t} else if (used.has(key) || isRepeat) {\n\t\t\t\t\tconst reused = (lastDupsByCanonical.current.get(key) ?? []).find(\n\t\t\t\t\t\t(candidate) => !used.has(candidate),\n\t\t\t\t\t);\n\t\t\t\t\tkey = reused ?? (isRepeat ? `dup:${stored}#${occurrence}` : `dup:${stored}`);\n\t\t\t\t} else {\n\t\t\t\t\tconst inherited = lastKeyByCanonical.current.get(key);\n\t\t\t\t\tif (inherited && !used.has(inherited) && isInstanceKey(inherited)) {\n\t\t\t\t\t\tkey = inherited;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tkey = key ?? primitiveKey(row, index, symbolKeys.current, rowSeq);\n\t\t\tif (used.has(key)) {\n\t\t\t\tlet n = 0;\n\t\t\t\tlet candidate = `occ:${key}#${n}`;\n\t\t\t\twhile (used.has(candidate)) {\n\t\t\t\t\tn += 1;\n\t\t\t\t\tcandidate = `occ:${key}#${n}`;\n\t\t\t\t}\n\t\t\t\tkey = candidate;\n\t\t\t}\n\t\t\tused.add(key);\n\t\t\trememberKey(row, index, key, objectRow);\n\t\t\treturn { row, key, selectId: publicSelectId(row, index, key, getRowId) };\n\t\t});\n\t\tconst filtered =\n\t\t\tquery && !manualFiltering\n\t\t\t\t? keyed.filter(({ row }) =>\n\t\t\t\t\t\tcolumns.some((column) => filterSource(column, row).toLowerCase().includes(query)),\n\t\t\t\t\t)\n\t\t\t\t: keyed;\n\t\tconst sorted = (() => {\n\t\t\tif (!sort || manualSorting) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\tconst column = columns.find((item) => item.id === sort.id);\n\t\t\tif (!column) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\treturn [...filtered].sort((a, b) => {\n\t\t\t\tconst left = column.sortValue?.(a.row) ?? column.accessor(a.row);\n\t\t\t\tconst right = column.sortValue?.(b.row) ?? column.accessor(b.row);\n\t\t\t\tconst cmp = compareUnknown(left, right);\n\t\t\t\treturn sort.dir === \"asc\" ? cmp : -cmp;\n\t\t\t});\n\t\t})();\n\t\treturn {\n\t\t\trows: sorted,\n\t\t\tassigned: nextAssigned,\n\t\t\towner: nextOwner,\n\t\t\tlastKey: nextLastKey,\n\t\t\tdups: nextDups,\n\t\t};\n\t}, [columns, data, getRowId, query, sort, manualFiltering, manualSorting]);\n\n\tuseLayoutEffect(() => {\n\t\tfor (const [objectRow, keys] of rows.assigned) {\n\t\t\tassignedKeys.current.set(objectRow, keys);\n\t\t}\n\t\tlastOwner.current = rows.owner;\n\t\tlastKeyByCanonical.current = rows.lastKey;\n\t\tlastDupsByCanonical.current = rows.dups;\n\t}, [rows]);\n\n\tconst selectable =\n\t\tselected !== undefined || defaultSelected !== undefined || onSelectedChange !== undefined;\n\tconst selectedIds = selected ?? uncontrolledSelected;\n\tconst setSelectedIds = useCallback(\n\t\t(next: string[]) => {\n\t\t\tif (selected === undefined) {\n\t\t\t\tsetUncontrolledSelected(next);\n\t\t\t}\n\t\t\tonSelectedChange?.(next);\n\t\t},\n\t\t[onSelectedChange, selected],\n\t);\n\tconst rowCount = manualPagination && total !== undefined ? Math.max(0, total) : rows.rows.length;\n\tconst pageCount = pageSize && pageSize > 0 ? Math.max(1, Math.ceil(rowCount / pageSize)) : 1;\n\tconst resolvedPage = Math.min(pageCount, Math.max(1, page ?? uncontrolledPage));\n\tconst setResolvedPage = useCallback(\n\t\t(next: number) => {\n\t\t\tif (page === undefined) {\n\t\t\t\tsetUncontrolledPage(next);\n\t\t\t}\n\t\t\tonPageChange?.(next);\n\t\t},\n\t\t[onPageChange, page],\n\t);\n\tconst lastCorrection = useRef<string | null>(null);\n\tuseEffect(() => {\n\t\tconst requested = page ?? uncontrolledPage;\n\t\tif (requested === resolvedPage || loading) {\n\t\t\tlastCorrection.current = null;\n\t\t\treturn;\n\t\t}\n\t\tconst correction = `${requested}:${resolvedPage}`;\n\t\tif (lastCorrection.current !== correction) {\n\t\t\tlastCorrection.current = correction;\n\t\t\tsetResolvedPage(resolvedPage);\n\t\t}\n\t}, [page, uncontrolledPage, resolvedPage, loading, setResolvedPage]);\n\tconst paged =\n\t\t!manualPagination && pageSize && pageSize > 0\n\t\t\t? rows.rows.slice((resolvedPage - 1) * pageSize, resolvedPage * pageSize)\n\t\t\t: rows.rows;\n\tconst colCount = columns.length + (selectable ? 1 : 0);\n\tconst toggleSelected = (id: string) => {\n\t\tif (multiple) {\n\t\t\tsetSelectedIds(\n\t\t\t\tselectedIds.includes(id) ? selectedIds.filter((item) => item !== id) : [...selectedIds, id],\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tsetSelectedIds(selectedIds.includes(id) ? [] : [id]);\n\t};\n\n\treturn (\n\t\t<div className=\"flex min-w-0 flex-col gap-3\">\n\t\t\t<div\n\t\t\t\trole=\"region\"\n\t\t\t\taria-label={`${ariaLabel} scroll area`}\n\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveTabindex: Named overflow regions need keyboard scrolling.\n\t\t\t\ttabIndex={0}\n\t\t\t\tclassName=\"min-w-0 overflow-x-auto rounded-basalt-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-basalt-primary\"\n\t\t\t>\n\t\t\t\t<Table\n\t\t\t\t\tclassName={cn(\"w-full\", className)}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t>\n\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Select</span>\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{columns.map((column) => (\n\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\tkey={column.id}\n\t\t\t\t\t\t\t\t\tclassName={column.headerClassName}\n\t\t\t\t\t\t\t\t\tstyle={{ width: column.width }}\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t\taria-sort={\n\t\t\t\t\t\t\t\t\t\tcolumn.sortable === false\n\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t: sort?.id === column.id\n\t\t\t\t\t\t\t\t\t\t\t\t? sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"ascending\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"descending\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"none\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{column.sortable === false ? (\n\t\t\t\t\t\t\t\t\t\t(column.headerContent ?? column.header)\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\taria-label={column.header}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"appearance-none border-0 bg-transparent p-0 font-inherit text-inherit font-medium cursor-pointer rounded-sm focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-basalt-primary\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\t\t\t\trequestSort(\n\t\t\t\t\t\t\t\t\t\t\t\t\tsort?.id === column.id && sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { id: column.id, dir: \"desc\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { id: column.id, dir: \"asc\" },\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{column.headerContent ?? column.header}\n\t\t\t\t\t\t\t\t\t\t\t{sort?.id === column.id ? (sort.dir === \"asc\" ? \" ↑\" : \" ↓\") : \"\"}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div role=\"status\" className=\"flex flex-col gap-2 py-2\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Loading</span>\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : error != null && error !== false ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\trole=\"alert\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex flex-wrap items-center justify-between gap-3 py-6\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div>{error}</div>\n\t\t\t\t\t\t\t\t\t\t{onRetry ? (\n\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" onClick={onRetry}>\n\t\t\t\t\t\t\t\t\t\t\t\t{retryLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : paged.length === 0 ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div role=\"status\">{empty}</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tpaged.map(({ row, key, selectId }) => {\n\t\t\t\t\t\t\t\tconst isSelected = selectedIds.includes(selectId);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\t\tvariant={isSelected ? \"selected\" : \"default\"}\n\t\t\t\t\t\t\t\t\t\taria-selected={selectable ? isSelected : undefined}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={`Select ${selectId}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={() => toggleSelected(selectId)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t{columns.map((column) => {\n\t\t\t\t\t\t\t\t\t\t\tconst cell = column.accessor(row);\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell key={column.id} className={column.cellClassName}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{typeof cell === \"bigint\" ? String(cell) : cell}\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t\t{pageSize && pageSize > 0 ? (\n\t\t\t\t<Pagination\n\t\t\t\t\tpage={resolvedPage}\n\t\t\t\t\tpageCount={pageCount}\n\t\t\t\t\tdisabled={loading}\n\t\t\t\t\tonPageChange={setResolvedPage}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-table.js","names":["attachedEdge","edge","cn","index","count","rank","value","compareUnknown","leftRank","left","rightRank","right","a","b","leftStr","rightStr","primitiveKey","row","key","symbols","type","isInstanceKey","isRefRow","filterSource","column","rendered","publicSelectId","requested","getRowId","DataTable","controlledSort","ariaLabel","ariaDescribedBy","uncontrolledSort","setUncontrolledSort","useState","defaultSort","sort","requestSort","next","onSortChange","uncontrolledSelected","setUncontrolledSelected","defaultSelected","uncontrolledPage","setUncontrolledPage","defaultPage","rowIds","useRef","rowSeq","assignedKeys","lastOwner","lastKeyByCanonical","lastDupsByCanonical","symbolKeys","query","filter","rows","useMemo","identityOf","stored","canonicalOf","raw","used","nextLastKey","nextDups","nextAssigned","nextOwner","rememberKey","objectRow","list","canonical","dups","counts","pending","data","occurrence","item","previous","keyed","reserved","isRepeat","candidate","inherited","n","filtered","manualFiltering","columns","manualSorting","cmp","keys","selectable","selected","onSelectedChange","selectedIds","setSelectedIds","useCallback","rowCount","manualPagination","total","pageCount","pageSize","resolvedPage","page","setResolvedPage","onPageChange","lastCorrection","loading","correction","paged","colCount","toggleSelected","multiple","id","Table","className","TableHeader","TableRow","rowNumbers","TableHead","columnIndex","TableSortableHeader","TableBody","TableCell","SkeletonLine","error","onRetry","Button","retryLabel","empty","isSelected","selectId","rowIndex","Checkbox","cell","Pagination"],"sources":["../../src/components/data-table.tsx"],"sourcesContent":["import {\n\ttype CSSProperties,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./button\";\nimport { Checkbox } from \"./checkbox\";\nimport { Pagination } from \"./pagination\";\nimport { SkeletonLine } from \"./skeleton-line\";\nimport {\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n\tTableSortableHeader,\n\ttype TableTextAlign,\n} from \"./table\";\n\nexport type DataTableEdge = \"inset\" | \"attached\";\n\nfunction attachedEdge(edge: DataTableEdge | undefined, index: number, count: number) {\n\tif (edge !== \"attached\") return;\n\treturn cn(index === 0 && \"ps-basalt-table-edge\", index === count - 1 && \"pe-basalt-table-edge\");\n}\n\nexport type DataTableColumn<T> = {\n\tid: string;\n\theader: string;\n\taccessor: (row: T) => ReactNode;\n\tsortValue?: (row: T) => string | number | bigint;\n\tfilterValue?: (row: T) => string | number | bigint;\n\t/** Rich header content; header remains the plain text accessible name. */\n\theaderContent?: ReactNode;\n\t/** Whether the header changes sorting. @default true */\n\tsortable?: boolean;\n\t/** Preferred and minimum column width; narrow viewports scroll instead of squeezing it. */\n\twidth?: CSSProperties[\"width\"];\n\t/** Allow multiline cell content. Default false keeps dense records on one line. */\n\twrap?: boolean;\n\t/** Classes applied to the header cell. */\n\theaderClassName?: string;\n\t/** Classes applied to each data cell. */\n\tcellClassName?: string;\n\t/** Logical header and cell alignment. Omitted cells inherit from the table. */\n\ttextAlign?: TableTextAlign;\n};\n\nexport type DataTableSort = { id: string; dir: \"asc\" | \"desc\" };\n\nfunction rank(value: unknown): number {\n\tif (value === Number.NEGATIVE_INFINITY) {\n\t\treturn 0;\n\t}\n\tif (typeof value === \"bigint\" || (typeof value === \"number\" && Number.isFinite(value))) {\n\t\treturn 1;\n\t}\n\tif (value === Number.POSITIVE_INFINITY) {\n\t\treturn 2;\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn 3;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn 4;\n\t}\n\treturn 5;\n}\n\nfunction compareUnknown(left: unknown, right: unknown): number {\n\tconst leftRank = rank(left);\n\tconst rightRank = rank(right);\n\tif (leftRank !== rightRank) {\n\t\treturn leftRank - rightRank;\n\t}\n\tif (leftRank === 1) {\n\t\tconst a = left as number | bigint;\n\t\tconst b = right as number | bigint;\n\t\treturn a < b ? -1 : a > b ? 1 : 0;\n\t}\n\tconst leftStr = String(left);\n\tconst rightStr = String(right);\n\treturn leftStr < rightStr ? -1 : leftStr > rightStr ? 1 : 0;\n}\n\nfunction primitiveKey(\n\trow: unknown,\n\tindex: number,\n\tsymbols: Map<symbol, string>,\n\tseq: { current: number },\n): string {\n\tif (row === null) {\n\t\treturn \"prim:null\";\n\t}\n\tif (row === undefined) {\n\t\treturn \"prim:undefined\";\n\t}\n\tif (typeof row === \"symbol\") {\n\t\tlet key = symbols.get(row);\n\t\tif (!key) {\n\t\t\tkey = `prim:symbol:${seq.current++}`;\n\t\t\tsymbols.set(row, key);\n\t\t}\n\t\treturn key;\n\t}\n\tconst type = typeof row;\n\tif (type === \"number\") {\n\t\tif (Object.is(row, -0)) {\n\t\t\treturn \"prim:number:-0\";\n\t\t}\n\t\treturn `prim:number:${String(row)}`;\n\t}\n\tif (type === \"string\" || type === \"bigint\" || type === \"boolean\") {\n\t\treturn `prim:${type}:${String(row)}`;\n\t}\n\treturn `prim:${index}`;\n}\n\nfunction isInstanceKey(key: string) {\n\treturn key.startsWith(\"dup:\") || key.startsWith(\"gen:\");\n}\n\nfunction isRefRow(row: unknown): row is object {\n\treturn typeof row === \"function\" || (typeof row === \"object\" && row !== null);\n}\n\nfunction filterSource<T>(column: DataTableColumn<T>, row: T): string {\n\tif (column.filterValue) {\n\t\treturn String(column.filterValue(row));\n\t}\n\tif (column.sortValue) {\n\t\treturn String(column.sortValue(row));\n\t}\n\tconst rendered = column.accessor(row);\n\tif (\n\t\ttypeof rendered === \"string\" ||\n\t\ttypeof rendered === \"number\" ||\n\t\ttypeof rendered === \"bigint\"\n\t) {\n\t\treturn String(rendered);\n\t}\n\treturn \"\";\n}\n\nfunction publicSelectId<T>(\n\trow: T,\n\tindex: number,\n\tkey: string,\n\tgetRowId?: (row: T, index: number) => string,\n): string {\n\tconst requested = getRowId?.(row, index);\n\tif (requested !== undefined) {\n\t\treturn requested;\n\t}\n\tif (isRefRow(row) && \"id\" in row && row.id != null) {\n\t\treturn String(row.id);\n\t}\n\treturn key;\n}\n\nexport type DataTableProps<T = unknown> = {\n\t/**\n\t * Rows to render.\n\t */\n\tdata: T[];\n\t/**\n\t * Column descriptors.\n\t */\n\tcolumns: DataTableColumn<T>[];\n\t/**\n\t * Filter query matched against column values.\n\t * @default \"\"\n\t */\n\tfilter?: string;\n\t/**\n\t * Replace rows with a loading placeholder.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Copy shown when no rows remain after filtering.\n\t * @default \"No results\"\n\t */\n\tempty?: ReactNode;\n\t/**\n\t * Controlled selected row ids.\n\t */\n\tselected?: string[];\n\t/**\n\t * Uncontrolled initial selected row ids.\n\t */\n\tdefaultSelected?: string[];\n\t/**\n\t * Called when selected row ids change.\n\t */\n\tonSelectedChange?: (ids: string[]) => void;\n\t/**\n\t * Allow more than one selected row.\n\t * @default false\n\t */\n\tmultiple?: boolean;\n\t/**\n\t * Controlled 1-based page. Used with pageSize.\n\t */\n\tpage?: number;\n\t/**\n\t * Uncontrolled initial page.\n\t * @default 1\n\t */\n\tdefaultPage?: number;\n\t/**\n\t * Rows per page. Omit to show every row.\n\t */\n\tpageSize?: number;\n\t/**\n\t * Called when the page changes.\n\t */\n\tonPageChange?: (page: number) => void;\n\t/**\n\t * Stable id for a row.\n\t */\n\tgetRowId?: (row: T, index: number) => string;\n\t/**\n\t * Additional classes for the table.\n\t */\n\tclassName?: string;\n\t/** Bound the local scroll region; column headers stay visible while scrolling. */\n\tmaxHeight?: CSSProperties[\"maxHeight\"];\n\t/** Show display-order row numbers, continuous across pages. @default false */\n\trowNumbers?: boolean;\n\t/** Controlled sorting. null explicitly disables sorting. */\n\tsort?: DataTableSort | null;\n\t/** Initial sorting for uncontrolled usage. @default null */\n\tdefaultSort?: DataTableSort | null;\n\t/** Reports header sorting requests. Controlled values change only when the caller accepts. */\n\tonSortChange?: (sort: DataTableSort | null) => void;\n\t/** Caller supplies sorted rows; headers only report requests. @default false */\n\tmanualSorting?: boolean;\n\t/** Caller supplies the current page; rows are never sliced again. Use stable row IDs across pages. @default false */\n\tmanualPagination?: boolean;\n\t/** Caller supplies filtered rows; filter is not applied locally. @default false */\n\tmanualFiltering?: boolean;\n\t/** Total matching row count in manualPagination mode; defaults to data.length. */\n\ttotal?: number;\n\t/** Error content replacing rows after loading finishes. */\n\terror?: ReactNode;\n\t/** Optional retry action for an error. The caller owns the request. */\n\tonRetry?: () => void;\n\t/** Retry button text. @default \"Try again\" */\n\tretryLabel?: string;\n\t/** Accessible table name. @default \"Data table\" */\n\t\"aria-label\"?: string;\n\t/** ID of additional table instructions or summary. */\n\t\"aria-describedby\"?: string;\n\t/** Direct-card rails on the first and last display columns. @default \"inset\" */\n\tedge?: DataTableEdge;\n};\n\nexport function DataTable<T>({\n\tdata,\n\tcolumns,\n\tfilter = \"\",\n\tloading = false,\n\tempty = \"No results\",\n\tselected,\n\tdefaultSelected,\n\tonSelectedChange,\n\tmultiple = false,\n\tpage,\n\tdefaultPage = 1,\n\tpageSize,\n\tonPageChange,\n\tgetRowId,\n\tclassName,\n\tmaxHeight,\n\trowNumbers = false,\n\tsort: controlledSort,\n\tdefaultSort = null,\n\tonSortChange,\n\tmanualSorting = false,\n\tmanualPagination = false,\n\tmanualFiltering = false,\n\ttotal,\n\terror,\n\tonRetry,\n\tretryLabel = \"Try again\",\n\t\"aria-label\": ariaLabel = \"Data table\",\n\t\"aria-describedby\": ariaDescribedBy,\n\tedge,\n}: DataTableProps<T>) {\n\tconst [uncontrolledSort, setUncontrolledSort] = useState<DataTableSort | null>(defaultSort);\n\tconst sort = controlledSort === undefined ? uncontrolledSort : controlledSort;\n\tconst requestSort = (next: DataTableSort) => {\n\t\tif (controlledSort === undefined) setUncontrolledSort(next);\n\t\tonSortChange?.(next);\n\t};\n\tconst [uncontrolledSelected, setUncontrolledSelected] = useState<string[]>(defaultSelected ?? []);\n\tconst [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);\n\tconst rowIds = useRef(new WeakMap<object, string>());\n\tconst rowSeq = useRef(0);\n\tconst assignedKeys = useRef(new WeakMap<object, string[]>());\n\tconst lastOwner = useRef(new Map<string, object>());\n\tconst lastKeyByCanonical = useRef(new Map<string, string>());\n\tconst lastDupsByCanonical = useRef(new Map<string, string[]>());\n\tconst symbolKeys = useRef(new Map<symbol, string>());\n\tconst query = filter.trim().toLowerCase();\n\n\tconst rows = useMemo(() => {\n\t\tconst identityOf = (row: object) => {\n\t\t\tlet stored = rowIds.current.get(row);\n\t\t\tif (!stored) {\n\t\t\t\tstored = `basalt-row-${rowSeq.current++}`;\n\t\t\t\trowIds.current.set(row, stored);\n\t\t\t}\n\t\t\treturn stored;\n\t\t};\n\t\tconst canonicalOf = (row: T, index: number) => {\n\t\t\tconst requested = getRowId?.(row, index);\n\t\t\tif (requested !== undefined) {\n\t\t\t\treturn `get:${requested}`;\n\t\t\t}\n\t\t\tif (isRefRow(row) && \"id\" in row) {\n\t\t\t\tconst raw = (row as { id: unknown }).id;\n\t\t\t\tif (raw != null) {\n\t\t\t\t\treturn `id:${String(raw)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst used = new Set<string>();\n\t\tconst nextLastKey = new Map<string, string>();\n\t\tconst nextDups = new Map<string, string[]>();\n\t\tconst nextAssigned = new Map<object, string[]>();\n\t\tconst nextOwner = new Map<string, object>();\n\t\tconst rememberKey = (row: T, index: number, key: string, objectRow: object | null) => {\n\t\t\tif (!objectRow) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst list = nextAssigned.get(objectRow) ?? [];\n\t\t\tlist.push(key);\n\t\t\tnextAssigned.set(objectRow, list);\n\t\t\tnextOwner.set(key, objectRow);\n\t\t\tconst canonical = canonicalOf(row, index);\n\t\t\tif (!canonical) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnextLastKey.set(canonical, key);\n\t\t\tif (isInstanceKey(key)) {\n\t\t\t\tconst dups = nextDups.get(canonical) ?? [];\n\t\t\t\tdups.push(key);\n\t\t\t\tnextDups.set(canonical, dups);\n\t\t\t}\n\t\t};\n\t\tconst counts = new WeakMap<object, number>();\n\t\tconst pending = data.map((row, index) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tconst occurrence = objectRow ? (counts.get(objectRow) ?? 0) : 0;\n\t\t\tif (objectRow) {\n\t\t\t\tcounts.set(objectRow, occurrence + 1);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trow,\n\t\t\t\tindex,\n\t\t\t\toccurrence,\n\t\t\t\tkey: undefined as string | undefined,\n\t\t\t};\n\t\t});\n\t\tfor (const item of pending) {\n\t\t\tconst objectRow = isRefRow(item.row) ? item.row : null;\n\t\t\tif (!objectRow) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst previous = assignedKeys.current.get(objectRow)?.[item.occurrence];\n\t\t\tif (!previous || used.has(previous)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (lastOwner.current.get(previous) === objectRow) {\n\t\t\t\titem.key = previous;\n\t\t\t\tused.add(previous);\n\t\t\t}\n\t\t}\n\t\tconst keyed = pending.map(({ row, index, occurrence, key: reserved }) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tif (reserved) {\n\t\t\t\trememberKey(row, index, reserved, objectRow);\n\t\t\t\treturn {\n\t\t\t\t\trow,\n\t\t\t\t\tkey: reserved,\n\t\t\t\t\tselectId: publicSelectId(row, index, reserved, getRowId),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst isRepeat = occurrence > 0;\n\t\t\tlet key: string | undefined;\n\t\t\tconst requested = canonicalOf(row, index);\n\t\t\tif (requested) {\n\t\t\t\tkey = requested;\n\t\t\t}\n\t\t\tif (objectRow) {\n\t\t\t\tconst stored = identityOf(objectRow);\n\t\t\t\tif (!key) {\n\t\t\t\t\tkey = isRepeat ? `gen:${stored}#${occurrence}` : `gen:${stored}`;\n\t\t\t\t} else if (used.has(key) || isRepeat) {\n\t\t\t\t\tconst reused = (lastDupsByCanonical.current.get(key) ?? []).find(\n\t\t\t\t\t\t(candidate) => !used.has(candidate),\n\t\t\t\t\t);\n\t\t\t\t\tkey = reused ?? (isRepeat ? `dup:${stored}#${occurrence}` : `dup:${stored}`);\n\t\t\t\t} else {\n\t\t\t\t\tconst inherited = lastKeyByCanonical.current.get(key);\n\t\t\t\t\tif (inherited && !used.has(inherited) && isInstanceKey(inherited)) {\n\t\t\t\t\t\tkey = inherited;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tkey = key ?? primitiveKey(row, index, symbolKeys.current, rowSeq);\n\t\t\tif (used.has(key)) {\n\t\t\t\tlet n = 0;\n\t\t\t\tlet candidate = `occ:${key}#${n}`;\n\t\t\t\twhile (used.has(candidate)) {\n\t\t\t\t\tn += 1;\n\t\t\t\t\tcandidate = `occ:${key}#${n}`;\n\t\t\t\t}\n\t\t\t\tkey = candidate;\n\t\t\t}\n\t\t\tused.add(key);\n\t\t\trememberKey(row, index, key, objectRow);\n\t\t\treturn { row, key, selectId: publicSelectId(row, index, key, getRowId) };\n\t\t});\n\t\tconst filtered =\n\t\t\tquery && !manualFiltering\n\t\t\t\t? keyed.filter(({ row }) =>\n\t\t\t\t\t\tcolumns.some((column) => filterSource(column, row).toLowerCase().includes(query)),\n\t\t\t\t\t)\n\t\t\t\t: keyed;\n\t\tconst sorted = (() => {\n\t\t\tif (!sort || manualSorting) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\tconst column = columns.find((item) => item.id === sort.id);\n\t\t\tif (!column) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\treturn [...filtered].sort((a, b) => {\n\t\t\t\tconst left = column.sortValue?.(a.row) ?? column.accessor(a.row);\n\t\t\t\tconst right = column.sortValue?.(b.row) ?? column.accessor(b.row);\n\t\t\t\tconst cmp = compareUnknown(left, right);\n\t\t\t\treturn sort.dir === \"asc\" ? cmp : -cmp;\n\t\t\t});\n\t\t})();\n\t\treturn {\n\t\t\trows: sorted,\n\t\t\tassigned: nextAssigned,\n\t\t\towner: nextOwner,\n\t\t\tlastKey: nextLastKey,\n\t\t\tdups: nextDups,\n\t\t};\n\t}, [columns, data, getRowId, query, sort, manualFiltering, manualSorting]);\n\n\tuseLayoutEffect(() => {\n\t\tfor (const [objectRow, keys] of rows.assigned) {\n\t\t\tassignedKeys.current.set(objectRow, keys);\n\t\t}\n\t\tlastOwner.current = rows.owner;\n\t\tlastKeyByCanonical.current = rows.lastKey;\n\t\tlastDupsByCanonical.current = rows.dups;\n\t}, [rows]);\n\n\tconst selectable =\n\t\tselected !== undefined || defaultSelected !== undefined || onSelectedChange !== undefined;\n\tconst selectedIds = selected ?? uncontrolledSelected;\n\tconst setSelectedIds = useCallback(\n\t\t(next: string[]) => {\n\t\t\tif (selected === undefined) {\n\t\t\t\tsetUncontrolledSelected(next);\n\t\t\t}\n\t\t\tonSelectedChange?.(next);\n\t\t},\n\t\t[onSelectedChange, selected],\n\t);\n\tconst rowCount = manualPagination && total !== undefined ? Math.max(0, total) : rows.rows.length;\n\tconst pageCount = pageSize && pageSize > 0 ? Math.max(1, Math.ceil(rowCount / pageSize)) : 1;\n\tconst resolvedPage = Math.min(pageCount, Math.max(1, page ?? uncontrolledPage));\n\tconst setResolvedPage = useCallback(\n\t\t(next: number) => {\n\t\t\tif (page === undefined) {\n\t\t\t\tsetUncontrolledPage(next);\n\t\t\t}\n\t\t\tonPageChange?.(next);\n\t\t},\n\t\t[onPageChange, page],\n\t);\n\tconst lastCorrection = useRef<string | null>(null);\n\tuseEffect(() => {\n\t\tconst requested = page ?? uncontrolledPage;\n\t\tif (requested === resolvedPage || loading) {\n\t\t\tlastCorrection.current = null;\n\t\t\treturn;\n\t\t}\n\t\tconst correction = `${requested}:${resolvedPage}`;\n\t\tif (lastCorrection.current !== correction) {\n\t\t\tlastCorrection.current = correction;\n\t\t\tsetResolvedPage(resolvedPage);\n\t\t}\n\t}, [page, uncontrolledPage, resolvedPage, loading, setResolvedPage]);\n\tconst paged =\n\t\t!manualPagination && pageSize && pageSize > 0\n\t\t\t? rows.rows.slice((resolvedPage - 1) * pageSize, resolvedPage * pageSize)\n\t\t\t: rows.rows;\n\tconst colCount = columns.length + (selectable ? 1 : 0) + (rowNumbers ? 1 : 0);\n\tconst toggleSelected = (id: string) => {\n\t\tif (multiple) {\n\t\t\tsetSelectedIds(\n\t\t\t\tselectedIds.includes(id) ? selectedIds.filter((item) => item !== id) : [...selectedIds, id],\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tsetSelectedIds(selectedIds.includes(id) ? [] : [id]);\n\t};\n\n\treturn (\n\t\t<div className=\"flex min-w-0 flex-col gap-basalt-space-lg\">\n\t\t\t<div\n\t\t\t\trole=\"region\"\n\t\t\t\taria-label={`${ariaLabel} scroll area`}\n\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveTabindex: Named overflow regions need keyboard scrolling.\n\t\t\t\ttabIndex={0}\n\t\t\t\tclassName=\"relative min-w-0 overflow-auto rounded-basalt-md focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-basalt-primary\"\n\t\t\t\tstyle={{ maxHeight }}\n\t\t\t>\n\t\t\t\t<Table\n\t\t\t\t\tclassName={cn(\"w-full\", className)}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\tdata-basalt-data-table=\"\"\n\t\t\t\t>\n\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t{rowNumbers && (\n\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t\ttextAlign=\"end\"\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"sticky top-0 z-10 w-basalt-10 min-w-basalt-10 bg-basalt-control\",\n\t\t\t\t\t\t\t\t\t\tattachedEdge(edge, 0, colCount),\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span aria-hidden=\"true\">#</span>\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Row number</span>\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"sticky top-0 z-10 w-basalt-10 min-w-basalt-10 bg-basalt-control text-center\",\n\t\t\t\t\t\t\t\t\t\tattachedEdge(edge, rowNumbers ? 1 : 0, colCount),\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Select</span>\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{columns.map((column, columnIndex) => (\n\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\tkey={column.id}\n\t\t\t\t\t\t\t\t\ttextAlign={column.textAlign}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"sticky top-0 z-10 bg-basalt-control\",\n\t\t\t\t\t\t\t\t\t\tattachedEdge(\n\t\t\t\t\t\t\t\t\t\t\tedge,\n\t\t\t\t\t\t\t\t\t\t\t(rowNumbers ? 1 : 0) + (selectable ? 1 : 0) + columnIndex,\n\t\t\t\t\t\t\t\t\t\t\tcolCount,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tcolumn.headerClassName,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ width: column.width, minWidth: column.width }}\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t\taria-sort={\n\t\t\t\t\t\t\t\t\t\tcolumn.sortable === false\n\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t: sort?.id === column.id\n\t\t\t\t\t\t\t\t\t\t\t\t? sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"ascending\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"descending\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"none\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{column.sortable === false ? (\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"flex items-center gap-basalt-control-gap\",\n\t\t\t\t\t\t\t\t\t\t\t\tcolumn.textAlign === \"end\" && \"w-full justify-end text-end\",\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{column.headerContent ?? column.header}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<TableSortableHeader\n\t\t\t\t\t\t\t\t\t\t\ttextAlign={column.textAlign}\n\t\t\t\t\t\t\t\t\t\t\tsorted={sort?.id === column.id ? sort.dir : undefined}\n\t\t\t\t\t\t\t\t\t\t\taria-label={column.header}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\t\t\t\trequestSort(\n\t\t\t\t\t\t\t\t\t\t\t\t\tsort?.id === column.id && sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { id: column.id, dir: \"desc\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { id: column.id, dir: \"asc\" },\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{column.headerContent ?? column.header}\n\t\t\t\t\t\t\t\t\t\t</TableSortableHeader>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount} className={attachedEdge(edge, 0, 1)}>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex flex-col gap-basalt-space-lg py-basalt-space-lg\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Loading</span>\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : error != null && error !== false ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount} className={attachedEdge(edge, 0, 1)}>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\trole=\"alert\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex flex-wrap items-center justify-between gap-basalt-space-lg py-basalt-space-lg\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div>{error}</div>\n\t\t\t\t\t\t\t\t\t\t{onRetry ? (\n\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" onClick={onRetry}>\n\t\t\t\t\t\t\t\t\t\t\t\t{retryLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : paged.length === 0 ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount} className={attachedEdge(edge, 0, 1)}>\n\t\t\t\t\t\t\t\t\t<div role=\"status\">{empty}</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tpaged.map(({ row, key, selectId }, rowIndex) => {\n\t\t\t\t\t\t\t\tconst isSelected = selectedIds.includes(selectId);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\t\tvariant={isSelected ? \"selected\" : \"default\"}\n\t\t\t\t\t\t\t\t\t\taria-selected={selectable ? isSelected : undefined}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{rowNumbers && (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\t\t\t\tdata-row-number=\"\"\n\t\t\t\t\t\t\t\t\t\t\t\ttextAlign=\"end\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-basalt-sm text-basalt-muted-foreground\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tattachedEdge(edge, 0, colCount),\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{(pageSize && pageSize > 0 ? (resolvedPage - 1) * pageSize : 0) +\n\t\t\t\t\t\t\t\t\t\t\t\t\trowIndex +\n\t\t\t\t\t\t\t\t\t\t\t\t\t1}\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-center\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tattachedEdge(edge, rowNumbers ? 1 : 0, colCount),\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={`Select ${selectId}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={() => toggleSelected(selectId)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"align-middle\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t{columns.map((column, columnIndex) => {\n\t\t\t\t\t\t\t\t\t\t\tconst cell = column.accessor(row);\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={column.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextAlign={column.textAlign}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn.wrap ? \"whitespace-normal break-words\" : \"whitespace-nowrap\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tattachedEdge(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tedge,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(rowNumbers ? 1 : 0) + (selectable ? 1 : 0) + columnIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolCount,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn.cellClassName,\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ minWidth: column.width }}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{typeof cell === \"bigint\" ? String(cell) : cell}\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t\t{pageSize && pageSize > 0 ? (\n\t\t\t\t<Pagination\n\t\t\t\t\tpage={resolvedPage}\n\t\t\t\t\tpageCount={pageCount}\n\t\t\t\t\tdisabled={loading}\n\t\t\t\t\tonPageChange={setResolvedPage}\n\t\t\t\t\tclassName={edge === \"attached\" ? \"px-basalt-panel-x pb-basalt-panel-y\" : undefined}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;AA4BA,SAASA,EAAa,GAAiC,GAAe,GAAe;CACpF,IAAIC,MAAS,YACb,OAAOC,EAAGC,MAAU,KAAK,wBAAwBA,MAAUC,IAAQ,KAAK,sBAAsB;AAC/F;AA0BA,SAASC,EAAK,GAAwB;CAgBrC,OAfIC,MAAU,YACN,IAEJ,OAAOA,KAAU,YAAa,OAAOA,KAAU,YAAY,OAAO,SAASA,CAAK,IAC5E,IAEJA,MAAU,WACN,IAEJ,OAAOA,KAAU,WACb,IAEJ,OAAOA,KAAU,WACb,IAED;AACR;AAEA,SAASC,GAAe,GAAe,GAAwB;CAC9D,IAAMC,IAAWH,EAAKI,CAAI,GACpBC,IAAYL,EAAKM,CAAK;CAC5B,IAAIH,MAAaE,GAChB,OAAOF,IAAWE;CAEnB,IAAIF,MAAa,GAAG;EACnB,IAAMI,IAAIH,GACJI,IAAIF;EACV,OAAOC,IAAIC,IAAI,KAAK,MAAIA;CACzB;CACA,IAAMC,IAAU,OAAOL,CAAI,GACrBM,IAAW,OAAOJ,CAAK;CAC7B,OAAOG,IAAUC,IAAW,KAAK,MAAUA;AAC5C;AAEA,SAASC,GACR,GACA,GACA,GACA,GACS;CACT,IAAIC,MAAQ,MACX,OAAO;CAER,IAAIA,MAAQ,KAAA,GACX,OAAO;CAER,IAAI,OAAOA,KAAQ,UAAU;EAC5B,IAAIC,IAAMC,EAAQ,IAAIF,CAAG;EAKzB,OAJKC,MACJ,IAAM,eAAe,EAAI,aACzBC,EAAQ,IAAIF,GAAKC,CAAG,IAEdA;CACR;CACA,IAAME,IAAO,OAAOH;CAUpB,OATIG,MAAS,WACR,OAAO,GAAGH,GAAK,EAAE,IACb,mBAED,eAAe,OAAOA,CAAG,MAE7BG,MAAS,YAAYA,MAAS,YAAYA,MAAS,YAC/C,QAAQA,EAAK,GAAG,OAAOH,CAAG,MAE3B,QAAQd;AAChB;AAEA,SAASkB,EAAc,GAAa;CACnC,OAAOH,EAAI,WAAW,MAAM,KAAKA,EAAI,WAAW,MAAM;AACvD;AAEA,SAASI,EAAS,GAA6B;CAC9C,OAAO,OAAOL,KAAQ,cAAe,OAAOA,KAAQ,cAAYA;AACjE;AAEA,SAASM,GAAgB,GAA4B,GAAgB;CACpE,IAAIC,EAAO,aACV,OAAO,OAAOA,EAAO,YAAYP,CAAG,CAAC;CAEtC,IAAIO,EAAO,WACV,OAAO,OAAOA,EAAO,UAAUP,CAAG,CAAC;CAEpC,IAAMQ,IAAWD,EAAO,SAASP,CAAG;CAQpC,OANC,OAAOQ,KAAa,YACpB,OAAOA,KAAa,YACpB,OAAOA,KAAa,WAEb,OAAOA,CAAQ,IAEhB;AACR;AAEA,SAASC,EACR,GACA,GACA,GACA,GACS;CACT,IAAMC,IAAYC,IAAWX,GAAKd,CAAK;CAOvC,OANIwB,MAAc,KAAA,IAGdL,EAASL,CAAG,KAAK,QAAQA,KAAOA,EAAI,MAAM,OACtC,OAAOA,EAAI,EAAE,IAEdC,IALCS;AAMT;AAoGA,SAAgBE,EAAa,EAC5B,SACA,YACA,aAAS,IACT,aAAU,IACV,YAAQ,cACR,aACA,qBACA,qBACA,eAAW,IACX,SACA,kBAAc,GACd,aACA,iBACA,aACA,eACA,eACA,gBAAa,IACb,MAAMC,GACN,kBAAc,MACd,kBACA,mBAAgB,IAChB,sBAAmB,IACnB,qBAAkB,IAClB,UACA,UACA,YACA,iBAAa,aACb,cAAcC,IAAY,cAC1B,oBAAoBC,IACpB,WACqB;CACrB,IAAM,CAACC,IAAkBC,MAAuBC,EAA+BC,EAAW,GACpFC,IAAOP,MAAmB,KAAA,IAAYG,KAAmBH,GACzDQ,MAAe,MAAwB;EAE5C,AADIR,MAAmB,KAAA,KAAWI,GAAoBK,CAAI,GAC1DC,KAAeD,CAAI;CACpB,GACM,CAACE,IAAsBC,MAA2BP,EAAmBQ,MAAmB,CAAC,CAAC,GAC1F,CAACC,GAAkBC,MAAuBV,EAASW,EAAW,GAC9DC,IAASC,kBAAO,IAAI,QAAwB,CAAC,GAC7CC,IAASD,EAAO,CAAC,GACjBE,IAAeF,kBAAO,IAAI,QAA0B,CAAC,GACrDG,IAAYH,kBAAO,IAAI,IAAoB,CAAC,GAC5CI,KAAqBJ,kBAAO,IAAI,IAAoB,CAAC,GACrDK,KAAsBL,kBAAO,IAAI,IAAsB,CAAC,GACxDM,KAAaN,kBAAO,IAAI,IAAoB,CAAC,GAC7CO,IAAQC,GAAO,KAAK,CAAC,CAAC,YAAY,GAElCC,IAAOC,SAAc;EAC1B,IAAMC,KAAc,MAAgB;GACnC,IAAIC,IAASb,EAAO,QAAQ,IAAI9B,CAAG;GAKnC,OAJK2C,MACJ,IAAS,cAAc,EAAO,aAC9Bb,EAAO,QAAQ,IAAI9B,GAAK2C,CAAM,IAExBA;EACR,GACMC,KAAe,GAAQ,MAAkB;GAC9C,IAAMlC,IAAYC,IAAWX,GAAKd,CAAK;GACvC,IAAIwB,MAAc,KAAA,GACjB,OAAO,OAAOA;GAEf,IAAIL,EAASL,CAAG,KAAK,QAAQA,GAAK;IACjC,IAAM6C,IAAO7C,EAAwB;IACrC,IAAI6C,KAAO,MACV,OAAO,MAAM,OAAOA,CAAG;GAEzB;EACD,GACMC,oBAAO,IAAI,IAAY,GACvBC,oBAAc,IAAI,IAAoB,GACtCC,oBAAW,IAAI,IAAsB,GACrCC,oBAAe,IAAI,IAAsB,GACzCC,oBAAY,IAAI,IAAoB,GACpCC,KAAe,GAAQ,GAAe,GAAa,MAA6B;GACrF,IAAI,CAACC,GACJ;GAED,IAAMC,IAAOJ,EAAa,IAAIG,CAAS,KAAK,CAAC;GAG7C,AAFAC,EAAK,KAAKpD,CAAG,GACbgD,EAAa,IAAIG,GAAWC,CAAI,GAChCH,EAAU,IAAIjD,GAAKmD,CAAS;GAC5B,IAAME,IAAYV,EAAY5C,GAAKd,CAAK;GACxC,IAAKoE,MAGLP,EAAY,IAAIO,GAAWrD,CAAG,GAC1BG,EAAcH,CAAG,IAAG;IACvB,IAAMsD,IAAOP,EAAS,IAAIM,CAAS,KAAK,CAAC;IAEzC,AADAC,EAAK,KAAKtD,CAAG,GACb+C,EAAS,IAAIM,GAAWC,CAAI;GAC7B;EACD,GACMC,oBAAS,IAAI,QAAwB,GACrCC,IAAUC,EAAK,KAAK,GAAK,MAAU;GACxC,IAAMN,IAAY/C,EAASL,CAAG,IAAIA,IAAM,MAClC2D,IAAaP,IAAaI,EAAO,IAAIJ,CAAS,KAAK,IAAK;GAI9D,OAHIA,KACHI,EAAO,IAAIJ,GAAWO,IAAa,CAAC,GAE9B;IACN;IACA;IACA;IACA,KAAK,KAAA;GACN;EACD,CAAC;EACD,KAAK,IAAMC,KAAQH,GAAS;GAC3B,IAAML,IAAY/C,EAASuD,EAAK,GAAG,IAAIA,EAAK,MAAM;GAClD,IAAI,CAACR,GACJ;GAED,IAAMS,IAAW5B,EAAa,QAAQ,IAAImB,CAAS,CAAC,GAAGQ,EAAK;GAC5D,AAAKC,KAAY,GAAK,IAAIA,CAAQ,KAG9B3B,EAAU,QAAQ,IAAI2B,CAAQ,MAAMT,MACvC,EAAK,MAAMS,GACXf,EAAK,IAAIe,CAAQ;EAEnB;EACA,IAAMC,IAAQL,EAAQ,KAAK,EAAE,QAAK,UAAO,eAAY,KAAKM,QAAe;GACxE,IAAMX,IAAY/C,EAASL,CAAG,IAAIA,IAAM;GACxC,IAAI+D,GAEH,OADAZ,EAAYnD,GAAKd,GAAO6E,GAAUX,CAAS,GACpC;IACN;IACA,KAAKW;IACL,UAAUtD,EAAeT,GAAKd,GAAO6E,GAAUpD,CAAQ;GACxD;GAED,IAAMqD,IAAWL,IAAa,GAC1B1D,GACES,IAAYkC,EAAY5C,GAAKd,CAAK;GAIxC,IAHIwB,MACH,IAAMA,IAEH0C,GAAW;IACd,IAAMT,IAASD,EAAWU,CAAS;IACnC,IAAI,CAACnD,GACJ,IAAM+D,IAAW,OAAOrB,EAAO,GAAGgB,MAAe,OAAOhB;SAClD,IAAIG,EAAK,IAAI7C,CAAG,KAAK+D,GAI3B,KAHgB5B,GAAoB,QAAQ,IAAInC,CAAG,KAAK,CAAC,EAAA,CAAG,MAC1D,MAAc,CAAC6C,EAAK,IAAImB,CAAS,CAE7B,MAAWD,IAAW,OAAOrB,EAAO,GAAGgB,MAAe,OAAOhB;SAC7D;KACN,IAAMuB,IAAY/B,GAAmB,QAAQ,IAAIlC,CAAG;KACpD,AAAIiE,KAAa,CAACpB,EAAK,IAAIoB,CAAS,KAAK9D,EAAc8D,CAAS,MAC/D,IAAMA;IAER;GACD;GAEA,IADA,MAAanE,GAAaC,GAAKd,GAAOmD,GAAW,SAASL,CAAM,GAC5Dc,EAAK,IAAI7C,CAAG,GAAG;IAClB,IAAIkE,IAAI,GACJF,IAAY,OAAOhE,EAAI,GAAGkE;IAC9B,OAAOrB,EAAK,IAAImB,CAAS,IAExB,AADA,KAAK,GACL,IAAY,OAAOhE,EAAI,GAAGkE;IAE3B,IAAMF;GACP;GAGA,OAFAnB,EAAK,IAAI7C,CAAG,GACZkD,EAAYnD,GAAKd,GAAOe,GAAKmD,CAAS,GAC/B;IAAE;IAAK;IAAK,UAAU3C,EAAeT,GAAKd,GAAOe,GAAKU,CAAQ;GAAE;EACxE,CAAC,GACKyD,IACL9B,KAAS,CAAC+B,IACPP,EAAM,QAAQ,EAAE,aAChBQ,EAAQ,MAAM,MAAWhE,GAAaC,GAAQP,CAAG,CAAC,CAAC,YAAY,CAAC,CAAC,SAASsC,CAAK,CAAC,CACjF,IACCwB;EAgBJ,OAAO;GACN,aAhBqB;IACrB,IAAI,CAAC1C,KAAQmD,GACZ,OAAOH;IAER,IAAM7D,IAAS+D,EAAQ,MAAM,MAASV,EAAK,OAAOxC,EAAK,EAAE;IAIzD,OAHKb,IAGE,CAAC,GAAG6D,CAAQ,CAAC,CAAC,MAAM,GAAG,MAAM;KAGnC,IAAMI,IAAMlF,GAFCiB,EAAO,YAAYZ,EAAE,GAAG,KAAKY,EAAO,SAASZ,EAAE,GAAG,GACjDY,EAAO,YAAYX,EAAE,GAAG,KAAKW,EAAO,SAASX,EAAE,GAAG,CAC1B;KACtC,OAAOwB,EAAK,QAAQ,QAAQoD,IAAM,CAACA;IACpC,CAAC,IAPOJ;GAQT,EAAA,CAEO;GACN,UAAUnB;GACV,OAAOC;GACP,SAASH;GACT,MAAMC;EACP;CACD,GAAG;EAACsB;EAASZ;EAAM/C;EAAU2B;EAAOlB;EAAMiD;EAAiBE;CAAa,CAAC;CAEzE,SAAsB;EACrB,KAAK,IAAM,CAACnB,GAAWqB,MAASjC,EAAK,UACpC,EAAa,QAAQ,IAAIY,GAAWqB,CAAI;EAIzC,AAFA,EAAU,UAAUjC,EAAK,OACzB,GAAmB,UAAUA,EAAK,SAClC,GAAoB,UAAUA,EAAK;CACpC,GAAG,CAACA,CAAI,CAAC;CAET,IAAMkC,IACLC,MAAa,KAAA,KAAajD,OAAoB,KAAA,KAAakD,MAAqB,KAAA,GAC3EC,IAAcF,KAAYnD,IAC1BsD,KAAiBC,GACrB,MAAmB;EAInB,AAHIJ,MAAa,KAAA,KAChBlD,GAAwBH,CAAI,GAE7BsD,IAAmBtD,CAAI;CACxB,GACA,CAACsD,GAAkBD,CAAQ,CAC5B,GACMK,KAAWC,KAAoBC,MAAU,KAAA,IAAY,KAAK,IAAI,GAAGA,CAAK,IAAI1C,EAAK,KAAK,QACpF2C,KAAYC,KAAYA,IAAW,IAAI,KAAK,IAAI,GAAG,KAAK,KAAKJ,KAAWI,CAAQ,CAAC,IAAI,GACrFC,IAAe,KAAK,IAAIF,IAAW,KAAK,IAAI,GAAGG,KAAQ3D,CAAgB,CAAC,GACxE4D,IAAkBR,GACtB,MAAiB;EAIjB,AAHIO,MAAS,KAAA,KACZ1D,GAAoBN,CAAI,GAEzBkE,IAAelE,CAAI;CACpB,GACA,CAACkE,GAAcF,CAAI,CACpB,GACMG,IAAiB1D,EAAsB,IAAI;CACjD,SAAgB;EACf,IAAMrB,IAAY4E,KAAQ3D;EAC1B,IAAIjB,MAAc2E,KAAgBK,GAAS;GAC1C,EAAe,UAAU;GACzB;EACD;EACA,IAAMC,IAAa,GAAGjF,EAAU,GAAG2E;EACnC,AAAII,EAAe,YAAYE,MAC9B,EAAe,UAAUA,GACzBJ,EAAgBF,CAAY;CAE9B,GAAG;EAACC;EAAM3D;EAAkB0D;EAAcK;EAASH;CAAe,CAAC;CACnE,IAAMK,KACL,CAACX,KAAoBG,KAAYA,IAAW,IACzC5C,EAAK,KAAK,OAAO6C,IAAe,KAAKD,GAAUC,IAAeD,CAAQ,IACtE5C,EAAK,MACHqD,IAAWvB,EAAQ,SAAU,OAAuB,MACpDwB,MAAkB,MAAe;EACtC,IAAIC,IAAU;GACb,GACClB,EAAY,SAASmB,CAAE,IAAInB,EAAY,QAAQ,MAASjB,MAASoC,CAAE,IAAI,CAAC,GAAGnB,GAAamB,CAAE,CAC3F;GACA;EACD;EACA,GAAenB,EAAY,SAASmB,CAAE,IAAI,CAAC,IAAI,CAACA,CAAE,CAAC;CACpD;CAEA,OACC,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACC,kBAAC,OAAD;GACC,MAAK;GACL,cAAY,GAAGlF,EAAU;GAEzB,UAAU;GACV,WAAU;GACV,OAAO,EAAE,cAAU;GAEnB,UAAA,kBAACmF,GAAD;IACC,WAAWhH,EAAG,UAAUiH,EAAS;IACjC,cAAYpF;IACZ,oBAAkBC;IAClB,aAAW2E,KAAW,KAAA;IACtB,0BAAuB;IALxB,UAAA,CAOC,kBAACS,GAAD,EAAA,UACC,kBAACC,GAAD,EAAA,UAAA;KACEC,KACA,kBAACC,GAAD;MACC,OAAM;MACN,WAAU;MACV,WAAWrH,EACV,mEACAF,EAAaC,GAAM,GAAG6G,CAAQ,CAC/B;MAND,UAAA,CAQC,kBAAC,QAAD;OAAM,eAAY;OAAO,UAAA;MAAO,CAAA,GAChC,kBAAC,QAAD;OAAM,WAAU;OAAU,UAAA;MAAgB,CAAA,CAChC;;KAEXnB,IACA,kBAAC4B,GAAD;MACC,OAAM;MACN,WAAWrH,EACV,+EACAF,EAAaC,GAAM,MAAoB6G,CAAQ,CAChD;MAEA,UAAA,kBAAC,QAAD;OAAM,WAAU;OAAU,UAAA;MAAY,CAAA;KAC5B,CAAA,IACR;KACHvB,EAAQ,KAAK,GAAQ,MACrB,kBAACgC,GAAD;MAEC,WAAW/F,EAAO;MAClB,WAAWtB,EACV,uCACAF,EACCC,GACC,OAAuB,OAAsBuH,GAC9CV,CACD,GACAtF,EAAO,eACR;MACA,OAAO;OAAE,OAAOA,EAAO;OAAO,UAAUA,EAAO;MAAM;MACrD,OAAM;MACN,aACCA,EAAO,aAAa,KACjB,KAAA,IACAa,GAAM,OAAOb,EAAO,KACnBa,EAAK,QAAQ,QACZ,cACA,eACD;MAGJ,UAAAb,EAAO,aAAa,KACpB,kBAAC,QAAD;OACC,WAAWtB,EACV,4CACAsB,EAAO,cAAc,SAAS,6BAC/B;OAEC,UAAAA,EAAO,iBAAiBA,EAAO;MAC3B,CAAA,IAEN,kBAACiG,GAAD;OACC,WAAWjG,EAAO;OAClB,QAAQa,GAAM,OAAOb,EAAO,KAAKa,EAAK,MAAM,KAAA;OAC5C,cAAYb,EAAO;OACnB,eACCc,GACCD,GAAM,OAAOb,EAAO,MAAMa,EAAK,QAAQ,QACpC;QAAE,IAAIb,EAAO;QAAI,KAAK;OAAO,IAC7B;QAAE,IAAIA,EAAO;QAAI,KAAK;OAAM,CAChC;OAGA,UAAAA,EAAO,iBAAiBA,EAAO;MACZ,CAAA;KAEZ,GAhDLA,EAAO,EAgDF,CACX;IACQ,EAAA,CAAA,EACE,CAAA,GACb,kBAACkG,GAAD,EAAA,UACEf,IACA,kBAACU,GAAD,EAAA,UACC,kBAACM,GAAD;KAAW,SAASb;KAAU,WAAW9G,EAAaC,GAAM,GAAG,CAAC;KAC/D,UAAA,kBAAC,OAAD;MACC,MAAK;MACL,WAAU;MAFX,UAAA;OAIC,kBAAC,QAAD;QAAM,WAAU;QAAU,UAAA;OAAa,CAAA;OACvC,kBAAC2H,GAAD,CAAe,CAAA;OACf,kBAACA,GAAD,CAAe,CAAA;OACf,kBAACA,GAAD,CAAe,CAAA;MACX;;IACK,CAAA,EACF,CAAA,IACPC,KAAS,QAAQA,MAAU,KAC9B,kBAACR,GAAD,EAAA,UACC,kBAACM,GAAD;KAAW,SAASb;KAAU,WAAW9G,EAAaC,GAAM,GAAG,CAAC;KAC/D,UAAA,kBAAC,OAAD;MACC,MAAK;MACL,WAAU;MAFX,UAAA,CAIC,kBAAC,OAAD,EAAA,UAAM4H,EAAW,CAAA,GAChBC,IACA,kBAACC,GAAD;OAAQ,SAAQ;OAAU,MAAK;OAAK,SAASD;OAC3C,UAAAE;MACM,CAAA,IACL,IACA;;IACK,CAAA,EACF,CAAA,IACPnB,GAAM,WAAW,IACpB,kBAACQ,GAAD,EAAA,UACC,kBAACM,GAAD;KAAW,SAASb;KAAU,WAAW9G,EAAaC,GAAM,GAAG,CAAC;KAC/D,UAAA,kBAAC,OAAD;MAAK,MAAK;MAAU,UAAAgI;KAAW,CAAA;IACrB,CAAA,EACF,CAAA,IAEVpB,GAAM,KAAK,EAAE,QAAK,QAAK,eAAY,MAAa;KAC/C,IAAMqB,IAAapC,EAAY,SAASqC,CAAQ;KAChD,OACC,kBAACd,GAAD;MAEC,SAASa,IAAa,aAAa;MACnC,iBAAevC,IAAauC,IAAa,KAAA;MAH1C,UAAA;OAKEZ,KACA,kBAACK,GAAD;QACC,mBAAgB;QAChB,WAAU;QACV,WAAWzH,EACV,+CACAF,EAAaC,GAAM,GAAG6G,CAAQ,CAC/B;QAEE,WAAAT,KAAYA,IAAW,KAAKC,IAAe,KAAKD,IAAW,KAC5D+B,IACA;OACS,CAAA;OAEXzC,IACA,kBAACgC,GAAD;QACC,WAAWzH,EACV,eACAF,EAAaC,GAAM,MAAoB6G,CAAQ,CAChD;QAEA,UAAA,kBAACuB,GAAD;SACC,SAASH;SACT,cAAY,UAAUC;SACtB,uBAAuBpB,GAAeoB,CAAQ;SAC9C,WAAU;QACV,CAAA;OACS,CAAA,IACR;OACH5C,EAAQ,KAAK,GAAQ,MAAgB;QACrC,IAAM+C,IAAO9G,EAAO,SAASP,CAAG;QAChC,OACC,kBAAC0G,GAAD;SAEC,WAAWnG,EAAO;SAClB,WAAWtB,EACVsB,EAAO,OAAO,kCAAkC,qBAChDxB,EACCC,GACC,OAAuB,OAAsBuH,GAC9CV,CACD,GACAtF,EAAO,aACR;SACA,OAAO,EAAE,UAAUA,EAAO,MAAM;SAE/B,UAAA,OAAO8G,KAAS,WAAW,OAAOA,CAAI,IAAIA;QACjC,GAdL9G,EAAO,EAcF;OAEb,CAAC;MACQ;KAtDJ,GAAAN,CAsDI;IAEZ,CAAC,EAEQ,CAAA,CACL;;EACH,CAAA,GACJmF,KAAYA,IAAW,IACvB,kBAACkC,GAAD;GACC,MAAMjC;GACK;GACX,UAAUK;GACV,cAAcH;GACd,WAAWvG,MAAS,aAAa,wCAAwC,KAAA;EACzE,CAAA,IACE,IACA;;AAEP"}
|
|
@@ -399,7 +399,7 @@ function E({ value: m, defaultValue: _ = "", onChange: ae, mode: b = "single", m
|
|
|
399
399
|
readOnly: L,
|
|
400
400
|
min: b === "range" ? void 0 : A,
|
|
401
401
|
max: b === "range" ? void 0 : j,
|
|
402
|
-
className: "sr-only mb-
|
|
402
|
+
className: "sr-only mb-basalt-space-lg min-h-basalt-control-inset",
|
|
403
403
|
style: {
|
|
404
404
|
position: "absolute",
|
|
405
405
|
width: 1,
|
|
@@ -438,12 +438,12 @@ function E({ value: m, defaultValue: _ = "", onChange: ae, mode: b = "single", m
|
|
|
438
438
|
Pe && Ie ? /* @__PURE__ */ f("span", {
|
|
439
439
|
id: He,
|
|
440
440
|
role: "alert",
|
|
441
|
-
className: "mt-
|
|
441
|
+
className: "mt-basalt-space-sm block text-basalt-sm text-basalt-destructive",
|
|
442
442
|
children: Ie
|
|
443
443
|
}) : null,
|
|
444
444
|
/* @__PURE__ */ p(r, {
|
|
445
445
|
arrow: !1,
|
|
446
|
-
className: "w-64 p-
|
|
446
|
+
className: "w-basalt-64 p-basalt-space-lg",
|
|
447
447
|
"aria-label": ct,
|
|
448
448
|
"aria-describedby": Ke,
|
|
449
449
|
onOpenAutoFocus: (e) => {
|
|
@@ -459,18 +459,18 @@ function E({ value: m, defaultValue: _ = "", onChange: ae, mode: b = "single", m
|
|
|
459
459
|
},
|
|
460
460
|
children: [
|
|
461
461
|
he && he.length > 0 ? /* @__PURE__ */ f("div", {
|
|
462
|
-
className: "mb-
|
|
462
|
+
className: "mb-basalt-space-lg flex flex-wrap gap-basalt-space-sm",
|
|
463
463
|
children: he.map((e) => /* @__PURE__ */ f(t, {
|
|
464
464
|
type: "button",
|
|
465
465
|
variant: "ghost",
|
|
466
|
-
className: "h-
|
|
466
|
+
className: "min-h-basalt-control-inset px-basalt-space-lg text-basalt-sm",
|
|
467
467
|
disabled: M || L,
|
|
468
468
|
onClick: () => pt(e),
|
|
469
469
|
children: e.label
|
|
470
470
|
}, e.label))
|
|
471
471
|
}) : null,
|
|
472
472
|
/* @__PURE__ */ p("div", {
|
|
473
|
-
className: "mb-
|
|
473
|
+
className: "mb-basalt-space-lg flex items-center justify-between gap-basalt-space-lg",
|
|
474
474
|
children: [
|
|
475
475
|
/* @__PURE__ */ f(t, {
|
|
476
476
|
type: "button",
|
|
@@ -478,7 +478,7 @@ function E({ value: m, defaultValue: _ = "", onChange: ae, mode: b = "single", m
|
|
|
478
478
|
size: "icon",
|
|
479
479
|
icon: /* @__PURE__ */ f(ee, {}),
|
|
480
480
|
"aria-label": lt,
|
|
481
|
-
className: "size-8",
|
|
481
|
+
className: "size-basalt-8",
|
|
482
482
|
disabled: M || !Y || Y.y < 1,
|
|
483
483
|
onClick: () => {
|
|
484
484
|
!Y || Y.y < 1 || (V.current = null, H.current = !1, et(Y));
|
|
@@ -488,7 +488,7 @@ function E({ value: m, defaultValue: _ = "", onChange: ae, mode: b = "single", m
|
|
|
488
488
|
id: We,
|
|
489
489
|
"aria-live": "polite",
|
|
490
490
|
"aria-atomic": "true",
|
|
491
|
-
className: "text-
|
|
491
|
+
className: "text-basalt-base font-medium",
|
|
492
492
|
children: ie(q, ge, {
|
|
493
493
|
month: "long",
|
|
494
494
|
year: "numeric"
|
|
@@ -500,7 +500,7 @@ function E({ value: m, defaultValue: _ = "", onChange: ae, mode: b = "single", m
|
|
|
500
500
|
size: "icon",
|
|
501
501
|
icon: /* @__PURE__ */ f(d, {}),
|
|
502
502
|
"aria-label": ut,
|
|
503
|
-
className: "size-8",
|
|
503
|
+
className: "size-basalt-8",
|
|
504
504
|
disabled: M || !ot,
|
|
505
505
|
onClick: () => {
|
|
506
506
|
ot && (V.current = null, H.current = !1, et(ot));
|
|
@@ -567,13 +567,13 @@ function E({ value: m, defaultValue: _ = "", onChange: ae, mode: b = "single", m
|
|
|
567
567
|
},
|
|
568
568
|
children: [/* @__PURE__ */ f("thead", { children: /* @__PURE__ */ f("tr", { children: at.map((e, t) => /* @__PURE__ */ f("th", {
|
|
569
569
|
scope: "col",
|
|
570
|
-
className: "h-
|
|
570
|
+
className: "min-h-basalt-control text-center text-basalt-sm font-medium text-basalt-muted-foreground",
|
|
571
571
|
children: e
|
|
572
572
|
}, `${e}-${t}`)) }) }), /* @__PURE__ */ f("tbody", { children: Array.from({ length: 6 }, (t, n) => /* @__PURE__ */ f("tr", { children: J.slice(n * 7, n * 7 + 7).map((t, r) => {
|
|
573
573
|
let i = n * 7 + r;
|
|
574
574
|
if (!t) return /* @__PURE__ */ f("td", {
|
|
575
575
|
role: "gridcell",
|
|
576
|
-
className: "h-
|
|
576
|
+
className: "min-h-basalt-control p-0 text-center",
|
|
577
577
|
ref: () => {
|
|
578
578
|
B.current[i] = null;
|
|
579
579
|
}
|
|
@@ -582,7 +582,7 @@ function E({ value: m, defaultValue: _ = "", onChange: ae, mode: b = "single", m
|
|
|
582
582
|
return /* @__PURE__ */ f("td", {
|
|
583
583
|
role: "gridcell",
|
|
584
584
|
"aria-selected": p ? "true" : void 0,
|
|
585
|
-
className: "h-
|
|
585
|
+
className: "min-h-basalt-control p-0 text-center",
|
|
586
586
|
children: /* @__PURE__ */ f("button", {
|
|
587
587
|
type: "button",
|
|
588
588
|
ref: (e) => {
|
|
@@ -593,7 +593,7 @@ function E({ value: m, defaultValue: _ = "", onChange: ae, mode: b = "single", m
|
|
|
593
593
|
"aria-label": a,
|
|
594
594
|
"aria-pressed": b === "range" ? d : p,
|
|
595
595
|
disabled: M || L || !s,
|
|
596
|
-
className: e(re, "mx-auto flex h-
|
|
596
|
+
className: e(re, "mx-auto flex min-h-basalt-control w-basalt-control items-center justify-center rounded-basalt-md text-basalt-base", o ? "text-basalt-foreground" : "text-basalt-muted-foreground", s && "hover:bg-basalt-hover", ee && !d && "bg-basalt-selected", s && (b === "range" ? d : p) && "bg-basalt-primary text-basalt-primary-foreground hover:bg-basalt-primary-hover"),
|
|
597
597
|
onClick: () => s && ft(a),
|
|
598
598
|
children: t.d
|
|
599
599
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-picker.js","names":["React","pad","value","formatIso","date","utcDate","next","civilDate","parseIso","match","year","month","day","utc","parseIsoMonth","civil","isValidCivil","formatIsoMonth","CALENDAR_BUTTON","todayCivil","parts","read","part","type","formatCivil","locale","options","isLeapYear","y","daysInCivilMonth","m","shiftCivilMonthClamped","total","current","deltaMonths","targetY","targetM","maxD","target","formatTriggerLabel","one","iso","formatDate","mode","rangeFrom","rangeTo","placeholder","selectedDate","compareCivil","left","right","withinBounds","minDate","min","maxDate","max","dateSelectable","isDisabledDate","clampCivil","isoOf","addDays","days","shiftMonth","delta","DatePicker","controlledMonthProp","defaultMonthProp","ariaLabel","ariaDescribedBy","ariaInvalid","inputRest","externalRef","externalOnInvalid","ariaLabelledBy","formRest","uncontrolled","setUncontrolled","useState","defaultValue","uncontrolledRange","setUncontrolledRange","defaultRangeValue","open","setOpen","isInvalid","setIsInvalid","validationMessage","setValidationMessage","focusIndex","setFocusIndex","dayRefs","useRef","pendingFocus","focusDay","hiddenRef","triggerRef","generatedErrorId","errorId","id","generatedMonthLiveId","monthLiveId","generatedKeyboardInstructionsId","keyboardInstructionsId","selected","selectedRange","rangeValue","cursorIso","submitted","controlledParsed","useMemo","isMonthControlled","uncontrolledMonth","setUncontrolledMonth","parsedDef","clampedInitial","timeZone","activeMonth","activeMonthKey","requestMonth","monthKey","onMonthChange","prevSelected","hasExplicitMonthConfig","useEffect","disabled","autoFocus","latestConfigRef","formAttr","form","disposed","timers","onReset","timer","event","cfg","weekdayLabels","formatter","index","weekStartsOn","first","startOffset","start","pending","focused","focusedIso","node","focusedIndex","selectedIndex","firstInMonth","enabled","inMonth","any","previousMonth","followingMonth","label","labels","calendarLabel","prevMonthLabel","nextMonthLabel","selectable","focusCalendarDay","commit","readOnly","nextRange","onRangeChange","onChange","applyPreset","preset","handleHiddenRef","cleanup","invalidState","hasDestructiveStyle","describedBy","Popover","synced","PopoverTrigger","Button","cn","className","PopoverContent","presets","ChevronLeft","ChevronRight","step","col","stepDir","weekIndex","colIndex","inRange","fromDate","toDate","thisDate","inSelectedRange","isRangeEdge","isSelected"],"sources":["../../src/components/date-picker.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport * as React from \"react\";\nimport { type ComponentProps, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\ntype Civil = { y: number; m: number; d: number };\n\nfunction pad(value: number) {\n\treturn String(value).padStart(2, \"0\");\n}\n\nfunction formatIso(date: Civil) {\n\treturn `${String(date.y).padStart(4, \"0\")}-${pad(date.m)}-${pad(date.d)}`;\n}\n\nfunction utcDate(date: Civil) {\n\tconst next = new Date(Date.UTC(date.y, date.m - 1, date.d));\n\tnext.setUTCFullYear(date.y);\n\treturn next;\n}\n\nfunction civilDate(date: Civil) {\n\tconst next = new Date(date.y, date.m - 1, date.d);\n\tnext.setFullYear(date.y);\n\treturn next;\n}\n\nfunction parseIso(value: string): Civil | null {\n\tconst match = /^(\\d{4,})-(\\d{2})-(\\d{2})$/.exec(value);\n\tif (!match) {\n\t\treturn null;\n\t}\n\tconst year = Number(match[1]);\n\tconst month = Number(match[2]);\n\tconst day = Number(match[3]);\n\tif (year < 1) {\n\t\treturn null;\n\t}\n\tconst utc = utcDate({ y: year, m: month, d: day });\n\tif (\n\t\tutc.getUTCFullYear() !== year ||\n\t\tutc.getUTCMonth() + 1 !== month ||\n\t\tutc.getUTCDate() !== day\n\t) {\n\t\treturn null;\n\t}\n\treturn { y: year, m: month, d: day };\n}\n\nfunction parseIsoMonth(value: string | undefined): Civil | null {\n\tif (!value) {\n\t\treturn null;\n\t}\n\tconst match = /^(\\d{4,})-(\\d{2})$/.exec(value);\n\tif (!match) {\n\t\treturn null;\n\t}\n\tconst year = Number(match[1]);\n\tconst month = Number(match[2]);\n\tif (year < 1 || month < 1 || month > 12) {\n\t\treturn null;\n\t}\n\tconst civil = { y: year, m: month, d: 1 };\n\treturn isValidCivil(civil) ? civil : null;\n}\n\nfunction formatIsoMonth(date: Civil): string {\n\treturn `${String(date.y).padStart(4, \"0\")}-${pad(date.m)}`;\n}\n\nconst CALENDAR_BUTTON =\n\t\"appearance-none border-0 bg-transparent p-0 font-inherit text-inherit cursor-pointer\";\n\nfunction todayCivil(timeZone?: string): Civil {\n\tconst parts = new Intl.DateTimeFormat(\"en-CA\", {\n\t\ttimeZone,\n\t\tyear: \"numeric\",\n\t\tmonth: \"2-digit\",\n\t\tday: \"2-digit\",\n\t}).formatToParts(new Date());\n\tconst read = (type: Intl.DateTimeFormatPartTypes) =>\n\t\tNumber(parts.find((part) => part.type === type)?.value);\n\treturn { y: read(\"year\"), m: read(\"month\"), d: read(\"day\") };\n}\n\nfunction formatCivil(date: Civil, locale: string, options: Intl.DateTimeFormatOptions) {\n\treturn new Intl.DateTimeFormat(locale, {\n\t\t...options,\n\t\ttimeZone: \"UTC\",\n\t\tcalendar: \"gregory\",\n\t}).format(utcDate(date));\n}\n\nfunction isLeapYear(y: number): boolean {\n\treturn (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;\n}\n\nfunction daysInCivilMonth(y: number, m: number): number {\n\tif (m === 2) {\n\t\treturn isLeapYear(y) ? 29 : 28;\n\t}\n\tif (m === 4 || m === 6 || m === 9 || m === 11) {\n\t\treturn 30;\n\t}\n\treturn 31;\n}\n\nfunction shiftCivilMonthClamped(current: Civil, deltaMonths: number): Civil | null {\n\tconst total = current.y * 12 + (current.m - 1) + deltaMonths;\n\tconst targetY = Math.floor(total / 12);\n\tif (targetY < 1) {\n\t\treturn null;\n\t}\n\tconst targetM = (((total % 12) + 12) % 12) + 1;\n\tconst maxD = daysInCivilMonth(targetY, targetM);\n\tconst target = { y: targetY, m: targetM, d: Math.min(current.d, maxD) };\n\treturn isValidCivil(target) ? target : null;\n}\n\nfunction formatTriggerLabel({\n\tmode,\n\tselectedDate,\n\trangeFrom,\n\trangeTo,\n\tlocale,\n\tformatDate,\n\tplaceholder = \"Pick a date\",\n}: {\n\tmode: \"single\" | \"range\";\n\tselectedDate: Civil | null;\n\trangeFrom: string;\n\trangeTo?: string;\n\tlocale: string;\n\tformatDate?: (date: Date) => string;\n\tplaceholder?: string;\n}) {\n\tfunction one(iso: string) {\n\t\tconst date = parseIso(iso);\n\t\tif (!date) {\n\t\t\treturn iso;\n\t\t}\n\t\treturn formatDate?.(civilDate(date)) ?? formatCivil(date, locale, { dateStyle: \"medium\" });\n\t}\n\tif (mode === \"range\") {\n\t\tif (!rangeFrom) {\n\t\t\treturn placeholder;\n\t\t}\n\t\tif (!rangeTo) {\n\t\t\treturn `${one(rangeFrom)} – …`;\n\t\t}\n\t\treturn `${one(rangeFrom)} – ${one(rangeTo)}`;\n\t}\n\treturn selectedDate\n\t\t? (formatDate?.(civilDate(selectedDate)) ??\n\t\t\t\tformatCivil(selectedDate, locale, { dateStyle: \"medium\" }))\n\t\t: placeholder;\n}\n\nfunction compareCivil(left: Civil, right: Civil) {\n\tif (left.y !== right.y) {\n\t\treturn left.y - right.y;\n\t}\n\tif (left.m !== right.m) {\n\t\treturn left.m - right.m;\n\t}\n\treturn left.d - right.d;\n}\n\nfunction withinBounds(iso: string, min?: string, max?: string) {\n\tconst date = parseIso(iso);\n\tconst minDate = min ? parseIso(min) : null;\n\tconst maxDate = max ? parseIso(max) : null;\n\tif (!date) {\n\t\treturn false;\n\t}\n\tif (minDate && compareCivil(date, minDate) < 0) {\n\t\treturn false;\n\t}\n\tif (maxDate && compareCivil(date, maxDate) > 0) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction dateSelectable(\n\tiso: string,\n\tmin?: string,\n\tmax?: string,\n\tisDisabledDate?: (iso: string) => boolean,\n) {\n\treturn withinBounds(iso, min, max) && !isDisabledDate?.(iso);\n}\n\nexport type DatePickerRange = { from: string; to?: string };\n\nexport type DatePickerPreset = {\n\tlabel: string;\n\tvalue: string | { from: string; to: string };\n};\n\nexport type DatePickerLabels = {\n\t/**\n\t * Accessible label for the calendar popup container.\n\t * @default \"Date calendar\" (or derived from `aria-label`)\n\t */\n\tcalendar?: string;\n\t/**\n\t * Accessible label for previous month button.\n\t * @default \"Prev\"\n\t */\n\tpreviousMonth?: string;\n\t/**\n\t * Accessible label for next month button.\n\t * @default \"Next\"\n\t */\n\tnextMonth?: string;\n\t/**\n\t * Fallback label for the trigger when no date is chosen.\n\t * @default \"Pick a date\"\n\t */\n\tplaceholder?: string;\n\t/**\n\t * Custom validation error message displayed when form validation fails.\n\t */\n\tvalidationMessage?: string;\n\t/**\n\t * Accessible keyboard navigation instructions announced for the calendar grid.\n\t */\n\tkeyboardInstructions?: string;\n};\n\nexport type DatePickerProps = Omit<\n\tComponentProps<\"input\">,\n\t| \"value\"\n\t| \"defaultValue\"\n\t| \"onChange\"\n\t| \"type\"\n\t| \"children\"\n\t| \"disabled\"\n\t| \"name\"\n\t| \"required\"\n\t| \"min\"\n\t| \"max\"\n> & {\n\t/**\n\t * The controlled ISO date in single mode.\n\t */\n\tvalue?: string;\n\t/**\n\t * The uncontrolled initial ISO date in single mode.\n\t */\n\tdefaultValue?: string;\n\t/**\n\t * Called with the ISO date in single mode.\n\t */\n\tonChange?: (value: string) => void;\n\t/**\n\t * Selection mode.\n\t * @default single\n\t */\n\tmode?: \"single\" | \"range\";\n\t/**\n\t * The controlled displayed month in `YYYY-MM` format (at least 4-digit positive year).\n\t * If omitted or invalid, falls back smoothly to `defaultMonth`, selected date, or today.\n\t */\n\tmonth?: string;\n\t/**\n\t * The uncontrolled initial displayed month in `YYYY-MM` format (at least 4-digit positive year).\n\t * If omitted or invalid, falls back smoothly to selected date or today.\n\t */\n\tdefaultMonth?: string;\n\t/**\n\t * Called only when calendar navigation requests a month change (`YYYY-MM`).\n\t * Not invoked during component render or synchronous prop synchronization.\n\t */\n\tonMonthChange?: (month: string) => void;\n\t/**\n\t * The controlled range in range mode.\n\t */\n\trangeValue?: DatePickerRange;\n\t/**\n\t * The uncontrolled initial range in range mode.\n\t */\n\tdefaultRangeValue?: DatePickerRange;\n\t/**\n\t * Called when the range changes.\n\t */\n\tonRangeChange?: (value: DatePickerRange) => void;\n\t/**\n\t * Additional dates that cannot be selected.\n\t */\n\tisDisabledDate?: (iso: string) => boolean;\n\t/**\n\t * Shortcut values shown above the calendar.\n\t */\n\tpresets?: DatePickerPreset[];\n\t/**\n\t * Locale used to format the trigger and weekday labels.\n\t * @default en-US\n\t */\n\tlocale?: string;\n\t/**\n\t * First day of the week. 0 is Sunday.\n\t * @default 0\n\t */\n\tweekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\t/**\n\t * IANA time zone used to resolve today.\n\t */\n\ttimeZone?: string;\n\t/**\n\t * Custom formatter for the trigger label.\n\t */\n\tformatDate?: (date: Date) => string;\n\t/**\n\t * Optional localized labels for calendar dialog, navigation, and trigger placeholder.\n\t */\n\tlabels?: DatePickerLabels;\n\t/**\n\t * Native form field name.\n\t */\n\tname?: string;\n\t/**\n\t * Native required constraint. When readOnly is set, native required validation is disabled.\n\t * When an empty required DatePicker submits, the visible trigger receives focus and invalid state.\n\t */\n\trequired?: boolean;\n\t/**\n\t * Inclusive lower ISO bound.\n\t */\n\tmin?: string;\n\t/**\n\t * Inclusive upper ISO bound.\n\t */\n\tmax?: string;\n\t/**\n\t * Disable the trigger and calendar.\n\t */\n\tdisabled?: boolean;\n};\n\nfunction clampCivil(date: Civil, min?: string, max?: string) {\n\tconst minDate = min ? parseIso(min) : null;\n\tconst maxDate = max ? parseIso(max) : null;\n\tif (minDate && compareCivil(date, minDate) < 0) {\n\t\treturn minDate;\n\t}\n\tif (maxDate && compareCivil(date, maxDate) > 0) {\n\t\treturn maxDate;\n\t}\n\treturn date;\n}\n\nfunction isValidCivil(date: Civil): boolean {\n\tif (!Number.isFinite(date.y) || date.m < 1 || date.m > 12 || date.d < 1 || date.d > 31) {\n\t\treturn false;\n\t}\n\tconst utc = utcDate(date);\n\treturn (\n\t\t!Number.isNaN(utc.getTime()) &&\n\t\tutc.getUTCFullYear() === date.y &&\n\t\tutc.getUTCMonth() + 1 === date.m &&\n\t\tutc.getUTCDate() === date.d\n\t);\n}\n\nfunction isoOf(date: Civil | null) {\n\treturn date ? formatIso(date) : \"\";\n}\n\nfunction addDays(date: Civil, days: number): Civil | null {\n\tconst next = utcDate(date);\n\tif (Number.isNaN(next.getTime())) {\n\t\treturn null;\n\t}\n\tnext.setUTCDate(next.getUTCDate() + days);\n\tif (Number.isNaN(next.getTime())) {\n\t\treturn null;\n\t}\n\tconst civil = { y: next.getUTCFullYear(), m: next.getUTCMonth() + 1, d: next.getUTCDate() };\n\treturn isValidCivil(civil) ? civil : null;\n}\n\nfunction shiftMonth(month: Civil, delta: number): Civil | null {\n\tconst total = month.y * 12 + (month.m - 1) + delta;\n\tconst next = { y: Math.floor(total / 12), m: (total % 12) + 1, d: 1 };\n\treturn isValidCivil(next) ? next : null;\n}\n\nexport function DatePicker({\n\tvalue,\n\tdefaultValue = \"\",\n\tonChange,\n\tmode = \"single\",\n\tmonth: controlledMonthProp,\n\tdefaultMonth: defaultMonthProp,\n\tonMonthChange,\n\trangeValue,\n\tdefaultRangeValue,\n\tonRangeChange,\n\tisDisabledDate,\n\tpresets,\n\tlocale = \"en-US\",\n\tweekStartsOn = 0,\n\ttimeZone,\n\tformatDate,\n\tname,\n\trequired,\n\tmin,\n\tmax,\n\tdisabled,\n\tclassName,\n\tid,\n\t\"aria-label\": ariaLabel,\n\t\"aria-describedby\": ariaDescribedBy,\n\t\"aria-invalid\": ariaInvalid,\n\tlabels,\n\t...inputRest\n}: DatePickerProps) {\n\tconst {\n\t\tref: externalRef,\n\t\treadOnly,\n\t\tautoFocus,\n\t\tonFocus,\n\t\tonBlur,\n\t\tonInvalid: externalOnInvalid,\n\t\t\"aria-labelledby\": ariaLabelledBy,\n\t\t...formRest\n\t} = inputRest;\n\tconst [uncontrolled, setUncontrolled] = useState(defaultValue);\n\tconst [uncontrolledRange, setUncontrolledRange] = useState<DatePickerRange>(\n\t\tdefaultRangeValue ?? { from: \"\", to: undefined },\n\t);\n\tconst [open, setOpen] = useState(false);\n\tconst [isInvalid, setIsInvalid] = useState(false);\n\tconst [validationMessage, setValidationMessage] = useState(\"\");\n\tconst [focusIndex, setFocusIndex] = useState(0);\n\tconst dayRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\tconst pendingFocus = useRef<{ targetMonthKey: string; iso: string } | null>(null);\n\tconst focusDay = useRef(false);\n\tconst hiddenRef = useRef<HTMLInputElement>(null);\n\tconst triggerRef = useRef<HTMLButtonElement>(null);\n\tconst generatedErrorId = React.useId();\n\tconst errorId = id ? `${id}-error` : generatedErrorId;\n\tconst generatedMonthLiveId = React.useId();\n\tconst monthLiveId = id ? `${id}-month-live` : generatedMonthLiveId;\n\tconst generatedKeyboardInstructionsId = React.useId();\n\tconst keyboardInstructionsId = id\n\t\t? `${id}-keyboard-instructions`\n\t\t: generatedKeyboardInstructionsId;\n\n\tconst selected = value ?? uncontrolled;\n\tconst selectedRange = rangeValue ?? uncontrolledRange;\n\tconst selectedDate = parseIso(\n\t\tmode === \"range\" ? selectedRange.to || selectedRange.from || \"\" : selected,\n\t);\n\tconst cursorIso = selectedDate ? formatIso(selectedDate) : \"\";\n\n\tuseEffect(() => {\n\t\tif (cursorIso) {\n\t\t\tsetIsInvalid(false);\n\t\t\tsetValidationMessage(\"\");\n\t\t}\n\t}, [cursorIso]);\n\tconst submitted = mode === \"range\" ? \"\" : cursorIso;\n\n\tconst controlledParsed = useMemo(() => parseIsoMonth(controlledMonthProp), [controlledMonthProp]);\n\tconst isMonthControlled = controlledParsed !== null;\n\n\tconst [uncontrolledMonth, setUncontrolledMonth] = useState<Civil>(() => {\n\t\tconst parsedDef = parseIsoMonth(defaultMonthProp);\n\t\tif (parsedDef) {\n\t\t\treturn parsedDef;\n\t\t}\n\t\tconst initialCursor = selectedDate ?? todayCivil(timeZone);\n\t\tconst clampedInitial = clampCivil(initialCursor, min, max);\n\t\treturn { y: clampedInitial.y, m: clampedInitial.m, d: 1 };\n\t});\n\n\tconst activeMonth = controlledParsed ?? uncontrolledMonth;\n\tconst activeMonthKey = formatIsoMonth(activeMonth);\n\n\tconst requestMonth = (target: Civil) => {\n\t\tconst monthKey = formatIsoMonth(target);\n\t\tif (!isMonthControlled) {\n\t\t\tsetUncontrolledMonth(target);\n\t\t}\n\t\tonMonthChange?.(monthKey);\n\t};\n\n\tconst prevSelected = useRef(cursorIso);\n\tif (open && prevSelected.current !== cursorIso) {\n\t\tfocusDay.current = true;\n\t\tif (controlledMonthProp === undefined && defaultMonthProp === undefined) {\n\t\t\tconst next = selectedDate ?? todayCivil(timeZone);\n\t\t\tif (activeMonth.y !== next.y || activeMonth.m !== next.m) {\n\t\t\t\tsetUncontrolledMonth({ y: next.y, m: next.m, d: 1 });\n\t\t\t}\n\t\t}\n\t}\n\tprevSelected.current = cursorIso;\n\n\tconst hasExplicitMonthConfig =\n\t\tcontrolledMonthProp !== undefined || defaultMonthProp !== undefined;\n\n\tuseEffect(() => {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\t\tif (!hasExplicitMonthConfig) {\n\t\t\tconst next = clampCivil(\n\t\t\t\t(cursorIso ? parseIso(cursorIso) : null) ?? todayCivil(timeZone),\n\t\t\t\tmin,\n\t\t\t\tmax,\n\t\t\t);\n\t\t\tsetUncontrolledMonth({ y: next.y, m: next.m, d: 1 });\n\t\t\tif (!cursorIso) {\n\t\t\t\tfocusDay.current = true;\n\t\t\t}\n\t\t}\n\t}, [open, cursorIso, timeZone, min, max, hasExplicitMonthConfig]);\n\n\tuseEffect(() => {\n\t\tif (disabled) {\n\t\t\tsetOpen(false);\n\t\t}\n\t}, [disabled]);\n\n\tuseEffect(() => {\n\t\tif (autoFocus) {\n\t\t\ttriggerRef.current?.focus();\n\t\t}\n\t}, [autoFocus]);\n\n\tconst latestConfigRef = useRef({\n\t\tdefaultValue,\n\t\tdefaultRangeValue,\n\t\tmode,\n\t\trangeValue,\n\t\tvalue,\n\t});\n\tuseEffect(() => {\n\t\tlatestConfigRef.current = {\n\t\t\tdefaultValue,\n\t\t\tdefaultRangeValue,\n\t\t\tmode,\n\t\t\trangeValue,\n\t\t\tvalue,\n\t\t};\n\t});\n\n\tconst formAttr = formRest.form;\n\tuseEffect(() => {\n\t\tconst form = hiddenRef.current?.form;\n\t\tif (!form || (formAttr && form.id !== formAttr)) {\n\t\t\treturn;\n\t\t}\n\t\tlet disposed = false;\n\t\tconst timers = new Set<ReturnType<typeof setTimeout>>();\n\t\tconst onReset = (event: Event) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\ttimers.delete(timer);\n\t\t\t\tif (disposed || event.defaultPrevented) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst cfg = latestConfigRef.current;\n\t\t\t\tif (cfg.mode === \"range\" ? cfg.rangeValue === undefined : cfg.value === undefined) {\n\t\t\t\t\tsetUncontrolled(cfg.defaultValue);\n\t\t\t\t\tsetUncontrolledRange(cfg.defaultRangeValue ?? { from: \"\", to: undefined });\n\t\t\t\t}\n\t\t\t\tsetIsInvalid(false);\n\t\t\t\tsetValidationMessage(\"\");\n\t\t\t\tsetOpen(false);\n\t\t\t}, 0);\n\t\t\ttimers.add(timer);\n\t\t};\n\t\tform.addEventListener(\"reset\", onReset);\n\t\treturn () => {\n\t\t\tdisposed = true;\n\t\t\tfor (const timer of timers) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t}\n\t\t\ttimers.clear();\n\t\t\tform.removeEventListener(\"reset\", onReset);\n\t\t};\n\t}, [formAttr]);\n\n\tconst weekdayLabels = useMemo(() => {\n\t\tconst formatter = new Intl.DateTimeFormat(locale, { weekday: \"short\", timeZone: \"UTC\" });\n\t\treturn Array.from({ length: 7 }, (_, index) => {\n\t\t\tconst day = new Date(Date.UTC(2024, 0, 7 + ((index + weekStartsOn) % 7)));\n\t\t\treturn formatter.format(day);\n\t\t});\n\t}, [locale, weekStartsOn]);\n\n\tconst days = useMemo(() => {\n\t\tconst first = { y: activeMonth.y, m: activeMonth.m, d: 1 };\n\t\tif (!isValidCivil(first)) {\n\t\t\treturn Array.from({ length: 42 }, () => null);\n\t\t}\n\t\tconst startOffset = (utcDate(first).getUTCDay() - weekStartsOn + 7) % 7;\n\t\tconst start = addDays(first, -startOffset);\n\t\tif (!start) {\n\t\t\treturn Array.from({ length: 42 }, (_, index) => addDays(first, index - startOffset));\n\t\t}\n\t\treturn Array.from({ length: 42 }, (_, index) => addDays(start, index));\n\t}, [activeMonth, weekStartsOn]);\n\n\tuseLayoutEffect(() => {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\t\tconst pending = pendingFocus.current;\n\t\tlet index = 0;\n\t\tif (pending) {\n\t\t\tif (pending.targetMonthKey === activeMonthKey) {\n\t\t\t\tpendingFocus.current = null;\n\t\t\t\tindex = days.findIndex((date) => isoOf(date) === pending.iso);\n\t\t\t\tif (index < 0) {\n\t\t\t\t\tindex = 0;\n\t\t\t\t}\n\t\t\t\tfocusDay.current = true;\n\t\t\t} else {\n\t\t\t\tconst focused = document.activeElement;\n\t\t\t\tconst focusedIso =\n\t\t\t\t\tfocused instanceof HTMLElement && dayRefs.current.some((node) => node === focused)\n\t\t\t\t\t\t? focused.getAttribute(\"aria-label\")\n\t\t\t\t\t\t: null;\n\t\t\t\tconst focusedIndex = focusedIso ? days.findIndex((date) => isoOf(date) === focusedIso) : -1;\n\t\t\t\tif (focusedIndex >= 0) {\n\t\t\t\t\tindex = focusedIndex;\n\t\t\t\t} else {\n\t\t\t\t\tindex = focusIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst focused = document.activeElement;\n\t\t\tconst focusedIso =\n\t\t\t\t!focusDay.current &&\n\t\t\t\tfocused instanceof HTMLElement &&\n\t\t\t\tdayRefs.current.some((node) => node === focused)\n\t\t\t\t\t? focused.getAttribute(\"aria-label\")\n\t\t\t\t\t: null;\n\t\t\tconst focusedIndex = focusedIso ? days.findIndex((date) => isoOf(date) === focusedIso) : -1;\n\t\t\tif (focusedIndex >= 0) {\n\t\t\t\tindex = focusedIndex;\n\t\t\t} else {\n\t\t\t\tconst iso = cursorIso || submitted || formatIso(todayCivil(timeZone));\n\t\t\t\tconst selectedIndex = days.findIndex((date) => isoOf(date) === iso);\n\t\t\t\tif (selectedIndex >= 0 && days[selectedIndex]?.m === activeMonth.m) {\n\t\t\t\t\tindex = selectedIndex;\n\t\t\t\t} else {\n\t\t\t\t\tconst firstInMonth = days.findIndex((date) => date?.m === activeMonth.m);\n\t\t\t\t\tindex = firstInMonth >= 0 ? firstInMonth : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst enabled = (date: Civil | null) =>\n\t\t\tBoolean(date && date.y >= 1 && dateSelectable(formatIso(date), min, max, isDisabledDate));\n\t\tif (!enabled(days[index] ?? null)) {\n\t\t\tconst inMonth = days.findIndex((date) => date?.m === activeMonth.m && enabled(date));\n\t\t\tconst any = days.findIndex((date) => enabled(date));\n\t\t\tindex = inMonth >= 0 ? inMonth : any >= 0 ? any : index;\n\t\t}\n\t\tsetFocusIndex(index);\n\t\tif (focusDay.current) {\n\t\t\tfocusDay.current = false;\n\t\t\tdayRefs.current[index]?.focus();\n\t\t}\n\t}, [\n\t\topen,\n\t\tcursorIso,\n\t\tsubmitted,\n\t\ttimeZone,\n\t\tdays,\n\t\tactiveMonth.m,\n\t\tactiveMonthKey,\n\t\tfocusIndex,\n\t\tmin,\n\t\tmax,\n\t\tisDisabledDate,\n\t]);\n\n\tconst previousMonth = shiftMonth(activeMonth, -1);\n\tconst followingMonth = shiftMonth(activeMonth, 1);\n\tconst rangeFrom = mode === \"range\" ? selectedRange.from : \"\";\n\tconst rangeTo = mode === \"range\" ? selectedRange.to : undefined;\n\tconst label = formatTriggerLabel({\n\t\tmode,\n\t\tselectedDate,\n\t\trangeFrom,\n\t\trangeTo,\n\t\tlocale,\n\t\tformatDate,\n\t\tplaceholder: labels?.placeholder,\n\t});\n\tconst calendarLabel = labels?.calendar ?? (ariaLabel ? `${ariaLabel} calendar` : \"Date calendar\");\n\tconst prevMonthLabel = labels?.previousMonth ?? \"Prev\";\n\tconst nextMonthLabel = labels?.nextMonth ?? \"Next\";\n\n\tfunction selectable(iso: string) {\n\t\treturn dateSelectable(iso, min, max, isDisabledDate);\n\t}\n\n\tfunction focusCalendarDay(next: Civil) {\n\t\tif (next.y !== activeMonth.y || next.m !== activeMonth.m) {\n\t\t\tpendingFocus.current = {\n\t\t\t\ttargetMonthKey: formatIsoMonth(next),\n\t\t\t\tiso: formatIso(next),\n\t\t\t};\n\t\t\trequestMonth({ y: next.y, m: next.m, d: 1 });\n\t\t\treturn;\n\t\t}\n\t\tconst index = days.findIndex((date) => isoOf(date) === formatIso(next));\n\t\tif (index >= 0) {\n\t\t\tsetFocusIndex(index);\n\t\t\tdayRefs.current[index]?.focus();\n\t\t}\n\t}\n\n\tfunction commit(next: string) {\n\t\tif (disabled || readOnly || !selectable(next)) {\n\t\t\treturn;\n\t\t}\n\t\tif (next) {\n\t\t\tsetIsInvalid(false);\n\t\t\tsetValidationMessage(\"\");\n\t\t}\n\t\tif (mode === \"range\") {\n\t\t\tconst current = rangeValue ?? uncontrolledRange;\n\t\t\tconst nextRange =\n\t\t\t\t!current.from || current.to\n\t\t\t\t\t? { from: next }\n\t\t\t\t\t: compareCivil(\n\t\t\t\t\t\t\t\tparseIso(next) ?? { y: 1, m: 1, d: 1 },\n\t\t\t\t\t\t\t\tparseIso(current.from) ?? { y: 1, m: 1, d: 1 },\n\t\t\t\t\t\t\t) < 0\n\t\t\t\t\t\t? { from: next, to: current.from }\n\t\t\t\t\t\t: { from: current.from, to: next };\n\t\t\tif (rangeValue === undefined) {\n\t\t\t\tsetUncontrolledRange(nextRange);\n\t\t\t}\n\t\t\tonRangeChange?.(nextRange);\n\t\t\tif (nextRange.to) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (value === undefined) {\n\t\t\tsetUncontrolled(next);\n\t\t}\n\t\tsetOpen(false);\n\t\tonChange?.(next);\n\t}\n\n\tfunction applyPreset(preset: DatePickerPreset) {\n\t\tif (disabled || readOnly) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof preset.value === \"string\") {\n\t\t\tif (mode === \"range\") {\n\t\t\t\tif (!selectable(preset.value)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst nextRange = { from: preset.value, to: preset.value };\n\t\t\t\tif (rangeValue === undefined) {\n\t\t\t\t\tsetUncontrolledRange(nextRange);\n\t\t\t\t}\n\t\t\t\tonRangeChange?.(nextRange);\n\t\t\t\tsetOpen(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcommit(preset.value);\n\t\t\treturn;\n\t\t}\n\t\tif (mode === \"range\") {\n\t\t\tif (!selectable(preset.value.from) || !selectable(preset.value.to)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (rangeValue === undefined) {\n\t\t\t\tsetUncontrolledRange(preset.value);\n\t\t\t}\n\t\t\tonRangeChange?.(preset.value);\n\t\t\tsetOpen(false);\n\t\t}\n\t}\n\n\tconst handleHiddenRef = React.useCallback(\n\t\t(node: HTMLInputElement | null) => {\n\t\t\thiddenRef.current = node;\n\t\t\tif (!externalRef) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof externalRef === \"function\") {\n\t\t\t\tconst cleanup = externalRef(node);\n\t\t\t\tif (typeof cleanup === \"function\") {\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\thiddenRef.current = null;\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn () => {\n\t\t\t\t\thiddenRef.current = null;\n\t\t\t\t\texternalRef(null);\n\t\t\t\t};\n\t\t\t}\n\t\t\t(externalRef as React.RefObject<HTMLInputElement | null>).current = node;\n\t\t\treturn () => {\n\t\t\t\thiddenRef.current = null;\n\t\t\t\t(externalRef as React.RefObject<HTMLInputElement | null>).current = null;\n\t\t\t};\n\t\t},\n\t\t[externalRef],\n\t);\n\n\tconst invalidState = ariaInvalid ?? (isInvalid || undefined);\n\tconst hasDestructiveStyle =\n\t\tinvalidState === true ||\n\t\tinvalidState === \"true\" ||\n\t\tinvalidState === \"grammar\" ||\n\t\tinvalidState === \"spelling\";\n\n\tconst describedBy =\n\t\t[ariaDescribedBy, isInvalid && errorId ? errorId : undefined].filter(Boolean).join(\" \") ||\n\t\tundefined;\n\n\treturn (\n\t\t<Popover\n\t\t\topen={open}\n\t\t\tonOpenChange={(next) => {\n\t\t\t\tif (next && disabled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (next) {\n\t\t\t\t\tpendingFocus.current = null;\n\t\t\t\t\tif (controlledMonthProp === undefined && defaultMonthProp === undefined) {\n\t\t\t\t\t\tconst synced = (cursorIso ? parseIso(cursorIso) : null) ?? todayCivil(timeZone);\n\t\t\t\t\t\tsetUncontrolledMonth({ y: synced.y, m: synced.m, d: 1 });\n\t\t\t\t\t}\n\t\t\t\t\tfocusDay.current = true;\n\t\t\t\t} else {\n\t\t\t\t\tpendingFocus.current = null;\n\t\t\t\t}\n\t\t\t\tsetOpen(next);\n\t\t\t}}\n\t\t>\n\t\t\t<input\n\t\t\t\tref={handleHiddenRef}\n\t\t\t\ttype={mode === \"range\" ? \"text\" : \"date\"}\n\t\t\t\tname={name}\n\t\t\t\trequired={required}\n\t\t\t\treadOnly={readOnly}\n\t\t\t\tmin={mode === \"range\" ? undefined : min}\n\t\t\t\tmax={mode === \"range\" ? undefined : max}\n\t\t\t\tclassName=\"sr-only mb-2 h-7\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: 1,\n\t\t\t\t\theight: 1,\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\tclip: \"rect(0, 0, 0, 0)\",\n\t\t\t\t}}\n\t\t\t\tvalue={\n\t\t\t\t\tmode === \"range\" ? (rangeFrom && rangeTo ? `${rangeFrom}/${rangeTo}` : \"\") : submitted\n\t\t\t\t}\n\t\t\t\tonChange={() => undefined}\n\t\t\t\tonInvalid={(event) => {\n\t\t\t\t\texternalOnInvalid?.(event);\n\t\t\t\t\tif (!event.defaultPrevented) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tsetIsInvalid(true);\n\t\t\t\t\t\tsetValidationMessage(\n\t\t\t\t\t\t\tlabels?.validationMessage ||\n\t\t\t\t\t\t\t\t(event.target as HTMLInputElement).validationMessage ||\n\t\t\t\t\t\t\t\t\"Please fill out this field.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttriggerRef.current?.focus();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\ttabIndex={-1}\n\t\t\t\t{...formRest}\n\t\t\t/>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tref={triggerRef}\n\t\t\t\t\tid={id}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonFocus={onFocus as ComponentProps<\"button\">[\"onFocus\"]}\n\t\t\t\t\tonBlur={onBlur as ComponentProps<\"button\">[\"onBlur\"]}\n\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\taria-label={\n\t\t\t\t\t\tariaLabel ? (label === \"Pick a date\" ? ariaLabel : `${ariaLabel}: ${label}`) : undefined\n\t\t\t\t\t}\n\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\taria-invalid={invalidState}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"justify-start font-normal\",\n\t\t\t\t\t\thasDestructiveStyle && \"border-basalt-destructive text-basalt-destructive\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</Button>\n\t\t\t</PopoverTrigger>\n\t\t\t{isInvalid && validationMessage ? (\n\t\t\t\t<span id={errorId} role=\"alert\" className=\"mt-1 block text-xs text-basalt-destructive\">\n\t\t\t\t\t{validationMessage}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t\t<PopoverContent\n\t\t\t\tarrow={false}\n\t\t\t\tclassName=\"w-64 p-3\"\n\t\t\t\taria-label={calendarLabel}\n\t\t\t\taria-describedby={keyboardInstructionsId}\n\t\t\t\tonOpenAutoFocus={(event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tconst iso = cursorIso || submitted || formatIso(todayCivil(timeZone));\n\t\t\t\t\tconst selectedIndex = days.findIndex((date) => isoOf(date) === iso);\n\t\t\t\t\tconst enabled = (date: Civil | null) =>\n\t\t\t\t\t\tBoolean(\n\t\t\t\t\t\t\tdate && date.y >= 1 && dateSelectable(formatIso(date), min, max, isDisabledDate),\n\t\t\t\t\t\t);\n\t\t\t\t\tlet index =\n\t\t\t\t\t\tselectedIndex >= 0 && days[selectedIndex]?.m === activeMonth.m\n\t\t\t\t\t\t\t? selectedIndex\n\t\t\t\t\t\t\t: Math.max(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tdays.findIndex((date) => date?.m === activeMonth.m),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\tif (!enabled(days[index] ?? null)) {\n\t\t\t\t\t\tconst inMonth = days.findIndex((date) => date?.m === activeMonth.m && enabled(date));\n\t\t\t\t\t\tconst any = days.findIndex((date) => enabled(date));\n\t\t\t\t\t\tindex = inMonth >= 0 ? inMonth : any >= 0 ? any : index;\n\t\t\t\t\t}\n\t\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t\tdayRefs.current[index]?.focus();\n\t\t\t\t\t});\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{presets && presets.length > 0 ? (\n\t\t\t\t\t<div className=\"mb-2 flex flex-wrap gap-1\">\n\t\t\t\t\t\t{presets.map((preset) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tkey={preset.label}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\tclassName=\"h-7 px-2 text-xs\"\n\t\t\t\t\t\t\t\tdisabled={disabled || readOnly}\n\t\t\t\t\t\t\t\tonClick={() => applyPreset(preset)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{preset.label}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t\t<div className=\"mb-2 flex items-center justify-between gap-2\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\ticon={<ChevronLeft />}\n\t\t\t\t\t\taria-label={prevMonthLabel}\n\t\t\t\t\t\tclassName=\"size-8\"\n\t\t\t\t\t\tdisabled={disabled || !previousMonth || previousMonth.y < 1}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (!previousMonth || previousMonth.y < 1) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingFocus.current = null;\n\t\t\t\t\t\t\tfocusDay.current = false;\n\t\t\t\t\t\t\trequestMonth(previousMonth);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<span\n\t\t\t\t\t\tid={monthLiveId}\n\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\taria-atomic=\"true\"\n\t\t\t\t\t\tclassName=\"text-sm font-medium\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{formatCivil(activeMonth, locale, { month: \"long\", year: \"numeric\" })}\n\t\t\t\t\t</span>\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\ticon={<ChevronRight />}\n\t\t\t\t\t\taria-label={nextMonthLabel}\n\t\t\t\t\t\tclassName=\"size-8\"\n\t\t\t\t\t\tdisabled={disabled || !followingMonth}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (!followingMonth) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingFocus.current = null;\n\t\t\t\t\t\t\tfocusDay.current = false;\n\t\t\t\t\t\t\trequestMonth(followingMonth);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<p id={keyboardInstructionsId} className=\"sr-only\">\n\t\t\t\t\t{labels?.keyboardInstructions ??\n\t\t\t\t\t\t\"Use arrow keys to navigate dates, PageUp and PageDown to change months, and Enter or Space to select.\"}\n\t\t\t\t</p>\n\t\t\t\t{/* Biome override: WAI-ARIA APG Date Picker pattern uses a semantic table with role=\"grid\" and role=\"gridcell\" on cells while roving tabindex focuses the child button */}\n\t\t\t\t<table\n\t\t\t\t\trole=\"grid\"\n\t\t\t\t\taria-labelledby={monthLiveId}\n\t\t\t\t\taria-multiselectable={mode === \"range\" ? \"true\" : undefined}\n\t\t\t\t\tclassName=\"w-full border-collapse text-center\"\n\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\tconst current = days[focusIndex];\n\t\t\t\t\t\tif (!current) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tevent.key === \"ArrowRight\" ||\n\t\t\t\t\t\t\tevent.key === \"ArrowLeft\" ||\n\t\t\t\t\t\t\tevent.key === \"ArrowDown\" ||\n\t\t\t\t\t\t\tevent.key === \"ArrowUp\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tconst delta =\n\t\t\t\t\t\t\t\tevent.key === \"ArrowRight\"\n\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t: event.key === \"ArrowLeft\"\n\t\t\t\t\t\t\t\t\t\t? -1\n\t\t\t\t\t\t\t\t\t\t: event.key === \"ArrowDown\"\n\t\t\t\t\t\t\t\t\t\t\t? 7\n\t\t\t\t\t\t\t\t\t\t\t: -7;\n\t\t\t\t\t\t\tlet next = addDays(current, delta);\n\t\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\t\tlet step = 0;\n\t\t\t\t\t\t\t\tnext && next.y >= 1 && !selectable(formatIso(next)) && step < 42;\n\t\t\t\t\t\t\t\tstep += 1\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnext = addDays(next, delta);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!next || next.y < 1 || !selectable(formatIso(next))) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfocusCalendarDay(next);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.key === \"Home\" || event.key === \"End\") {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tconst dayOfWeek = utcDate(current).getUTCDay();\n\t\t\t\t\t\t\tconst col = (dayOfWeek - weekStartsOn + 7) % 7;\n\t\t\t\t\t\t\tconst deltaToEdge = event.key === \"Home\" ? -col : 6 - col;\n\t\t\t\t\t\t\tlet next: Civil | null = addDays(current, deltaToEdge);\n\t\t\t\t\t\t\tconst stepDir = event.key === \"Home\" ? 1 : -1;\n\t\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\t\tlet step = 0;\n\t\t\t\t\t\t\t\tnext && next.y >= 1 && !selectable(formatIso(next)) && step < 7;\n\t\t\t\t\t\t\t\tstep += 1\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnext = addDays(next, stepDir);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!next || next.y < 1 || !selectable(formatIso(next))) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfocusCalendarDay(next);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.key === \"PageDown\" || event.key === \"PageUp\") {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tconst deltaMonths = event.shiftKey\n\t\t\t\t\t\t\t\t? event.key === \"PageDown\"\n\t\t\t\t\t\t\t\t\t? 12\n\t\t\t\t\t\t\t\t\t: -12\n\t\t\t\t\t\t\t\t: event.key === \"PageDown\"\n\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t: -1;\n\t\t\t\t\t\t\tconst target = shiftCivilMonthClamped(current, deltaMonths);\n\t\t\t\t\t\t\tif (!target) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet next: Civil | null = target;\n\t\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\t\tlet step = 0;\n\t\t\t\t\t\t\t\tnext && next.y >= 1 && !selectable(formatIso(next)) && step < 42;\n\t\t\t\t\t\t\t\tstep += 1\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnext = addDays(next, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!next || next.y < 1 || !selectable(formatIso(next))) {\n\t\t\t\t\t\t\t\tnext = target;\n\t\t\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\t\t\tlet step = 0;\n\t\t\t\t\t\t\t\t\tnext && next.y >= 1 && !selectable(formatIso(next)) && step < 42;\n\t\t\t\t\t\t\t\t\tstep += 1\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tnext = addDays(next, -1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!next || next.y < 1 || !selectable(formatIso(next))) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingFocus.current = {\n\t\t\t\t\t\t\t\ttargetMonthKey: formatIsoMonth(next),\n\t\t\t\t\t\t\t\tiso: formatIso(next),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\trequestMonth({ y: next.y, m: next.m, d: 1 });\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.key === \"Enter\" || event.key === \" \") {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tconst iso = formatIso(current);\n\t\t\t\t\t\t\tif (current.y >= 1 && selectable(iso)) {\n\t\t\t\t\t\t\t\tcommit(iso);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t{weekdayLabels.map((day, index) => (\n\t\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\t\tkey={`${day}-${index}`}\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t\tclassName=\"h-8 text-center text-xs font-medium text-basalt-muted-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{day}\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t{Array.from({ length: 6 }, (_, weekIndex) => (\n\t\t\t\t\t\t\t<tr key={`week-${weekIndex}`}>\n\t\t\t\t\t\t\t\t{days.slice(weekIndex * 7, weekIndex * 7 + 7).map((date, colIndex) => {\n\t\t\t\t\t\t\t\t\tconst index = weekIndex * 7 + colIndex;\n\t\t\t\t\t\t\t\t\tif (!date) {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t\t\tkey={`empty-${index}`}\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-8 p-0 text-center\"\n\t\t\t\t\t\t\t\t\t\t\t\tref={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdayRefs.current[index] = null;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst iso = formatIso(date);\n\t\t\t\t\t\t\t\t\tconst inMonth = date.m === activeMonth.m;\n\t\t\t\t\t\t\t\t\tconst inRange = date.y >= 1 && selectable(iso);\n\t\t\t\t\t\t\t\t\tconst fromDate = rangeFrom ? parseIso(rangeFrom) : null;\n\t\t\t\t\t\t\t\t\tconst toDate = rangeTo ? parseIso(rangeTo) : null;\n\t\t\t\t\t\t\t\t\tconst thisDate = parseIso(iso);\n\t\t\t\t\t\t\t\t\tconst inSelectedRange = Boolean(\n\t\t\t\t\t\t\t\t\t\tfromDate &&\n\t\t\t\t\t\t\t\t\t\t\ttoDate &&\n\t\t\t\t\t\t\t\t\t\t\tthisDate &&\n\t\t\t\t\t\t\t\t\t\t\tcompareCivil(thisDate, fromDate) >= 0 &&\n\t\t\t\t\t\t\t\t\t\t\tcompareCivil(thisDate, toDate) <= 0,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tconst isRangeEdge = iso === rangeFrom || iso === rangeTo;\n\t\t\t\t\t\t\t\t\tconst isSelected =\n\t\t\t\t\t\t\t\t\t\tmode === \"range\"\n\t\t\t\t\t\t\t\t\t\t\t? inSelectedRange || isRangeEdge\n\t\t\t\t\t\t\t\t\t\t\t: Boolean(submitted) && iso === submitted;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t\tkey={iso}\n\t\t\t\t\t\t\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\t\t\t\t\t\t\taria-selected={isSelected ? \"true\" : undefined}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-8 p-0 text-center\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdayRefs.current[index] = node;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttabIndex={index === focusIndex ? 0 : -1}\n\t\t\t\t\t\t\t\t\t\t\t\tdata-date={iso}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={iso}\n\t\t\t\t\t\t\t\t\t\t\t\taria-pressed={mode === \"range\" ? isRangeEdge : isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled || readOnly || !inRange}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\tCALENDAR_BUTTON,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"mx-auto flex h-8 w-8 items-center justify-center rounded-basalt-md text-sm\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tinMonth ? \"text-basalt-foreground\" : \"text-basalt-muted-foreground\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tinRange && \"hover:bg-basalt-accent\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tinSelectedRange && !isRangeEdge && \"bg-basalt-accent\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tinRange &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(mode === \"range\" ? isRangeEdge : isSelected) &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"bg-basalt-primary text-basalt-primary-foreground hover:bg-basalt-primary/90\",\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => inRange && commit(iso)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{date.d}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"date-picker.js","names":["React","pad","value","formatIso","date","utcDate","next","civilDate","parseIso","match","year","month","day","utc","parseIsoMonth","civil","isValidCivil","formatIsoMonth","CALENDAR_BUTTON","todayCivil","parts","read","part","type","formatCivil","locale","options","isLeapYear","y","daysInCivilMonth","m","shiftCivilMonthClamped","total","current","deltaMonths","targetY","targetM","maxD","target","formatTriggerLabel","one","iso","formatDate","mode","rangeFrom","rangeTo","placeholder","selectedDate","compareCivil","left","right","withinBounds","minDate","min","maxDate","max","dateSelectable","isDisabledDate","clampCivil","isoOf","addDays","days","shiftMonth","delta","DatePicker","controlledMonthProp","defaultMonthProp","ariaLabel","ariaDescribedBy","ariaInvalid","inputRest","externalRef","externalOnInvalid","ariaLabelledBy","formRest","uncontrolled","setUncontrolled","useState","defaultValue","uncontrolledRange","setUncontrolledRange","defaultRangeValue","open","setOpen","isInvalid","setIsInvalid","validationMessage","setValidationMessage","focusIndex","setFocusIndex","dayRefs","useRef","pendingFocus","focusDay","hiddenRef","triggerRef","generatedErrorId","errorId","id","generatedMonthLiveId","monthLiveId","generatedKeyboardInstructionsId","keyboardInstructionsId","selected","selectedRange","rangeValue","cursorIso","submitted","controlledParsed","useMemo","isMonthControlled","uncontrolledMonth","setUncontrolledMonth","parsedDef","clampedInitial","timeZone","activeMonth","activeMonthKey","requestMonth","monthKey","onMonthChange","prevSelected","hasExplicitMonthConfig","useEffect","disabled","autoFocus","latestConfigRef","formAttr","form","disposed","timers","onReset","timer","event","cfg","weekdayLabels","formatter","index","weekStartsOn","first","startOffset","start","pending","focused","focusedIso","node","focusedIndex","selectedIndex","firstInMonth","enabled","inMonth","any","previousMonth","followingMonth","label","labels","calendarLabel","prevMonthLabel","nextMonthLabel","selectable","focusCalendarDay","commit","readOnly","nextRange","onRangeChange","onChange","applyPreset","preset","handleHiddenRef","cleanup","invalidState","hasDestructiveStyle","describedBy","Popover","synced","PopoverTrigger","Button","cn","className","PopoverContent","presets","ChevronLeft","ChevronRight","step","col","stepDir","weekIndex","colIndex","inRange","fromDate","toDate","thisDate","inSelectedRange","isRangeEdge","isSelected"],"sources":["../../src/components/date-picker.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport * as React from \"react\";\nimport { type ComponentProps, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\ntype Civil = { y: number; m: number; d: number };\n\nfunction pad(value: number) {\n\treturn String(value).padStart(2, \"0\");\n}\n\nfunction formatIso(date: Civil) {\n\treturn `${String(date.y).padStart(4, \"0\")}-${pad(date.m)}-${pad(date.d)}`;\n}\n\nfunction utcDate(date: Civil) {\n\tconst next = new Date(Date.UTC(date.y, date.m - 1, date.d));\n\tnext.setUTCFullYear(date.y);\n\treturn next;\n}\n\nfunction civilDate(date: Civil) {\n\tconst next = new Date(date.y, date.m - 1, date.d);\n\tnext.setFullYear(date.y);\n\treturn next;\n}\n\nfunction parseIso(value: string): Civil | null {\n\tconst match = /^(\\d{4,})-(\\d{2})-(\\d{2})$/.exec(value);\n\tif (!match) {\n\t\treturn null;\n\t}\n\tconst year = Number(match[1]);\n\tconst month = Number(match[2]);\n\tconst day = Number(match[3]);\n\tif (year < 1) {\n\t\treturn null;\n\t}\n\tconst utc = utcDate({ y: year, m: month, d: day });\n\tif (\n\t\tutc.getUTCFullYear() !== year ||\n\t\tutc.getUTCMonth() + 1 !== month ||\n\t\tutc.getUTCDate() !== day\n\t) {\n\t\treturn null;\n\t}\n\treturn { y: year, m: month, d: day };\n}\n\nfunction parseIsoMonth(value: string | undefined): Civil | null {\n\tif (!value) {\n\t\treturn null;\n\t}\n\tconst match = /^(\\d{4,})-(\\d{2})$/.exec(value);\n\tif (!match) {\n\t\treturn null;\n\t}\n\tconst year = Number(match[1]);\n\tconst month = Number(match[2]);\n\tif (year < 1 || month < 1 || month > 12) {\n\t\treturn null;\n\t}\n\tconst civil = { y: year, m: month, d: 1 };\n\treturn isValidCivil(civil) ? civil : null;\n}\n\nfunction formatIsoMonth(date: Civil): string {\n\treturn `${String(date.y).padStart(4, \"0\")}-${pad(date.m)}`;\n}\n\nconst CALENDAR_BUTTON =\n\t\"appearance-none border-0 bg-transparent p-0 font-inherit text-inherit cursor-pointer\";\n\nfunction todayCivil(timeZone?: string): Civil {\n\tconst parts = new Intl.DateTimeFormat(\"en-CA\", {\n\t\ttimeZone,\n\t\tyear: \"numeric\",\n\t\tmonth: \"2-digit\",\n\t\tday: \"2-digit\",\n\t}).formatToParts(new Date());\n\tconst read = (type: Intl.DateTimeFormatPartTypes) =>\n\t\tNumber(parts.find((part) => part.type === type)?.value);\n\treturn { y: read(\"year\"), m: read(\"month\"), d: read(\"day\") };\n}\n\nfunction formatCivil(date: Civil, locale: string, options: Intl.DateTimeFormatOptions) {\n\treturn new Intl.DateTimeFormat(locale, {\n\t\t...options,\n\t\ttimeZone: \"UTC\",\n\t\tcalendar: \"gregory\",\n\t}).format(utcDate(date));\n}\n\nfunction isLeapYear(y: number): boolean {\n\treturn (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;\n}\n\nfunction daysInCivilMonth(y: number, m: number): number {\n\tif (m === 2) {\n\t\treturn isLeapYear(y) ? 29 : 28;\n\t}\n\tif (m === 4 || m === 6 || m === 9 || m === 11) {\n\t\treturn 30;\n\t}\n\treturn 31;\n}\n\nfunction shiftCivilMonthClamped(current: Civil, deltaMonths: number): Civil | null {\n\tconst total = current.y * 12 + (current.m - 1) + deltaMonths;\n\tconst targetY = Math.floor(total / 12);\n\tif (targetY < 1) {\n\t\treturn null;\n\t}\n\tconst targetM = (((total % 12) + 12) % 12) + 1;\n\tconst maxD = daysInCivilMonth(targetY, targetM);\n\tconst target = { y: targetY, m: targetM, d: Math.min(current.d, maxD) };\n\treturn isValidCivil(target) ? target : null;\n}\n\nfunction formatTriggerLabel({\n\tmode,\n\tselectedDate,\n\trangeFrom,\n\trangeTo,\n\tlocale,\n\tformatDate,\n\tplaceholder = \"Pick a date\",\n}: {\n\tmode: \"single\" | \"range\";\n\tselectedDate: Civil | null;\n\trangeFrom: string;\n\trangeTo?: string;\n\tlocale: string;\n\tformatDate?: (date: Date) => string;\n\tplaceholder?: string;\n}) {\n\tfunction one(iso: string) {\n\t\tconst date = parseIso(iso);\n\t\tif (!date) {\n\t\t\treturn iso;\n\t\t}\n\t\treturn formatDate?.(civilDate(date)) ?? formatCivil(date, locale, { dateStyle: \"medium\" });\n\t}\n\tif (mode === \"range\") {\n\t\tif (!rangeFrom) {\n\t\t\treturn placeholder;\n\t\t}\n\t\tif (!rangeTo) {\n\t\t\treturn `${one(rangeFrom)} – …`;\n\t\t}\n\t\treturn `${one(rangeFrom)} – ${one(rangeTo)}`;\n\t}\n\treturn selectedDate\n\t\t? (formatDate?.(civilDate(selectedDate)) ??\n\t\t\t\tformatCivil(selectedDate, locale, { dateStyle: \"medium\" }))\n\t\t: placeholder;\n}\n\nfunction compareCivil(left: Civil, right: Civil) {\n\tif (left.y !== right.y) {\n\t\treturn left.y - right.y;\n\t}\n\tif (left.m !== right.m) {\n\t\treturn left.m - right.m;\n\t}\n\treturn left.d - right.d;\n}\n\nfunction withinBounds(iso: string, min?: string, max?: string) {\n\tconst date = parseIso(iso);\n\tconst minDate = min ? parseIso(min) : null;\n\tconst maxDate = max ? parseIso(max) : null;\n\tif (!date) {\n\t\treturn false;\n\t}\n\tif (minDate && compareCivil(date, minDate) < 0) {\n\t\treturn false;\n\t}\n\tif (maxDate && compareCivil(date, maxDate) > 0) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction dateSelectable(\n\tiso: string,\n\tmin?: string,\n\tmax?: string,\n\tisDisabledDate?: (iso: string) => boolean,\n) {\n\treturn withinBounds(iso, min, max) && !isDisabledDate?.(iso);\n}\n\nexport type DatePickerRange = { from: string; to?: string };\n\nexport type DatePickerPreset = {\n\tlabel: string;\n\tvalue: string | { from: string; to: string };\n};\n\nexport type DatePickerLabels = {\n\t/**\n\t * Accessible label for the calendar popup container.\n\t * @default \"Date calendar\" (or derived from `aria-label`)\n\t */\n\tcalendar?: string;\n\t/**\n\t * Accessible label for previous month button.\n\t * @default \"Prev\"\n\t */\n\tpreviousMonth?: string;\n\t/**\n\t * Accessible label for next month button.\n\t * @default \"Next\"\n\t */\n\tnextMonth?: string;\n\t/**\n\t * Fallback label for the trigger when no date is chosen.\n\t * @default \"Pick a date\"\n\t */\n\tplaceholder?: string;\n\t/**\n\t * Custom validation error message displayed when form validation fails.\n\t */\n\tvalidationMessage?: string;\n\t/**\n\t * Accessible keyboard navigation instructions announced for the calendar grid.\n\t */\n\tkeyboardInstructions?: string;\n};\n\nexport type DatePickerProps = Omit<\n\tComponentProps<\"input\">,\n\t| \"value\"\n\t| \"defaultValue\"\n\t| \"onChange\"\n\t| \"type\"\n\t| \"children\"\n\t| \"disabled\"\n\t| \"name\"\n\t| \"required\"\n\t| \"min\"\n\t| \"max\"\n> & {\n\t/**\n\t * The controlled ISO date in single mode.\n\t */\n\tvalue?: string;\n\t/**\n\t * The uncontrolled initial ISO date in single mode.\n\t */\n\tdefaultValue?: string;\n\t/**\n\t * Called with the ISO date in single mode.\n\t */\n\tonChange?: (value: string) => void;\n\t/**\n\t * Selection mode.\n\t * @default single\n\t */\n\tmode?: \"single\" | \"range\";\n\t/**\n\t * The controlled displayed month in `YYYY-MM` format (at least 4-digit positive year).\n\t * If omitted or invalid, falls back smoothly to `defaultMonth`, selected date, or today.\n\t */\n\tmonth?: string;\n\t/**\n\t * The uncontrolled initial displayed month in `YYYY-MM` format (at least 4-digit positive year).\n\t * If omitted or invalid, falls back smoothly to selected date or today.\n\t */\n\tdefaultMonth?: string;\n\t/**\n\t * Called only when calendar navigation requests a month change (`YYYY-MM`).\n\t * Not invoked during component render or synchronous prop synchronization.\n\t */\n\tonMonthChange?: (month: string) => void;\n\t/**\n\t * The controlled range in range mode.\n\t */\n\trangeValue?: DatePickerRange;\n\t/**\n\t * The uncontrolled initial range in range mode.\n\t */\n\tdefaultRangeValue?: DatePickerRange;\n\t/**\n\t * Called when the range changes.\n\t */\n\tonRangeChange?: (value: DatePickerRange) => void;\n\t/**\n\t * Additional dates that cannot be selected.\n\t */\n\tisDisabledDate?: (iso: string) => boolean;\n\t/**\n\t * Shortcut values shown above the calendar.\n\t */\n\tpresets?: DatePickerPreset[];\n\t/**\n\t * Locale used to format the trigger and weekday labels.\n\t * @default en-US\n\t */\n\tlocale?: string;\n\t/**\n\t * First day of the week. 0 is Sunday.\n\t * @default 0\n\t */\n\tweekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\t/**\n\t * IANA time zone used to resolve today.\n\t */\n\ttimeZone?: string;\n\t/**\n\t * Custom formatter for the trigger label.\n\t */\n\tformatDate?: (date: Date) => string;\n\t/**\n\t * Optional localized labels for calendar dialog, navigation, and trigger placeholder.\n\t */\n\tlabels?: DatePickerLabels;\n\t/**\n\t * Native form field name.\n\t */\n\tname?: string;\n\t/**\n\t * Native required constraint. When readOnly is set, native required validation is disabled.\n\t * When an empty required DatePicker submits, the visible trigger receives focus and invalid state.\n\t */\n\trequired?: boolean;\n\t/**\n\t * Inclusive lower ISO bound.\n\t */\n\tmin?: string;\n\t/**\n\t * Inclusive upper ISO bound.\n\t */\n\tmax?: string;\n\t/**\n\t * Disable the trigger and calendar.\n\t */\n\tdisabled?: boolean;\n};\n\nfunction clampCivil(date: Civil, min?: string, max?: string) {\n\tconst minDate = min ? parseIso(min) : null;\n\tconst maxDate = max ? parseIso(max) : null;\n\tif (minDate && compareCivil(date, minDate) < 0) {\n\t\treturn minDate;\n\t}\n\tif (maxDate && compareCivil(date, maxDate) > 0) {\n\t\treturn maxDate;\n\t}\n\treturn date;\n}\n\nfunction isValidCivil(date: Civil): boolean {\n\tif (!Number.isFinite(date.y) || date.m < 1 || date.m > 12 || date.d < 1 || date.d > 31) {\n\t\treturn false;\n\t}\n\tconst utc = utcDate(date);\n\treturn (\n\t\t!Number.isNaN(utc.getTime()) &&\n\t\tutc.getUTCFullYear() === date.y &&\n\t\tutc.getUTCMonth() + 1 === date.m &&\n\t\tutc.getUTCDate() === date.d\n\t);\n}\n\nfunction isoOf(date: Civil | null) {\n\treturn date ? formatIso(date) : \"\";\n}\n\nfunction addDays(date: Civil, days: number): Civil | null {\n\tconst next = utcDate(date);\n\tif (Number.isNaN(next.getTime())) {\n\t\treturn null;\n\t}\n\tnext.setUTCDate(next.getUTCDate() + days);\n\tif (Number.isNaN(next.getTime())) {\n\t\treturn null;\n\t}\n\tconst civil = { y: next.getUTCFullYear(), m: next.getUTCMonth() + 1, d: next.getUTCDate() };\n\treturn isValidCivil(civil) ? civil : null;\n}\n\nfunction shiftMonth(month: Civil, delta: number): Civil | null {\n\tconst total = month.y * 12 + (month.m - 1) + delta;\n\tconst next = { y: Math.floor(total / 12), m: (total % 12) + 1, d: 1 };\n\treturn isValidCivil(next) ? next : null;\n}\n\nexport function DatePicker({\n\tvalue,\n\tdefaultValue = \"\",\n\tonChange,\n\tmode = \"single\",\n\tmonth: controlledMonthProp,\n\tdefaultMonth: defaultMonthProp,\n\tonMonthChange,\n\trangeValue,\n\tdefaultRangeValue,\n\tonRangeChange,\n\tisDisabledDate,\n\tpresets,\n\tlocale = \"en-US\",\n\tweekStartsOn = 0,\n\ttimeZone,\n\tformatDate,\n\tname,\n\trequired,\n\tmin,\n\tmax,\n\tdisabled,\n\tclassName,\n\tid,\n\t\"aria-label\": ariaLabel,\n\t\"aria-describedby\": ariaDescribedBy,\n\t\"aria-invalid\": ariaInvalid,\n\tlabels,\n\t...inputRest\n}: DatePickerProps) {\n\tconst {\n\t\tref: externalRef,\n\t\treadOnly,\n\t\tautoFocus,\n\t\tonFocus,\n\t\tonBlur,\n\t\tonInvalid: externalOnInvalid,\n\t\t\"aria-labelledby\": ariaLabelledBy,\n\t\t...formRest\n\t} = inputRest;\n\tconst [uncontrolled, setUncontrolled] = useState(defaultValue);\n\tconst [uncontrolledRange, setUncontrolledRange] = useState<DatePickerRange>(\n\t\tdefaultRangeValue ?? { from: \"\", to: undefined },\n\t);\n\tconst [open, setOpen] = useState(false);\n\tconst [isInvalid, setIsInvalid] = useState(false);\n\tconst [validationMessage, setValidationMessage] = useState(\"\");\n\tconst [focusIndex, setFocusIndex] = useState(0);\n\tconst dayRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\tconst pendingFocus = useRef<{ targetMonthKey: string; iso: string } | null>(null);\n\tconst focusDay = useRef(false);\n\tconst hiddenRef = useRef<HTMLInputElement>(null);\n\tconst triggerRef = useRef<HTMLButtonElement>(null);\n\tconst generatedErrorId = React.useId();\n\tconst errorId = id ? `${id}-error` : generatedErrorId;\n\tconst generatedMonthLiveId = React.useId();\n\tconst monthLiveId = id ? `${id}-month-live` : generatedMonthLiveId;\n\tconst generatedKeyboardInstructionsId = React.useId();\n\tconst keyboardInstructionsId = id\n\t\t? `${id}-keyboard-instructions`\n\t\t: generatedKeyboardInstructionsId;\n\n\tconst selected = value ?? uncontrolled;\n\tconst selectedRange = rangeValue ?? uncontrolledRange;\n\tconst selectedDate = parseIso(\n\t\tmode === \"range\" ? selectedRange.to || selectedRange.from || \"\" : selected,\n\t);\n\tconst cursorIso = selectedDate ? formatIso(selectedDate) : \"\";\n\n\tuseEffect(() => {\n\t\tif (cursorIso) {\n\t\t\tsetIsInvalid(false);\n\t\t\tsetValidationMessage(\"\");\n\t\t}\n\t}, [cursorIso]);\n\tconst submitted = mode === \"range\" ? \"\" : cursorIso;\n\n\tconst controlledParsed = useMemo(() => parseIsoMonth(controlledMonthProp), [controlledMonthProp]);\n\tconst isMonthControlled = controlledParsed !== null;\n\n\tconst [uncontrolledMonth, setUncontrolledMonth] = useState<Civil>(() => {\n\t\tconst parsedDef = parseIsoMonth(defaultMonthProp);\n\t\tif (parsedDef) {\n\t\t\treturn parsedDef;\n\t\t}\n\t\tconst initialCursor = selectedDate ?? todayCivil(timeZone);\n\t\tconst clampedInitial = clampCivil(initialCursor, min, max);\n\t\treturn { y: clampedInitial.y, m: clampedInitial.m, d: 1 };\n\t});\n\n\tconst activeMonth = controlledParsed ?? uncontrolledMonth;\n\tconst activeMonthKey = formatIsoMonth(activeMonth);\n\n\tconst requestMonth = (target: Civil) => {\n\t\tconst monthKey = formatIsoMonth(target);\n\t\tif (!isMonthControlled) {\n\t\t\tsetUncontrolledMonth(target);\n\t\t}\n\t\tonMonthChange?.(monthKey);\n\t};\n\n\tconst prevSelected = useRef(cursorIso);\n\tif (open && prevSelected.current !== cursorIso) {\n\t\tfocusDay.current = true;\n\t\tif (controlledMonthProp === undefined && defaultMonthProp === undefined) {\n\t\t\tconst next = selectedDate ?? todayCivil(timeZone);\n\t\t\tif (activeMonth.y !== next.y || activeMonth.m !== next.m) {\n\t\t\t\tsetUncontrolledMonth({ y: next.y, m: next.m, d: 1 });\n\t\t\t}\n\t\t}\n\t}\n\tprevSelected.current = cursorIso;\n\n\tconst hasExplicitMonthConfig =\n\t\tcontrolledMonthProp !== undefined || defaultMonthProp !== undefined;\n\n\tuseEffect(() => {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\t\tif (!hasExplicitMonthConfig) {\n\t\t\tconst next = clampCivil(\n\t\t\t\t(cursorIso ? parseIso(cursorIso) : null) ?? todayCivil(timeZone),\n\t\t\t\tmin,\n\t\t\t\tmax,\n\t\t\t);\n\t\t\tsetUncontrolledMonth({ y: next.y, m: next.m, d: 1 });\n\t\t\tif (!cursorIso) {\n\t\t\t\tfocusDay.current = true;\n\t\t\t}\n\t\t}\n\t}, [open, cursorIso, timeZone, min, max, hasExplicitMonthConfig]);\n\n\tuseEffect(() => {\n\t\tif (disabled) {\n\t\t\tsetOpen(false);\n\t\t}\n\t}, [disabled]);\n\n\tuseEffect(() => {\n\t\tif (autoFocus) {\n\t\t\ttriggerRef.current?.focus();\n\t\t}\n\t}, [autoFocus]);\n\n\tconst latestConfigRef = useRef({\n\t\tdefaultValue,\n\t\tdefaultRangeValue,\n\t\tmode,\n\t\trangeValue,\n\t\tvalue,\n\t});\n\tuseEffect(() => {\n\t\tlatestConfigRef.current = {\n\t\t\tdefaultValue,\n\t\t\tdefaultRangeValue,\n\t\t\tmode,\n\t\t\trangeValue,\n\t\t\tvalue,\n\t\t};\n\t});\n\n\tconst formAttr = formRest.form;\n\tuseEffect(() => {\n\t\tconst form = hiddenRef.current?.form;\n\t\tif (!form || (formAttr && form.id !== formAttr)) {\n\t\t\treturn;\n\t\t}\n\t\tlet disposed = false;\n\t\tconst timers = new Set<ReturnType<typeof setTimeout>>();\n\t\tconst onReset = (event: Event) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\ttimers.delete(timer);\n\t\t\t\tif (disposed || event.defaultPrevented) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst cfg = latestConfigRef.current;\n\t\t\t\tif (cfg.mode === \"range\" ? cfg.rangeValue === undefined : cfg.value === undefined) {\n\t\t\t\t\tsetUncontrolled(cfg.defaultValue);\n\t\t\t\t\tsetUncontrolledRange(cfg.defaultRangeValue ?? { from: \"\", to: undefined });\n\t\t\t\t}\n\t\t\t\tsetIsInvalid(false);\n\t\t\t\tsetValidationMessage(\"\");\n\t\t\t\tsetOpen(false);\n\t\t\t}, 0);\n\t\t\ttimers.add(timer);\n\t\t};\n\t\tform.addEventListener(\"reset\", onReset);\n\t\treturn () => {\n\t\t\tdisposed = true;\n\t\t\tfor (const timer of timers) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t}\n\t\t\ttimers.clear();\n\t\t\tform.removeEventListener(\"reset\", onReset);\n\t\t};\n\t}, [formAttr]);\n\n\tconst weekdayLabels = useMemo(() => {\n\t\tconst formatter = new Intl.DateTimeFormat(locale, { weekday: \"short\", timeZone: \"UTC\" });\n\t\treturn Array.from({ length: 7 }, (_, index) => {\n\t\t\tconst day = new Date(Date.UTC(2024, 0, 7 + ((index + weekStartsOn) % 7)));\n\t\t\treturn formatter.format(day);\n\t\t});\n\t}, [locale, weekStartsOn]);\n\n\tconst days = useMemo(() => {\n\t\tconst first = { y: activeMonth.y, m: activeMonth.m, d: 1 };\n\t\tif (!isValidCivil(first)) {\n\t\t\treturn Array.from({ length: 42 }, () => null);\n\t\t}\n\t\tconst startOffset = (utcDate(first).getUTCDay() - weekStartsOn + 7) % 7;\n\t\tconst start = addDays(first, -startOffset);\n\t\tif (!start) {\n\t\t\treturn Array.from({ length: 42 }, (_, index) => addDays(first, index - startOffset));\n\t\t}\n\t\treturn Array.from({ length: 42 }, (_, index) => addDays(start, index));\n\t}, [activeMonth, weekStartsOn]);\n\n\tuseLayoutEffect(() => {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\t\tconst pending = pendingFocus.current;\n\t\tlet index = 0;\n\t\tif (pending) {\n\t\t\tif (pending.targetMonthKey === activeMonthKey) {\n\t\t\t\tpendingFocus.current = null;\n\t\t\t\tindex = days.findIndex((date) => isoOf(date) === pending.iso);\n\t\t\t\tif (index < 0) {\n\t\t\t\t\tindex = 0;\n\t\t\t\t}\n\t\t\t\tfocusDay.current = true;\n\t\t\t} else {\n\t\t\t\tconst focused = document.activeElement;\n\t\t\t\tconst focusedIso =\n\t\t\t\t\tfocused instanceof HTMLElement && dayRefs.current.some((node) => node === focused)\n\t\t\t\t\t\t? focused.getAttribute(\"aria-label\")\n\t\t\t\t\t\t: null;\n\t\t\t\tconst focusedIndex = focusedIso ? days.findIndex((date) => isoOf(date) === focusedIso) : -1;\n\t\t\t\tif (focusedIndex >= 0) {\n\t\t\t\t\tindex = focusedIndex;\n\t\t\t\t} else {\n\t\t\t\t\tindex = focusIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst focused = document.activeElement;\n\t\t\tconst focusedIso =\n\t\t\t\t!focusDay.current &&\n\t\t\t\tfocused instanceof HTMLElement &&\n\t\t\t\tdayRefs.current.some((node) => node === focused)\n\t\t\t\t\t? focused.getAttribute(\"aria-label\")\n\t\t\t\t\t: null;\n\t\t\tconst focusedIndex = focusedIso ? days.findIndex((date) => isoOf(date) === focusedIso) : -1;\n\t\t\tif (focusedIndex >= 0) {\n\t\t\t\tindex = focusedIndex;\n\t\t\t} else {\n\t\t\t\tconst iso = cursorIso || submitted || formatIso(todayCivil(timeZone));\n\t\t\t\tconst selectedIndex = days.findIndex((date) => isoOf(date) === iso);\n\t\t\t\tif (selectedIndex >= 0 && days[selectedIndex]?.m === activeMonth.m) {\n\t\t\t\t\tindex = selectedIndex;\n\t\t\t\t} else {\n\t\t\t\t\tconst firstInMonth = days.findIndex((date) => date?.m === activeMonth.m);\n\t\t\t\t\tindex = firstInMonth >= 0 ? firstInMonth : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst enabled = (date: Civil | null) =>\n\t\t\tBoolean(date && date.y >= 1 && dateSelectable(formatIso(date), min, max, isDisabledDate));\n\t\tif (!enabled(days[index] ?? null)) {\n\t\t\tconst inMonth = days.findIndex((date) => date?.m === activeMonth.m && enabled(date));\n\t\t\tconst any = days.findIndex((date) => enabled(date));\n\t\t\tindex = inMonth >= 0 ? inMonth : any >= 0 ? any : index;\n\t\t}\n\t\tsetFocusIndex(index);\n\t\tif (focusDay.current) {\n\t\t\tfocusDay.current = false;\n\t\t\tdayRefs.current[index]?.focus();\n\t\t}\n\t}, [\n\t\topen,\n\t\tcursorIso,\n\t\tsubmitted,\n\t\ttimeZone,\n\t\tdays,\n\t\tactiveMonth.m,\n\t\tactiveMonthKey,\n\t\tfocusIndex,\n\t\tmin,\n\t\tmax,\n\t\tisDisabledDate,\n\t]);\n\n\tconst previousMonth = shiftMonth(activeMonth, -1);\n\tconst followingMonth = shiftMonth(activeMonth, 1);\n\tconst rangeFrom = mode === \"range\" ? selectedRange.from : \"\";\n\tconst rangeTo = mode === \"range\" ? selectedRange.to : undefined;\n\tconst label = formatTriggerLabel({\n\t\tmode,\n\t\tselectedDate,\n\t\trangeFrom,\n\t\trangeTo,\n\t\tlocale,\n\t\tformatDate,\n\t\tplaceholder: labels?.placeholder,\n\t});\n\tconst calendarLabel = labels?.calendar ?? (ariaLabel ? `${ariaLabel} calendar` : \"Date calendar\");\n\tconst prevMonthLabel = labels?.previousMonth ?? \"Prev\";\n\tconst nextMonthLabel = labels?.nextMonth ?? \"Next\";\n\n\tfunction selectable(iso: string) {\n\t\treturn dateSelectable(iso, min, max, isDisabledDate);\n\t}\n\n\tfunction focusCalendarDay(next: Civil) {\n\t\tif (next.y !== activeMonth.y || next.m !== activeMonth.m) {\n\t\t\tpendingFocus.current = {\n\t\t\t\ttargetMonthKey: formatIsoMonth(next),\n\t\t\t\tiso: formatIso(next),\n\t\t\t};\n\t\t\trequestMonth({ y: next.y, m: next.m, d: 1 });\n\t\t\treturn;\n\t\t}\n\t\tconst index = days.findIndex((date) => isoOf(date) === formatIso(next));\n\t\tif (index >= 0) {\n\t\t\tsetFocusIndex(index);\n\t\t\tdayRefs.current[index]?.focus();\n\t\t}\n\t}\n\n\tfunction commit(next: string) {\n\t\tif (disabled || readOnly || !selectable(next)) {\n\t\t\treturn;\n\t\t}\n\t\tif (next) {\n\t\t\tsetIsInvalid(false);\n\t\t\tsetValidationMessage(\"\");\n\t\t}\n\t\tif (mode === \"range\") {\n\t\t\tconst current = rangeValue ?? uncontrolledRange;\n\t\t\tconst nextRange =\n\t\t\t\t!current.from || current.to\n\t\t\t\t\t? { from: next }\n\t\t\t\t\t: compareCivil(\n\t\t\t\t\t\t\t\tparseIso(next) ?? { y: 1, m: 1, d: 1 },\n\t\t\t\t\t\t\t\tparseIso(current.from) ?? { y: 1, m: 1, d: 1 },\n\t\t\t\t\t\t\t) < 0\n\t\t\t\t\t\t? { from: next, to: current.from }\n\t\t\t\t\t\t: { from: current.from, to: next };\n\t\t\tif (rangeValue === undefined) {\n\t\t\t\tsetUncontrolledRange(nextRange);\n\t\t\t}\n\t\t\tonRangeChange?.(nextRange);\n\t\t\tif (nextRange.to) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (value === undefined) {\n\t\t\tsetUncontrolled(next);\n\t\t}\n\t\tsetOpen(false);\n\t\tonChange?.(next);\n\t}\n\n\tfunction applyPreset(preset: DatePickerPreset) {\n\t\tif (disabled || readOnly) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof preset.value === \"string\") {\n\t\t\tif (mode === \"range\") {\n\t\t\t\tif (!selectable(preset.value)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst nextRange = { from: preset.value, to: preset.value };\n\t\t\t\tif (rangeValue === undefined) {\n\t\t\t\t\tsetUncontrolledRange(nextRange);\n\t\t\t\t}\n\t\t\t\tonRangeChange?.(nextRange);\n\t\t\t\tsetOpen(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcommit(preset.value);\n\t\t\treturn;\n\t\t}\n\t\tif (mode === \"range\") {\n\t\t\tif (!selectable(preset.value.from) || !selectable(preset.value.to)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (rangeValue === undefined) {\n\t\t\t\tsetUncontrolledRange(preset.value);\n\t\t\t}\n\t\t\tonRangeChange?.(preset.value);\n\t\t\tsetOpen(false);\n\t\t}\n\t}\n\n\tconst handleHiddenRef = React.useCallback(\n\t\t(node: HTMLInputElement | null) => {\n\t\t\thiddenRef.current = node;\n\t\t\tif (!externalRef) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof externalRef === \"function\") {\n\t\t\t\tconst cleanup = externalRef(node);\n\t\t\t\tif (typeof cleanup === \"function\") {\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\thiddenRef.current = null;\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn () => {\n\t\t\t\t\thiddenRef.current = null;\n\t\t\t\t\texternalRef(null);\n\t\t\t\t};\n\t\t\t}\n\t\t\t(externalRef as React.RefObject<HTMLInputElement | null>).current = node;\n\t\t\treturn () => {\n\t\t\t\thiddenRef.current = null;\n\t\t\t\t(externalRef as React.RefObject<HTMLInputElement | null>).current = null;\n\t\t\t};\n\t\t},\n\t\t[externalRef],\n\t);\n\n\tconst invalidState = ariaInvalid ?? (isInvalid || undefined);\n\tconst hasDestructiveStyle =\n\t\tinvalidState === true ||\n\t\tinvalidState === \"true\" ||\n\t\tinvalidState === \"grammar\" ||\n\t\tinvalidState === \"spelling\";\n\n\tconst describedBy =\n\t\t[ariaDescribedBy, isInvalid && errorId ? errorId : undefined].filter(Boolean).join(\" \") ||\n\t\tundefined;\n\n\treturn (\n\t\t<Popover\n\t\t\topen={open}\n\t\t\tonOpenChange={(next) => {\n\t\t\t\tif (next && disabled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (next) {\n\t\t\t\t\tpendingFocus.current = null;\n\t\t\t\t\tif (controlledMonthProp === undefined && defaultMonthProp === undefined) {\n\t\t\t\t\t\tconst synced = (cursorIso ? parseIso(cursorIso) : null) ?? todayCivil(timeZone);\n\t\t\t\t\t\tsetUncontrolledMonth({ y: synced.y, m: synced.m, d: 1 });\n\t\t\t\t\t}\n\t\t\t\t\tfocusDay.current = true;\n\t\t\t\t} else {\n\t\t\t\t\tpendingFocus.current = null;\n\t\t\t\t}\n\t\t\t\tsetOpen(next);\n\t\t\t}}\n\t\t>\n\t\t\t<input\n\t\t\t\tref={handleHiddenRef}\n\t\t\t\ttype={mode === \"range\" ? \"text\" : \"date\"}\n\t\t\t\tname={name}\n\t\t\t\trequired={required}\n\t\t\t\treadOnly={readOnly}\n\t\t\t\tmin={mode === \"range\" ? undefined : min}\n\t\t\t\tmax={mode === \"range\" ? undefined : max}\n\t\t\t\tclassName=\"sr-only mb-basalt-space-lg min-h-basalt-control-inset\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: 1,\n\t\t\t\t\theight: 1,\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\tclip: \"rect(0, 0, 0, 0)\",\n\t\t\t\t}}\n\t\t\t\tvalue={\n\t\t\t\t\tmode === \"range\" ? (rangeFrom && rangeTo ? `${rangeFrom}/${rangeTo}` : \"\") : submitted\n\t\t\t\t}\n\t\t\t\tonChange={() => undefined}\n\t\t\t\tonInvalid={(event) => {\n\t\t\t\t\texternalOnInvalid?.(event);\n\t\t\t\t\tif (!event.defaultPrevented) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tsetIsInvalid(true);\n\t\t\t\t\t\tsetValidationMessage(\n\t\t\t\t\t\t\tlabels?.validationMessage ||\n\t\t\t\t\t\t\t\t(event.target as HTMLInputElement).validationMessage ||\n\t\t\t\t\t\t\t\t\"Please fill out this field.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttriggerRef.current?.focus();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\ttabIndex={-1}\n\t\t\t\t{...formRest}\n\t\t\t/>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tref={triggerRef}\n\t\t\t\t\tid={id}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonFocus={onFocus as ComponentProps<\"button\">[\"onFocus\"]}\n\t\t\t\t\tonBlur={onBlur as ComponentProps<\"button\">[\"onBlur\"]}\n\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\taria-label={\n\t\t\t\t\t\tariaLabel ? (label === \"Pick a date\" ? ariaLabel : `${ariaLabel}: ${label}`) : undefined\n\t\t\t\t\t}\n\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\taria-invalid={invalidState}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"justify-start font-normal\",\n\t\t\t\t\t\thasDestructiveStyle && \"border-basalt-destructive text-basalt-destructive\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</Button>\n\t\t\t</PopoverTrigger>\n\t\t\t{isInvalid && validationMessage ? (\n\t\t\t\t<span\n\t\t\t\t\tid={errorId}\n\t\t\t\t\trole=\"alert\"\n\t\t\t\t\tclassName=\"mt-basalt-space-sm block text-basalt-sm text-basalt-destructive\"\n\t\t\t\t>\n\t\t\t\t\t{validationMessage}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t\t<PopoverContent\n\t\t\t\tarrow={false}\n\t\t\t\tclassName=\"w-basalt-64 p-basalt-space-lg\"\n\t\t\t\taria-label={calendarLabel}\n\t\t\t\taria-describedby={keyboardInstructionsId}\n\t\t\t\tonOpenAutoFocus={(event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tconst iso = cursorIso || submitted || formatIso(todayCivil(timeZone));\n\t\t\t\t\tconst selectedIndex = days.findIndex((date) => isoOf(date) === iso);\n\t\t\t\t\tconst enabled = (date: Civil | null) =>\n\t\t\t\t\t\tBoolean(\n\t\t\t\t\t\t\tdate && date.y >= 1 && dateSelectable(formatIso(date), min, max, isDisabledDate),\n\t\t\t\t\t\t);\n\t\t\t\t\tlet index =\n\t\t\t\t\t\tselectedIndex >= 0 && days[selectedIndex]?.m === activeMonth.m\n\t\t\t\t\t\t\t? selectedIndex\n\t\t\t\t\t\t\t: Math.max(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tdays.findIndex((date) => date?.m === activeMonth.m),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\tif (!enabled(days[index] ?? null)) {\n\t\t\t\t\t\tconst inMonth = days.findIndex((date) => date?.m === activeMonth.m && enabled(date));\n\t\t\t\t\t\tconst any = days.findIndex((date) => enabled(date));\n\t\t\t\t\t\tindex = inMonth >= 0 ? inMonth : any >= 0 ? any : index;\n\t\t\t\t\t}\n\t\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t\tdayRefs.current[index]?.focus();\n\t\t\t\t\t});\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{presets && presets.length > 0 ? (\n\t\t\t\t\t<div className=\"mb-basalt-space-lg flex flex-wrap gap-basalt-space-sm\">\n\t\t\t\t\t\t{presets.map((preset) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tkey={preset.label}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\tclassName=\"min-h-basalt-control-inset px-basalt-space-lg text-basalt-sm\"\n\t\t\t\t\t\t\t\tdisabled={disabled || readOnly}\n\t\t\t\t\t\t\t\tonClick={() => applyPreset(preset)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{preset.label}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t\t<div className=\"mb-basalt-space-lg flex items-center justify-between gap-basalt-space-lg\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\ticon={<ChevronLeft />}\n\t\t\t\t\t\taria-label={prevMonthLabel}\n\t\t\t\t\t\tclassName=\"size-basalt-8\"\n\t\t\t\t\t\tdisabled={disabled || !previousMonth || previousMonth.y < 1}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (!previousMonth || previousMonth.y < 1) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingFocus.current = null;\n\t\t\t\t\t\t\tfocusDay.current = false;\n\t\t\t\t\t\t\trequestMonth(previousMonth);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<span\n\t\t\t\t\t\tid={monthLiveId}\n\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\taria-atomic=\"true\"\n\t\t\t\t\t\tclassName=\"text-basalt-base font-medium\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{formatCivil(activeMonth, locale, { month: \"long\", year: \"numeric\" })}\n\t\t\t\t\t</span>\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\ticon={<ChevronRight />}\n\t\t\t\t\t\taria-label={nextMonthLabel}\n\t\t\t\t\t\tclassName=\"size-basalt-8\"\n\t\t\t\t\t\tdisabled={disabled || !followingMonth}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (!followingMonth) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingFocus.current = null;\n\t\t\t\t\t\t\tfocusDay.current = false;\n\t\t\t\t\t\t\trequestMonth(followingMonth);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<p id={keyboardInstructionsId} className=\"sr-only\">\n\t\t\t\t\t{labels?.keyboardInstructions ??\n\t\t\t\t\t\t\"Use arrow keys to navigate dates, PageUp and PageDown to change months, and Enter or Space to select.\"}\n\t\t\t\t</p>\n\t\t\t\t{/* Biome override: WAI-ARIA APG Date Picker pattern uses a semantic table with role=\"grid\" and role=\"gridcell\" on cells while roving tabindex focuses the child button */}\n\t\t\t\t<table\n\t\t\t\t\trole=\"grid\"\n\t\t\t\t\taria-labelledby={monthLiveId}\n\t\t\t\t\taria-multiselectable={mode === \"range\" ? \"true\" : undefined}\n\t\t\t\t\tclassName=\"w-full border-collapse text-center\"\n\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\tconst current = days[focusIndex];\n\t\t\t\t\t\tif (!current) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tevent.key === \"ArrowRight\" ||\n\t\t\t\t\t\t\tevent.key === \"ArrowLeft\" ||\n\t\t\t\t\t\t\tevent.key === \"ArrowDown\" ||\n\t\t\t\t\t\t\tevent.key === \"ArrowUp\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tconst delta =\n\t\t\t\t\t\t\t\tevent.key === \"ArrowRight\"\n\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t: event.key === \"ArrowLeft\"\n\t\t\t\t\t\t\t\t\t\t? -1\n\t\t\t\t\t\t\t\t\t\t: event.key === \"ArrowDown\"\n\t\t\t\t\t\t\t\t\t\t\t? 7\n\t\t\t\t\t\t\t\t\t\t\t: -7;\n\t\t\t\t\t\t\tlet next = addDays(current, delta);\n\t\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\t\tlet step = 0;\n\t\t\t\t\t\t\t\tnext && next.y >= 1 && !selectable(formatIso(next)) && step < 42;\n\t\t\t\t\t\t\t\tstep += 1\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnext = addDays(next, delta);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!next || next.y < 1 || !selectable(formatIso(next))) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfocusCalendarDay(next);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.key === \"Home\" || event.key === \"End\") {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tconst dayOfWeek = utcDate(current).getUTCDay();\n\t\t\t\t\t\t\tconst col = (dayOfWeek - weekStartsOn + 7) % 7;\n\t\t\t\t\t\t\tconst deltaToEdge = event.key === \"Home\" ? -col : 6 - col;\n\t\t\t\t\t\t\tlet next: Civil | null = addDays(current, deltaToEdge);\n\t\t\t\t\t\t\tconst stepDir = event.key === \"Home\" ? 1 : -1;\n\t\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\t\tlet step = 0;\n\t\t\t\t\t\t\t\tnext && next.y >= 1 && !selectable(formatIso(next)) && step < 7;\n\t\t\t\t\t\t\t\tstep += 1\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnext = addDays(next, stepDir);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!next || next.y < 1 || !selectable(formatIso(next))) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfocusCalendarDay(next);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.key === \"PageDown\" || event.key === \"PageUp\") {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tconst deltaMonths = event.shiftKey\n\t\t\t\t\t\t\t\t? event.key === \"PageDown\"\n\t\t\t\t\t\t\t\t\t? 12\n\t\t\t\t\t\t\t\t\t: -12\n\t\t\t\t\t\t\t\t: event.key === \"PageDown\"\n\t\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t\t: -1;\n\t\t\t\t\t\t\tconst target = shiftCivilMonthClamped(current, deltaMonths);\n\t\t\t\t\t\t\tif (!target) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet next: Civil | null = target;\n\t\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\t\tlet step = 0;\n\t\t\t\t\t\t\t\tnext && next.y >= 1 && !selectable(formatIso(next)) && step < 42;\n\t\t\t\t\t\t\t\tstep += 1\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnext = addDays(next, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!next || next.y < 1 || !selectable(formatIso(next))) {\n\t\t\t\t\t\t\t\tnext = target;\n\t\t\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\t\t\tlet step = 0;\n\t\t\t\t\t\t\t\t\tnext && next.y >= 1 && !selectable(formatIso(next)) && step < 42;\n\t\t\t\t\t\t\t\t\tstep += 1\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tnext = addDays(next, -1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!next || next.y < 1 || !selectable(formatIso(next))) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingFocus.current = {\n\t\t\t\t\t\t\t\ttargetMonthKey: formatIsoMonth(next),\n\t\t\t\t\t\t\t\tiso: formatIso(next),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\trequestMonth({ y: next.y, m: next.m, d: 1 });\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.key === \"Enter\" || event.key === \" \") {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tconst iso = formatIso(current);\n\t\t\t\t\t\t\tif (current.y >= 1 && selectable(iso)) {\n\t\t\t\t\t\t\t\tcommit(iso);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t{weekdayLabels.map((day, index) => (\n\t\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\t\tkey={`${day}-${index}`}\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t\tclassName=\"min-h-basalt-control text-center text-basalt-sm font-medium text-basalt-muted-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{day}\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t{Array.from({ length: 6 }, (_, weekIndex) => (\n\t\t\t\t\t\t\t<tr key={`week-${weekIndex}`}>\n\t\t\t\t\t\t\t\t{days.slice(weekIndex * 7, weekIndex * 7 + 7).map((date, colIndex) => {\n\t\t\t\t\t\t\t\t\tconst index = weekIndex * 7 + colIndex;\n\t\t\t\t\t\t\t\t\tif (!date) {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t\t\tkey={`empty-${index}`}\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"min-h-basalt-control p-0 text-center\"\n\t\t\t\t\t\t\t\t\t\t\t\tref={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdayRefs.current[index] = null;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst iso = formatIso(date);\n\t\t\t\t\t\t\t\t\tconst inMonth = date.m === activeMonth.m;\n\t\t\t\t\t\t\t\t\tconst inRange = date.y >= 1 && selectable(iso);\n\t\t\t\t\t\t\t\t\tconst fromDate = rangeFrom ? parseIso(rangeFrom) : null;\n\t\t\t\t\t\t\t\t\tconst toDate = rangeTo ? parseIso(rangeTo) : null;\n\t\t\t\t\t\t\t\t\tconst thisDate = parseIso(iso);\n\t\t\t\t\t\t\t\t\tconst inSelectedRange = Boolean(\n\t\t\t\t\t\t\t\t\t\tfromDate &&\n\t\t\t\t\t\t\t\t\t\t\ttoDate &&\n\t\t\t\t\t\t\t\t\t\t\tthisDate &&\n\t\t\t\t\t\t\t\t\t\t\tcompareCivil(thisDate, fromDate) >= 0 &&\n\t\t\t\t\t\t\t\t\t\t\tcompareCivil(thisDate, toDate) <= 0,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tconst isRangeEdge = iso === rangeFrom || iso === rangeTo;\n\t\t\t\t\t\t\t\t\tconst isSelected =\n\t\t\t\t\t\t\t\t\t\tmode === \"range\"\n\t\t\t\t\t\t\t\t\t\t\t? inSelectedRange || isRangeEdge\n\t\t\t\t\t\t\t\t\t\t\t: Boolean(submitted) && iso === submitted;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t\tkey={iso}\n\t\t\t\t\t\t\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\t\t\t\t\t\t\taria-selected={isSelected ? \"true\" : undefined}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"min-h-basalt-control p-0 text-center\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdayRefs.current[index] = node;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttabIndex={index === focusIndex ? 0 : -1}\n\t\t\t\t\t\t\t\t\t\t\t\tdata-date={iso}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={iso}\n\t\t\t\t\t\t\t\t\t\t\t\taria-pressed={mode === \"range\" ? isRangeEdge : isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled || readOnly || !inRange}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\tCALENDAR_BUTTON,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"mx-auto flex min-h-basalt-control w-basalt-control items-center justify-center rounded-basalt-md text-basalt-base\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tinMonth ? \"text-basalt-foreground\" : \"text-basalt-muted-foreground\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tinRange && \"hover:bg-basalt-hover\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tinSelectedRange && !isRangeEdge && \"bg-basalt-selected\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tinRange &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(mode === \"range\" ? isRangeEdge : isSelected) &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"bg-basalt-primary text-basalt-primary-foreground hover:bg-basalt-primary-hover\",\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => inRange && commit(iso)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{date.d}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ function o({ name: o, onDelete: s, errorMessage: c }) {
|
|
|
17
17
|
title: `Delete ${o}?`,
|
|
18
18
|
description: /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i("span", { children: "This cannot be undone." }), p ? /* @__PURE__ */ i("span", {
|
|
19
19
|
role: "alert",
|
|
20
|
-
className: "mt-
|
|
20
|
+
className: "mt-basalt-space-lg block text-basalt-sm text-basalt-destructive",
|
|
21
21
|
children: p
|
|
22
22
|
}) : null] }),
|
|
23
23
|
confirmLabel: "Delete",
|