@acronis-platform/ui-react 4.0.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.js +11 -0
- package/dist/components/ui/accordion/accordion.js +40 -53
- package/dist/components/ui/accordion/accordion.js.map +1 -1
- package/dist/components/ui/accordion-container/accordion-container.js +93 -141
- package/dist/components/ui/accordion-container/accordion-container.js.map +1 -1
- package/dist/components/ui/alert/alert.js +95 -156
- package/dist/components/ui/alert/alert.js.map +1 -1
- package/dist/components/ui/app-shell-chat/app-shell-chat.js +233 -332
- package/dist/components/ui/app-shell-chat/app-shell-chat.js.map +1 -1
- package/dist/components/ui/area-chart/area-chart.js +155 -240
- package/dist/components/ui/area-chart/area-chart.js.map +1 -1
- package/dist/components/ui/avatar/avatar.js +47 -84
- package/dist/components/ui/avatar/avatar.js.map +1 -1
- package/dist/components/ui/bar-chart/bar-chart.js +405 -615
- package/dist/components/ui/bar-chart/bar-chart.js.map +1 -1
- package/dist/components/ui/breadcrumb/breadcrumb.js +68 -116
- package/dist/components/ui/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/ui/button/button.js +31 -40
- package/dist/components/ui/button/button.js.map +1 -1
- package/dist/components/ui/button-group/button-group.js +33 -55
- package/dist/components/ui/button-group/button-group.js.map +1 -1
- package/dist/components/ui/button-icon/button-icon.js +26 -35
- package/dist/components/ui/button-icon/button-icon.js.map +1 -1
- package/dist/components/ui/button-icon-input/button-icon-input.js +28 -35
- package/dist/components/ui/button-icon-input/button-icon-input.js.map +1 -1
- package/dist/components/ui/button-icon-menu/button-icon-menu.js +22 -26
- package/dist/components/ui/button-icon-menu/button-icon-menu.js.map +1 -1
- package/dist/components/ui/button-menu/button-menu.js +36 -52
- package/dist/components/ui/button-menu/button-menu.js.map +1 -1
- package/dist/components/ui/calendar/calendar.js +103 -202
- package/dist/components/ui/calendar/calendar.js.map +1 -1
- package/dist/components/ui/calendar-panel/calendar-panel-utils.js +46 -57
- package/dist/components/ui/calendar-panel/calendar-panel-utils.js.map +1 -1
- package/dist/components/ui/calendar-panel/calendar-panel.js +136 -257
- package/dist/components/ui/calendar-panel/calendar-panel.js.map +1 -1
- package/dist/components/ui/card/card.js +104 -168
- package/dist/components/ui/card/card.js.map +1 -1
- package/dist/components/ui/card-filter/card-filter.js +49 -76
- package/dist/components/ui/card-filter/card-filter.js.map +1 -1
- package/dist/components/ui/card-section/card-section.js +81 -111
- package/dist/components/ui/card-section/card-section.js.map +1 -1
- package/dist/components/ui/carousel-dialog/carousel-dialog.js +49 -87
- package/dist/components/ui/carousel-dialog/carousel-dialog.js.map +1 -1
- package/dist/components/ui/category-bar/category-bar.js +123 -162
- package/dist/components/ui/category-bar/category-bar.js.map +1 -1
- package/dist/components/ui/chart/chart-format.js +117 -153
- package/dist/components/ui/chart/chart-format.js.map +1 -1
- package/dist/components/ui/chart/chart-palette.js +63 -107
- package/dist/components/ui/chart/chart-palette.js.map +1 -1
- package/dist/components/ui/chart/chart.js +180 -305
- package/dist/components/ui/chart/chart.js.map +1 -1
- package/dist/components/ui/chart-state/chart-state-illustrations.js +400 -298
- package/dist/components/ui/chart-state/chart-state-illustrations.js.map +1 -1
- package/dist/components/ui/chart-state/chart-state.js +40 -56
- package/dist/components/ui/chart-state/chart-state.js.map +1 -1
- package/dist/components/ui/chart-widget/chart-widget.js +40 -87
- package/dist/components/ui/chart-widget/chart-widget.js.map +1 -1
- package/dist/components/ui/checkbox/checkbox.js +56 -69
- package/dist/components/ui/checkbox/checkbox.js.map +1 -1
- package/dist/components/ui/chip/chip.js +51 -70
- package/dist/components/ui/chip/chip.js.map +1 -1
- package/dist/components/ui/combobox/combobox.js +88 -151
- package/dist/components/ui/combobox/combobox.js.map +1 -1
- package/dist/components/ui/composed-chart/composed-chart.js +297 -434
- package/dist/components/ui/composed-chart/composed-chart.js.map +1 -1
- package/dist/components/ui/confidence-cone/confidence-cone.js +214 -332
- package/dist/components/ui/confidence-cone/confidence-cone.js.map +1 -1
- package/dist/components/ui/data-table/data-table-bulk-actions-bar.js +32 -37
- package/dist/components/ui/data-table/data-table-bulk-actions-bar.js.map +1 -1
- package/dist/components/ui/data-table/data-table-column-header.js +23 -38
- package/dist/components/ui/data-table/data-table-column-header.js.map +1 -1
- package/dist/components/ui/data-table/data-table-expand-trigger.js +23 -46
- package/dist/components/ui/data-table/data-table-expand-trigger.js.map +1 -1
- package/dist/components/ui/data-table/data-table-pagination.js +84 -89
- package/dist/components/ui/data-table/data-table-pagination.js.map +1 -1
- package/dist/components/ui/data-table/data-table-selection.js +7 -6
- package/dist/components/ui/data-table/data-table-selection.js.map +1 -1
- package/dist/components/ui/data-table/data-table-toolbar.js +51 -76
- package/dist/components/ui/data-table/data-table-toolbar.js.map +1 -1
- package/dist/components/ui/data-table/data-table-view-options.js +21 -28
- package/dist/components/ui/data-table/data-table-view-options.js.map +1 -1
- package/dist/components/ui/data-table/data-table.js +304 -438
- package/dist/components/ui/data-table/data-table.js.map +1 -1
- package/dist/components/ui/date-range-picker/date-range-picker-utils.js +16 -14
- package/dist/components/ui/date-range-picker/date-range-picker-utils.js.map +1 -1
- package/dist/components/ui/date-range-picker/date-range-picker.js +77 -111
- package/dist/components/ui/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/ui/description-list/description-list.js +44 -54
- package/dist/components/ui/description-list/description-list.js.map +1 -1
- package/dist/components/ui/dialog/dialog.js +229 -310
- package/dist/components/ui/dialog/dialog.js.map +1 -1
- package/dist/components/ui/dialog-footer-carousel/dialog-footer-carousel.js +33 -57
- package/dist/components/ui/dialog-footer-carousel/dialog-footer-carousel.js.map +1 -1
- package/dist/components/ui/dialog-footer-default/dialog-footer-default.js +21 -26
- package/dist/components/ui/dialog-footer-default/dialog-footer-default.js.map +1 -1
- package/dist/components/ui/dialog-welcome/dialog-welcome.js +221 -267
- package/dist/components/ui/dialog-welcome/dialog-welcome.js.map +1 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu.js +101 -168
- package/dist/components/ui/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/components/ui/empty/empty.js +49 -77
- package/dist/components/ui/empty/empty.js.map +1 -1
- package/dist/components/ui/empty-overlay/empty-overlay.js +43 -49
- package/dist/components/ui/empty-overlay/empty-overlay.js.map +1 -1
- package/dist/components/ui/field/field.js +95 -178
- package/dist/components/ui/field/field.js.map +1 -1
- package/dist/components/ui/filter-cards/filter-cards.js +16 -25
- package/dist/components/ui/filter-cards/filter-cards.js.map +1 -1
- package/dist/components/ui/filter-chips/filter-chips.js +36 -44
- package/dist/components/ui/filter-chips/filter-chips.js.map +1 -1
- package/dist/components/ui/filter-search/filter-search.js +139 -209
- package/dist/components/ui/filter-search/filter-search.js.map +1 -1
- package/dist/components/ui/fitted-actions/fitted-actions.js +87 -137
- package/dist/components/ui/fitted-actions/fitted-actions.js.map +1 -1
- package/dist/components/ui/form/form.js +14 -15
- package/dist/components/ui/form/form.js.map +1 -1
- package/dist/components/ui/funnel-chart/funnel-chart.js +266 -274
- package/dist/components/ui/funnel-chart/funnel-chart.js.map +1 -1
- package/dist/components/ui/grid/grid.js +61 -68
- package/dist/components/ui/grid/grid.js.map +1 -1
- package/dist/components/ui/histogram/histogram.js +107 -141
- package/dist/components/ui/histogram/histogram.js.map +1 -1
- package/dist/components/ui/input/input.js +14 -21
- package/dist/components/ui/input/input.js.map +1 -1
- package/dist/components/ui/input-date-picker/input-date-picker.js +70 -114
- package/dist/components/ui/input-date-picker/input-date-picker.js.map +1 -1
- package/dist/components/ui/input-num-picker/input-num-picker.js +48 -0
- package/dist/components/ui/input-num-picker/input-num-picker.js.map +1 -0
- package/dist/components/ui/input-otp/input-otp.js +75 -104
- package/dist/components/ui/input-otp/input-otp.js.map +1 -1
- package/dist/components/ui/input-password/input-password.js +71 -126
- package/dist/components/ui/input-password/input-password.js.map +1 -1
- package/dist/components/ui/input-search/input-search.js +32 -56
- package/dist/components/ui/input-search/input-search.js.map +1 -1
- package/dist/components/ui/input-select/input-select.js +234 -335
- package/dist/components/ui/input-select/input-select.js.map +1 -1
- package/dist/components/ui/input-text/input-text.js +54 -98
- package/dist/components/ui/input-text/input-text.js.map +1 -1
- package/dist/components/ui/input-text-area/input-text-area.js +41 -86
- package/dist/components/ui/input-text-area/input-text-area.js.map +1 -1
- package/dist/components/ui/label/label.js +6 -5
- package/dist/components/ui/label/label.js.map +1 -1
- package/dist/components/ui/line-chart/line-chart.js +175 -277
- package/dist/components/ui/line-chart/line-chart.js.map +1 -1
- package/dist/components/ui/link/link.js +34 -54
- package/dist/components/ui/link/link.js.map +1 -1
- package/dist/components/ui/loading/loading.js +51 -78
- package/dist/components/ui/loading/loading.js.map +1 -1
- package/dist/components/ui/meter/meter.js +79 -93
- package/dist/components/ui/meter/meter.js.map +1 -1
- package/dist/components/ui/metric/metric.js +83 -89
- package/dist/components/ui/metric/metric.js.map +1 -1
- package/dist/components/ui/number-field/number-field.js +36 -60
- package/dist/components/ui/number-field/number-field.js.map +1 -1
- package/dist/components/ui/page-content/page-content.js +15 -19
- package/dist/components/ui/page-content/page-content.js.map +1 -1
- package/dist/components/ui/page-header/page-header.js +120 -181
- package/dist/components/ui/page-header/page-header.js.map +1 -1
- package/dist/components/ui/pagination/pagination.js +58 -86
- package/dist/components/ui/pagination/pagination.js.map +1 -1
- package/dist/components/ui/pie-chart/pie-chart.js +189 -268
- package/dist/components/ui/pie-chart/pie-chart.js.map +1 -1
- package/dist/components/ui/popover/popover.js +51 -96
- package/dist/components/ui/popover/popover.js.map +1 -1
- package/dist/components/ui/progress/progress.js +23 -29
- package/dist/components/ui/progress/progress.js.map +1 -1
- package/dist/components/ui/progress-circle/progress-circle.js +97 -113
- package/dist/components/ui/progress-circle/progress-circle.js.map +1 -1
- package/dist/components/ui/radar-chart/radar-chart.js +137 -225
- package/dist/components/ui/radar-chart/radar-chart.js.map +1 -1
- package/dist/components/ui/radial-bar-chart/radial-bar-chart.js +267 -399
- package/dist/components/ui/radial-bar-chart/radial-bar-chart.js.map +1 -1
- package/dist/components/ui/radio/radio.js +22 -43
- package/dist/components/ui/radio/radio.js.map +1 -1
- package/dist/components/ui/resizable/resizable.js +20 -64
- package/dist/components/ui/resizable/resizable.js.map +1 -1
- package/dist/components/ui/sankey-chart/sankey-chart.js +155 -217
- package/dist/components/ui/sankey-chart/sankey-chart.js.map +1 -1
- package/dist/components/ui/scatter-chart/scatter-chart.js +95 -140
- package/dist/components/ui/scatter-chart/scatter-chart.js.map +1 -1
- package/dist/components/ui/scroll-area/scroll-area.js +43 -77
- package/dist/components/ui/scroll-area/scroll-area.js.map +1 -1
- package/dist/components/ui/search/search.js +58 -92
- package/dist/components/ui/search/search.js.map +1 -1
- package/dist/components/ui/section/section.js +125 -163
- package/dist/components/ui/section/section.js.map +1 -1
- package/dist/components/ui/separator/separator.js +16 -22
- package/dist/components/ui/separator/separator.js.map +1 -1
- package/dist/components/ui/sheet/sheet-details.js +55 -78
- package/dist/components/ui/sheet/sheet-details.js.map +1 -1
- package/dist/components/ui/sheet/sheet.js +80 -136
- package/dist/components/ui/sheet/sheet.js.map +1 -1
- package/dist/components/ui/sidebar-primary/sidebar-primary.js +220 -364
- package/dist/components/ui/sidebar-primary/sidebar-primary.js.map +1 -1
- package/dist/components/ui/sidebar-secondary/sidebar-secondary.js +459 -641
- package/dist/components/ui/sidebar-secondary/sidebar-secondary.js.map +1 -1
- package/dist/components/ui/skeleton/skeleton.js +14 -21
- package/dist/components/ui/skeleton/skeleton.js.map +1 -1
- package/dist/components/ui/slider/slider.js +28 -42
- package/dist/components/ui/slider/slider.js.map +1 -1
- package/dist/components/ui/spinner/spinner.js +28 -37
- package/dist/components/ui/spinner/spinner.js.map +1 -1
- package/dist/components/ui/stack/stack.js +59 -61
- package/dist/components/ui/stack/stack.js.map +1 -1
- package/dist/components/ui/stepper/stepper.js +52 -70
- package/dist/components/ui/stepper/stepper.js.map +1 -1
- package/dist/components/ui/stepper-item/stepper-item.js +85 -116
- package/dist/components/ui/stepper-item/stepper-item.js.map +1 -1
- package/dist/components/ui/switch/switch.js +26 -40
- package/dist/components/ui/switch/switch.js.map +1 -1
- package/dist/components/ui/table/table-pagination.js +91 -106
- package/dist/components/ui/table/table-pagination.js.map +1 -1
- package/dist/components/ui/table/table-view-options.js +37 -53
- package/dist/components/ui/table/table-view-options.js.map +1 -1
- package/dist/components/ui/table/table.js +90 -177
- package/dist/components/ui/table/table.js.map +1 -1
- package/dist/components/ui/tabs/tabs.js +26 -43
- package/dist/components/ui/tabs/tabs.js.map +1 -1
- package/dist/components/ui/tag/tag.js +42 -47
- package/dist/components/ui/tag/tag.js.map +1 -1
- package/dist/components/ui/timeline/timeline.js +161 -239
- package/dist/components/ui/timeline/timeline.js.map +1 -1
- package/dist/components/ui/timer/timer.js +24 -47
- package/dist/components/ui/timer/timer.js.map +1 -1
- package/dist/components/ui/toast/toast.js +134 -189
- package/dist/components/ui/toast/toast.js.map +1 -1
- package/dist/components/ui/toggle-group/toggle-group.js +28 -46
- package/dist/components/ui/toggle-group/toggle-group.js.map +1 -1
- package/dist/components/ui/toolbar/toolbar.js +128 -201
- package/dist/components/ui/toolbar/toolbar.js.map +1 -1
- package/dist/components/ui/tooltip/tooltip.js +35 -57
- package/dist/components/ui/tooltip/tooltip.js.map +1 -1
- package/dist/components/ui/treemap/treemap.js +135 -213
- package/dist/components/ui/treemap/treemap.js.map +1 -1
- package/dist/components/ui/trend-indicator/trend-indicator.js +48 -62
- package/dist/components/ui/trend-indicator/trend-indicator.js.map +1 -1
- package/dist/components/ui/truncate-text/middle-truncate.js +19 -19
- package/dist/components/ui/truncate-text/middle-truncate.js.map +1 -1
- package/dist/components/ui/truncate-text/text-width.js +11 -10
- package/dist/components/ui/truncate-text/text-width.js.map +1 -1
- package/dist/components/ui/truncate-text/truncate-text.js +92 -152
- package/dist/components/ui/truncate-text/truncate-text.js.map +1 -1
- package/dist/components/ui/widget-placeholder/widget-placeholder.js +63 -106
- package/dist/components/ui/widget-placeholder/widget-placeholder.js.map +1 -1
- package/dist/components/ui/wizard/wizard.js +36 -59
- package/dist/components/ui/wizard/wizard.js.map +1 -1
- package/dist/hooks/use-intersection-observer.js +27 -25
- package/dist/hooks/use-intersection-observer.js.map +1 -1
- package/dist/hooks/use-sort-state.js +43 -33
- package/dist/hooks/use-sort-state.js.map +1 -1
- package/dist/hooks/use-table-url-state.js +100 -109
- package/dist/hooks/use-table-url-state.js.map +1 -1
- package/dist/hooks/use-wizard.js +57 -71
- package/dist/hooks/use-wizard.js.map +1 -1
- package/dist/index.js +125 -550
- package/dist/lib/breakpoints.js +8 -13
- package/dist/lib/breakpoints.js.map +1 -1
- package/dist/lib/deep-equal.js +14 -22
- package/dist/lib/deep-equal.js.map +1 -1
- package/dist/lib/portal-container.js +16 -12
- package/dist/lib/portal-container.js.map +1 -1
- package/dist/lib/use-doc-dir.js +11 -10
- package/dist/lib/use-doc-dir.js.map +1 -1
- package/dist/lib/utils.js +8 -7
- package/dist/lib/utils.js.map +1 -1
- package/dist/llms/funnel-chart.md +269 -101
- package/dist/llms/input-num-picker.md +180 -0
- package/dist/llms/input-select.md +175 -1
- package/dist/llms/radar-chart.md +15 -5
- package/dist/llms.txt +3 -2
- package/dist/node_modules/.pnpm/@date-fns_tz@1.5.0/node_modules/@date-fns/tz/date/index.js +58 -61
- package/dist/node_modules/.pnpm/@date-fns_tz@1.5.0/node_modules/@date-fns/tz/date/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@date-fns_tz@1.5.0/node_modules/@date-fns/tz/date/mini.js +71 -85
- package/dist/node_modules/.pnpm/@date-fns_tz@1.5.0/node_modules/@date-fns/tz/date/mini.js.map +1 -1
- package/dist/node_modules/.pnpm/@date-fns_tz@1.5.0/node_modules/@date-fns/tz/index.js +6 -0
- package/dist/node_modules/.pnpm/@date-fns_tz@1.5.0/node_modules/@date-fns/tz/tz/index.js +1 -0
- package/dist/node_modules/.pnpm/@date-fns_tz@1.5.0/node_modules/@date-fns/tz/tzName/index.js +11 -11
- package/dist/node_modules/.pnpm/@date-fns_tz@1.5.0/node_modules/@date-fns/tz/tzName/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@date-fns_tz@1.5.0/node_modules/@date-fns/tz/tzOffset/index.js +22 -21
- package/dist/node_modules/.pnpm/@date-fns_tz@1.5.0/node_modules/@date-fns/tz/tzOffset/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@tanstack/react-table/build/lib/index.js +36 -99
- package/dist/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@tanstack/react-table/build/lib/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.js +1478 -1852
- package/dist/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.js.map +1 -1
- package/dist/node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.js +34 -35
- package/dist/node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js +18 -15
- package/dist/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/addLeadingZeros.js +7 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/addLeadingZeros.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/defaultOptions.js +8 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/defaultOptions.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/format/formatters.js +387 -580
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/format/formatters.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/format/lightFormatters.js +44 -59
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/format/lightFormatters.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/format/longFormatters.js +39 -52
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/format/longFormatters.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js +9 -18
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/normalizeDates.js +9 -11
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/normalizeDates.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/normalizeInterval.js +12 -8
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/normalizeInterval.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/protectedTokens.js +21 -17
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/_lib/protectedTokens.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/addDays.js +10 -9
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/addDays.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/addMonths.js +13 -19
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/addMonths.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/addWeeks.js +8 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/addWeeks.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/addYears.js +8 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/addYears.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/constants.js +12 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/constants.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/constructFrom.js +8 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/constructFrom.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/differenceInCalendarDays.js +12 -15
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/differenceInCalendarDays.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/differenceInCalendarMonths.js +9 -12
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/differenceInCalendarMonths.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/eachMonthOfInterval.js +16 -16
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/eachMonthOfInterval.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/eachYearOfInterval.js +16 -16
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/eachYearOfInterval.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/endOfISOWeek.js +11 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/endOfISOWeek.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/endOfMonth.js +9 -8
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/endOfMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/endOfWeek.js +10 -10
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/endOfWeek.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/endOfYear.js +9 -8
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/endOfYear.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/format.js +59 -57
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/format.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getDayOfYear.js +11 -10
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getDayOfYear.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getDaysInMonth.js +10 -9
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getDaysInMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getISOWeek.js +12 -11
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getISOWeek.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getISOWeekYear.js +15 -14
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getISOWeekYear.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getMonth.js +8 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getWeek.js +12 -11
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getWeek.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getWeekYear.js +16 -16
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getWeekYear.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getYear.js +8 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/getYear.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isAfter.js +8 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isAfter.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isBefore.js +8 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isBefore.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isDate.js +7 -6
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isDate.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isSameDay.js +10 -13
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isSameDay.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isSameMonth.js +9 -12
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isSameMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isSameYear.js +9 -12
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isSameYear.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isValid.js +9 -8
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isValid.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +10 -9
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +18 -18
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/_lib/buildMatchFn.js +21 -29
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +19 -15
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +70 -70
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US/_lib/formatLong.js +33 -33
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +13 -12
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US/_lib/localize.js +202 -154
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US/_lib/localize.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US/_lib/match.js +125 -110
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US/_lib/match.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US.js +20 -19
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/locale/en-US.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/max.js +14 -13
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/max.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/min.js +14 -13
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/min.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setMonth.js +13 -12
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setYear.js +10 -9
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/setYear.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfDay.js +9 -8
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfDay.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfISOWeek.js +11 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfISOWeek.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfISOWeekYear.js +11 -10
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfISOWeekYear.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfMonth.js +9 -8
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfWeek.js +10 -10
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfWeek.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfWeekYear.js +12 -12
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfWeekYear.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfYear.js +9 -8
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/startOfYear.js.map +1 -1
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/toDate.js +8 -7
- package/dist/node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/toDate.js.map +1 -1
- package/dist/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.6/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js +25 -24
- package/dist/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.6/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map +1 -1
- package/dist/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js +26 -30
- package/dist/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map +1 -1
- package/dist/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js +1016 -1202
- package/dist/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/DayPicker.js +398 -246
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/DayPicker.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/UI.js +16 -18
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/UI.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/classes/CalendarDay.js +13 -19
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/classes/CalendarDay.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/classes/DateLib.js +107 -257
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/classes/DateLib.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/CaptionLabel.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/CaptionLabel.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Chevron.js +14 -14
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Chevron.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Day.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Day.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/DayButton.js +13 -10
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/DayButton.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Dropdown.js +30 -19
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Dropdown.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/DropdownNav.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/DropdownNav.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Footer.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Footer.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Month.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Month.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/MonthCaption.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/MonthCaption.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/MonthGrid.js +7 -6
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/MonthGrid.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Months.js +7 -6
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Months.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/MonthsDropdown.js +10 -9
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/MonthsDropdown.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Nav.js +41 -27
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Nav.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/NextMonthButton.js +7 -6
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/NextMonthButton.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Option.js +7 -6
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Option.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.js +7 -6
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Root.js +12 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Root.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Select.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Select.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Week.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Week.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/WeekNumber.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/WeekNumber.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Weekday.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Weekday.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Weekdays.js +7 -10
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Weekdays.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Weeks.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/Weeks.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/YearsDropdown.js +10 -9
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/YearsDropdown.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/custom-components.js +57 -52
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/components/custom-components.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatCaption.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatCaption.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatDay.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatDay.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.js +6 -5
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/index.js +22 -17
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/formatters/index.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.js +18 -17
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js +36 -41
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.js +10 -9
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.js +7 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getComponents.js +11 -10
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getComponents.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.js +17 -16
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getDates.js +20 -19
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getDates.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getDays.js +11 -10
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getDays.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.js +12 -15
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.js +13 -13
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.js +15 -15
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getFormatters.js +11 -10
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getFormatters.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js +8 -13
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getLabels.js +35 -35
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getLabels.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.js +18 -13
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getMonths.js +25 -24
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getMonths.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getNavMonth.js +8 -11
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getNavMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getNextFocus.js +12 -12
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getNextFocus.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getNextMonth.js +9 -12
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getNextMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.js +9 -12
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.js +14 -13
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.js +12 -11
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getWeeks.js +7 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getWeeks.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.js +19 -16
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/useControlledValue.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/helpers/useControlledValue.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/index.js +30 -25
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/index.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelDayButton.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelDayButton.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelGrid.js +7 -6
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelGrid.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelGridcell.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelGridcell.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.js +7 -6
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelNav.js +6 -5
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelNav.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelNext.js +6 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelNext.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelPrevious.js +7 -6
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelPrevious.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.js +7 -6
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.js +7 -6
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelWeekday.js +8 -7
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelWeekday.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.js +7 -6
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/locale/en-US.js +50 -37
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/locale/en-US.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/noonDateLib.js +101 -106
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/noonDateLib.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/selection/useMulti.js +20 -21
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/selection/useMulti.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/selection/useRange.js +29 -23
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/selection/useRange.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/selection/useSingle.js +16 -15
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/selection/useSingle.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/useAnimation.js +50 -56
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/useAnimation.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/useCalendar.js +71 -76
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/useCalendar.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/useDayPicker.js +11 -12
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/useDayPicker.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/useFocus.js +23 -23
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/useFocus.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/useSelection.js +16 -19
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/useSelection.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/addToRange.js +60 -32
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/addToRange.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/convertMatchersToTimeZone.js +24 -24
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/convertMatchersToTimeZone.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.js +22 -26
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.js +13 -15
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.js +29 -28
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.js +9 -9
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/toTimeZone.js +9 -8
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/toTimeZone.js.map +1 -1
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/typeguards.js +15 -19
- package/dist/node_modules/.pnpm/react-day-picker@10.0.1_@types_react@19.2.15_react@19.2.6/node_modules/react-day-picker/dist/esm/utils/typeguards.js.map +1 -1
- package/dist/node_modules/.pnpm/react-resizable-panels@4.11.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/react-resizable-panels/dist/react-resizable-panels.js +1511 -2084
- package/dist/node_modules/.pnpm/react-resizable-panels@4.11.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/react-resizable-panels/dist/react-resizable-panels.js.map +1 -1
- package/dist/node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/dist/bundle-mjs.js +1716 -2996
- package/dist/node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
- package/dist/react.js +125 -550
- package/dist/src/components/ui/chart/chart.d.ts +8 -1
- package/dist/src/components/ui/funnel-chart/funnel-chart.d.ts +92 -26
- package/dist/src/components/ui/funnel-chart/index.d.ts +1 -1
- package/dist/src/components/ui/input-num-picker/index.d.ts +1 -0
- package/dist/src/components/ui/input-num-picker/input-num-picker.d.ts +14 -0
- package/dist/src/components/ui/input-select/input-select.d.ts +34 -2
- package/dist/src/components/ui/radar-chart/radar-chart.d.ts +42 -9
- package/dist/src/index.d.ts +1 -0
- package/dist/ui-react.css +2 -1
- package/package.json +6 -6
- package/dist/index.js.map +0 -1
- package/dist/react.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.js","sources":["../../../../src/components/ui/data-table/data-table.tsx"],"sourcesContent":["import {\n type CSSProperties,\n type DragEvent,\n Fragment,\n type KeyboardEvent,\n type ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n type Cell,\n type Column,\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnOrderState,\n type ColumnSizingState,\n type ExpandedState,\n type Header,\n type OnChangeFn,\n type Row,\n type RowData,\n type RowSelectionState,\n type SortingState,\n type Table as TanstackTable,\n type VisibilityState,\n flexRender,\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\n\nimport { EllipsisIcon } from '@acronis-platform/icons-react/stroke-mono';\n\nimport { useIntersectionObserver } from '@/hooks';\nimport { cn } from '@/lib/utils';\nimport { ButtonIcon } from '../button-icon';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from '../dropdown-menu';\nimport {\n Table,\n TableActionsCell,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n TableSettingsCell,\n} from '../table';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '../tooltip';\nimport { isBulkSelectionActive } from './data-table-selection';\nimport { DataTableViewOptions } from './data-table-view-options';\n\n// Ported from `@acronis-platform/shadcn-uikit`'s `data-table`\n// (packages/ui-legacy/src/components/ui/data-table/). A TanStack-react-table v8\n// data grid composed over the ui-react Table primitives — sorting, filtering,\n// column visibility, row selection, pagination, and optional row expansion. The\n// presentational flags (`striped`, `bordered`, `skeleton`, `highlightCurrentRow`)\n// are borrowed from the Vue `AvTable`; behavioral features come from TanStack.\n// Pair with DataTableToolbar / DataTablePagination / DataTableColumnHeader, which\n// take the `table` instance returned to column cells via TanStack context.\n// The grid cells/rows/headers are themed by the Table primitives' `--ui-table-*`\n// tier; DataTable's own chrome reuses that tier too — the wrapper border matches\n// the cell borders (`--ui-table-global-row-border-color`), the empty-state uses\n// the muted table-value color, the current row the active-row color, and stripes\n// the secondary surface.\n//\n// Advanced-grid opt-ins built on native TanStack features:\n// • Column resizing -> `enableColumnResizing` + `columnResizing` state, with a\n// drag handle rendered from `header.getResizeHandler()`.\n// • Sticky columns -> `ColumnDef.meta.pin: 'left' | 'right'` drives TanStack's\n// native column-pinning API (`column.pin()` / `getStart()` / `getAfter()`),\n// surfaced as `position: sticky` cells with an opaque row-token background.\n// • Column reorder -> `enableColumnReordering` + `columnOrder` state, with\n// native HTML5 drag-and-drop on the header cells (plain `cursor-grab`/\n// `active:cursor-grabbing` utilities, since there's no dedicated Figma\n// \"Draggable\" token yet, unlike the resize handle's generated\n// `--ui-resizable-cursor`).\n\n// Extend TanStack's per-column `meta` with the flags DataTable reads. Augmenting\n// the module keeps `ColumnDef.meta.pin` type-safe at the call site.\ndeclare module '@tanstack/react-table' {\n // Type params must match TanStack's `ColumnMeta<TData, TValue>` arity/names for\n // declaration merging, even though this augmentation doesn't reference them.\n // eslint-disable-next-line unused-imports/no-unused-vars\n interface ColumnMeta<TData extends RowData, TValue> {\n /** Pin the column to a table edge (sticky while the grid scrolls horizontally). */\n pin?: 'left' | 'right';\n /**\n * Let the column's header + cells wrap onto multiple lines (drops the fixed\n * row height); mirrors the `Table` primitives' `wrap` prop on TableHead/TableCell.\n */\n wrap?: boolean;\n }\n}\n\n// Sticky offset + stacking for a pinned column, computed from TanStack's own\n// pinning geometry rather than hand-rolled CSS math. A subtle edge shadow (facing\n// the scrollable columns) separates the pinned column from content sliding\n// underneath it — the opaque background that actually hides that content lives\n// in the caller's className (see `headerPinnedBg`/`rowBg` below), not here.\nexport function getPinnedStyle<TData>(\n column: Column<TData, unknown>\n): CSSProperties | undefined {\n const pinned = column.getIsPinned();\n if (!pinned) return undefined;\n return {\n position: 'sticky',\n left: pinned === 'left' ? column.getStart('left') : undefined,\n right: pinned === 'right' ? column.getAfter('right') : undefined,\n zIndex: 1,\n // Derived from the same border token every other table divider uses (not a\n // hardcoded color), so the separator theme-adapts automatically.\n boxShadow:\n pinned === 'left'\n ? '4px 0 4px -4px var(--ui-table-global-row-border-color)'\n : '-4px 0 4px -4px var(--ui-table-global-row-border-color)',\n };\n}\n\n// A column's rendered width tracks TanStack's size model once the consumer has\n// opted in — either explicitly (a `size` set on the `ColumnDef`) or implicitly\n// (column resizing enabled, which needs every column's width to be deterministic\n// for the drag math to work). Without either, columns stay in native `<table>`\n// auto-layout so `size`'s internal default (TanStack falls back to 150) never\n// forces every untouched column to a fixed width.\nexport function getColumnWidth<TData>(\n column: Column<TData, unknown>,\n enableColumnResizing: boolean\n): number | undefined {\n if (column.id === 'select') {\n // Matches the trailing `__actions` column's fixed 48px: symmetric gutters.\n return 48;\n }\n if (enableColumnResizing || column.columnDef.size !== undefined) {\n return column.getSize();\n }\n return undefined;\n}\n\nfunction getHeaderStyle<TData>(\n header: Header<TData, unknown>,\n enableColumnResizing: boolean\n): CSSProperties | undefined {\n const pin = getPinnedStyle(header.column);\n const width = getColumnWidth(header.column, enableColumnResizing);\n if (!pin && width === undefined) return undefined;\n return { ...pin, width };\n}\n\nexport function getCellStyle<TData>(\n cell: Cell<TData, unknown>,\n enableColumnResizing: boolean\n): CSSProperties | undefined {\n const pin = getPinnedStyle(cell.column);\n const width = getColumnWidth(cell.column, enableColumnResizing);\n if (!pin && width === undefined) return undefined;\n return { ...pin, width };\n}\n\n// Matches TanStack's own `defaultColumnSizing` fallback bounds — the same\n// range `column.getSize()` already clamps to internally when a column\n// doesn't set its own `minSize`/`maxSize`.\nconst DEFAULT_MIN_COLUMN_SIZE = 20;\nconst DEFAULT_MAX_COLUMN_SIZE = Number.MAX_SAFE_INTEGER;\n\n/**\n * Computes the next column width for an Arrow-key resize step (Shift = larger\n * step), clamped to `[min, max]` regardless of which bound `currentSize`\n * started outside of. Returns `undefined` for any other key, so the caller\n * knows not to `preventDefault()`/resize.\n */\nexport function getResizeKeyboardStep(\n key: string,\n currentSize: number,\n { shiftKey, min, max }: { shiftKey: boolean; min: number; max: number }\n): number | undefined {\n const step = shiftKey ? 50 : 10;\n if (key === 'ArrowLeft')\n return Math.min(max, Math.max(min, currentSize - step));\n if (key === 'ArrowRight')\n return Math.max(min, Math.min(max, currentSize + step));\n return undefined;\n}\n\n/**\n * Moves `from` to `to`'s position in a `columnOrder` array (the drop semantics\n * of the header drag gesture: the dragged column lands where the drop target\n * sits, pushing it aside). Returns `order` unchanged when either id is absent,\n * so a drop on a column that isn't part of the order (e.g. one added while the\n * gesture was in flight) is a no-op rather than a reshuffle.\n */\nexport function reorderColumn(\n order: string[],\n from: string,\n to: string\n): string[] {\n const fromIndex = order.indexOf(from);\n const toIndex = order.indexOf(to);\n if (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex) return order;\n const next = [...order];\n next.splice(toIndex, 0, next.splice(fromIndex, 1)[0]);\n return next;\n}\n\n/** One line of the header hover tooltip: a capability and the gesture for it. */\nexport interface DataTableHeaderHint {\n /** The capability, rendered in bold (e.g. `Sort column`). */\n label: string;\n /** The gesture that triggers it (e.g. `Click`). */\n action: string;\n}\n\n/** Copy of the header hover tooltip, one entry per column capability. */\nexport interface DataTableHeaderHints {\n sort: DataTableHeaderHint;\n reorder: DataTableHeaderHint;\n resize: DataTableHeaderHint;\n}\n\nconst DEFAULT_HEADER_HINTS: DataTableHeaderHints = {\n sort: { label: 'Sort column', action: 'Click' },\n reorder: { label: 'Reorder column', action: 'Drag' },\n resize: { label: 'Resize column', action: 'Drag border' },\n};\n\n// `columns`/`data` build DataTable's own table instance; `table` renders an\n// externally-built one instead. At least one of the two forms is required —\n// omitting both would otherwise silently render an empty table — but `table`\n// may still be passed alongside `columns`/`data` (e.g. to also drive a\n// composed toolbar/pagination from the same instance DataTable renders).\ntype DataTableDataSourceProps<TData, TValue> =\n | {\n columns: ColumnDef<TData, TValue>[];\n data: TData[];\n /**\n * Also drive an externally-built TanStack `table` instance (e.g. a\n * composed toolbar/pagination) from the same state as this DataTable.\n */\n table?: TanstackTable<TData>;\n }\n | {\n columns?: ColumnDef<TData, TValue>[];\n data?: TData[];\n /**\n * Render from an externally-built TanStack `table` instance instead of\n * DataTable's own — DataTable then owns no state and renders the caller's\n * instance as-is (sorting, filtering, pagination, row models, etc. are all\n * configured on that instance). Makes `columns`/`data` unnecessary (they're\n * only used to build DataTable's own instance) and the following props\n * no-ops (configure the equivalent directly on the external instance\n * instead): `columnVisibility`, `onColumnVisibilityChange`,\n * `onColumnSizingChange`, `enableColumnResizing`,\n * `enableColumnReordering`, `columnOrder`, `onColumnOrderChange`,\n * `getRowCanExpand`,\n * `manualSorting`, `sorting`, `onSortingChange`, `paginationMode`,\n * `onLoadMore`, `loadMoreRootMargin`, `hasNextPage`, `isLoadingMore`.\n * `meta.pin`-driven column pinning is also skipped — pin/unpin the\n * caller's own instance via TanStack's `column.pin()` directly.\n */\n table: TanstackTable<TData>;\n };\n\ninterface DataTableOwnProps<TData> {\n /** Enables row expansion for rows that return true. Pair with `renderExpandedRow`. */\n getRowCanExpand?: (row: Row<TData>) => boolean;\n /**\n * Renders expanded content for an expanded row. Used together with\n * `getRowCanExpand`.\n */\n renderExpandedRow?: (row: Row<TData>) => ReactNode;\n /** Alternating row backgrounds. */\n striped?: boolean;\n /** Vertical borders between columns (rows already have horizontal borders). */\n bordered?: boolean;\n /** Highlight the row the user last clicked (the \"current\" row). */\n highlightCurrentRow?: boolean;\n /** Render placeholder skeleton rows instead of data (loading state). */\n skeleton?: boolean;\n /** Number of skeleton rows to render when `skeleton` is set. */\n skeletonRows?: number;\n /**\n * Opt in to interactive column resizing. Renders a drag handle at the trailing\n * edge of each resizable header cell (TanStack's native `columnResizing`).\n */\n enableColumnResizing?: boolean;\n /** Passthrough for the `columnSizing` state so a consumer can persist widths. */\n onColumnSizingChange?: OnChangeFn<ColumnSizingState>;\n /**\n * Opt in to column reordering by dragging a header cell onto another one\n * (native HTML5 drag-and-drop driving TanStack's `columnOrder`). Pinned\n * columns are excluded — they're anchored to a table edge by definition.\n * Pointer-only, matching the design: there is no keyboard equivalent yet.\n */\n enableColumnReordering?: boolean;\n /**\n * Controlled column-order state — pass this (with `onColumnOrderChange`) to\n * persist or share the order. Uncontrolled (internal state) when omitted.\n */\n columnOrder?: ColumnOrderState;\n /** Passthrough for the `columnOrder` state; pairs with `columnOrder`. */\n onColumnOrderChange?: OnChangeFn<ColumnOrderState>;\n /**\n * Controlled column-visibility state — pass this (with\n * `onColumnVisibilityChange`) to share one visibility state with an\n * external `useReactTable` instance (e.g. a composed toolbar). Uncontrolled\n * (internal state) when omitted.\n */\n columnVisibility?: VisibilityState;\n /** Passthrough for the `columnVisibility` state; pairs with `columnVisibility`. */\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>;\n /**\n * Controlled row-selection state — pass this (with `onRowSelectionChange`)\n * to share one selection state with an external `useReactTable` instance\n * (e.g. a composed toolbar/bulk-actions bar). Uncontrolled (internal state)\n * when omitted.\n */\n rowSelection?: RowSelectionState;\n /** Passthrough for the `rowSelection` state; pairs with `rowSelection`. */\n onRowSelectionChange?: OnChangeFn<RowSelectionState>;\n /**\n * Opt out of client-side sorting — pass already-sorted `data` and drive\n * sorting via `sorting`/`onSortingChange` (e.g. mapped to a server query by\n * the caller). Mapping sort state to a query and refetching stays the\n * caller's job; DataTable only skips its own comparator.\n */\n manualSorting?: boolean;\n /**\n * Controlled sorting state — pass this (with `onSortingChange`) to drive\n * sorting externally. Uncontrolled (internal state) when omitted.\n */\n sorting?: SortingState;\n /** Passthrough for the `sorting` state; pairs with `sorting`. */\n onSortingChange?: OnChangeFn<SortingState>;\n /**\n * Renders a full row, bypassing DataTable's default per-cell `flexRender`\n * path entirely (no `<TableRow>`/cell-styling/pinning of DataTable's own).\n * Use to swap in a custom, independently memoizable row component. The\n * caller owns the row's markup and equality semantics — reuse the exported\n * `getCellStyle`/`getPinnedStyle`/`getColumnWidth` helpers to match\n * DataTable's default cell styling if desired.\n *\n * Also bypasses DataTable's `renderExpandedRow` handling — a row rendered\n * via `renderRow` never gets an expanded-content row appended, even when\n * `getRowCanExpand` returns true for it. Read `row.getIsExpanded()` and\n * render the expanded content yourself if you need both.\n */\n renderRow?: (row: Row<TData>, rowIndex: number) => ReactNode;\n /**\n * Renders a custom empty state instead of the default \"No results.\" row.\n * Receives `hasFilters` (whether any column filter is currently applied) so\n * the caller can distinguish \"no data at all\" from \"no matches\" — the\n * actual copy/wording/localization stays the caller's job.\n */\n renderEmptyState?: (context: { hasFilters: boolean }) => ReactNode;\n /**\n * `'page'` (default) keeps today's client-paginated behavior. `'infinite'`\n * omits the paginated row model — `data` is assumed to be the full\n * accumulated array the caller appends to on each `onLoadMore` — and\n * renders a sentinel row that calls `onLoadMore` once it scrolls into view.\n * Does not compose with virtualization; for a large accumulated list, use\n * the `VirtualScrolling` recipe over the raw `Table` primitives instead.\n */\n paginationMode?: 'page' | 'infinite';\n /**\n * Called when the infinite-scroll sentinel intersects the viewport.\n * `paginationMode=\"infinite\"` only. The fetch-more call, cursor/offset\n * tracking, dedup, and accumulating `data` stay the caller's job. Requires\n * at least one row already rendered — an empty table with `data={[]}`\n * cannot use the sentinel to drive its very first fetch; seed the first\n * page yourself (e.g. on mount) and use `onLoadMore` for subsequent pages.\n */\n onLoadMore?: () => void;\n /**\n * Expands the sentinel's `IntersectionObserver` root margin (native CSS\n * margin syntax, e.g. `'400px'`) so `onLoadMore` fires before the sentinel\n * is literally visible — the closer the caller's fetch is to finishing by\n * the time the user actually scrolls there, the less often the trailing\n * loading row is seen. `paginationMode=\"infinite\"` only; no-op when `table`\n * is passed. How far this actually prefetches also depends on page size —\n * a large margin with small pages can trigger several `onLoadMore` calls\n * back-to-back as the user scrolls normally, which is expected.\n */\n loadMoreRootMargin?: string;\n /** Whether more rows are available to load. `paginationMode=\"infinite\"` only. */\n hasNextPage?: boolean;\n /**\n * Accessible name of a column's resize handle. Override to localize.\n * `enableColumnResizing` only.\n */\n resizeColumnLabel?: string;\n /**\n * Text of the default empty-state row. Ignored when `renderEmptyState` is\n * given. Override to localize.\n */\n emptyLabel?: string;\n /**\n * Whether a load is in flight — suppresses further `onLoadMore` calls and\n * renders a trailing loading row. `paginationMode=\"infinite\"` only.\n */\n isLoadingMore?: boolean;\n /**\n * Hide the trailing sticky action column — the column-visibility cog in the\n * header and each row's overflow-actions ellipsis. Shown by default. A\n * no-op when an external `table` is passed (build the column into that\n * instance's own `columns` instead).\n */\n hideActionColumn?: boolean;\n /**\n * Renders the content of a row's overflow-actions menu (e.g. `Edit`/\n * `Delete` items), opened from the ellipsis trigger in the trailing action\n * column. Omit to render that row without a trigger — the 48px column is\n * still reserved. Suppressed (like the trigger itself) while a bulk\n * selection is active, per `TableActionsCell`.\n */\n renderRowActions?: (row: Row<TData>) => ReactNode;\n /** Accessible name of a row's overflow-actions trigger. Override to localize. */\n rowActionsLabel?: string;\n /**\n * Accessible name of the action column's column-visibility trigger.\n * Override to localize.\n */\n columnSettingsLabel?: string;\n /**\n * Copy of the tooltip shown while a header cell is hovered/focused — one\n * line per capability that column actually has (sort/reorder/resize).\n * Override (per capability) to localize; a column with no capability shows\n * no tooltip at all.\n */\n headerHints?: Partial<DataTableHeaderHints>;\n}\n\nexport type DataTableProps<TData, TValue = unknown> = DataTableOwnProps<TData> &\n DataTableDataSourceProps<TData, TValue>;\n\nexport function DataTable<TData, TValue = unknown>({\n columns = [],\n data = [],\n table: externalTable,\n getRowCanExpand,\n renderExpandedRow,\n striped = false,\n bordered = false,\n highlightCurrentRow = false,\n skeleton = false,\n skeletonRows = 5,\n enableColumnResizing = false,\n onColumnSizingChange,\n enableColumnReordering = false,\n columnOrder: controlledColumnOrder,\n onColumnOrderChange,\n columnVisibility: controlledColumnVisibility,\n onColumnVisibilityChange,\n rowSelection: controlledRowSelection,\n onRowSelectionChange,\n manualSorting = false,\n sorting: controlledSorting,\n onSortingChange,\n renderRow,\n renderEmptyState,\n paginationMode = 'page',\n onLoadMore,\n loadMoreRootMargin,\n hasNextPage = false,\n resizeColumnLabel = 'Resize column',\n emptyLabel = 'No results.',\n isLoadingMore = false,\n hideActionColumn = false,\n renderRowActions,\n rowActionsLabel = 'Row actions',\n columnSettingsLabel,\n headerHints,\n}: DataTableProps<TData, TValue>) {\n const resolvedHeaderHints: DataTableHeaderHints = {\n ...DEFAULT_HEADER_HINTS,\n ...headerHints,\n };\n const [internalSorting, setInternalSorting] = useState<SortingState>([]);\n const sorting = controlledSorting ?? internalSorting;\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n const [internalColumnVisibility, setInternalColumnVisibility] =\n useState<VisibilityState>({});\n const columnVisibility =\n controlledColumnVisibility ?? internalColumnVisibility;\n const [internalRowSelection, setInternalRowSelection] =\n useState<RowSelectionState>({});\n const rowSelection = controlledRowSelection ?? internalRowSelection;\n const [expanded, setExpanded] = useState<ExpandedState>({});\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({});\n const [internalColumnOrder, setInternalColumnOrder] =\n useState<ColumnOrderState>([]);\n const columnOrder = controlledColumnOrder ?? internalColumnOrder;\n // The header cell the user is currently dragging, so the source cell can dim\n // while the gesture is in flight.\n const [draggedColumnId, setDraggedColumnId] = useState<string>();\n const [currentRowId, setCurrentRowId] = useState<string>();\n // Roving tabindex over the data rows: exactly one row is a Tab stop at a\n // time (the rest are `tabIndex={-1}`, still focusable programmatically),\n // and Arrow Up/Down move both the DOM focus and which row that is. Clamped\n // against the live row count below rather than reset via an effect, so a\n // filter/page change that shrinks `rows` can't leave it pointing past the\n // end.\n const [focusedRowIndex, setFocusedRowIndex] = useState(0);\n const rowRefs = useRef<Array<HTMLTableRowElement | null>>([]);\n\n const handleColumnSizingChange: OnChangeFn<ColumnSizingState> = (updater) => {\n setColumnSizing(updater);\n onColumnSizingChange?.(updater);\n };\n\n const handleColumnOrderChange: OnChangeFn<ColumnOrderState> = (updater) => {\n if (controlledColumnOrder === undefined) {\n setInternalColumnOrder(updater);\n }\n onColumnOrderChange?.(updater);\n };\n\n const handleColumnVisibilityChange: OnChangeFn<VisibilityState> = (\n updater\n ) => {\n setInternalColumnVisibility(updater);\n onColumnVisibilityChange?.(updater);\n };\n\n const handleSortingChange: OnChangeFn<SortingState> = (updater) => {\n if (controlledSorting === undefined) {\n setInternalSorting(updater);\n }\n onSortingChange?.(updater);\n };\n\n const handleRowSelectionChange: OnChangeFn<RowSelectionState> = (\n updater\n ) => {\n if (controlledRowSelection === undefined) {\n setInternalRowSelection(updater);\n }\n onRowSelectionChange?.(updater);\n };\n\n // The trailing sticky action column (cog + per-row ellipsis) is a no-op\n // with an external `table` — that instance's own `columns` already decide\n // what renders, DataTable doesn't own its state in that mode (see the\n // `table` prop's tsdoc).\n const showActionColumn = !hideActionColumn && !externalTable;\n // A real `ColumnDef` (rather than chrome bolted onto the render loop) so\n // TanStack's own pinning geometry measures and offsets it like any other\n // pinned column — `header`/`cell` are never read (see the header/body\n // render loops below, which special-case this id), only `size`/`meta.pin`.\n const actionColumns = useMemo<ColumnDef<TData, TValue>[]>(\n () =>\n showActionColumn\n ? [\n {\n id: '__actions',\n size: 48,\n enableSorting: false,\n enableHiding: false,\n meta: { pin: 'right' },\n header: () => null,\n cell: () => null,\n },\n ]\n : [],\n [showActionColumn]\n );\n const tableColumns = useMemo(\n () => [...columns, ...actionColumns],\n [columns, actionColumns]\n );\n // The pinned action cell's own hover (its ellipsis/cog trigger) should be\n // the only thing that tints while it's hovered — not the row underneath it\n // (see `hover:bg-transparent` below). Tracked by id (rather than a boolean)\n // because it's set from the action cell of whichever row is currently under\n // the pointer.\n const [actionHoveredRowId, setActionHoveredRowId] = useState<string>();\n\n // Built unconditionally — hooks can't be conditionally called — but only\n // feeds the render path below when no external `table` is passed (see\n // `table` below).\n const internalTable = useReactTable({\n data,\n columns: tableColumns,\n enableColumnResizing,\n columnResizeMode: 'onChange',\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n ...(paginationMode === 'page'\n ? { getPaginationRowModel: getPaginationRowModel() }\n : {}),\n getRowCanExpand,\n onExpandedChange: setExpanded,\n manualSorting,\n onSortingChange: handleSortingChange,\n ...(manualSorting ? {} : { getSortedRowModel: getSortedRowModel() }),\n onColumnFiltersChange: setColumnFilters,\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onRowSelectionChange: handleRowSelectionChange,\n onColumnSizingChange: handleColumnSizingChange,\n onColumnOrderChange: handleColumnOrderChange,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n expanded,\n columnSizing,\n columnOrder,\n },\n });\n\n // The caller's instance is the single source of truth when passed — it\n // configures its own row models/state, so DataTable just renders from it.\n const table = externalTable ?? internalTable;\n const isInfiniteScroll = !externalTable && paginationMode === 'infinite';\n // `enableColumnResizing` is documented as a no-op with an external `table`\n // (the caller owns that instance's ColumnSizing state), but ColumnSizing is\n // a built-in TanStack feature present on any instance — reading the raw\n // prop below would still render live resize handles that mutate the\n // caller's own instance. Gate it the same way as `isInfiniteScroll`.\n const resizingEnabled = enableColumnResizing && !externalTable;\n // Same reasoning as `resizingEnabled`: ColumnOrdering is a built-in TanStack\n // feature present on any instance, so reading the raw prop would let the\n // header drag mutate a caller-owned instance DataTable doesn't manage.\n const reorderingEnabled = enableColumnReordering && !externalTable;\n // A resize drag necessarily moves the pointer off the (few-px-wide) resize\n // handle and onto the header cell itself. If that cell is still\n // `draggable`, the browser arms a native HTML5 reorder drag mid-resize —\n // native drag then swallows the mousemove/mouseup TanStack's resize\n // handler relies on, so the cursor flips to the reorder \"grab\" icon and\n // releasing the mouse doesn't cleanly end the resize. Reading this back\n // from TanStack's own resize state (rather than pointer position) keeps\n // every header cell non-draggable for the *entire* gesture, regardless of\n // where the pointer ends up.\n const isAnyColumnResizing = Boolean(\n table.getState().columnSizingInfo.isResizingColumn\n );\n // The resize handle only shows its `ew-resize` cursor while the pointer is\n // directly over its thin 4px hit area — once a drag starts, fast pointer\n // movement leaves that area and the browser shows whatever cursor the\n // element underneath declares (e.g. a sortable header's `cursor-pointer`).\n // This attribute + the `html[data-ui-column-resizing] *` rule in\n // styles/index.css force `ew-resize` everywhere for the duration of the\n // drag — a plain `<body>` inline cursor loses to a descendant's own\n // `cursor` declaration, so it isn't enough on its own.\n useEffect(() => {\n if (!isAnyColumnResizing) return;\n document.documentElement.setAttribute('data-ui-column-resizing', '');\n return () => {\n document.documentElement.removeAttribute('data-ui-column-resizing');\n };\n }, [isAnyColumnResizing]);\n const sentinelRef = useIntersectionObserver<HTMLTableRowElement>({\n onIntersect: () => onLoadMore?.(),\n disabled: !isInfiniteScroll || !hasNextPage || isLoadingMore,\n rootMargin: loadMoreRootMargin,\n });\n\n // Arrow-key resize on the drag handle (see `canResize` below). Ignores any\n // modifier besides Shift so it doesn't hijack browser/OS shortcuts bound to\n // Ctrl/Alt/Cmd+Arrow (e.g. back navigation) while the handle has focus.\n const handleResizeKeyDown = (\n event: KeyboardEvent<HTMLDivElement>,\n header: Header<TData, unknown>\n ) => {\n if (event.ctrlKey || event.altKey || event.metaKey) return;\n const nextSize = getResizeKeyboardStep(event.key, header.column.getSize(), {\n shiftKey: event.shiftKey,\n min: header.column.columnDef.minSize ?? DEFAULT_MIN_COLUMN_SIZE,\n max: header.column.columnDef.maxSize ?? DEFAULT_MAX_COLUMN_SIZE,\n });\n if (nextSize === undefined) return;\n event.preventDefault();\n table.setColumnSizing((old) => ({ ...old, [header.column.id]: nextSize }));\n };\n\n // Native HTML5 drag-and-drop on the header cells. `columnOrder` starts empty\n // (TanStack reads that as \"the declared order\"), so the first drop seeds it\n // from the live leaf columns before moving anything.\n const handleColumnDragStart = (\n event: DragEvent<HTMLTableCellElement>,\n columnId: string\n ) => {\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n // Firefox requires setData() during dragstart to actually initiate a\n // native drag; the value itself is unused (drop reads draggedColumnId).\n event.dataTransfer.setData('text/plain', columnId);\n }\n setDraggedColumnId(columnId);\n };\n\n const handleColumnDragOver = (event: DragEvent<HTMLTableCellElement>) => {\n // Without this the browser rejects the drop and no `onDrop` ever fires.\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'move';\n };\n\n const handleColumnDrop = (\n event: DragEvent<HTMLTableCellElement>,\n targetColumnId: string\n ) => {\n event.preventDefault();\n if (!draggedColumnId) return;\n const current = table.getState().columnOrder;\n const base = current.length\n ? current\n : table.getAllLeafColumns().map((column) => column.id);\n table.setColumnOrder(reorderColumn(base, draggedColumnId, targetColumnId));\n setDraggedColumnId(undefined);\n };\n\n // Read each column's `meta.pin` and drive TanStack's native pinning state.\n // Always calls `pin()` (rather than only when truthy) so a column whose\n // `meta.pin` is removed dynamically actually un-pins. Skipped for an\n // external `table` — DataTable owns no state in that mode (see the `table`\n // prop's tsdoc), so the caller's own pinning setup is left alone.\n useEffect(() => {\n if (externalTable) return;\n table.getAllLeafColumns().forEach((column) => {\n column.pin(column.columnDef.meta?.pin ?? false);\n });\n }, [table, columns, externalTable]);\n\n const rows = table.getRowModel().rows;\n // Derived from the selection state, so it's the same for every row — compute\n // it once instead of per row inside the render loop below.\n const bulkSelectionActive = isBulkSelectionActive(table);\n const activeRowIndex = rows.length\n ? Math.min(focusedRowIndex, rows.length - 1)\n : 0;\n\n // Mouse/pointer clicks still focus a `tabIndex={-1}` row (browsers allow\n // programmatic/click focus regardless of tabIndex value) — syncing the\n // roving index on focus makes that row the next Tab stop too, matching how\n // users expect the last-interacted row to keep focus.\n const handleRowFocus = (rowIndex: number) => {\n setFocusedRowIndex(rowIndex);\n };\n\n const handleRowKeyDown = (\n event: KeyboardEvent<HTMLTableRowElement>,\n rowIndex: number\n ) => {\n // Keydown bubbles, so arrow keys from an interactive control inside a cell\n // (number spinner, textarea caret, native select) would otherwise be\n // hijacked to move row focus. Only roam when the row itself is focused.\n if (event.target !== event.currentTarget) return;\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n const nextIndex =\n event.key === 'ArrowDown'\n ? Math.min(rowIndex + 1, rows.length - 1)\n : Math.max(rowIndex - 1, 0);\n if (nextIndex === rowIndex) return;\n event.preventDefault();\n setFocusedRowIndex(nextIndex);\n rowRefs.current[nextIndex]?.focus();\n };\n // Vertical borders are opt-in; a trailing border on the last cell would\n // double up with the wrapper, so suppress it.\n const borderedClass = bordered\n ? '[&_th:not(:last-child)]:border-e [&_td:not(:last-child)]:border-e [&_th]:border-[var(--ui-table-global-row-border-color)] [&_td]:border-[var(--ui-table-global-row-border-color)]'\n : undefined;\n\n // A pinned header/body cell must be opaque so the cells scrolling under it\n // (same row) aren't visible. `--ui-table-data-row-color-idle` is\n // *transparent by design* (an idle row shows the page/card surface through\n // it), so it can't be reused here — pinned idle cells need the actual\n // resolved surface color instead (`--ui-background-surface-primary`, bridged\n // to `bg-background`). Non-idle states (selected/current/striped) already use\n // real opaque tokens and are safe to mirror as-is (see `rowBg` below).\n const headerPinnedBg = 'bg-background';\n\n return (\n <div\n className={cn(\n 'rounded-md border border-[var(--ui-table-global-row-border-color)]',\n borderedClass\n )}\n >\n <Table\n style={\n resizingEnabled ? { width: table.getCenterTotalSize() } : undefined\n }\n >\n {/* One provider for the whole header row so the capability hints share\n a single open/close delay group (Provider renders no DOM, so the\n table markup is unaffected). */}\n <TooltipProvider>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id} className=\"hover:bg-transparent\">\n {headerGroup.headers.map((header) => {\n const isPinned = header.column.getIsPinned();\n const canResize =\n resizingEnabled &&\n header.column.getCanResize() &&\n header.column.id !== 'select';\n // A pinned column is anchored to a table edge, so dragging it\n // out of that edge would contradict its own pinning.\n const canReorder =\n reorderingEnabled && !header.isPlaceholder && !isPinned;\n const canSort =\n !header.isPlaceholder && header.column.getCanSort();\n // One tooltip line per capability the column actually has, in\n // the design's order; a column with none gets no tooltip.\n const hints = [\n canSort && resolvedHeaderHints.sort,\n canReorder && resolvedHeaderHints.reorder,\n canResize && resolvedHeaderHints.resize,\n ].filter((hint): hint is DataTableHeaderHint =>\n Boolean(hint)\n );\n if (header.column.id === '__actions') {\n return (\n <TableSettingsCell\n key={header.id}\n style={getHeaderStyle(header, resizingEnabled)}\n className={headerPinnedBg}\n >\n <DataTableViewOptions\n table={table}\n iconOnly\n triggerAriaLabel={columnSettingsLabel}\n />\n </TableSettingsCell>\n );\n }\n const headerCell = (\n <TableHead\n wrap={header.column.columnDef.meta?.wrap}\n style={getHeaderStyle(header, resizingEnabled)}\n draggable={\n (canReorder && !isAnyColumnResizing) || undefined\n }\n onDragStart={\n canReorder\n ? (event) =>\n handleColumnDragStart(event, header.column.id)\n : undefined\n }\n onDragOver={canReorder ? handleColumnDragOver : undefined}\n onDrop={\n canReorder\n ? (event) =>\n handleColumnDrop(event, header.column.id)\n : undefined\n }\n onDragEnd={\n canReorder\n ? () => setDraggedColumnId(undefined)\n : undefined\n }\n className={cn(\n canResize && 'relative',\n // Per the design, a sortable header tints the whole\n // cell on hover/press, not just the inner sort button.\n // Suppressed while any column is resizing, since the\n // pointer drags across neighboring `<th>`s and would\n // otherwise tint them via native `:hover`.\n canSort &&\n !isAnyColumnResizing &&\n 'transition-colors hover:bg-[var(--ui-table-header-cell-color-hover)] active:bg-[var(--ui-table-header-cell-color-active)]',\n canReorder &&\n !isAnyColumnResizing &&\n 'cursor-grab select-none active:cursor-grabbing',\n canReorder &&\n draggedColumnId === header.column.id &&\n 'opacity-50',\n isPinned && headerPinnedBg\n )}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n {canResize && (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={resizeColumnLabel}\n aria-valuenow={header.column.getSize()}\n aria-valuemin={\n header.column.columnDef.minSize ??\n DEFAULT_MIN_COLUMN_SIZE\n }\n aria-valuemax={\n header.column.columnDef.maxSize ??\n DEFAULT_MAX_COLUMN_SIZE\n }\n tabIndex={0}\n // Keeps a press on the handle from starting the header\n // cell's reorder drag instead of a resize when both\n // features are enabled.\n draggable={false}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n onKeyDown={(event) =>\n handleResizeKeyDown(event, header)\n }\n className={cn(\n 'absolute end-0 top-0 h-full w-1 cursor-(--ui-resizable-cursor) touch-none select-none bg-[var(--ui-table-global-row-border-color)] opacity-0 transition-[opacity,background-color] hover:bg-[var(--ui-resizable-border-color-hover)] hover:opacity-100 focus-visible:bg-[var(--ui-resizable-border-color-hover)] focus-visible:opacity-100 focus-visible:outline-[3px] focus-visible:outline-(--ui-focus-primary)',\n header.column.getIsResizing() &&\n 'bg-[var(--ui-resizable-border-color-active)] opacity-100'\n )}\n />\n )}\n </TableHead>\n );\n if (hints.length === 0) {\n return <Fragment key={header.id}>{headerCell}</Fragment>;\n }\n return (\n <Tooltip\n key={header.id}\n disabled={\n isAnyColumnResizing || draggedColumnId !== undefined\n }\n >\n {/* The whole header cell is the trigger (not just its sort\n button), so the hint covers the reorder/resize gestures\n that live on the cell itself. Disabled mid-drag/resize\n so the hint doesn't pop up over a neighboring cell\n while the pointer passes through it. */}\n <TooltipTrigger render={headerCell} />\n <TooltipContent className=\"flex flex-col gap-1\">\n {hints.map((hint) => (\n <span key={hint.label}>\n <span className=\"font-semibold\">{hint.label}:</span>{' '}\n {hint.action}\n </span>\n ))}\n </TooltipContent>\n </Tooltip>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n </TooltipProvider>\n <TableBody>\n {skeleton ? (\n Array.from({ length: skeletonRows }).map((_, rowIndex) => (\n <TableRow\n key={`skeleton-${rowIndex}`}\n className=\"hover:bg-transparent\"\n >\n {table.getVisibleLeafColumns().map((column) => (\n <TableCell key={column.id}>\n <div className=\"h-4 w-full animate-pulse rounded bg-[var(--ui-background-surface-secondary)]\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : rows?.length ? (\n rows.map((row, rowIndex) => {\n if (renderRow) {\n return (\n <Fragment key={row.id}>{renderRow(row, rowIndex)}</Fragment>\n );\n }\n const isSelected = row.getIsSelected();\n const isCurrent = highlightCurrentRow && currentRowId === row.id;\n // Opaque background applied to pinned cells so sibling cells don't\n // show through while the grid scrolls horizontally. Mirrors the\n // row's own resolved background across selection/current/stripe —\n // the idle case falls back to the real surface color\n // (`bg-background`) since the row's own idle token is transparent\n // by design (see `headerPinnedBg` above).\n // The idle case mirrors the row's own hover tint via `group` (see\n // the row's `group` class below) so the pinned action column\n // doesn't look \"stuck\" idle while the rest of the row is\n // hovered — the row's native `hover:` can't reach it since it\n // needs its own opaque background (see `headerPinnedBg` above).\n const rowBg =\n isSelected || isCurrent\n ? 'bg-[var(--ui-table-data-row-color-active)]'\n : striped && rowIndex % 2 === 1\n ? 'bg-[var(--ui-background-surface-secondary)]'\n : 'bg-background group-hover:bg-[var(--ui-table-data-row-color-hover)]';\n // While a selection is in play the action cell renders nothing and\n // carries no tint of its own, so suppressing the row's hover tint\n // for it would leave the pointer over a row that reacts to\n // nothing. Also covers a row hovered just before the selection\n // started, whose id is still in `actionHoveredRowId`.\n const isActionCellHovered =\n !bulkSelectionActive && actionHoveredRowId === row.id;\n return (\n <Fragment key={row.id}>\n <TableRow\n ref={(node) => {\n rowRefs.current[rowIndex] = node;\n }}\n tabIndex={rowIndex === activeRowIndex ? 0 : -1}\n onFocus={() => handleRowFocus(rowIndex)}\n onKeyDown={(event) => handleRowKeyDown(event, rowIndex)}\n selected={isSelected}\n onClick={\n highlightCurrentRow\n ? () => setCurrentRowId(row.id)\n : undefined\n }\n className={cn(\n 'group',\n highlightCurrentRow && 'cursor-pointer',\n striped &&\n rowIndex % 2 === 1 &&\n !isSelected &&\n !isCurrent &&\n 'bg-[var(--ui-background-surface-secondary)]',\n isCurrent &&\n !isSelected &&\n 'bg-[var(--ui-table-data-row-color-active)]',\n // The action cell's own hover tint (its ellipsis/cog\n // trigger) should be the only thing that reacts while\n // it's hovered — not the rest of the row underneath it.\n isActionCellHovered && 'hover:bg-transparent'\n )}\n >\n {row.getVisibleCells().map((cell) => {\n const isPinned = cell.column.getIsPinned();\n if (cell.column.id === '__actions') {\n return (\n <TableActionsCell\n key={cell.id}\n style={getCellStyle(cell, resizingEnabled)}\n className={rowBg}\n bulkSelectionActive={bulkSelectionActive}\n onMouseEnter={\n bulkSelectionActive\n ? undefined\n : () => setActionHoveredRowId(row.id)\n }\n onMouseLeave={\n bulkSelectionActive\n ? undefined\n : () =>\n setActionHoveredRowId((id) =>\n id === row.id ? undefined : id\n )\n }\n >\n {renderRowActions && (\n <DropdownMenu>\n <DropdownMenuTrigger\n render={\n <ButtonIcon aria-label={rowActionsLabel} />\n }\n >\n <EllipsisIcon />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {renderRowActions(row)}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </TableActionsCell>\n );\n }\n return (\n <TableCell\n key={cell.id}\n wrap={cell.column.columnDef.meta?.wrap}\n style={getCellStyle(cell, resizingEnabled)}\n className={cn(isPinned && rowBg)}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n );\n })}\n </TableRow>\n {renderExpandedRow && row.getIsExpanded() && (\n <TableRow className=\"hover:bg-transparent\">\n <TableCell\n className=\"h-auto py-3\"\n colSpan={row.getVisibleCells().length}\n >\n {renderExpandedRow(row)}\n </TableCell>\n </TableRow>\n )}\n </Fragment>\n );\n })\n ) : renderEmptyState ? (\n <TableRow>\n <TableCell\n colSpan={table.getVisibleLeafColumns().length}\n className=\"h-24 text-center\"\n >\n {renderEmptyState({\n hasFilters: table.getState().columnFilters.length > 0,\n })}\n </TableCell>\n </TableRow>\n ) : (\n <TableRow>\n <TableCell\n colSpan={table.getVisibleLeafColumns().length}\n className=\"h-24 text-center text-[var(--ui-table-data-value-color-disabled)]\"\n >\n {emptyLabel}\n </TableCell>\n </TableRow>\n )}\n {isInfiniteScroll && !skeleton && rows.length > 0 && hasNextPage && (\n <TableRow\n ref={sentinelRef}\n aria-hidden\n className=\"hover:bg-transparent\"\n >\n <TableCell\n colSpan={table.getVisibleLeafColumns().length}\n className=\"h-1 p-0\"\n />\n </TableRow>\n )}\n {isInfiniteScroll &&\n !skeleton &&\n rows.length > 0 &&\n isLoadingMore && (\n <TableRow className=\"hover:bg-transparent\">\n <TableCell colSpan={table.getVisibleLeafColumns().length}>\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"h-4 w-full animate-pulse rounded bg-[var(--ui-background-surface-secondary)]\"\n >\n <span className=\"sr-only\">Loading more rows…</span>\n </div>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n );\n}\n"],"names":["getPinnedStyle","column","pinned","getColumnWidth","enableColumnResizing","getHeaderStyle","header","pin","width","getCellStyle","cell","DEFAULT_MIN_COLUMN_SIZE","DEFAULT_MAX_COLUMN_SIZE","getResizeKeyboardStep","key","currentSize","shiftKey","min","max","step","reorderColumn","order","from","to","fromIndex","toIndex","next","DEFAULT_HEADER_HINTS","DataTable","columns","data","externalTable","getRowCanExpand","renderExpandedRow","striped","bordered","highlightCurrentRow","skeleton","skeletonRows","onColumnSizingChange","enableColumnReordering","controlledColumnOrder","onColumnOrderChange","controlledColumnVisibility","onColumnVisibilityChange","controlledRowSelection","onRowSelectionChange","manualSorting","controlledSorting","onSortingChange","renderRow","renderEmptyState","paginationMode","onLoadMore","loadMoreRootMargin","hasNextPage","resizeColumnLabel","emptyLabel","isLoadingMore","hideActionColumn","renderRowActions","rowActionsLabel","columnSettingsLabel","headerHints","resolvedHeaderHints","internalSorting","setInternalSorting","useState","sorting","columnFilters","setColumnFilters","internalColumnVisibility","setInternalColumnVisibility","columnVisibility","internalRowSelection","setInternalRowSelection","rowSelection","expanded","setExpanded","columnSizing","setColumnSizing","internalColumnOrder","setInternalColumnOrder","columnOrder","draggedColumnId","setDraggedColumnId","currentRowId","setCurrentRowId","focusedRowIndex","setFocusedRowIndex","rowRefs","useRef","handleColumnSizingChange","updater","handleColumnOrderChange","handleColumnVisibilityChange","handleSortingChange","handleRowSelectionChange","showActionColumn","actionColumns","useMemo","tableColumns","actionHoveredRowId","setActionHoveredRowId","internalTable","useReactTable","getCoreRowModel","getExpandedRowModel","getPaginationRowModel","getSortedRowModel","getFilteredRowModel","table","isInfiniteScroll","resizingEnabled","reorderingEnabled","isAnyColumnResizing","useEffect","sentinelRef","useIntersectionObserver","handleResizeKeyDown","event","nextSize","old","handleColumnDragStart","columnId","handleColumnDragOver","handleColumnDrop","targetColumnId","current","base","_a","rows","bulkSelectionActive","isBulkSelectionActive","activeRowIndex","handleRowFocus","rowIndex","handleRowKeyDown","nextIndex","borderedClass","headerPinnedBg","jsx","cn","jsxs","Table","TooltipProvider","TableHeader","headerGroup","TableRow","isPinned","canResize","canReorder","canSort","hints","hint","TableSettingsCell","DataTableViewOptions","headerCell","TableHead","flexRender","Fragment","Tooltip","TooltipTrigger","TooltipContent","TableBody","_","TableCell","row","isSelected","isCurrent","rowBg","isActionCellHovered","node","TableActionsCell","id","DropdownMenu","DropdownMenuTrigger","ButtonIcon","EllipsisIcon","DropdownMenuContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-table.js","names":[],"sources":["../../../../src/components/ui/data-table/data-table.tsx"],"sourcesContent":["import {\n type CSSProperties,\n type DragEvent,\n Fragment,\n type KeyboardEvent,\n type ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n type Cell,\n type Column,\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnOrderState,\n type ColumnSizingState,\n type ExpandedState,\n type Header,\n type OnChangeFn,\n type Row,\n type RowData,\n type RowSelectionState,\n type SortingState,\n type Table as TanstackTable,\n type VisibilityState,\n flexRender,\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\n\nimport { EllipsisIcon } from '@acronis-platform/icons-react/stroke-mono';\n\nimport { useIntersectionObserver } from '@/hooks';\nimport { cn } from '@/lib/utils';\nimport { ButtonIcon } from '../button-icon';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from '../dropdown-menu';\nimport {\n Table,\n TableActionsCell,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n TableSettingsCell,\n} from '../table';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '../tooltip';\nimport { isBulkSelectionActive } from './data-table-selection';\nimport { DataTableViewOptions } from './data-table-view-options';\n\n// Ported from `@acronis-platform/shadcn-uikit`'s `data-table`\n// (packages/ui-legacy/src/components/ui/data-table/). A TanStack-react-table v8\n// data grid composed over the ui-react Table primitives — sorting, filtering,\n// column visibility, row selection, pagination, and optional row expansion. The\n// presentational flags (`striped`, `bordered`, `skeleton`, `highlightCurrentRow`)\n// are borrowed from the Vue `AvTable`; behavioral features come from TanStack.\n// Pair with DataTableToolbar / DataTablePagination / DataTableColumnHeader, which\n// take the `table` instance returned to column cells via TanStack context.\n// The grid cells/rows/headers are themed by the Table primitives' `--ui-table-*`\n// tier; DataTable's own chrome reuses that tier too — the wrapper border matches\n// the cell borders (`--ui-table-global-row-border-color`), the empty-state uses\n// the muted table-value color, the current row the active-row color, and stripes\n// the secondary surface.\n//\n// Advanced-grid opt-ins built on native TanStack features:\n// • Column resizing -> `enableColumnResizing` + `columnResizing` state, with a\n// drag handle rendered from `header.getResizeHandler()`.\n// • Sticky columns -> `ColumnDef.meta.pin: 'left' | 'right'` drives TanStack's\n// native column-pinning API (`column.pin()` / `getStart()` / `getAfter()`),\n// surfaced as `position: sticky` cells with an opaque row-token background.\n// • Column reorder -> `enableColumnReordering` + `columnOrder` state, with\n// native HTML5 drag-and-drop on the header cells (plain `cursor-grab`/\n// `active:cursor-grabbing` utilities, since there's no dedicated Figma\n// \"Draggable\" token yet, unlike the resize handle's generated\n// `--ui-resizable-cursor`).\n\n// Extend TanStack's per-column `meta` with the flags DataTable reads. Augmenting\n// the module keeps `ColumnDef.meta.pin` type-safe at the call site.\ndeclare module '@tanstack/react-table' {\n // Type params must match TanStack's `ColumnMeta<TData, TValue>` arity/names for\n // declaration merging, even though this augmentation doesn't reference them.\n // eslint-disable-next-line unused-imports/no-unused-vars\n interface ColumnMeta<TData extends RowData, TValue> {\n /** Pin the column to a table edge (sticky while the grid scrolls horizontally). */\n pin?: 'left' | 'right';\n /**\n * Let the column's header + cells wrap onto multiple lines (drops the fixed\n * row height); mirrors the `Table` primitives' `wrap` prop on TableHead/TableCell.\n */\n wrap?: boolean;\n }\n}\n\n// Sticky offset + stacking for a pinned column, computed from TanStack's own\n// pinning geometry rather than hand-rolled CSS math. A subtle edge shadow (facing\n// the scrollable columns) separates the pinned column from content sliding\n// underneath it — the opaque background that actually hides that content lives\n// in the caller's className (see `headerPinnedBg`/`rowBg` below), not here.\nexport function getPinnedStyle<TData>(\n column: Column<TData, unknown>\n): CSSProperties | undefined {\n const pinned = column.getIsPinned();\n if (!pinned) return undefined;\n return {\n position: 'sticky',\n left: pinned === 'left' ? column.getStart('left') : undefined,\n right: pinned === 'right' ? column.getAfter('right') : undefined,\n zIndex: 1,\n // Derived from the same border token every other table divider uses (not a\n // hardcoded color), so the separator theme-adapts automatically.\n boxShadow:\n pinned === 'left'\n ? '4px 0 4px -4px var(--ui-table-global-row-border-color)'\n : '-4px 0 4px -4px var(--ui-table-global-row-border-color)',\n };\n}\n\n// A column's rendered width tracks TanStack's size model once the consumer has\n// opted in — either explicitly (a `size` set on the `ColumnDef`) or implicitly\n// (column resizing enabled, which needs every column's width to be deterministic\n// for the drag math to work). Without either, columns stay in native `<table>`\n// auto-layout so `size`'s internal default (TanStack falls back to 150) never\n// forces every untouched column to a fixed width.\nexport function getColumnWidth<TData>(\n column: Column<TData, unknown>,\n enableColumnResizing: boolean\n): number | undefined {\n if (column.id === 'select') {\n // Matches the trailing `__actions` column's fixed 48px: symmetric gutters.\n return 48;\n }\n if (enableColumnResizing || column.columnDef.size !== undefined) {\n return column.getSize();\n }\n return undefined;\n}\n\nfunction getHeaderStyle<TData>(\n header: Header<TData, unknown>,\n enableColumnResizing: boolean\n): CSSProperties | undefined {\n const pin = getPinnedStyle(header.column);\n const width = getColumnWidth(header.column, enableColumnResizing);\n if (!pin && width === undefined) return undefined;\n return { ...pin, width };\n}\n\nexport function getCellStyle<TData>(\n cell: Cell<TData, unknown>,\n enableColumnResizing: boolean\n): CSSProperties | undefined {\n const pin = getPinnedStyle(cell.column);\n const width = getColumnWidth(cell.column, enableColumnResizing);\n if (!pin && width === undefined) return undefined;\n return { ...pin, width };\n}\n\n// Matches TanStack's own `defaultColumnSizing` fallback bounds — the same\n// range `column.getSize()` already clamps to internally when a column\n// doesn't set its own `minSize`/`maxSize`.\nconst DEFAULT_MIN_COLUMN_SIZE = 20;\nconst DEFAULT_MAX_COLUMN_SIZE = Number.MAX_SAFE_INTEGER;\n\n/**\n * Computes the next column width for an Arrow-key resize step (Shift = larger\n * step), clamped to `[min, max]` regardless of which bound `currentSize`\n * started outside of. Returns `undefined` for any other key, so the caller\n * knows not to `preventDefault()`/resize.\n */\nexport function getResizeKeyboardStep(\n key: string,\n currentSize: number,\n { shiftKey, min, max }: { shiftKey: boolean; min: number; max: number }\n): number | undefined {\n const step = shiftKey ? 50 : 10;\n if (key === 'ArrowLeft')\n return Math.min(max, Math.max(min, currentSize - step));\n if (key === 'ArrowRight')\n return Math.max(min, Math.min(max, currentSize + step));\n return undefined;\n}\n\n/**\n * Moves `from` to `to`'s position in a `columnOrder` array (the drop semantics\n * of the header drag gesture: the dragged column lands where the drop target\n * sits, pushing it aside). Returns `order` unchanged when either id is absent,\n * so a drop on a column that isn't part of the order (e.g. one added while the\n * gesture was in flight) is a no-op rather than a reshuffle.\n */\nexport function reorderColumn(\n order: string[],\n from: string,\n to: string\n): string[] {\n const fromIndex = order.indexOf(from);\n const toIndex = order.indexOf(to);\n if (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex) return order;\n const next = [...order];\n next.splice(toIndex, 0, next.splice(fromIndex, 1)[0]);\n return next;\n}\n\n/** One line of the header hover tooltip: a capability and the gesture for it. */\nexport interface DataTableHeaderHint {\n /** The capability, rendered in bold (e.g. `Sort column`). */\n label: string;\n /** The gesture that triggers it (e.g. `Click`). */\n action: string;\n}\n\n/** Copy of the header hover tooltip, one entry per column capability. */\nexport interface DataTableHeaderHints {\n sort: DataTableHeaderHint;\n reorder: DataTableHeaderHint;\n resize: DataTableHeaderHint;\n}\n\nconst DEFAULT_HEADER_HINTS: DataTableHeaderHints = {\n sort: { label: 'Sort column', action: 'Click' },\n reorder: { label: 'Reorder column', action: 'Drag' },\n resize: { label: 'Resize column', action: 'Drag border' },\n};\n\n// `columns`/`data` build DataTable's own table instance; `table` renders an\n// externally-built one instead. At least one of the two forms is required —\n// omitting both would otherwise silently render an empty table — but `table`\n// may still be passed alongside `columns`/`data` (e.g. to also drive a\n// composed toolbar/pagination from the same instance DataTable renders).\ntype DataTableDataSourceProps<TData, TValue> =\n | {\n columns: ColumnDef<TData, TValue>[];\n data: TData[];\n /**\n * Also drive an externally-built TanStack `table` instance (e.g. a\n * composed toolbar/pagination) from the same state as this DataTable.\n */\n table?: TanstackTable<TData>;\n }\n | {\n columns?: ColumnDef<TData, TValue>[];\n data?: TData[];\n /**\n * Render from an externally-built TanStack `table` instance instead of\n * DataTable's own — DataTable then owns no state and renders the caller's\n * instance as-is (sorting, filtering, pagination, row models, etc. are all\n * configured on that instance). Makes `columns`/`data` unnecessary (they're\n * only used to build DataTable's own instance) and the following props\n * no-ops (configure the equivalent directly on the external instance\n * instead): `columnVisibility`, `onColumnVisibilityChange`,\n * `onColumnSizingChange`, `enableColumnResizing`,\n * `enableColumnReordering`, `columnOrder`, `onColumnOrderChange`,\n * `getRowCanExpand`,\n * `manualSorting`, `sorting`, `onSortingChange`, `paginationMode`,\n * `onLoadMore`, `loadMoreRootMargin`, `hasNextPage`, `isLoadingMore`.\n * `meta.pin`-driven column pinning is also skipped — pin/unpin the\n * caller's own instance via TanStack's `column.pin()` directly.\n */\n table: TanstackTable<TData>;\n };\n\ninterface DataTableOwnProps<TData> {\n /** Enables row expansion for rows that return true. Pair with `renderExpandedRow`. */\n getRowCanExpand?: (row: Row<TData>) => boolean;\n /**\n * Renders expanded content for an expanded row. Used together with\n * `getRowCanExpand`.\n */\n renderExpandedRow?: (row: Row<TData>) => ReactNode;\n /** Alternating row backgrounds. */\n striped?: boolean;\n /** Vertical borders between columns (rows already have horizontal borders). */\n bordered?: boolean;\n /** Highlight the row the user last clicked (the \"current\" row). */\n highlightCurrentRow?: boolean;\n /** Render placeholder skeleton rows instead of data (loading state). */\n skeleton?: boolean;\n /** Number of skeleton rows to render when `skeleton` is set. */\n skeletonRows?: number;\n /**\n * Opt in to interactive column resizing. Renders a drag handle at the trailing\n * edge of each resizable header cell (TanStack's native `columnResizing`).\n */\n enableColumnResizing?: boolean;\n /** Passthrough for the `columnSizing` state so a consumer can persist widths. */\n onColumnSizingChange?: OnChangeFn<ColumnSizingState>;\n /**\n * Opt in to column reordering by dragging a header cell onto another one\n * (native HTML5 drag-and-drop driving TanStack's `columnOrder`). Pinned\n * columns are excluded — they're anchored to a table edge by definition.\n * Pointer-only, matching the design: there is no keyboard equivalent yet.\n */\n enableColumnReordering?: boolean;\n /**\n * Controlled column-order state — pass this (with `onColumnOrderChange`) to\n * persist or share the order. Uncontrolled (internal state) when omitted.\n */\n columnOrder?: ColumnOrderState;\n /** Passthrough for the `columnOrder` state; pairs with `columnOrder`. */\n onColumnOrderChange?: OnChangeFn<ColumnOrderState>;\n /**\n * Controlled column-visibility state — pass this (with\n * `onColumnVisibilityChange`) to share one visibility state with an\n * external `useReactTable` instance (e.g. a composed toolbar). Uncontrolled\n * (internal state) when omitted.\n */\n columnVisibility?: VisibilityState;\n /** Passthrough for the `columnVisibility` state; pairs with `columnVisibility`. */\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>;\n /**\n * Controlled row-selection state — pass this (with `onRowSelectionChange`)\n * to share one selection state with an external `useReactTable` instance\n * (e.g. a composed toolbar/bulk-actions bar). Uncontrolled (internal state)\n * when omitted.\n */\n rowSelection?: RowSelectionState;\n /** Passthrough for the `rowSelection` state; pairs with `rowSelection`. */\n onRowSelectionChange?: OnChangeFn<RowSelectionState>;\n /**\n * Opt out of client-side sorting — pass already-sorted `data` and drive\n * sorting via `sorting`/`onSortingChange` (e.g. mapped to a server query by\n * the caller). Mapping sort state to a query and refetching stays the\n * caller's job; DataTable only skips its own comparator.\n */\n manualSorting?: boolean;\n /**\n * Controlled sorting state — pass this (with `onSortingChange`) to drive\n * sorting externally. Uncontrolled (internal state) when omitted.\n */\n sorting?: SortingState;\n /** Passthrough for the `sorting` state; pairs with `sorting`. */\n onSortingChange?: OnChangeFn<SortingState>;\n /**\n * Renders a full row, bypassing DataTable's default per-cell `flexRender`\n * path entirely (no `<TableRow>`/cell-styling/pinning of DataTable's own).\n * Use to swap in a custom, independently memoizable row component. The\n * caller owns the row's markup and equality semantics — reuse the exported\n * `getCellStyle`/`getPinnedStyle`/`getColumnWidth` helpers to match\n * DataTable's default cell styling if desired.\n *\n * Also bypasses DataTable's `renderExpandedRow` handling — a row rendered\n * via `renderRow` never gets an expanded-content row appended, even when\n * `getRowCanExpand` returns true for it. Read `row.getIsExpanded()` and\n * render the expanded content yourself if you need both.\n */\n renderRow?: (row: Row<TData>, rowIndex: number) => ReactNode;\n /**\n * Renders a custom empty state instead of the default \"No results.\" row.\n * Receives `hasFilters` (whether any column filter is currently applied) so\n * the caller can distinguish \"no data at all\" from \"no matches\" — the\n * actual copy/wording/localization stays the caller's job.\n */\n renderEmptyState?: (context: { hasFilters: boolean }) => ReactNode;\n /**\n * `'page'` (default) keeps today's client-paginated behavior. `'infinite'`\n * omits the paginated row model — `data` is assumed to be the full\n * accumulated array the caller appends to on each `onLoadMore` — and\n * renders a sentinel row that calls `onLoadMore` once it scrolls into view.\n * Does not compose with virtualization; for a large accumulated list, use\n * the `VirtualScrolling` recipe over the raw `Table` primitives instead.\n */\n paginationMode?: 'page' | 'infinite';\n /**\n * Called when the infinite-scroll sentinel intersects the viewport.\n * `paginationMode=\"infinite\"` only. The fetch-more call, cursor/offset\n * tracking, dedup, and accumulating `data` stay the caller's job. Requires\n * at least one row already rendered — an empty table with `data={[]}`\n * cannot use the sentinel to drive its very first fetch; seed the first\n * page yourself (e.g. on mount) and use `onLoadMore` for subsequent pages.\n */\n onLoadMore?: () => void;\n /**\n * Expands the sentinel's `IntersectionObserver` root margin (native CSS\n * margin syntax, e.g. `'400px'`) so `onLoadMore` fires before the sentinel\n * is literally visible — the closer the caller's fetch is to finishing by\n * the time the user actually scrolls there, the less often the trailing\n * loading row is seen. `paginationMode=\"infinite\"` only; no-op when `table`\n * is passed. How far this actually prefetches also depends on page size —\n * a large margin with small pages can trigger several `onLoadMore` calls\n * back-to-back as the user scrolls normally, which is expected.\n */\n loadMoreRootMargin?: string;\n /** Whether more rows are available to load. `paginationMode=\"infinite\"` only. */\n hasNextPage?: boolean;\n /**\n * Accessible name of a column's resize handle. Override to localize.\n * `enableColumnResizing` only.\n */\n resizeColumnLabel?: string;\n /**\n * Text of the default empty-state row. Ignored when `renderEmptyState` is\n * given. Override to localize.\n */\n emptyLabel?: string;\n /**\n * Whether a load is in flight — suppresses further `onLoadMore` calls and\n * renders a trailing loading row. `paginationMode=\"infinite\"` only.\n */\n isLoadingMore?: boolean;\n /**\n * Hide the trailing sticky action column — the column-visibility cog in the\n * header and each row's overflow-actions ellipsis. Shown by default. A\n * no-op when an external `table` is passed (build the column into that\n * instance's own `columns` instead).\n */\n hideActionColumn?: boolean;\n /**\n * Renders the content of a row's overflow-actions menu (e.g. `Edit`/\n * `Delete` items), opened from the ellipsis trigger in the trailing action\n * column. Omit to render that row without a trigger — the 48px column is\n * still reserved. Suppressed (like the trigger itself) while a bulk\n * selection is active, per `TableActionsCell`.\n */\n renderRowActions?: (row: Row<TData>) => ReactNode;\n /** Accessible name of a row's overflow-actions trigger. Override to localize. */\n rowActionsLabel?: string;\n /**\n * Accessible name of the action column's column-visibility trigger.\n * Override to localize.\n */\n columnSettingsLabel?: string;\n /**\n * Copy of the tooltip shown while a header cell is hovered/focused — one\n * line per capability that column actually has (sort/reorder/resize).\n * Override (per capability) to localize; a column with no capability shows\n * no tooltip at all.\n */\n headerHints?: Partial<DataTableHeaderHints>;\n}\n\nexport type DataTableProps<TData, TValue = unknown> = DataTableOwnProps<TData> &\n DataTableDataSourceProps<TData, TValue>;\n\nexport function DataTable<TData, TValue = unknown>({\n columns = [],\n data = [],\n table: externalTable,\n getRowCanExpand,\n renderExpandedRow,\n striped = false,\n bordered = false,\n highlightCurrentRow = false,\n skeleton = false,\n skeletonRows = 5,\n enableColumnResizing = false,\n onColumnSizingChange,\n enableColumnReordering = false,\n columnOrder: controlledColumnOrder,\n onColumnOrderChange,\n columnVisibility: controlledColumnVisibility,\n onColumnVisibilityChange,\n rowSelection: controlledRowSelection,\n onRowSelectionChange,\n manualSorting = false,\n sorting: controlledSorting,\n onSortingChange,\n renderRow,\n renderEmptyState,\n paginationMode = 'page',\n onLoadMore,\n loadMoreRootMargin,\n hasNextPage = false,\n resizeColumnLabel = 'Resize column',\n emptyLabel = 'No results.',\n isLoadingMore = false,\n hideActionColumn = false,\n renderRowActions,\n rowActionsLabel = 'Row actions',\n columnSettingsLabel,\n headerHints,\n}: DataTableProps<TData, TValue>) {\n const resolvedHeaderHints: DataTableHeaderHints = {\n ...DEFAULT_HEADER_HINTS,\n ...headerHints,\n };\n const [internalSorting, setInternalSorting] = useState<SortingState>([]);\n const sorting = controlledSorting ?? internalSorting;\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n const [internalColumnVisibility, setInternalColumnVisibility] =\n useState<VisibilityState>({});\n const columnVisibility =\n controlledColumnVisibility ?? internalColumnVisibility;\n const [internalRowSelection, setInternalRowSelection] =\n useState<RowSelectionState>({});\n const rowSelection = controlledRowSelection ?? internalRowSelection;\n const [expanded, setExpanded] = useState<ExpandedState>({});\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({});\n const [internalColumnOrder, setInternalColumnOrder] =\n useState<ColumnOrderState>([]);\n const columnOrder = controlledColumnOrder ?? internalColumnOrder;\n // The header cell the user is currently dragging, so the source cell can dim\n // while the gesture is in flight.\n const [draggedColumnId, setDraggedColumnId] = useState<string>();\n const [currentRowId, setCurrentRowId] = useState<string>();\n // Roving tabindex over the data rows: exactly one row is a Tab stop at a\n // time (the rest are `tabIndex={-1}`, still focusable programmatically),\n // and Arrow Up/Down move both the DOM focus and which row that is. Clamped\n // against the live row count below rather than reset via an effect, so a\n // filter/page change that shrinks `rows` can't leave it pointing past the\n // end.\n const [focusedRowIndex, setFocusedRowIndex] = useState(0);\n const rowRefs = useRef<Array<HTMLTableRowElement | null>>([]);\n\n const handleColumnSizingChange: OnChangeFn<ColumnSizingState> = (updater) => {\n setColumnSizing(updater);\n onColumnSizingChange?.(updater);\n };\n\n const handleColumnOrderChange: OnChangeFn<ColumnOrderState> = (updater) => {\n if (controlledColumnOrder === undefined) {\n setInternalColumnOrder(updater);\n }\n onColumnOrderChange?.(updater);\n };\n\n const handleColumnVisibilityChange: OnChangeFn<VisibilityState> = (\n updater\n ) => {\n setInternalColumnVisibility(updater);\n onColumnVisibilityChange?.(updater);\n };\n\n const handleSortingChange: OnChangeFn<SortingState> = (updater) => {\n if (controlledSorting === undefined) {\n setInternalSorting(updater);\n }\n onSortingChange?.(updater);\n };\n\n const handleRowSelectionChange: OnChangeFn<RowSelectionState> = (\n updater\n ) => {\n if (controlledRowSelection === undefined) {\n setInternalRowSelection(updater);\n }\n onRowSelectionChange?.(updater);\n };\n\n // The trailing sticky action column (cog + per-row ellipsis) is a no-op\n // with an external `table` — that instance's own `columns` already decide\n // what renders, DataTable doesn't own its state in that mode (see the\n // `table` prop's tsdoc).\n const showActionColumn = !hideActionColumn && !externalTable;\n // A real `ColumnDef` (rather than chrome bolted onto the render loop) so\n // TanStack's own pinning geometry measures and offsets it like any other\n // pinned column — `header`/`cell` are never read (see the header/body\n // render loops below, which special-case this id), only `size`/`meta.pin`.\n const actionColumns = useMemo<ColumnDef<TData, TValue>[]>(\n () =>\n showActionColumn\n ? [\n {\n id: '__actions',\n size: 48,\n enableSorting: false,\n enableHiding: false,\n meta: { pin: 'right' },\n header: () => null,\n cell: () => null,\n },\n ]\n : [],\n [showActionColumn]\n );\n const tableColumns = useMemo(\n () => [...columns, ...actionColumns],\n [columns, actionColumns]\n );\n // The pinned action cell's own hover (its ellipsis/cog trigger) should be\n // the only thing that tints while it's hovered — not the row underneath it\n // (see `hover:bg-transparent` below). Tracked by id (rather than a boolean)\n // because it's set from the action cell of whichever row is currently under\n // the pointer.\n const [actionHoveredRowId, setActionHoveredRowId] = useState<string>();\n\n // Built unconditionally — hooks can't be conditionally called — but only\n // feeds the render path below when no external `table` is passed (see\n // `table` below).\n const internalTable = useReactTable({\n data,\n columns: tableColumns,\n enableColumnResizing,\n columnResizeMode: 'onChange',\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n ...(paginationMode === 'page'\n ? { getPaginationRowModel: getPaginationRowModel() }\n : {}),\n getRowCanExpand,\n onExpandedChange: setExpanded,\n manualSorting,\n onSortingChange: handleSortingChange,\n ...(manualSorting ? {} : { getSortedRowModel: getSortedRowModel() }),\n onColumnFiltersChange: setColumnFilters,\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onRowSelectionChange: handleRowSelectionChange,\n onColumnSizingChange: handleColumnSizingChange,\n onColumnOrderChange: handleColumnOrderChange,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n expanded,\n columnSizing,\n columnOrder,\n },\n });\n\n // The caller's instance is the single source of truth when passed — it\n // configures its own row models/state, so DataTable just renders from it.\n const table = externalTable ?? internalTable;\n const isInfiniteScroll = !externalTable && paginationMode === 'infinite';\n // `enableColumnResizing` is documented as a no-op with an external `table`\n // (the caller owns that instance's ColumnSizing state), but ColumnSizing is\n // a built-in TanStack feature present on any instance — reading the raw\n // prop below would still render live resize handles that mutate the\n // caller's own instance. Gate it the same way as `isInfiniteScroll`.\n const resizingEnabled = enableColumnResizing && !externalTable;\n // Same reasoning as `resizingEnabled`: ColumnOrdering is a built-in TanStack\n // feature present on any instance, so reading the raw prop would let the\n // header drag mutate a caller-owned instance DataTable doesn't manage.\n const reorderingEnabled = enableColumnReordering && !externalTable;\n // A resize drag necessarily moves the pointer off the (few-px-wide) resize\n // handle and onto the header cell itself. If that cell is still\n // `draggable`, the browser arms a native HTML5 reorder drag mid-resize —\n // native drag then swallows the mousemove/mouseup TanStack's resize\n // handler relies on, so the cursor flips to the reorder \"grab\" icon and\n // releasing the mouse doesn't cleanly end the resize. Reading this back\n // from TanStack's own resize state (rather than pointer position) keeps\n // every header cell non-draggable for the *entire* gesture, regardless of\n // where the pointer ends up.\n const isAnyColumnResizing = Boolean(\n table.getState().columnSizingInfo.isResizingColumn\n );\n // The resize handle only shows its `ew-resize` cursor while the pointer is\n // directly over its thin 4px hit area — once a drag starts, fast pointer\n // movement leaves that area and the browser shows whatever cursor the\n // element underneath declares (e.g. a sortable header's `cursor-pointer`).\n // This attribute + the `html[data-ui-column-resizing] *` rule in\n // styles/index.css force `ew-resize` everywhere for the duration of the\n // drag — a plain `<body>` inline cursor loses to a descendant's own\n // `cursor` declaration, so it isn't enough on its own.\n useEffect(() => {\n if (!isAnyColumnResizing) return;\n document.documentElement.setAttribute('data-ui-column-resizing', '');\n return () => {\n document.documentElement.removeAttribute('data-ui-column-resizing');\n };\n }, [isAnyColumnResizing]);\n const sentinelRef = useIntersectionObserver<HTMLTableRowElement>({\n onIntersect: () => onLoadMore?.(),\n disabled: !isInfiniteScroll || !hasNextPage || isLoadingMore,\n rootMargin: loadMoreRootMargin,\n });\n\n // Arrow-key resize on the drag handle (see `canResize` below). Ignores any\n // modifier besides Shift so it doesn't hijack browser/OS shortcuts bound to\n // Ctrl/Alt/Cmd+Arrow (e.g. back navigation) while the handle has focus.\n const handleResizeKeyDown = (\n event: KeyboardEvent<HTMLDivElement>,\n header: Header<TData, unknown>\n ) => {\n if (event.ctrlKey || event.altKey || event.metaKey) return;\n const nextSize = getResizeKeyboardStep(event.key, header.column.getSize(), {\n shiftKey: event.shiftKey,\n min: header.column.columnDef.minSize ?? DEFAULT_MIN_COLUMN_SIZE,\n max: header.column.columnDef.maxSize ?? DEFAULT_MAX_COLUMN_SIZE,\n });\n if (nextSize === undefined) return;\n event.preventDefault();\n table.setColumnSizing((old) => ({ ...old, [header.column.id]: nextSize }));\n };\n\n // Native HTML5 drag-and-drop on the header cells. `columnOrder` starts empty\n // (TanStack reads that as \"the declared order\"), so the first drop seeds it\n // from the live leaf columns before moving anything.\n const handleColumnDragStart = (\n event: DragEvent<HTMLTableCellElement>,\n columnId: string\n ) => {\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n // Firefox requires setData() during dragstart to actually initiate a\n // native drag; the value itself is unused (drop reads draggedColumnId).\n event.dataTransfer.setData('text/plain', columnId);\n }\n setDraggedColumnId(columnId);\n };\n\n const handleColumnDragOver = (event: DragEvent<HTMLTableCellElement>) => {\n // Without this the browser rejects the drop and no `onDrop` ever fires.\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'move';\n };\n\n const handleColumnDrop = (\n event: DragEvent<HTMLTableCellElement>,\n targetColumnId: string\n ) => {\n event.preventDefault();\n if (!draggedColumnId) return;\n const current = table.getState().columnOrder;\n const base = current.length\n ? current\n : table.getAllLeafColumns().map((column) => column.id);\n table.setColumnOrder(reorderColumn(base, draggedColumnId, targetColumnId));\n setDraggedColumnId(undefined);\n };\n\n // Read each column's `meta.pin` and drive TanStack's native pinning state.\n // Always calls `pin()` (rather than only when truthy) so a column whose\n // `meta.pin` is removed dynamically actually un-pins. Skipped for an\n // external `table` — DataTable owns no state in that mode (see the `table`\n // prop's tsdoc), so the caller's own pinning setup is left alone.\n useEffect(() => {\n if (externalTable) return;\n table.getAllLeafColumns().forEach((column) => {\n column.pin(column.columnDef.meta?.pin ?? false);\n });\n }, [table, columns, externalTable]);\n\n const rows = table.getRowModel().rows;\n // Derived from the selection state, so it's the same for every row — compute\n // it once instead of per row inside the render loop below.\n const bulkSelectionActive = isBulkSelectionActive(table);\n const activeRowIndex = rows.length\n ? Math.min(focusedRowIndex, rows.length - 1)\n : 0;\n\n // Mouse/pointer clicks still focus a `tabIndex={-1}` row (browsers allow\n // programmatic/click focus regardless of tabIndex value) — syncing the\n // roving index on focus makes that row the next Tab stop too, matching how\n // users expect the last-interacted row to keep focus.\n const handleRowFocus = (rowIndex: number) => {\n setFocusedRowIndex(rowIndex);\n };\n\n const handleRowKeyDown = (\n event: KeyboardEvent<HTMLTableRowElement>,\n rowIndex: number\n ) => {\n // Keydown bubbles, so arrow keys from an interactive control inside a cell\n // (number spinner, textarea caret, native select) would otherwise be\n // hijacked to move row focus. Only roam when the row itself is focused.\n if (event.target !== event.currentTarget) return;\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n const nextIndex =\n event.key === 'ArrowDown'\n ? Math.min(rowIndex + 1, rows.length - 1)\n : Math.max(rowIndex - 1, 0);\n if (nextIndex === rowIndex) return;\n event.preventDefault();\n setFocusedRowIndex(nextIndex);\n rowRefs.current[nextIndex]?.focus();\n };\n // Vertical borders are opt-in; a trailing border on the last cell would\n // double up with the wrapper, so suppress it.\n const borderedClass = bordered\n ? '[&_th:not(:last-child)]:border-e [&_td:not(:last-child)]:border-e [&_th]:border-[var(--ui-table-global-row-border-color)] [&_td]:border-[var(--ui-table-global-row-border-color)]'\n : undefined;\n\n // A pinned header/body cell must be opaque so the cells scrolling under it\n // (same row) aren't visible. `--ui-table-data-row-color-idle` is\n // *transparent by design* (an idle row shows the page/card surface through\n // it), so it can't be reused here — pinned idle cells need the actual\n // resolved surface color instead (`--ui-background-surface-primary`, bridged\n // to `bg-background`). Non-idle states (selected/current/striped) already use\n // real opaque tokens and are safe to mirror as-is (see `rowBg` below).\n const headerPinnedBg = 'bg-background';\n\n return (\n <div\n className={cn(\n 'rounded-md border border-[var(--ui-table-global-row-border-color)]',\n borderedClass\n )}\n >\n <Table\n style={\n resizingEnabled ? { width: table.getCenterTotalSize() } : undefined\n }\n >\n {/* One provider for the whole header row so the capability hints share\n a single open/close delay group (Provider renders no DOM, so the\n table markup is unaffected). */}\n <TooltipProvider>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id} className=\"hover:bg-transparent\">\n {headerGroup.headers.map((header) => {\n const isPinned = header.column.getIsPinned();\n const canResize =\n resizingEnabled &&\n header.column.getCanResize() &&\n header.column.id !== 'select';\n // A pinned column is anchored to a table edge, so dragging it\n // out of that edge would contradict its own pinning.\n const canReorder =\n reorderingEnabled && !header.isPlaceholder && !isPinned;\n const canSort =\n !header.isPlaceholder && header.column.getCanSort();\n // One tooltip line per capability the column actually has, in\n // the design's order; a column with none gets no tooltip.\n const hints = [\n canSort && resolvedHeaderHints.sort,\n canReorder && resolvedHeaderHints.reorder,\n canResize && resolvedHeaderHints.resize,\n ].filter((hint): hint is DataTableHeaderHint =>\n Boolean(hint)\n );\n if (header.column.id === '__actions') {\n return (\n <TableSettingsCell\n key={header.id}\n style={getHeaderStyle(header, resizingEnabled)}\n className={headerPinnedBg}\n >\n <DataTableViewOptions\n table={table}\n iconOnly\n triggerAriaLabel={columnSettingsLabel}\n />\n </TableSettingsCell>\n );\n }\n const headerCell = (\n <TableHead\n wrap={header.column.columnDef.meta?.wrap}\n style={getHeaderStyle(header, resizingEnabled)}\n draggable={\n (canReorder && !isAnyColumnResizing) || undefined\n }\n onDragStart={\n canReorder\n ? (event) =>\n handleColumnDragStart(event, header.column.id)\n : undefined\n }\n onDragOver={canReorder ? handleColumnDragOver : undefined}\n onDrop={\n canReorder\n ? (event) =>\n handleColumnDrop(event, header.column.id)\n : undefined\n }\n onDragEnd={\n canReorder\n ? () => setDraggedColumnId(undefined)\n : undefined\n }\n className={cn(\n canResize && 'relative',\n // Per the design, a sortable header tints the whole\n // cell on hover/press, not just the inner sort button.\n // Suppressed while any column is resizing, since the\n // pointer drags across neighboring `<th>`s and would\n // otherwise tint them via native `:hover`.\n canSort &&\n !isAnyColumnResizing &&\n 'transition-colors hover:bg-[var(--ui-table-header-cell-color-hover)] active:bg-[var(--ui-table-header-cell-color-active)]',\n canReorder &&\n !isAnyColumnResizing &&\n 'cursor-grab select-none active:cursor-grabbing',\n canReorder &&\n draggedColumnId === header.column.id &&\n 'opacity-50',\n isPinned && headerPinnedBg\n )}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n {canResize && (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={resizeColumnLabel}\n aria-valuenow={header.column.getSize()}\n aria-valuemin={\n header.column.columnDef.minSize ??\n DEFAULT_MIN_COLUMN_SIZE\n }\n aria-valuemax={\n header.column.columnDef.maxSize ??\n DEFAULT_MAX_COLUMN_SIZE\n }\n tabIndex={0}\n // Keeps a press on the handle from starting the header\n // cell's reorder drag instead of a resize when both\n // features are enabled.\n draggable={false}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n onKeyDown={(event) =>\n handleResizeKeyDown(event, header)\n }\n className={cn(\n 'absolute end-0 top-0 h-full w-1 cursor-(--ui-resizable-cursor) touch-none select-none bg-[var(--ui-table-global-row-border-color)] opacity-0 transition-[opacity,background-color] hover:bg-[var(--ui-resizable-border-color-hover)] hover:opacity-100 focus-visible:bg-[var(--ui-resizable-border-color-hover)] focus-visible:opacity-100 focus-visible:outline-[3px] focus-visible:outline-(--ui-focus-primary)',\n header.column.getIsResizing() &&\n 'bg-[var(--ui-resizable-border-color-active)] opacity-100'\n )}\n />\n )}\n </TableHead>\n );\n if (hints.length === 0) {\n return <Fragment key={header.id}>{headerCell}</Fragment>;\n }\n return (\n <Tooltip\n key={header.id}\n disabled={\n isAnyColumnResizing || draggedColumnId !== undefined\n }\n >\n {/* The whole header cell is the trigger (not just its sort\n button), so the hint covers the reorder/resize gestures\n that live on the cell itself. Disabled mid-drag/resize\n so the hint doesn't pop up over a neighboring cell\n while the pointer passes through it. */}\n <TooltipTrigger render={headerCell} />\n <TooltipContent className=\"flex flex-col gap-1\">\n {hints.map((hint) => (\n <span key={hint.label}>\n <span className=\"font-semibold\">{hint.label}:</span>{' '}\n {hint.action}\n </span>\n ))}\n </TooltipContent>\n </Tooltip>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n </TooltipProvider>\n <TableBody>\n {skeleton ? (\n Array.from({ length: skeletonRows }).map((_, rowIndex) => (\n <TableRow\n key={`skeleton-${rowIndex}`}\n className=\"hover:bg-transparent\"\n >\n {table.getVisibleLeafColumns().map((column) => (\n <TableCell key={column.id}>\n <div className=\"h-4 w-full animate-pulse rounded bg-[var(--ui-background-surface-secondary)]\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : rows?.length ? (\n rows.map((row, rowIndex) => {\n if (renderRow) {\n return (\n <Fragment key={row.id}>{renderRow(row, rowIndex)}</Fragment>\n );\n }\n const isSelected = row.getIsSelected();\n const isCurrent = highlightCurrentRow && currentRowId === row.id;\n // Opaque background applied to pinned cells so sibling cells don't\n // show through while the grid scrolls horizontally. Mirrors the\n // row's own resolved background across selection/current/stripe —\n // the idle case falls back to the real surface color\n // (`bg-background`) since the row's own idle token is transparent\n // by design (see `headerPinnedBg` above).\n // The idle case mirrors the row's own hover tint via `group` (see\n // the row's `group` class below) so the pinned action column\n // doesn't look \"stuck\" idle while the rest of the row is\n // hovered — the row's native `hover:` can't reach it since it\n // needs its own opaque background (see `headerPinnedBg` above).\n const rowBg =\n isSelected || isCurrent\n ? 'bg-[var(--ui-table-data-row-color-active)]'\n : striped && rowIndex % 2 === 1\n ? 'bg-[var(--ui-background-surface-secondary)]'\n : 'bg-background group-hover:bg-[var(--ui-table-data-row-color-hover)]';\n // While a selection is in play the action cell renders nothing and\n // carries no tint of its own, so suppressing the row's hover tint\n // for it would leave the pointer over a row that reacts to\n // nothing. Also covers a row hovered just before the selection\n // started, whose id is still in `actionHoveredRowId`.\n const isActionCellHovered =\n !bulkSelectionActive && actionHoveredRowId === row.id;\n return (\n <Fragment key={row.id}>\n <TableRow\n ref={(node) => {\n rowRefs.current[rowIndex] = node;\n }}\n tabIndex={rowIndex === activeRowIndex ? 0 : -1}\n onFocus={() => handleRowFocus(rowIndex)}\n onKeyDown={(event) => handleRowKeyDown(event, rowIndex)}\n selected={isSelected}\n onClick={\n highlightCurrentRow\n ? () => setCurrentRowId(row.id)\n : undefined\n }\n className={cn(\n 'group',\n highlightCurrentRow && 'cursor-pointer',\n striped &&\n rowIndex % 2 === 1 &&\n !isSelected &&\n !isCurrent &&\n 'bg-[var(--ui-background-surface-secondary)]',\n isCurrent &&\n !isSelected &&\n 'bg-[var(--ui-table-data-row-color-active)]',\n // The action cell's own hover tint (its ellipsis/cog\n // trigger) should be the only thing that reacts while\n // it's hovered — not the rest of the row underneath it.\n isActionCellHovered && 'hover:bg-transparent'\n )}\n >\n {row.getVisibleCells().map((cell) => {\n const isPinned = cell.column.getIsPinned();\n if (cell.column.id === '__actions') {\n return (\n <TableActionsCell\n key={cell.id}\n style={getCellStyle(cell, resizingEnabled)}\n className={rowBg}\n bulkSelectionActive={bulkSelectionActive}\n onMouseEnter={\n bulkSelectionActive\n ? undefined\n : () => setActionHoveredRowId(row.id)\n }\n onMouseLeave={\n bulkSelectionActive\n ? undefined\n : () =>\n setActionHoveredRowId((id) =>\n id === row.id ? undefined : id\n )\n }\n >\n {renderRowActions && (\n <DropdownMenu>\n <DropdownMenuTrigger\n render={\n <ButtonIcon aria-label={rowActionsLabel} />\n }\n >\n <EllipsisIcon />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {renderRowActions(row)}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </TableActionsCell>\n );\n }\n return (\n <TableCell\n key={cell.id}\n wrap={cell.column.columnDef.meta?.wrap}\n style={getCellStyle(cell, resizingEnabled)}\n className={cn(isPinned && rowBg)}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n );\n })}\n </TableRow>\n {renderExpandedRow && row.getIsExpanded() && (\n <TableRow className=\"hover:bg-transparent\">\n <TableCell\n className=\"h-auto py-3\"\n colSpan={row.getVisibleCells().length}\n >\n {renderExpandedRow(row)}\n </TableCell>\n </TableRow>\n )}\n </Fragment>\n );\n })\n ) : renderEmptyState ? (\n <TableRow>\n <TableCell\n colSpan={table.getVisibleLeafColumns().length}\n className=\"h-24 text-center\"\n >\n {renderEmptyState({\n hasFilters: table.getState().columnFilters.length > 0,\n })}\n </TableCell>\n </TableRow>\n ) : (\n <TableRow>\n <TableCell\n colSpan={table.getVisibleLeafColumns().length}\n className=\"h-24 text-center text-[var(--ui-table-data-value-color-disabled)]\"\n >\n {emptyLabel}\n </TableCell>\n </TableRow>\n )}\n {isInfiniteScroll && !skeleton && rows.length > 0 && hasNextPage && (\n <TableRow\n ref={sentinelRef}\n aria-hidden\n className=\"hover:bg-transparent\"\n >\n <TableCell\n colSpan={table.getVisibleLeafColumns().length}\n className=\"h-1 p-0\"\n />\n </TableRow>\n )}\n {isInfiniteScroll &&\n !skeleton &&\n rows.length > 0 &&\n isLoadingMore && (\n <TableRow className=\"hover:bg-transparent\">\n <TableCell colSpan={table.getVisibleLeafColumns().length}>\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"h-4 w-full animate-pulse rounded bg-[var(--ui-background-surface-secondary)]\"\n >\n <span className=\"sr-only\">Loading more rows…</span>\n </div>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import e from "../../../node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/isValid.js";
|
|
2
|
+
import t from "../../../node_modules/.pnpm/date-fns@4.3.0/node_modules/date-fns/format.js";
|
|
3
|
+
//#region src/components/ui/date-range-picker/date-range-picker-utils.ts
|
|
4
|
+
var n = "MMM d, yyyy";
|
|
5
|
+
function r(r, i) {
|
|
6
|
+
return r && e(r) ? t(r, n, { locale: i }) : "";
|
|
6
7
|
}
|
|
7
|
-
function
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
function i(e) {
|
|
9
|
+
let { from: t, to: n } = e;
|
|
10
|
+
return t && n && t.getTime() > n.getTime() ? {
|
|
11
|
+
from: n,
|
|
12
|
+
to: t
|
|
13
|
+
} : e;
|
|
10
14
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=date-range-picker-utils.js.map
|
|
15
|
+
//#endregion
|
|
16
|
+
export { n as DISPLAY_FORMAT, r as formatDate, i as normalizeRange };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=date-range-picker-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-picker-utils.js","sources":["../../../../src/components/ui/date-range-picker/date-range-picker-utils.ts"],"sourcesContent":["import { format, isValid } from 'date-fns';\nimport type { DayPickerLocale } from 'react-day-picker';\n\n/** A start/end date range. Both ends are optional (a partial range while editing). */\nexport interface DateRange {\n from?: Date;\n to?: Date;\n}\n\n/**\n * The date display pattern used by the trigger. Fixed month-day-year order\n * regardless of `locale` — only the month/day/era token *names* localize (see\n * {@link formatDate}); true locale-aware reordering is a separate, bigger\n * change (tracked, not done here).\n */\nexport const DISPLAY_FORMAT = 'MMM d, yyyy';\n\n/**\n * Format a date with {@link DISPLAY_FORMAT}, returning `''` for a missing or\n * invalid `Date`. `date-fns`' `format` throws a `RangeError` on an invalid\n * `Date` (e.g. `new Date('garbage')`), so the `isValid` guard is load-bearing —\n * a truthy-but-invalid `Date` must not reach `format`.\n *\n * `locale` only translates the month name via `date-fns`' `format` `options`\n * — it does not reorder `DISPLAY_FORMAT`'s fixed month-day-year pattern.\n */\nexport function formatDate(\n date: Date | undefined,\n locale?: DayPickerLocale\n): string {\n return date && isValid(date) ? format(date, DISPLAY_FORMAT, { locale }) : '';\n}\n\n/**\n * Return a range whose `from` is never after its `to`. When both ends are set\n * and inverted (e.g. the user typed an end date earlier than the start), the two\n * are swapped; a partial range (one end unset) is returned unchanged. Used to\n * keep the calendar highlight and the committed value chronologically ordered.\n */\nexport function normalizeRange(range: DateRange): DateRange {\n const { from, to } = range;\n if (from && to && from.getTime() > to.getTime()) {\n return { from: to, to: from };\n }\n return range;\n}\n"],"
|
|
1
|
+
{"version":3,"file":"date-range-picker-utils.js","names":[],"sources":["../../../../src/components/ui/date-range-picker/date-range-picker-utils.ts"],"sourcesContent":["import { format, isValid } from 'date-fns';\nimport type { DayPickerLocale } from 'react-day-picker';\n\n/** A start/end date range. Both ends are optional (a partial range while editing). */\nexport interface DateRange {\n from?: Date;\n to?: Date;\n}\n\n/**\n * The date display pattern used by the trigger. Fixed month-day-year order\n * regardless of `locale` — only the month/day/era token *names* localize (see\n * {@link formatDate}); true locale-aware reordering is a separate, bigger\n * change (tracked, not done here).\n */\nexport const DISPLAY_FORMAT = 'MMM d, yyyy';\n\n/**\n * Format a date with {@link DISPLAY_FORMAT}, returning `''` for a missing or\n * invalid `Date`. `date-fns`' `format` throws a `RangeError` on an invalid\n * `Date` (e.g. `new Date('garbage')`), so the `isValid` guard is load-bearing —\n * a truthy-but-invalid `Date` must not reach `format`.\n *\n * `locale` only translates the month name via `date-fns`' `format` `options`\n * — it does not reorder `DISPLAY_FORMAT`'s fixed month-day-year pattern.\n */\nexport function formatDate(\n date: Date | undefined,\n locale?: DayPickerLocale\n): string {\n return date && isValid(date) ? format(date, DISPLAY_FORMAT, { locale }) : '';\n}\n\n/**\n * Return a range whose `from` is never after its `to`. When both ends are set\n * and inverted (e.g. the user typed an end date earlier than the start), the two\n * are swapped; a partial range (one end unset) is returned unchanged. Used to\n * keep the calendar highlight and the committed value chronologically ordered.\n */\nexport function normalizeRange(range: DateRange): DateRange {\n const { from, to } = range;\n if (from && to && from.getTime() > to.getTime()) {\n return { from: to, to: from };\n }\n return range;\n}\n"],"mappings":";;;AAeA,IAAa,IAAiB;AAW9B,SAAgB,EACd,GACA,GACQ;CACR,OAAO,KAAQ,EAAQ,CAAI,IAAI,EAAO,GAAM,GAAgB,EAAE,UAAO,CAAC,IAAI;AAC5E;AAQA,SAAgB,EAAe,GAA6B;CAC1D,IAAM,EAAE,SAAM,UAAO;CAIrB,OAHI,KAAQ,KAAM,EAAK,QAAQ,IAAI,EAAG,QAAQ,IACrC;EAAE,MAAM;EAAI,IAAI;CAAK,IAEvB;AACT"}
|
|
@@ -1,111 +1,77 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
_,
|
|
79
|
-
{
|
|
80
|
-
variant: "range",
|
|
81
|
-
selected: d,
|
|
82
|
-
onSelect: L,
|
|
83
|
-
defaultMonth: m.from ?? e.from,
|
|
84
|
-
onCancel: J,
|
|
85
|
-
onApply: K,
|
|
86
|
-
dir: G,
|
|
87
|
-
disabled: y,
|
|
88
|
-
min: A,
|
|
89
|
-
max: b,
|
|
90
|
-
showOutsideDays: C,
|
|
91
|
-
weekStartsOn: O,
|
|
92
|
-
fromYear: j,
|
|
93
|
-
toYear: z,
|
|
94
|
-
locale: a,
|
|
95
|
-
monthLabel: I,
|
|
96
|
-
yearLabel: N,
|
|
97
|
-
formatMonthLabel: T,
|
|
98
|
-
cancelLabel: M,
|
|
99
|
-
applyLabel: q
|
|
100
|
-
}
|
|
101
|
-
)
|
|
102
|
-
}
|
|
103
|
-
)
|
|
104
|
-
] });
|
|
105
|
-
}
|
|
106
|
-
);
|
|
107
|
-
$.displayName = "DateRangePicker";
|
|
108
|
-
export {
|
|
109
|
-
$ as DateRangePicker
|
|
110
|
-
};
|
|
111
|
-
//# sourceMappingURL=date-range-picker.js.map
|
|
1
|
+
import { useDocDir as e } from "../../../lib/use-doc-dir.js";
|
|
2
|
+
import { CalendarPanel as t } from "../calendar-panel/calendar-panel.js";
|
|
3
|
+
import { Popover as n, PopoverContent as r, PopoverTrigger as i } from "../popover/popover.js";
|
|
4
|
+
import { InputDatePicker as a } from "../input-date-picker/input-date-picker.js";
|
|
5
|
+
import { formatDate as o, normalizeRange as s } from "./date-range-picker-utils.js";
|
|
6
|
+
import * as c from "react";
|
|
7
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
8
|
+
//#region src/components/ui/date-range-picker/date-range-picker.tsx
|
|
9
|
+
var d = c.forwardRef(({ value: d, defaultValue: f, onValueChange: p, label: m, description: h, error: g, placeholder: _, disabled: v, required: y, className: b, disabledDays: x, min: S, max: C, showOutsideDays: w, weekStartsOn: T, fromYear: E, toYear: D, locale: O, monthLabel: k, yearLabel: A, formatMonthLabel: j, cancelLabel: M, applyLabel: N }, P) => {
|
|
10
|
+
let F = d !== void 0, [I, L] = c.useState(f ?? {}), R = F ? d : I, [z, B] = c.useState(!1), [V, H] = c.useState(R), U = e(), W = (e) => {
|
|
11
|
+
H(R), B(e);
|
|
12
|
+
}, G = () => {
|
|
13
|
+
H(R), B(!1);
|
|
14
|
+
}, K = () => {
|
|
15
|
+
let e = s(V);
|
|
16
|
+
F || L(e), p?.(e), B(!1);
|
|
17
|
+
}, q = s(V), J;
|
|
18
|
+
return q.from ? J = {
|
|
19
|
+
from: q.from,
|
|
20
|
+
to: q.to
|
|
21
|
+
} : q.to && (J = {
|
|
22
|
+
from: q.to,
|
|
23
|
+
to: q.to
|
|
24
|
+
}), /* @__PURE__ */ u(n, {
|
|
25
|
+
open: z,
|
|
26
|
+
onOpenChange: W,
|
|
27
|
+
children: [/* @__PURE__ */ l(i, { render: /* @__PURE__ */ l(a, {
|
|
28
|
+
ref: P,
|
|
29
|
+
pickerType: "dateRange",
|
|
30
|
+
label: m,
|
|
31
|
+
description: h,
|
|
32
|
+
error: g,
|
|
33
|
+
placeholder: _,
|
|
34
|
+
disabled: v,
|
|
35
|
+
required: y,
|
|
36
|
+
startDate: o(R.from, O),
|
|
37
|
+
endDate: o(R.to, O),
|
|
38
|
+
open: z,
|
|
39
|
+
className: b
|
|
40
|
+
}) }), /* @__PURE__ */ l(r, {
|
|
41
|
+
align: "start",
|
|
42
|
+
className: "w-auto max-w-none rounded-none border-none bg-transparent p-0 shadow-none",
|
|
43
|
+
children: /* @__PURE__ */ l(t, {
|
|
44
|
+
variant: "range",
|
|
45
|
+
selected: J,
|
|
46
|
+
onSelect: (e) => {
|
|
47
|
+
H({
|
|
48
|
+
from: e?.from,
|
|
49
|
+
to: e?.to
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
defaultMonth: V.from ?? R.from,
|
|
53
|
+
onCancel: G,
|
|
54
|
+
onApply: K,
|
|
55
|
+
dir: U,
|
|
56
|
+
disabled: x,
|
|
57
|
+
min: S,
|
|
58
|
+
max: C,
|
|
59
|
+
showOutsideDays: w,
|
|
60
|
+
weekStartsOn: T,
|
|
61
|
+
fromYear: E,
|
|
62
|
+
toYear: D,
|
|
63
|
+
locale: O,
|
|
64
|
+
monthLabel: k,
|
|
65
|
+
yearLabel: A,
|
|
66
|
+
formatMonthLabel: j,
|
|
67
|
+
cancelLabel: M,
|
|
68
|
+
applyLabel: N
|
|
69
|
+
})
|
|
70
|
+
})]
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
d.displayName = "DateRangePicker";
|
|
74
|
+
//#endregion
|
|
75
|
+
export { d as DateRangePicker };
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=date-range-picker.js.map
|