@raystack/apsara 0.56.6 → 1.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/components/accordion/accordion-content.cjs +3 -3
- package/dist/components/accordion/accordion-content.cjs.map +1 -1
- package/dist/components/accordion/accordion-content.d.ts +1 -7
- package/dist/components/accordion/accordion-content.d.ts.map +1 -1
- package/dist/components/accordion/accordion-content.js +3 -3
- package/dist/components/accordion/accordion-content.js.map +1 -1
- package/dist/components/accordion/accordion-item.cjs +3 -3
- package/dist/components/accordion/accordion-item.cjs.map +1 -1
- package/dist/components/accordion/accordion-item.d.ts +1 -7
- package/dist/components/accordion/accordion-item.d.ts.map +1 -1
- package/dist/components/accordion/accordion-item.js +2 -2
- package/dist/components/accordion/accordion-item.js.map +1 -1
- package/dist/components/accordion/accordion-root.cjs +24 -13
- package/dist/components/accordion/accordion-root.cjs.map +1 -1
- package/dist/components/accordion/accordion-root.d.ts +12 -6
- package/dist/components/accordion/accordion-root.d.ts.map +1 -1
- package/dist/components/accordion/accordion-root.js +24 -13
- package/dist/components/accordion/accordion-root.js.map +1 -1
- package/dist/components/accordion/accordion-trigger.cjs +3 -3
- package/dist/components/accordion/accordion-trigger.cjs.map +1 -1
- package/dist/components/accordion/accordion-trigger.d.ts +1 -7
- package/dist/components/accordion/accordion-trigger.d.ts.map +1 -1
- package/dist/components/accordion/accordion-trigger.js +2 -2
- package/dist/components/accordion/accordion-trigger.js.map +1 -1
- package/dist/components/accordion/accordion.d.ts +14 -4
- package/dist/components/accordion/accordion.d.ts.map +1 -1
- package/dist/components/accordion/accordion.module.css.cjs +1 -1
- package/dist/components/accordion/accordion.module.css.js +1 -1
- package/dist/components/avatar/avatar.cjs +4 -5
- package/dist/components/avatar/avatar.cjs.map +1 -1
- package/dist/components/avatar/avatar.d.ts +4 -5
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/avatar.js +4 -5
- package/dist/components/avatar/avatar.js.map +1 -1
- package/dist/components/avatar/index.d.ts +2 -2
- package/dist/components/breadcrumb/breadcrumb-item.cjs +2 -2
- package/dist/components/breadcrumb/breadcrumb-item.cjs.map +1 -1
- package/dist/components/breadcrumb/breadcrumb-item.d.ts +3 -3
- package/dist/components/breadcrumb/breadcrumb-item.d.ts.map +1 -1
- package/dist/components/breadcrumb/breadcrumb-item.js +2 -2
- package/dist/components/breadcrumb/breadcrumb-item.js.map +1 -1
- package/dist/components/button/button.cjs +3 -4
- package/dist/components/button/button.cjs.map +1 -1
- package/dist/components/button/button.d.ts +12 -11
- package/dist/components/button/button.d.ts.map +1 -1
- package/dist/components/button/button.js +3 -4
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/calendar/calendar.cjs +1 -2
- package/dist/components/calendar/calendar.cjs.map +1 -1
- package/dist/components/calendar/calendar.d.ts.map +1 -1
- package/dist/components/calendar/calendar.js +2 -3
- package/dist/components/calendar/calendar.js.map +1 -1
- package/dist/components/checkbox/__tests__/checkbox-group.test.d.ts +2 -0
- package/dist/components/checkbox/__tests__/checkbox-group.test.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.cjs +10 -21
- package/dist/components/checkbox/checkbox.cjs.map +1 -1
- package/dist/components/checkbox/checkbox.d.ts +3 -13
- package/dist/components/checkbox/checkbox.d.ts.map +1 -1
- package/dist/components/checkbox/checkbox.js +11 -22
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/checkbox/checkbox.module.css.cjs +1 -1
- package/dist/components/checkbox/checkbox.module.css.js +1 -1
- package/dist/components/checkbox/index.d.ts +1 -1
- package/dist/components/chip/chip.d.ts +1 -1
- package/dist/components/code-block/code-block-misc.d.ts +15 -15
- package/dist/components/code-block/code-block-misc.d.ts.map +1 -1
- package/dist/components/code-block/code-block.d.ts +100 -0
- package/dist/components/code-block/code-block.d.ts.map +1 -0
- package/dist/components/collapsible/__tests__/collapsible.test.d.ts +2 -0
- package/dist/components/collapsible/__tests__/collapsible.test.d.ts.map +1 -0
- package/dist/components/collapsible/collapsible.cjs +22 -0
- package/dist/components/collapsible/collapsible.cjs.map +1 -0
- package/dist/components/collapsible/collapsible.d.ts +5 -0
- package/dist/components/collapsible/collapsible.d.ts.map +1 -0
- package/dist/components/collapsible/collapsible.js +20 -0
- package/dist/components/collapsible/collapsible.js.map +1 -0
- package/dist/components/collapsible/collapsible.module.css.cjs +8 -0
- package/dist/components/collapsible/collapsible.module.css.cjs.map +1 -0
- package/dist/components/collapsible/collapsible.module.css.js +4 -0
- package/dist/components/collapsible/collapsible.module.css.js.map +1 -0
- package/dist/components/collapsible/index.d.ts +2 -0
- package/dist/components/collapsible/index.d.ts.map +1 -0
- package/dist/components/color-picker/color-picker-alpha.cjs +3 -3
- package/dist/components/color-picker/color-picker-alpha.cjs.map +1 -1
- package/dist/components/color-picker/color-picker-alpha.d.ts +2 -3
- package/dist/components/color-picker/color-picker-alpha.d.ts.map +1 -1
- package/dist/components/color-picker/color-picker-alpha.js +4 -4
- package/dist/components/color-picker/color-picker-alpha.js.map +1 -1
- package/dist/components/color-picker/color-picker-hue.cjs +3 -3
- package/dist/components/color-picker/color-picker-hue.cjs.map +1 -1
- package/dist/components/color-picker/color-picker-hue.d.ts +2 -3
- package/dist/components/color-picker/color-picker-hue.d.ts.map +1 -1
- package/dist/components/color-picker/color-picker-hue.js +4 -4
- package/dist/components/color-picker/color-picker-hue.js.map +1 -1
- package/dist/components/color-picker/color-picker.d.ts +8 -0
- package/dist/components/color-picker/color-picker.d.ts.map +1 -0
- package/dist/components/color-picker/color-picker.module.css.cjs +1 -1
- package/dist/components/color-picker/color-picker.module.css.js +1 -1
- package/dist/components/combobox/combobox-content.cjs +5 -26
- package/dist/components/combobox/combobox-content.cjs.map +1 -1
- package/dist/components/combobox/combobox-content.d.ts +3 -4
- package/dist/components/combobox/combobox-content.d.ts.map +1 -1
- package/dist/components/combobox/combobox-content.js +6 -27
- package/dist/components/combobox/combobox-content.js.map +1 -1
- package/dist/components/combobox/combobox-input.cjs +10 -33
- package/dist/components/combobox/combobox-input.cjs.map +1 -1
- package/dist/components/combobox/combobox-input.d.ts.map +1 -1
- package/dist/components/combobox/combobox-input.js +11 -34
- package/dist/components/combobox/combobox-input.js.map +1 -1
- package/dist/components/combobox/combobox-item.cjs +15 -15
- package/dist/components/combobox/combobox-item.cjs.map +1 -1
- package/dist/components/combobox/combobox-item.d.ts +5 -5
- package/dist/components/combobox/combobox-item.d.ts.map +1 -1
- package/dist/components/combobox/combobox-item.js +15 -15
- package/dist/components/combobox/combobox-item.js.map +1 -1
- package/dist/components/combobox/combobox-misc.cjs +13 -13
- package/dist/components/combobox/combobox-misc.cjs.map +1 -1
- package/dist/components/combobox/combobox-misc.d.ts +3 -9
- package/dist/components/combobox/combobox-misc.d.ts.map +1 -1
- package/dist/components/combobox/combobox-misc.js +13 -13
- package/dist/components/combobox/combobox-misc.js.map +1 -1
- package/dist/components/combobox/combobox-root.cjs +23 -42
- package/dist/components/combobox/combobox-root.cjs.map +1 -1
- package/dist/components/combobox/combobox-root.d.ts +19 -26
- package/dist/components/combobox/combobox-root.d.ts.map +1 -1
- package/dist/components/combobox/combobox-root.js +24 -43
- package/dist/components/combobox/combobox-root.js.map +1 -1
- package/dist/components/combobox/combobox.d.ts +6 -12
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/combobox.module.css.cjs +1 -1
- package/dist/components/combobox/combobox.module.css.js +1 -1
- package/dist/components/data-table/components/content.cjs +26 -18
- package/dist/components/data-table/components/content.cjs.map +1 -1
- package/dist/components/data-table/components/content.d.ts.map +1 -1
- package/dist/components/data-table/components/content.js +26 -18
- package/dist/components/data-table/components/content.js.map +1 -1
- package/dist/components/data-table/components/filters.cjs +3 -3
- package/dist/components/data-table/components/filters.cjs.map +1 -1
- package/dist/components/data-table/components/filters.d.ts.map +1 -1
- package/dist/components/data-table/components/filters.js +4 -4
- package/dist/components/data-table/components/filters.js.map +1 -1
- package/dist/components/data-table/components/virtualized-content.cjs +52 -5
- package/dist/components/data-table/components/virtualized-content.cjs.map +1 -1
- package/dist/components/data-table/components/virtualized-content.d.ts.map +1 -1
- package/dist/components/data-table/components/virtualized-content.js +53 -6
- package/dist/components/data-table/components/virtualized-content.js.map +1 -1
- package/dist/components/data-table/data-table.cjs +6 -3
- package/dist/components/data-table/data-table.cjs.map +1 -1
- package/dist/components/data-table/data-table.d.ts +1 -1
- package/dist/components/data-table/data-table.d.ts.map +1 -1
- package/dist/components/data-table/data-table.js +6 -3
- package/dist/components/data-table/data-table.js.map +1 -1
- package/dist/components/data-table/data-table.module.css.cjs +1 -1
- package/dist/components/data-table/data-table.module.css.js +1 -1
- package/dist/components/data-table/data-table.types.cjs.map +1 -1
- package/dist/components/data-table/data-table.types.d.ts +5 -0
- package/dist/components/data-table/data-table.types.d.ts.map +1 -1
- package/dist/components/data-table/data-table.types.js.map +1 -1
- package/dist/components/data-table/utils/filter-operations.cjs +6 -6
- package/dist/components/data-table/utils/filter-operations.cjs.map +1 -1
- package/dist/components/data-table/utils/filter-operations.d.ts +1 -1
- package/dist/components/data-table/utils/filter-operations.js +6 -6
- package/dist/components/data-table/utils/filter-operations.js.map +1 -1
- package/dist/components/dialog/dialog-content.cjs +17 -0
- package/dist/components/dialog/dialog-content.cjs.map +1 -0
- package/dist/components/dialog/dialog-content.d.ts +15 -0
- package/dist/components/dialog/dialog-content.d.ts.map +1 -0
- package/dist/components/dialog/dialog-content.js +15 -0
- package/dist/components/dialog/dialog-content.js.map +1 -0
- package/dist/components/dialog/dialog-misc.cjs +37 -0
- package/dist/components/dialog/dialog-misc.cjs.map +1 -0
- package/dist/components/dialog/dialog-misc.d.ts +34 -0
- package/dist/components/dialog/dialog-misc.d.ts.map +1 -0
- package/dist/components/dialog/dialog-misc.js +30 -0
- package/dist/components/dialog/dialog-misc.js.map +1 -0
- package/dist/components/dialog/dialog.cjs +13 -44
- package/dist/components/dialog/dialog.cjs.map +1 -1
- package/dist/components/dialog/dialog.d.ts +38 -44
- package/dist/components/dialog/dialog.d.ts.map +1 -1
- package/dist/components/dialog/dialog.js +6 -34
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/dialog/dialog.module.css.cjs +1 -1
- package/dist/components/dialog/dialog.module.css.js +1 -1
- package/dist/components/drawer/__tests__/drawer.test.d.ts +2 -0
- package/dist/components/drawer/__tests__/drawer.test.d.ts.map +1 -0
- package/dist/components/drawer/drawer-content.cjs +30 -0
- package/dist/components/drawer/drawer-content.cjs.map +1 -0
- package/dist/components/drawer/drawer-content.d.ts +13 -0
- package/dist/components/drawer/drawer-content.d.ts.map +1 -0
- package/dist/components/drawer/drawer-content.js +28 -0
- package/dist/components/drawer/drawer-content.js.map +1 -0
- package/dist/components/drawer/drawer-misc.cjs +26 -0
- package/dist/components/drawer/drawer-misc.cjs.map +1 -0
- package/dist/components/drawer/drawer-misc.d.ts +13 -0
- package/dist/components/drawer/drawer-misc.d.ts.map +1 -0
- package/dist/components/drawer/drawer-misc.js +20 -0
- package/dist/components/drawer/drawer-misc.js.map +1 -0
- package/dist/components/drawer/drawer-root.cjs +19 -0
- package/dist/components/drawer/drawer-root.cjs.map +1 -0
- package/dist/components/drawer/drawer-root.d.ts +12 -0
- package/dist/components/drawer/drawer-root.d.ts.map +1 -0
- package/dist/components/drawer/drawer-root.js +17 -0
- package/dist/components/drawer/drawer-root.js.map +1 -0
- package/dist/components/drawer/drawer.cjs +20 -0
- package/dist/components/drawer/drawer.cjs.map +1 -0
- package/dist/components/drawer/drawer.d.ts +21 -0
- package/dist/components/drawer/drawer.d.ts.map +1 -0
- package/dist/components/drawer/drawer.js +18 -0
- package/dist/components/drawer/drawer.js.map +1 -0
- package/dist/components/drawer/drawer.module.css.cjs +8 -0
- package/dist/components/drawer/drawer.module.css.cjs.map +1 -0
- package/dist/components/drawer/drawer.module.css.js +4 -0
- package/dist/components/drawer/drawer.module.css.js.map +1 -0
- package/dist/components/drawer/index.d.ts +2 -0
- package/dist/components/drawer/index.d.ts.map +1 -0
- package/dist/components/flex/flex.cjs +13 -4
- package/dist/components/flex/flex.cjs.map +1 -1
- package/dist/components/flex/flex.d.ts +7 -6
- package/dist/components/flex/flex.d.ts.map +1 -1
- package/dist/components/flex/flex.js +13 -4
- package/dist/components/flex/flex.js.map +1 -1
- package/dist/components/grid/grid-item.cjs +21 -16
- package/dist/components/grid/grid-item.cjs.map +1 -1
- package/dist/components/grid/grid-item.d.ts +14 -13
- package/dist/components/grid/grid-item.d.ts.map +1 -1
- package/dist/components/grid/grid-item.js +21 -16
- package/dist/components/grid/grid-item.js.map +1 -1
- package/dist/components/grid/grid.cjs +26 -21
- package/dist/components/grid/grid.cjs.map +1 -1
- package/dist/components/grid/grid.d.ts +27 -18
- package/dist/components/grid/grid.d.ts.map +1 -1
- package/dist/components/grid/grid.js +26 -21
- package/dist/components/grid/grid.js.map +1 -1
- package/dist/components/grid/index.d.ts +8 -6
- package/dist/components/grid/index.d.ts.map +1 -1
- package/dist/components/headline/headline.d.ts +1 -1
- package/dist/components/input-field/input-field.cjs +2 -2
- package/dist/components/input-field/input-field.cjs.map +1 -1
- package/dist/components/input-field/input-field.d.ts +2 -1
- package/dist/components/input-field/input-field.d.ts.map +1 -1
- package/dist/components/input-field/input-field.js +2 -2
- package/dist/components/input-field/input-field.js.map +1 -1
- package/dist/components/menu/__tests__/menu.test.d.ts +2 -0
- package/dist/components/menu/__tests__/menu.test.d.ts.map +1 -0
- package/dist/components/menu/cell.cjs +12 -0
- package/dist/components/menu/cell.cjs.map +1 -0
- package/dist/components/{dropdown-menu → menu}/cell.d.ts +2 -2
- package/dist/components/menu/cell.d.ts.map +1 -0
- package/dist/components/menu/cell.js +10 -0
- package/dist/components/menu/cell.js.map +1 -0
- package/dist/components/{dropdown-menu → menu}/cell.module.css.cjs +1 -1
- package/dist/components/menu/cell.module.css.js +4 -0
- package/dist/components/menu/index.d.ts +2 -0
- package/dist/components/menu/index.d.ts.map +1 -0
- package/dist/components/menu/menu-content.cjs +95 -0
- package/dist/components/menu/menu-content.cjs.map +1 -0
- package/dist/components/menu/menu-content.d.ts +7 -0
- package/dist/components/menu/menu-content.d.ts.map +1 -0
- package/dist/components/menu/menu-content.js +92 -0
- package/dist/components/menu/menu-content.js.map +1 -0
- package/dist/components/menu/menu-item.cjs +30 -0
- package/dist/components/menu/menu-item.cjs.map +1 -0
- package/dist/components/menu/menu-item.d.ts +7 -0
- package/dist/components/menu/menu-item.d.ts.map +1 -0
- package/dist/components/menu/menu-item.js +28 -0
- package/dist/components/menu/menu-item.js.map +1 -0
- package/dist/components/menu/menu-misc.cjs +42 -0
- package/dist/components/menu/menu-misc.cjs.map +1 -0
- package/dist/components/menu/menu-misc.d.ts +8 -0
- package/dist/components/menu/menu-misc.d.ts.map +1 -0
- package/dist/components/menu/menu-misc.js +37 -0
- package/dist/components/menu/menu-misc.js.map +1 -0
- package/dist/components/menu/menu-root.cjs +103 -0
- package/dist/components/menu/menu-root.cjs.map +1 -0
- package/dist/components/menu/menu-root.d.ts +71 -0
- package/dist/components/menu/menu-root.d.ts.map +1 -0
- package/dist/components/menu/menu-root.js +98 -0
- package/dist/components/menu/menu-root.js.map +1 -0
- package/dist/components/menu/menu-trigger.cjs +43 -0
- package/dist/components/menu/menu-trigger.cjs.map +1 -0
- package/dist/components/menu/menu-trigger.d.ts +11 -0
- package/dist/components/menu/menu-trigger.d.ts.map +1 -0
- package/dist/components/menu/menu-trigger.js +40 -0
- package/dist/components/menu/menu-trigger.js.map +1 -0
- package/dist/components/menu/menu.cjs +23 -0
- package/dist/components/menu/menu.cjs.map +1 -0
- package/dist/components/menu/menu.d.ts +21 -0
- package/dist/components/menu/menu.d.ts.map +1 -0
- package/dist/components/menu/menu.js +21 -0
- package/dist/components/menu/menu.js.map +1 -0
- package/dist/components/menu/menu.module.css.cjs +8 -0
- package/dist/components/menu/menu.module.css.cjs.map +1 -0
- package/dist/components/menu/menu.module.css.js +4 -0
- package/dist/components/menu/menu.module.css.js.map +1 -0
- package/dist/components/menu/utils.cjs +53 -0
- package/dist/components/menu/utils.cjs.map +1 -0
- package/dist/components/menu/utils.d.ts +8 -0
- package/dist/components/menu/utils.d.ts.map +1 -0
- package/dist/components/menu/utils.js +46 -0
- package/dist/components/menu/utils.js.map +1 -0
- package/dist/components/popover/popover.cjs +8 -7
- package/dist/components/popover/popover.cjs.map +1 -1
- package/dist/components/popover/popover.d.ts +6 -8
- package/dist/components/popover/popover.d.ts.map +1 -1
- package/dist/components/popover/popover.js +7 -6
- package/dist/components/popover/popover.js.map +1 -1
- package/dist/components/popover/popover.module.css.cjs +1 -1
- package/dist/components/popover/popover.module.css.js +1 -1
- package/dist/components/preview-card/__tests__/preview-card.test.d.ts +2 -0
- package/dist/components/preview-card/__tests__/preview-card.test.d.ts.map +1 -0
- package/dist/components/preview-card/index.d.ts +2 -0
- package/dist/components/preview-card/index.d.ts.map +1 -0
- package/dist/components/preview-card/preview-card.cjs +24 -0
- package/dist/components/preview-card/preview-card.cjs.map +1 -0
- package/dist/components/preview-card/preview-card.d.ts +15 -0
- package/dist/components/preview-card/preview-card.d.ts.map +1 -0
- package/dist/components/preview-card/preview-card.js +22 -0
- package/dist/components/preview-card/preview-card.js.map +1 -0
- package/dist/components/preview-card/preview-card.module.css.cjs +8 -0
- package/dist/components/preview-card/preview-card.module.css.cjs.map +1 -0
- package/dist/components/preview-card/preview-card.module.css.js +4 -0
- package/dist/components/preview-card/preview-card.module.css.js.map +1 -0
- package/dist/components/radio/index.d.ts +1 -1
- package/dist/components/radio/radio.cjs +8 -11
- package/dist/components/radio/radio.cjs.map +1 -1
- package/dist/components/radio/radio.d.ts +4 -13
- package/dist/components/radio/radio.d.ts.map +1 -1
- package/dist/components/radio/radio.js +10 -12
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/scroll-area/index.d.ts +2 -1
- package/dist/components/scroll-area/index.d.ts.map +1 -1
- package/dist/components/scroll-area/scroll-area-scrollbar.cjs +4 -4
- package/dist/components/scroll-area/scroll-area-scrollbar.cjs.map +1 -1
- package/dist/components/scroll-area/scroll-area-scrollbar.d.ts +5 -6
- package/dist/components/scroll-area/scroll-area-scrollbar.d.ts.map +1 -1
- package/dist/components/scroll-area/scroll-area-scrollbar.js +4 -4
- package/dist/components/scroll-area/scroll-area-scrollbar.js.map +1 -1
- package/dist/components/scroll-area/scroll-area.cjs +11 -2
- package/dist/components/scroll-area/scroll-area.cjs.map +1 -1
- package/dist/components/scroll-area/scroll-area.d.ts +6 -1
- package/dist/components/scroll-area/scroll-area.d.ts.map +1 -1
- package/dist/components/scroll-area/scroll-area.js +11 -2
- package/dist/components/scroll-area/scroll-area.js.map +1 -1
- package/dist/components/scroll-area/scroll-area.module.css.cjs +1 -1
- package/dist/components/scroll-area/scroll-area.module.css.js +1 -1
- package/dist/components/select/select-content.cjs +9 -18
- package/dist/components/select/select-content.cjs.map +1 -1
- package/dist/components/select/select-content.d.ts +6 -2
- package/dist/components/select/select-content.d.ts.map +1 -1
- package/dist/components/select/select-content.js +11 -20
- package/dist/components/select/select-content.js.map +1 -1
- package/dist/components/select/select-item.cjs +10 -11
- package/dist/components/select/select-item.cjs.map +1 -1
- package/dist/components/select/select-item.d.ts +9 -4
- package/dist/components/select/select-item.d.ts.map +1 -1
- package/dist/components/select/select-item.js +10 -11
- package/dist/components/select/select-item.js.map +1 -1
- package/dist/components/select/select-misc.cjs +19 -10
- package/dist/components/select/select-misc.cjs.map +1 -1
- package/dist/components/select/select-misc.d.ts +15 -4
- package/dist/components/select/select-misc.d.ts.map +1 -1
- package/dist/components/select/select-misc.js +19 -10
- package/dist/components/select/select-misc.js.map +1 -1
- package/dist/components/select/select-multiple-value.cjs +3 -7
- package/dist/components/select/select-multiple-value.cjs.map +1 -1
- package/dist/components/select/select-multiple-value.d.ts +2 -3
- package/dist/components/select/select-multiple-value.d.ts.map +1 -1
- package/dist/components/select/select-multiple-value.js +5 -9
- package/dist/components/select/select-multiple-value.js.map +1 -1
- package/dist/components/select/select-root.cjs +51 -66
- package/dist/components/select/select-root.cjs.map +1 -1
- package/dist/components/select/select-root.d.ts +11 -15
- package/dist/components/select/select-root.d.ts.map +1 -1
- package/dist/components/select/select-root.js +52 -67
- package/dist/components/select/select-root.js.map +1 -1
- package/dist/components/select/select-trigger.cjs +7 -4
- package/dist/components/select/select-trigger.cjs.map +1 -1
- package/dist/components/select/select-trigger.d.ts +2 -3
- package/dist/components/select/select-trigger.d.ts.map +1 -1
- package/dist/components/select/select-trigger.js +7 -4
- package/dist/components/select/select-trigger.js.map +1 -1
- package/dist/components/select/select-value.cjs +17 -8
- package/dist/components/select/select-value.cjs.map +1 -1
- package/dist/components/select/select-value.d.ts +6 -4
- package/dist/components/select/select-value.d.ts.map +1 -1
- package/dist/components/select/select-value.js +17 -8
- package/dist/components/select/select-value.js.map +1 -1
- package/dist/components/select/select.cjs +4 -4
- package/dist/components/select/select.cjs.map +1 -1
- package/dist/components/select/select.d.ts +10 -11
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/select/select.js +4 -4
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/select/select.module.css.cjs +1 -1
- package/dist/components/select/select.module.css.js +1 -1
- package/dist/components/separator/separator.cjs +3 -3
- package/dist/components/separator/separator.cjs.map +1 -1
- package/dist/components/separator/separator.d.ts +3 -5
- package/dist/components/separator/separator.d.ts.map +1 -1
- package/dist/components/separator/separator.js +3 -3
- package/dist/components/separator/separator.js.map +1 -1
- package/dist/components/sidebar/sidebar-item.cjs +7 -4
- package/dist/components/sidebar/sidebar-item.cjs.map +1 -1
- package/dist/components/sidebar/sidebar-item.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar-item.js +7 -4
- package/dist/components/sidebar/sidebar-item.js.map +1 -1
- package/dist/components/sidebar/sidebar-misc.cjs +1 -1
- package/dist/components/sidebar/sidebar-misc.cjs.map +1 -1
- package/dist/components/sidebar/sidebar-misc.js +1 -1
- package/dist/components/sidebar/sidebar-misc.js.map +1 -1
- package/dist/components/sidebar/sidebar-root.cjs +4 -5
- package/dist/components/sidebar/sidebar-root.cjs.map +1 -1
- package/dist/components/sidebar/sidebar-root.d.ts +5 -3
- package/dist/components/sidebar/sidebar-root.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar-root.js +4 -5
- package/dist/components/sidebar/sidebar-root.js.map +1 -1
- package/dist/components/sidebar/sidebar.d.ts +1 -1
- package/dist/components/sidebar/sidebar.module.css.cjs +1 -1
- package/dist/components/sidebar/sidebar.module.css.js +1 -1
- package/dist/components/slider/index.d.ts +1 -1
- package/dist/components/slider/slider.cjs +10 -22
- package/dist/components/slider/slider.cjs.map +1 -1
- package/dist/components/slider/slider.d.ts +6 -13
- package/dist/components/slider/slider.d.ts.map +1 -1
- package/dist/components/slider/slider.js +12 -24
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/slider/slider.module.css.cjs +1 -1
- package/dist/components/slider/slider.module.css.js +1 -1
- package/dist/components/switch/switch.cjs +2 -3
- package/dist/components/switch/switch.cjs.map +1 -1
- package/dist/components/switch/switch.d.ts +4 -5
- package/dist/components/switch/switch.d.ts.map +1 -1
- package/dist/components/switch/switch.js +4 -5
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/tabs/index.d.ts +1 -1
- package/dist/components/tabs/tabs.cjs +10 -14
- package/dist/components/tabs/tabs.cjs.map +1 -1
- package/dist/components/tabs/tabs.d.ts +7 -14
- package/dist/components/tabs/tabs.d.ts.map +1 -1
- package/dist/components/tabs/tabs.js +11 -15
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/tabs/tabs.module.css.cjs +1 -1
- package/dist/components/tabs/tabs.module.css.js +1 -1
- package/dist/components/text/text.d.ts +1 -1
- package/dist/components/toast/index.d.ts +3 -1
- package/dist/components/toast/index.d.ts.map +1 -1
- package/dist/components/toast/toast-manager.cjs +9 -0
- package/dist/components/toast/toast-manager.cjs.map +1 -0
- package/dist/components/toast/toast-manager.d.ts +2 -0
- package/dist/components/toast/toast-manager.d.ts.map +1 -0
- package/dist/components/toast/toast-manager.js +7 -0
- package/dist/components/toast/toast-manager.js.map +1 -0
- package/dist/components/toast/toast-provider.cjs +22 -0
- package/dist/components/toast/toast-provider.cjs.map +1 -0
- package/dist/components/toast/toast-provider.d.ts +11 -0
- package/dist/components/toast/toast-provider.d.ts.map +1 -0
- package/dist/components/toast/toast-provider.js +20 -0
- package/dist/components/toast/toast-provider.js.map +1 -0
- package/dist/components/toast/toast-root.cjs +34 -0
- package/dist/components/toast/toast-root.cjs.map +1 -0
- package/dist/components/toast/toast-root.d.ts +8 -0
- package/dist/components/toast/toast-root.d.ts.map +1 -0
- package/dist/components/toast/toast-root.js +32 -0
- package/dist/components/toast/toast-root.js.map +1 -0
- package/dist/components/toast/toast.cjs +11 -25
- package/dist/components/toast/toast.cjs.map +1 -1
- package/dist/components/toast/toast.d.ts +6 -8
- package/dist/components/toast/toast.d.ts.map +1 -1
- package/dist/components/toast/toast.js +10 -24
- package/dist/components/toast/toast.js.map +1 -1
- package/dist/components/toast/toast.module.css.cjs +1 -1
- package/dist/components/toast/toast.module.css.js +1 -1
- package/dist/components/tooltip/tooltip-content.cjs +17 -0
- package/dist/components/tooltip/tooltip-content.cjs.map +1 -0
- package/dist/components/tooltip/tooltip-content.d.ts +10 -0
- package/dist/components/tooltip/tooltip-content.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip-content.js +15 -0
- package/dist/components/tooltip/tooltip-content.js.map +1 -0
- package/dist/components/tooltip/tooltip-misc.cjs +19 -0
- package/dist/components/tooltip/tooltip-misc.cjs.map +1 -0
- package/dist/components/tooltip/tooltip-misc.d.ts +9 -0
- package/dist/components/tooltip/tooltip-misc.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip-misc.js +16 -0
- package/dist/components/tooltip/tooltip-misc.js.map +1 -0
- package/dist/components/tooltip/tooltip.cjs +7 -4
- package/dist/components/tooltip/tooltip.cjs.map +1 -1
- package/dist/components/tooltip/tooltip.d.ts +8 -5
- package/dist/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/tooltip/tooltip.js +7 -4
- package/dist/components/tooltip/tooltip.js.map +1 -1
- package/dist/components/tooltip/tooltip.module.css.cjs +1 -1
- package/dist/components/tooltip/tooltip.module.css.js +1 -1
- package/dist/index.cjs +14 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +5 -7
- package/dist/components/dropdown-menu/__tests__/dropdown-menu.test.d.ts +0 -2
- package/dist/components/dropdown-menu/__tests__/dropdown-menu.test.d.ts.map +0 -1
- package/dist/components/dropdown-menu/cell.cjs +0 -12
- package/dist/components/dropdown-menu/cell.cjs.map +0 -1
- package/dist/components/dropdown-menu/cell.d.ts.map +0 -1
- package/dist/components/dropdown-menu/cell.js +0 -10
- package/dist/components/dropdown-menu/cell.js.map +0 -1
- package/dist/components/dropdown-menu/cell.module.css.js +0 -4
- package/dist/components/dropdown-menu/dropdown-menu-content.cjs +0 -36
- package/dist/components/dropdown-menu/dropdown-menu-content.cjs.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +0 -7
- package/dist/components/dropdown-menu/dropdown-menu-content.d.ts.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-content.js +0 -34
- package/dist/components/dropdown-menu/dropdown-menu-content.js.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-item.cjs +0 -45
- package/dist/components/dropdown-menu/dropdown-menu-item.cjs.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-item.d.ts +0 -9
- package/dist/components/dropdown-menu/dropdown-menu-item.d.ts.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-item.js +0 -43
- package/dist/components/dropdown-menu/dropdown-menu-item.js.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-misc.cjs +0 -36
- package/dist/components/dropdown-menu/dropdown-menu-misc.cjs.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-misc.d.ts +0 -10
- package/dist/components/dropdown-menu/dropdown-menu-misc.d.ts.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-misc.js +0 -31
- package/dist/components/dropdown-menu/dropdown-menu-misc.js.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-root.cjs +0 -52
- package/dist/components/dropdown-menu/dropdown-menu-root.cjs.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-root.d.ts +0 -40
- package/dist/components/dropdown-menu/dropdown-menu-root.d.ts.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-root.js +0 -48
- package/dist/components/dropdown-menu/dropdown-menu-root.js.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-trigger.cjs +0 -34
- package/dist/components/dropdown-menu/dropdown-menu-trigger.cjs.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-trigger.d.ts +0 -14
- package/dist/components/dropdown-menu/dropdown-menu-trigger.d.ts.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu-trigger.js +0 -31
- package/dist/components/dropdown-menu/dropdown-menu-trigger.js.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.cjs +0 -24
- package/dist/components/dropdown-menu/dropdown-menu.cjs.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +0 -16
- package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.js +0 -22
- package/dist/components/dropdown-menu/dropdown-menu.js.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.module.css.cjs +0 -8
- package/dist/components/dropdown-menu/dropdown-menu.module.css.cjs.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.module.css.js +0 -4
- package/dist/components/dropdown-menu/dropdown-menu.module.css.js.map +0 -1
- package/dist/components/dropdown-menu/index.d.ts +0 -2
- package/dist/components/dropdown-menu/index.d.ts.map +0 -1
- package/dist/components/dropdown-menu/types.d.ts +0 -4
- package/dist/components/dropdown-menu/types.d.ts.map +0 -1
- package/dist/components/dropdown-menu/utils.cjs +0 -21
- package/dist/components/dropdown-menu/utils.cjs.map +0 -1
- package/dist/components/dropdown-menu/utils.d.ts +0 -4
- package/dist/components/dropdown-menu/utils.d.ts.map +0 -1
- package/dist/components/dropdown-menu/utils.js +0 -18
- package/dist/components/dropdown-menu/utils.js.map +0 -1
- package/dist/components/scroll-area/scroll-area-root.cjs +0 -17
- package/dist/components/scroll-area/scroll-area-root.cjs.map +0 -1
- package/dist/components/scroll-area/scroll-area-root.d.ts +0 -9
- package/dist/components/scroll-area/scroll-area-root.d.ts.map +0 -1
- package/dist/components/scroll-area/scroll-area-root.js +0 -15
- package/dist/components/scroll-area/scroll-area-root.js.map +0 -1
- package/dist/components/sheet/__tests__/sheet.test.d.ts +0 -2
- package/dist/components/sheet/__tests__/sheet.test.d.ts.map +0 -1
- package/dist/components/sheet/index.d.ts +0 -2
- package/dist/components/sheet/index.d.ts.map +0 -1
- package/dist/components/sheet/sheet.cjs +0 -50
- package/dist/components/sheet/sheet.cjs.map +0 -1
- package/dist/components/sheet/sheet.d.ts +0 -36
- package/dist/components/sheet/sheet.d.ts.map +0 -1
- package/dist/components/sheet/sheet.js +0 -45
- package/dist/components/sheet/sheet.js.map +0 -1
- package/dist/components/sheet/sheet.module.css.cjs +0 -8
- package/dist/components/sheet/sheet.module.css.cjs.map +0 -1
- package/dist/components/sheet/sheet.module.css.js +0 -4
- package/dist/components/sheet/sheet.module.css.js.map +0 -1
- package/dist/components/slider/thumb.cjs +0 -8
- package/dist/components/slider/thumb.cjs.map +0 -1
- package/dist/components/slider/thumb.d.ts +0 -2
- package/dist/components/slider/thumb.d.ts.map +0 -1
- package/dist/components/slider/thumb.js +0 -6
- package/dist/components/slider/thumb.js.map +0 -1
- package/dist/components/tooltip/tooltip-provider.cjs +0 -18
- package/dist/components/tooltip/tooltip-provider.cjs.map +0 -1
- package/dist/components/tooltip/tooltip-provider.d.ts +0 -9
- package/dist/components/tooltip/tooltip-provider.d.ts.map +0 -1
- package/dist/components/tooltip/tooltip-provider.js +0 -15
- package/dist/components/tooltip/tooltip-provider.js.map +0 -1
- package/dist/components/tooltip/tooltip-root.cjs +0 -66
- package/dist/components/tooltip/tooltip-root.cjs.map +0 -1
- package/dist/components/tooltip/tooltip-root.d.ts +0 -29
- package/dist/components/tooltip/tooltip-root.d.ts.map +0 -1
- package/dist/components/tooltip/tooltip-root.js +0 -63
- package/dist/components/tooltip/tooltip-root.js.map +0 -1
- package/dist/components/tooltip/utils.cjs +0 -30
- package/dist/components/tooltip/utils.cjs.map +0 -1
- package/dist/components/tooltip/utils.d.ts +0 -10
- package/dist/components/tooltip/utils.d.ts.map +0 -1
- package/dist/components/tooltip/utils.js +0 -28
- package/dist/components/tooltip/utils.js.map +0 -1
- /package/dist/components/{dropdown-menu → menu}/cell.module.css.cjs.map +0 -0
- /package/dist/components/{dropdown-menu → menu}/cell.module.css.js.map +0 -0
|
@@ -4,13 +4,14 @@ import { TableIcon } from '@radix-ui/react-icons';
|
|
|
4
4
|
import { flexRender } from '@tanstack/react-table';
|
|
5
5
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
6
6
|
import { cx } from 'class-variance-authority';
|
|
7
|
-
import { useRef, useCallback } from 'react';
|
|
7
|
+
import { useRef, useState, useMemo, useCallback, useLayoutEffect } from 'react';
|
|
8
8
|
import tableStyles from '../../table/table.module.css.js';
|
|
9
9
|
import { Badge } from '../../badge/badge.js';
|
|
10
10
|
import { EmptyState } from '../../empty-state/empty-state.js';
|
|
11
11
|
import { Flex } from '../../flex/flex.js';
|
|
12
12
|
import { Skeleton } from '../../skeleton/skeleton.js';
|
|
13
13
|
import styles from '../data-table.module.css.js';
|
|
14
|
+
import { defaultGroupOption } from '../data-table.types.js';
|
|
14
15
|
import { useDataTable } from '../hooks/useDataTable.js';
|
|
15
16
|
import { hasActiveQuery } from '../utils/index.js';
|
|
16
17
|
|
|
@@ -54,11 +55,25 @@ function VirtualLoaderRows({ columns, rowHeight, count }) {
|
|
|
54
55
|
}
|
|
55
56
|
const DefaultEmptyComponent = () => (jsx(EmptyState, { icon: jsx(TableIcon, {}), heading: 'No Data' }));
|
|
56
57
|
function VirtualizedContent({ rowHeight = 40, groupHeaderHeight, overscan = 5, loadMoreOffset = 100, emptyState, zeroState, classNames = {} }) {
|
|
57
|
-
const { onRowClick, table, isLoading, loadMoreData, tableQuery, defaultSort, loadingRowCount = 3 } = useDataTable();
|
|
58
|
+
const { onRowClick, table, isLoading, loadMoreData, tableQuery, defaultSort, loadingRowCount = 3, stickyGroupHeader = false } = useDataTable();
|
|
58
59
|
const headerGroups = table?.getHeaderGroups();
|
|
59
60
|
const rowModel = table?.getRowModel();
|
|
60
61
|
const { rows = [] } = rowModel || {};
|
|
61
62
|
const scrollContainerRef = useRef(null);
|
|
63
|
+
const headerRef = useRef(null);
|
|
64
|
+
const [stickyGroup, setStickyGroup] = useState(null);
|
|
65
|
+
const [headerHeight, setHeaderHeight] = useState(40);
|
|
66
|
+
const groupBy = tableQuery?.group_by?.[0];
|
|
67
|
+
const isGrouped = Boolean(groupBy) && groupBy !== defaultGroupOption.id;
|
|
68
|
+
const groupHeaderList = useMemo(() => {
|
|
69
|
+
const list = [];
|
|
70
|
+
rows.forEach((row, i) => {
|
|
71
|
+
if (row.subRows && row.subRows.length > 0) {
|
|
72
|
+
list.push({ index: i, data: row.original });
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
return list;
|
|
76
|
+
}, [rows]);
|
|
62
77
|
const showLoaderRows = isLoading && rows.length > 0;
|
|
63
78
|
const virtualizer = useVirtualizer({
|
|
64
79
|
count: rows.length,
|
|
@@ -70,15 +85,47 @@ function VirtualizedContent({ rowHeight = 40, groupHeaderHeight, overscan = 5, l
|
|
|
70
85
|
},
|
|
71
86
|
overscan
|
|
72
87
|
});
|
|
88
|
+
const updateStickyGroup = useCallback(() => {
|
|
89
|
+
if (!stickyGroupHeader || !isGrouped || groupHeaderList.length === 0) {
|
|
90
|
+
setStickyGroup(null);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const items = virtualizer.getVirtualItems();
|
|
94
|
+
const firstIndex = items[0]?.index ?? 0;
|
|
95
|
+
const current = groupHeaderList
|
|
96
|
+
.filter(g => g.index <= firstIndex)
|
|
97
|
+
.pop()?.data;
|
|
98
|
+
setStickyGroup(current ?? null);
|
|
99
|
+
}, [stickyGroupHeader, isGrouped, groupHeaderList, virtualizer]);
|
|
73
100
|
const handleVirtualScroll = useCallback(() => {
|
|
74
|
-
|
|
101
|
+
const el = scrollContainerRef.current;
|
|
102
|
+
if (!el)
|
|
75
103
|
return;
|
|
76
|
-
|
|
104
|
+
if (stickyGroupHeader)
|
|
105
|
+
updateStickyGroup();
|
|
106
|
+
if (isLoading)
|
|
107
|
+
return;
|
|
108
|
+
const { scrollTop, scrollHeight, clientHeight } = el;
|
|
77
109
|
if (scrollHeight - scrollTop - clientHeight < loadMoreOffset) {
|
|
78
110
|
loadMoreData();
|
|
79
111
|
}
|
|
80
|
-
}, [
|
|
112
|
+
}, [
|
|
113
|
+
stickyGroupHeader,
|
|
114
|
+
isLoading,
|
|
115
|
+
loadMoreData,
|
|
116
|
+
loadMoreOffset,
|
|
117
|
+
updateStickyGroup
|
|
118
|
+
]);
|
|
81
119
|
const totalHeight = virtualizer.getTotalSize();
|
|
120
|
+
useLayoutEffect(() => {
|
|
121
|
+
if (headerRef.current) {
|
|
122
|
+
setHeaderHeight(headerRef.current.getBoundingClientRect().height);
|
|
123
|
+
}
|
|
124
|
+
}, [headerGroups]);
|
|
125
|
+
useLayoutEffect(() => {
|
|
126
|
+
if (stickyGroupHeader)
|
|
127
|
+
updateStickyGroup();
|
|
128
|
+
}, [stickyGroupHeader, updateStickyGroup, groupHeaderList, isGrouped]);
|
|
82
129
|
const hasData = rows?.length > 0 || isLoading;
|
|
83
130
|
const hasChanges = hasActiveQuery(tableQuery || {}, defaultSort);
|
|
84
131
|
const isZeroState = !hasData && !hasChanges;
|
|
@@ -92,7 +139,7 @@ function VirtualizedContent({ rowHeight = 40, groupHeaderHeight, overscan = 5, l
|
|
|
92
139
|
return jsx("div", { className: classNames.root, children: stateToShow });
|
|
93
140
|
}
|
|
94
141
|
const visibleColumns = table.getVisibleLeafColumns();
|
|
95
|
-
return (jsxs("div", { ref: scrollContainerRef, className: cx(classNames.root, styles.scrollContainer), onScroll: handleVirtualScroll, children: [jsxs("div", { role: 'table', className: cx(styles.virtualTable, classNames.table), children: [jsx(VirtualHeaders, { headerGroups: headerGroups, className: cx(styles.stickyHeader, classNames.header) }), jsx("div", { role: 'rowgroup', className: cx(styles.virtualBodyGroup, classNames.body), style: { height: totalHeight }, children: jsx(VirtualRows, { rows: rows, virtualizer: virtualizer, onRowClick: onRowClick, classNames: {
|
|
142
|
+
return (jsxs("div", { ref: scrollContainerRef, className: cx(classNames.root, styles.scrollContainer), onScroll: handleVirtualScroll, children: [jsxs("div", { role: 'table', className: cx(styles.virtualTable, classNames.table), children: [jsx("div", { ref: headerRef, children: jsx(VirtualHeaders, { headerGroups: headerGroups, className: cx(styles.stickyHeader, classNames.header) }) }), stickyGroupHeader && isGrouped && stickyGroup && (jsx("div", { role: 'row', className: styles.stickyGroupAnchor, style: { top: headerHeight }, children: jsxs(Flex, { gap: 3, align: 'center', children: [stickyGroup.label, stickyGroup.showGroupCount ? (jsx(Badge, { variant: 'neutral', children: stickyGroup.count })) : null] }) })), jsx("div", { role: 'rowgroup', className: cx(styles.virtualBodyGroup, classNames.body), style: { height: totalHeight }, children: jsx(VirtualRows, { rows: rows, virtualizer: virtualizer, onRowClick: onRowClick, classNames: {
|
|
96
143
|
row: classNames.row
|
|
97
144
|
} }) })] }), showLoaderRows && (jsx(VirtualLoaderRows, { columns: visibleColumns, rowHeight: rowHeight, count: loadingRowCount }))] }));
|
|
98
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtualized-content.js","sources":["../../../../components/data-table/components/virtualized-content.tsx"],"sourcesContent":["'use client';\n\nimport { TableIcon } from '@radix-ui/react-icons';\nimport type { HeaderGroup, Row } from '@tanstack/react-table';\nimport { flexRender } from '@tanstack/react-table';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { cx } from 'class-variance-authority';\nimport { useCallback, useRef } from 'react';\nimport tableStyles from '~/components/table/table.module.css';\nimport { Badge } from '../../badge';\nimport { EmptyState } from '../../empty-state';\nimport { Flex } from '../../flex';\nimport { Skeleton } from '../../skeleton';\nimport styles from '../data-table.module.css';\nimport {\n DataTableColumnDef,\n GroupedData,\n VirtualizedContentProps\n} from '../data-table.types';\nimport { useDataTable } from '../hooks/useDataTable';\nimport { hasActiveQuery } from '../utils';\n\nfunction VirtualHeaders<TData>({\n headerGroups = [],\n className = ''\n}: {\n headerGroups: HeaderGroup<TData>[];\n className?: string;\n}) {\n return (\n <div role='rowgroup' className={cx(styles.virtualHeaderGroup, className)}>\n {headerGroups?.map(headerGroup => (\n <div\n role='row'\n key={headerGroup?.id}\n className={styles.virtualHeaderRow}\n >\n {headerGroup?.headers?.map(header => {\n const columnDef = header.column.columnDef as DataTableColumnDef<\n TData,\n unknown\n >;\n return (\n <div\n role='columnheader'\n key={header.id}\n className={cx(\n tableStyles.head,\n styles.virtualHead,\n columnDef.classNames?.header\n )}\n style={columnDef.styles?.header}\n >\n {flexRender(columnDef.header, header.getContext())}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n );\n}\n\nfunction VirtualGroupHeader<TData>({\n data,\n style\n}: {\n data: GroupedData<TData>;\n style?: React.CSSProperties;\n}) {\n return (\n <div role='row' className={styles.virtualSectionHeader} style={style}>\n <Flex gap={3} align='center'>\n {data?.label}\n {data.showGroupCount ? (\n <Badge variant='neutral'>{data?.count}</Badge>\n ) : null}\n </Flex>\n </div>\n );\n}\n\nfunction VirtualRows<TData>({\n rows,\n virtualizer,\n onRowClick,\n classNames\n}: {\n rows: Row<TData>[];\n virtualizer: ReturnType<typeof useVirtualizer>;\n onRowClick?: (row: TData) => void;\n classNames?: { row?: string };\n}) {\n const items = virtualizer.getVirtualItems();\n\n return items.map((item, idx) => {\n const row = rows[item.index];\n if (!row) return null;\n\n const isSelected = row.getIsSelected();\n const cells = row.getVisibleCells() || [];\n const isGroupHeader = row.subRows && row.subRows.length > 0;\n const rowKey = row.id + '-' + item.index;\n\n const positionStyle: React.CSSProperties = {\n height: item.size,\n top: item.start\n };\n\n if (isGroupHeader) {\n return (\n <VirtualGroupHeader\n key={rowKey}\n data={row.original as GroupedData<unknown>}\n style={positionStyle}\n />\n );\n }\n\n return (\n <div\n role='row'\n key={rowKey}\n className={cx(\n styles.virtualRow,\n styles['row'],\n onRowClick ? styles['clickable'] : '',\n classNames?.row\n )}\n style={positionStyle}\n data-state={isSelected && 'selected'}\n onClick={() => onRowClick?.(row.original)}\n >\n {cells.map(cell => {\n const columnDef = cell.column.columnDef as DataTableColumnDef<\n unknown,\n unknown\n >;\n return (\n <div\n role='cell'\n key={cell.id}\n className={cx(\n tableStyles.cell,\n styles.virtualCell,\n columnDef.classNames?.cell\n )}\n style={columnDef.styles?.cell}\n >\n {flexRender(columnDef.cell, cell.getContext())}\n </div>\n );\n })}\n </div>\n );\n });\n}\n\nfunction VirtualLoaderRows({\n columns,\n rowHeight,\n count\n}: {\n columns: ReturnType<\n ReturnType<typeof useDataTable>['table']['getVisibleLeafColumns']\n >;\n rowHeight: number;\n count: number;\n}) {\n return (\n <div className={styles.stickyLoaderContainer}>\n {Array.from({ length: count }).map((_, rowIndex) => (\n <div\n role='row'\n key={'loading-row-' + rowIndex}\n className={cx(styles.virtualRow, styles['row'], styles.loaderRow)}\n style={{ height: rowHeight }}\n >\n {columns.map((col, colIndex) => {\n const columnDef = col.columnDef as DataTableColumnDef<\n unknown,\n unknown\n >;\n return (\n <div\n role='cell'\n key={'loading-column-' + colIndex}\n className={cx(\n tableStyles.cell,\n styles.virtualCell,\n columnDef.classNames?.cell\n )}\n style={columnDef.styles?.cell}\n >\n <Skeleton containerClassName={styles['flex-1']} />\n </div>\n );\n })}\n </div>\n ))}\n </div>\n );\n}\n\nconst DefaultEmptyComponent = () => (\n <EmptyState icon={<TableIcon />} heading='No Data' />\n);\n\nexport function VirtualizedContent({\n rowHeight = 40,\n groupHeaderHeight,\n overscan = 5,\n loadMoreOffset = 100,\n emptyState,\n zeroState,\n classNames = {}\n}: VirtualizedContentProps) {\n const {\n onRowClick,\n table,\n isLoading,\n loadMoreData,\n tableQuery,\n defaultSort,\n loadingRowCount = 3\n } = useDataTable();\n\n const headerGroups = table?.getHeaderGroups();\n const rowModel = table?.getRowModel();\n const { rows = [] } = rowModel || {};\n\n const scrollContainerRef = useRef<HTMLDivElement | null>(null);\n\n const showLoaderRows = isLoading && rows.length > 0;\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollContainerRef.current,\n estimateSize: index => {\n const row = rows[index];\n const isGroupHeader = row?.subRows && row.subRows.length > 0;\n return isGroupHeader ? (groupHeaderHeight ?? rowHeight) : rowHeight;\n },\n overscan\n });\n\n const handleVirtualScroll = useCallback(() => {\n if (!scrollContainerRef.current || isLoading) return;\n const { scrollTop, scrollHeight, clientHeight } =\n scrollContainerRef.current;\n if (scrollHeight - scrollTop - clientHeight < loadMoreOffset) {\n loadMoreData();\n }\n }, [isLoading, loadMoreData, loadMoreOffset]);\n\n const totalHeight = virtualizer.getTotalSize();\n\n const hasData = rows?.length > 0 || isLoading;\n\n const hasChanges = hasActiveQuery(tableQuery || {}, defaultSort);\n\n const isZeroState = !hasData && !hasChanges;\n const isEmptyState = !hasData && hasChanges;\n\n const stateToShow: React.ReactNode = isZeroState\n ? (zeroState ?? emptyState ?? <DefaultEmptyComponent />)\n : isEmptyState\n ? (emptyState ?? <DefaultEmptyComponent />)\n : null;\n\n if (!hasData) {\n return <div className={classNames.root}>{stateToShow}</div>;\n }\n\n const visibleColumns = table.getVisibleLeafColumns();\n\n return (\n <div\n ref={scrollContainerRef}\n className={cx(classNames.root, styles.scrollContainer)}\n onScroll={handleVirtualScroll}\n >\n <div role='table' className={cx(styles.virtualTable, classNames.table)}>\n <VirtualHeaders\n headerGroups={headerGroups}\n className={cx(styles.stickyHeader, classNames.header)}\n />\n <div\n role='rowgroup'\n className={cx(styles.virtualBodyGroup, classNames.body)}\n style={{ height: totalHeight }}\n >\n <VirtualRows\n rows={rows}\n virtualizer={virtualizer}\n onRowClick={onRowClick}\n classNames={{\n row: classNames.row\n }}\n />\n </div>\n </div>\n {showLoaderRows && (\n <VirtualLoaderRows\n columns={visibleColumns}\n rowHeight={rowHeight}\n count={loadingRowCount}\n />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAsBA;;AAgBY;;;AAuBZ;AAEA;;AAiBA;AAEA;AAWE;;;AAIE;AAAU;AAEV;;AAEA;;AAGA;;;;;AAME;;AASF;AAeM;;AAkBF;AAGN;AACF;AAEA;AAWE;AAUU;;;AAuBZ;AAEA;AAIM;;AAmBJ;AACA;;AAGA;;;;AAME;;AAEE;AACA;AACA;;;AAGH;AAED;AACE;;;;AAIE;;;AAIJ;;;AAMA;AACA;;;AAIE;AACE;;;;;AAOJ;;;;AAqCF;;"}
|
|
1
|
+
{"version":3,"file":"virtualized-content.js","sources":["../../../../components/data-table/components/virtualized-content.tsx"],"sourcesContent":["'use client';\n\nimport { TableIcon } from '@radix-ui/react-icons';\nimport type { HeaderGroup, Row } from '@tanstack/react-table';\nimport { flexRender } from '@tanstack/react-table';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { cx } from 'class-variance-authority';\nimport { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport tableStyles from '~/components/table/table.module.css';\nimport { Badge } from '../../badge';\nimport { EmptyState } from '../../empty-state';\nimport { Flex } from '../../flex';\nimport { Skeleton } from '../../skeleton';\nimport styles from '../data-table.module.css';\nimport {\n DataTableColumnDef,\n defaultGroupOption,\n GroupedData,\n VirtualizedContentProps\n} from '../data-table.types';\nimport { useDataTable } from '../hooks/useDataTable';\nimport { hasActiveQuery } from '../utils';\n\nfunction VirtualHeaders<TData>({\n headerGroups = [],\n className = ''\n}: {\n headerGroups: HeaderGroup<TData>[];\n className?: string;\n}) {\n return (\n <div role='rowgroup' className={cx(styles.virtualHeaderGroup, className)}>\n {headerGroups?.map(headerGroup => (\n <div\n role='row'\n key={headerGroup?.id}\n className={styles.virtualHeaderRow}\n >\n {headerGroup?.headers?.map(header => {\n const columnDef = header.column.columnDef as DataTableColumnDef<\n TData,\n unknown\n >;\n return (\n <div\n role='columnheader'\n key={header.id}\n className={cx(\n tableStyles.head,\n styles.virtualHead,\n columnDef.classNames?.header\n )}\n style={columnDef.styles?.header}\n >\n {flexRender(columnDef.header, header.getContext())}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n );\n}\n\nfunction VirtualGroupHeader<TData>({\n data,\n style\n}: {\n data: GroupedData<TData>;\n style?: React.CSSProperties;\n}) {\n return (\n <div role='row' className={styles.virtualSectionHeader} style={style}>\n <Flex gap={3} align='center'>\n {data?.label}\n {data.showGroupCount ? (\n <Badge variant='neutral'>{data?.count}</Badge>\n ) : null}\n </Flex>\n </div>\n );\n}\n\nfunction VirtualRows<TData>({\n rows,\n virtualizer,\n onRowClick,\n classNames\n}: {\n rows: Row<TData>[];\n virtualizer: ReturnType<typeof useVirtualizer>;\n onRowClick?: (row: TData) => void;\n classNames?: { row?: string };\n}) {\n const items = virtualizer.getVirtualItems();\n\n return items.map((item, idx) => {\n const row = rows[item.index];\n if (!row) return null;\n\n const isSelected = row.getIsSelected();\n const cells = row.getVisibleCells() || [];\n const isGroupHeader = row.subRows && row.subRows.length > 0;\n const rowKey = row.id + '-' + item.index;\n\n const positionStyle: React.CSSProperties = {\n height: item.size,\n top: item.start\n };\n\n if (isGroupHeader) {\n return (\n <VirtualGroupHeader\n key={rowKey}\n data={row.original as GroupedData<unknown>}\n style={positionStyle}\n />\n );\n }\n\n return (\n <div\n role='row'\n key={rowKey}\n className={cx(\n styles.virtualRow,\n styles['row'],\n onRowClick ? styles['clickable'] : '',\n classNames?.row\n )}\n style={positionStyle}\n data-state={isSelected && 'selected'}\n onClick={() => onRowClick?.(row.original)}\n >\n {cells.map(cell => {\n const columnDef = cell.column.columnDef as DataTableColumnDef<\n TData,\n unknown\n >;\n return (\n <div\n role='cell'\n key={cell.id}\n className={cx(\n tableStyles.cell,\n styles.virtualCell,\n columnDef.classNames?.cell\n )}\n style={columnDef.styles?.cell}\n >\n {flexRender(columnDef.cell, cell.getContext())}\n </div>\n );\n })}\n </div>\n );\n });\n}\n\nfunction VirtualLoaderRows({\n columns,\n rowHeight,\n count\n}: {\n columns: ReturnType<\n ReturnType<typeof useDataTable>['table']['getVisibleLeafColumns']\n >;\n rowHeight: number;\n count: number;\n}) {\n return (\n <div className={styles.stickyLoaderContainer}>\n {Array.from({ length: count }).map((_, rowIndex) => (\n <div\n role='row'\n key={'loading-row-' + rowIndex}\n className={cx(styles.virtualRow, styles['row'], styles.loaderRow)}\n style={{ height: rowHeight }}\n >\n {columns.map((col, colIndex) => {\n const columnDef = col.columnDef as DataTableColumnDef<\n unknown,\n unknown\n >;\n return (\n <div\n role='cell'\n key={'loading-column-' + colIndex}\n className={cx(\n tableStyles.cell,\n styles.virtualCell,\n columnDef.classNames?.cell\n )}\n style={columnDef.styles?.cell}\n >\n <Skeleton containerClassName={styles['flex-1']} />\n </div>\n );\n })}\n </div>\n ))}\n </div>\n );\n}\n\nconst DefaultEmptyComponent = () => (\n <EmptyState icon={<TableIcon />} heading='No Data' />\n);\n\nexport function VirtualizedContent({\n rowHeight = 40,\n groupHeaderHeight,\n overscan = 5,\n loadMoreOffset = 100,\n emptyState,\n zeroState,\n classNames = {}\n}: VirtualizedContentProps) {\n const {\n onRowClick,\n table,\n isLoading,\n loadMoreData,\n tableQuery,\n defaultSort,\n loadingRowCount = 3,\n stickyGroupHeader = false\n } = useDataTable();\n\n const headerGroups = table?.getHeaderGroups();\n const rowModel = table?.getRowModel();\n const { rows = [] } = rowModel || {};\n\n const scrollContainerRef = useRef<HTMLDivElement | null>(null);\n const headerRef = useRef<HTMLDivElement | null>(null);\n const [stickyGroup, setStickyGroup] = useState<GroupedData<unknown> | null>(\n null\n );\n const [headerHeight, setHeaderHeight] = useState(40);\n\n const groupBy = tableQuery?.group_by?.[0];\n const isGrouped = Boolean(groupBy) && groupBy !== defaultGroupOption.id;\n\n const groupHeaderList = useMemo(() => {\n const list: { index: number; data: GroupedData<unknown> }[] = [];\n rows.forEach((row, i) => {\n if (row.subRows && row.subRows.length > 0) {\n list.push({ index: i, data: row.original as GroupedData<unknown> });\n }\n });\n return list;\n }, [rows]);\n\n const showLoaderRows = isLoading && rows.length > 0;\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => scrollContainerRef.current,\n estimateSize: index => {\n const row = rows[index];\n const isGroupHeader = row?.subRows && row.subRows.length > 0;\n return isGroupHeader ? (groupHeaderHeight ?? rowHeight) : rowHeight;\n },\n overscan\n });\n\n const updateStickyGroup = useCallback(() => {\n if (!stickyGroupHeader || !isGrouped || groupHeaderList.length === 0) {\n setStickyGroup(null);\n return;\n }\n const items = virtualizer.getVirtualItems();\n const firstIndex = items[0]?.index ?? 0;\n const current = groupHeaderList\n .filter(g => g.index <= firstIndex)\n .pop()?.data;\n setStickyGroup(current ?? null);\n }, [stickyGroupHeader, isGrouped, groupHeaderList, virtualizer]);\n\n const handleVirtualScroll = useCallback(() => {\n const el = scrollContainerRef.current;\n if (!el) return;\n if (stickyGroupHeader) updateStickyGroup();\n if (isLoading) return;\n const { scrollTop, scrollHeight, clientHeight } = el;\n if (scrollHeight - scrollTop - clientHeight < loadMoreOffset) {\n loadMoreData();\n }\n }, [\n stickyGroupHeader,\n isLoading,\n loadMoreData,\n loadMoreOffset,\n updateStickyGroup\n ]);\n\n const totalHeight = virtualizer.getTotalSize();\n\n useLayoutEffect(() => {\n if (headerRef.current) {\n setHeaderHeight(headerRef.current.getBoundingClientRect().height);\n }\n }, [headerGroups]);\n\n useLayoutEffect(() => {\n if (stickyGroupHeader) updateStickyGroup();\n }, [stickyGroupHeader, updateStickyGroup, groupHeaderList, isGrouped]);\n\n const hasData = rows?.length > 0 || isLoading;\n\n const hasChanges = hasActiveQuery(tableQuery || {}, defaultSort);\n\n const isZeroState = !hasData && !hasChanges;\n const isEmptyState = !hasData && hasChanges;\n\n const stateToShow: React.ReactNode = isZeroState\n ? (zeroState ?? emptyState ?? <DefaultEmptyComponent />)\n : isEmptyState\n ? (emptyState ?? <DefaultEmptyComponent />)\n : null;\n\n if (!hasData) {\n return <div className={classNames.root}>{stateToShow}</div>;\n }\n\n const visibleColumns = table.getVisibleLeafColumns();\n\n return (\n <div\n ref={scrollContainerRef}\n className={cx(classNames.root, styles.scrollContainer)}\n onScroll={handleVirtualScroll}\n >\n <div role='table' className={cx(styles.virtualTable, classNames.table)}>\n <div ref={headerRef}>\n <VirtualHeaders\n headerGroups={headerGroups}\n className={cx(styles.stickyHeader, classNames.header)}\n />\n </div>\n {stickyGroupHeader && isGrouped && stickyGroup && (\n <div\n role='row'\n className={styles.stickyGroupAnchor}\n style={{ top: headerHeight }}\n >\n <Flex gap={3} align='center'>\n {stickyGroup.label}\n {stickyGroup.showGroupCount ? (\n <Badge variant='neutral'>{stickyGroup.count}</Badge>\n ) : null}\n </Flex>\n </div>\n )}\n <div\n role='rowgroup'\n className={cx(styles.virtualBodyGroup, classNames.body)}\n style={{ height: totalHeight }}\n >\n <VirtualRows\n rows={rows}\n virtualizer={virtualizer}\n onRowClick={onRowClick}\n classNames={{\n row: classNames.row\n }}\n />\n </div>\n </div>\n {showLoaderRows && (\n <VirtualLoaderRows\n columns={visibleColumns}\n rowHeight={rowHeight}\n count={loadingRowCount}\n />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAuBA;;AAgBY;;;AAuBZ;AAEA;;AAiBA;AAEA;AAWE;;;AAIE;AAAU;AAEV;;AAEA;;AAGA;;;;;AAME;;AASF;AAeM;;AAkBF;AAGN;AACF;AAEA;AAWE;AAUU;;;AAuBZ;AAEA;AAIM;;AAoBJ;AACA;;AAGA;AACA;;;;AAOA;AAEA;;;AAGI;AACE;;AAEJ;AACA;AACF;;;;AAME;;AAEE;AACA;AACA;;;AAGH;AAED;AACE;;;;AAIA;;;;;AAKA;;AAGF;AACE;AACA;;AACA;AAAuB;AACvB;;;;AAGE;;AAEJ;;;;;;AAMC;AAED;;AAGE;;;AAGF;;AAGE;AAAuB;;;;AAOzB;AACA;;;AAIE;AACE;;;;;AAOJ;AAEA;;;AAmDF;;"}
|
|
@@ -14,7 +14,7 @@ var context = require('./context.cjs');
|
|
|
14
14
|
var dataTable_types = require('./data-table.types.cjs');
|
|
15
15
|
var index = require('./utils/index.cjs');
|
|
16
16
|
|
|
17
|
-
function DataTableRoot({ data = [], columns, query, mode = 'client', isLoading = false, loadingRowCount = 3, defaultSort, children, onTableQueryChange, onLoadMore, onRowClick, onColumnVisibilityChange }) {
|
|
17
|
+
function DataTableRoot({ data = [], columns, query, mode = 'client', isLoading = false, loadingRowCount = 3, defaultSort, children, onTableQueryChange, onLoadMore, onRowClick, onColumnVisibilityChange, stickyGroupHeader = false, getRowId }) {
|
|
18
18
|
const defaultTableQuery = React.useMemo(() => index.getDefaultTableQuery(defaultSort, query), [defaultSort, query]);
|
|
19
19
|
const initialColumnVisibility = index.getInitialColumnVisibility(columns);
|
|
20
20
|
const [columnVisibility, setColumnVisibility] = React.useState(initialColumnVisibility);
|
|
@@ -57,6 +57,7 @@ function DataTableRoot({ data = [], columns, query, mode = 'client', isLoading =
|
|
|
57
57
|
const table = reactTable.useReactTable({
|
|
58
58
|
data: groupedData,
|
|
59
59
|
columns: columnsWithFilters,
|
|
60
|
+
getRowId,
|
|
60
61
|
getCoreRowModel: reactTable.getCoreRowModel(),
|
|
61
62
|
getExpandedRowModel: reactTable.getExpandedRowModel(),
|
|
62
63
|
getSubRows: row => row?.subRows || [],
|
|
@@ -123,7 +124,8 @@ function DataTableRoot({ data = [], columns, query, mode = 'client', isLoading =
|
|
|
123
124
|
defaultSort,
|
|
124
125
|
loadingRowCount,
|
|
125
126
|
onRowClick,
|
|
126
|
-
shouldShowFilters
|
|
127
|
+
shouldShowFilters,
|
|
128
|
+
stickyGroupHeader
|
|
127
129
|
};
|
|
128
130
|
}, [
|
|
129
131
|
table,
|
|
@@ -137,7 +139,8 @@ function DataTableRoot({ data = [], columns, query, mode = 'client', isLoading =
|
|
|
137
139
|
defaultSort,
|
|
138
140
|
loadingRowCount,
|
|
139
141
|
onRowClick,
|
|
140
|
-
shouldShowFilters
|
|
142
|
+
shouldShowFilters,
|
|
143
|
+
stickyGroupHeader
|
|
141
144
|
]);
|
|
142
145
|
return (jsxRuntime.jsx(context.TableContext.Provider, { value: contextValue, children: children }));
|
|
143
146
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.cjs","sources":["../../../components/data-table/data-table.tsx"],"sourcesContent":["'use client';\n\nimport {\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n Updater,\n useReactTable,\n VisibilityState\n} from '@tanstack/react-table';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Content } from './components/content';\nimport { DisplaySettings } from './components/display-settings';\nimport { Filters } from './components/filters';\nimport { TableSearch } from './components/search';\nimport { Toolbar } from './components/toolbar';\nimport { VirtualizedContent } from './components/virtualized-content';\nimport { TableContext } from './context';\nimport {\n DataTableProps,\n defaultGroupOption,\n GroupedData,\n InternalQuery,\n TableContextType,\n TableQueryUpdateFn\n} from './data-table.types';\nimport {\n getColumnsWithFilterFn,\n getDefaultTableQuery,\n getInitialColumnVisibility,\n groupData,\n hasQueryChanged,\n queryToTableState,\n transformToDataTableQuery\n} from './utils';\n\nfunction DataTableRoot<TData, TValue>({\n data = [],\n columns,\n query,\n mode = 'client',\n isLoading = false,\n loadingRowCount = 3,\n defaultSort,\n children,\n onTableQueryChange,\n onLoadMore,\n onRowClick,\n onColumnVisibilityChange\n}: React.PropsWithChildren<DataTableProps<TData, TValue>>) {\n const defaultTableQuery = useMemo(\n () => getDefaultTableQuery(defaultSort, query),\n [defaultSort, query]\n );\n const initialColumnVisibility = getInitialColumnVisibility(columns);\n\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n initialColumnVisibility\n );\n const handleColumnVisibilityChange = useCallback(\n (value: Updater<VisibilityState>) => {\n setColumnVisibility(prev => {\n const newValue = typeof value === 'function' ? value(prev) : value;\n onColumnVisibilityChange?.(newValue);\n return newValue;\n });\n },\n [onColumnVisibilityChange]\n );\n\n const [tableQuery, setTableQuery] =\n useState<InternalQuery>(defaultTableQuery);\n\n const oldQueryRef = useRef<InternalQuery | null>(null);\n\n const reactTableState = useMemo(\n () => queryToTableState(tableQuery),\n [tableQuery]\n );\n\n const onDisplaySettingsReset = useCallback(() => {\n setTableQuery(prev => ({\n ...prev,\n ...defaultTableQuery,\n sort: [defaultSort],\n group_by: [defaultGroupOption.id]\n }));\n handleColumnVisibilityChange(initialColumnVisibility);\n }, [\n defaultSort,\n defaultTableQuery,\n initialColumnVisibility,\n handleColumnVisibilityChange\n ]);\n\n const group_by = tableQuery.group_by?.[0];\n\n const columnsWithFilters = useMemo(\n () => getColumnsWithFilterFn<TData, TValue>(columns, tableQuery.filters),\n [columns, tableQuery.filters]\n );\n\n const groupedData = useMemo(\n () => groupData(data, group_by, columns),\n [data, group_by, columns]\n );\n\n useEffect(() => {\n if (\n tableQuery &&\n onTableQueryChange &&\n hasQueryChanged(oldQueryRef.current, tableQuery) &&\n mode === 'server'\n ) {\n onTableQueryChange(transformToDataTableQuery(tableQuery));\n oldQueryRef.current = tableQuery;\n }\n }, [tableQuery, onTableQueryChange]);\n\n const table = useReactTable({\n data: groupedData as unknown as TData[],\n columns: columnsWithFilters,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getSubRows: row => (row as unknown as GroupedData<TData>)?.subRows || [],\n getSortedRowModel: mode === 'server' ? undefined : getSortedRowModel(),\n getFilteredRowModel: mode === 'server' ? undefined : getFilteredRowModel(),\n manualSorting: mode === 'server',\n manualFiltering: mode === 'server',\n onColumnVisibilityChange: handleColumnVisibilityChange,\n globalFilterFn: mode === 'server' ? undefined : 'auto',\n initialState: {\n columnVisibility: initialColumnVisibility\n },\n filterFromLeafRows: true,\n state: {\n ...reactTableState,\n columnVisibility: columnVisibility,\n expanded:\n group_by && group_by !== defaultGroupOption.id ? true : undefined\n }\n });\n\n function updateTableQuery(fn: TableQueryUpdateFn) {\n setTableQuery(prev => fn(prev));\n }\n\n const loadMoreData = useCallback(() => {\n if (mode === 'server' && onLoadMore) {\n onLoadMore();\n }\n }, [mode, onLoadMore]);\n\n const searchQuery = query?.search;\n useEffect(() => {\n if (searchQuery) {\n updateTableQuery(prev => ({\n ...prev,\n search: searchQuery\n }));\n }\n }, [searchQuery]);\n\n // Determine if filters should be visible\n // Filters should be visible if there is data OR if filters are applied (empty state)\n // Filters should NOT be visible if no data AND no filters (zero state)\n // Note: Search alone does not show the filter bar\n const shouldShowFilters = useMemo(() => {\n const hasFilters = tableQuery?.filters && tableQuery.filters.length > 0;\n\n try {\n const rowModel = table.getRowModel();\n const hasData = (rowModel?.rows?.length ?? 0) > 0;\n return hasData || hasFilters;\n } catch {\n // If table is not ready yet, check if we have initial data\n // If no filters and no data, don't show filters\n return hasFilters || data.length > 0;\n }\n }, [table, tableQuery, data.length]);\n\n const contextValue: TableContextType<TData, TValue> = useMemo(() => {\n return {\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters\n };\n }, [\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters\n ]);\n\n return (\n <TableContext.Provider value={contextValue}>\n {children}\n </TableContext.Provider>\n );\n}\n\nexport const DataTable = Object.assign(DataTableRoot, {\n Content: Content,\n VirtualizedContent: VirtualizedContent,\n Toolbar: Toolbar,\n Search: TableSearch,\n Filters: Filters,\n DisplayControls: DisplaySettings\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqCA;;
|
|
1
|
+
{"version":3,"file":"data-table.cjs","sources":["../../../components/data-table/data-table.tsx"],"sourcesContent":["'use client';\n\nimport {\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n Updater,\n useReactTable,\n VisibilityState\n} from '@tanstack/react-table';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Content } from './components/content';\nimport { DisplaySettings } from './components/display-settings';\nimport { Filters } from './components/filters';\nimport { TableSearch } from './components/search';\nimport { Toolbar } from './components/toolbar';\nimport { VirtualizedContent } from './components/virtualized-content';\nimport { TableContext } from './context';\nimport {\n DataTableProps,\n defaultGroupOption,\n GroupedData,\n InternalQuery,\n TableContextType,\n TableQueryUpdateFn\n} from './data-table.types';\nimport {\n getColumnsWithFilterFn,\n getDefaultTableQuery,\n getInitialColumnVisibility,\n groupData,\n hasQueryChanged,\n queryToTableState,\n transformToDataTableQuery\n} from './utils';\n\nfunction DataTableRoot<TData, TValue>({\n data = [],\n columns,\n query,\n mode = 'client',\n isLoading = false,\n loadingRowCount = 3,\n defaultSort,\n children,\n onTableQueryChange,\n onLoadMore,\n onRowClick,\n onColumnVisibilityChange,\n stickyGroupHeader = false,\n getRowId\n}: React.PropsWithChildren<DataTableProps<TData, TValue>>) {\n const defaultTableQuery = useMemo(\n () => getDefaultTableQuery(defaultSort, query),\n [defaultSort, query]\n );\n const initialColumnVisibility = getInitialColumnVisibility(columns);\n\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n initialColumnVisibility\n );\n const handleColumnVisibilityChange = useCallback(\n (value: Updater<VisibilityState>) => {\n setColumnVisibility(prev => {\n const newValue = typeof value === 'function' ? value(prev) : value;\n onColumnVisibilityChange?.(newValue);\n return newValue;\n });\n },\n [onColumnVisibilityChange]\n );\n\n const [tableQuery, setTableQuery] =\n useState<InternalQuery>(defaultTableQuery);\n\n const oldQueryRef = useRef<InternalQuery | null>(null);\n\n const reactTableState = useMemo(\n () => queryToTableState(tableQuery),\n [tableQuery]\n );\n\n const onDisplaySettingsReset = useCallback(() => {\n setTableQuery(prev => ({\n ...prev,\n ...defaultTableQuery,\n sort: [defaultSort],\n group_by: [defaultGroupOption.id]\n }));\n handleColumnVisibilityChange(initialColumnVisibility);\n }, [\n defaultSort,\n defaultTableQuery,\n initialColumnVisibility,\n handleColumnVisibilityChange\n ]);\n\n const group_by = tableQuery.group_by?.[0];\n\n const columnsWithFilters = useMemo(\n () => getColumnsWithFilterFn<TData, TValue>(columns, tableQuery.filters),\n [columns, tableQuery.filters]\n );\n\n const groupedData = useMemo(\n () => groupData(data, group_by, columns),\n [data, group_by, columns]\n );\n\n useEffect(() => {\n if (\n tableQuery &&\n onTableQueryChange &&\n hasQueryChanged(oldQueryRef.current, tableQuery) &&\n mode === 'server'\n ) {\n onTableQueryChange(transformToDataTableQuery(tableQuery));\n oldQueryRef.current = tableQuery;\n }\n }, [tableQuery, onTableQueryChange]);\n\n const table = useReactTable({\n data: groupedData as unknown as TData[],\n columns: columnsWithFilters,\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getSubRows: row => (row as unknown as GroupedData<TData>)?.subRows || [],\n getSortedRowModel: mode === 'server' ? undefined : getSortedRowModel(),\n getFilteredRowModel: mode === 'server' ? undefined : getFilteredRowModel(),\n manualSorting: mode === 'server',\n manualFiltering: mode === 'server',\n onColumnVisibilityChange: handleColumnVisibilityChange,\n globalFilterFn: mode === 'server' ? undefined : 'auto',\n initialState: {\n columnVisibility: initialColumnVisibility\n },\n filterFromLeafRows: true,\n state: {\n ...reactTableState,\n columnVisibility: columnVisibility,\n expanded:\n group_by && group_by !== defaultGroupOption.id ? true : undefined\n }\n });\n\n function updateTableQuery(fn: TableQueryUpdateFn) {\n setTableQuery(prev => fn(prev));\n }\n\n const loadMoreData = useCallback(() => {\n if (mode === 'server' && onLoadMore) {\n onLoadMore();\n }\n }, [mode, onLoadMore]);\n\n const searchQuery = query?.search;\n useEffect(() => {\n if (searchQuery) {\n updateTableQuery(prev => ({\n ...prev,\n search: searchQuery\n }));\n }\n }, [searchQuery]);\n\n // Determine if filters should be visible\n // Filters should be visible if there is data OR if filters are applied (empty state)\n // Filters should NOT be visible if no data AND no filters (zero state)\n // Note: Search alone does not show the filter bar\n const shouldShowFilters = useMemo(() => {\n const hasFilters = tableQuery?.filters && tableQuery.filters.length > 0;\n\n try {\n const rowModel = table.getRowModel();\n const hasData = (rowModel?.rows?.length ?? 0) > 0;\n return hasData || hasFilters;\n } catch {\n // If table is not ready yet, check if we have initial data\n // If no filters and no data, don't show filters\n return hasFilters || data.length > 0;\n }\n }, [table, tableQuery, data.length]);\n\n const contextValue: TableContextType<TData, TValue> = useMemo(() => {\n return {\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters,\n stickyGroupHeader\n };\n }, [\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters,\n stickyGroupHeader\n ]);\n\n return (\n <TableContext.Provider value={contextValue}>\n {children}\n </TableContext.Provider>\n );\n}\n\nexport const DataTable = Object.assign(DataTableRoot, {\n Content: Content,\n VirtualizedContent: VirtualizedContent,\n Toolbar: Toolbar,\n Search: TableSearch,\n Filters: Filters,\n DisplayControls: DisplaySettings\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqCA;;AAoBE;;AAKA;;AAGM;AACA;AACA;AACF;AACF;;AAOF;AAEA;AAKA;AACE;AACE;AACA;;AAEA;AACD;;AAEH;;;;;AAKC;;;;;AAeC;;AAGE;;AAGA;AACA;;AAEJ;;AAGE;AACA;;;;;AAKA;AACA;;;AAGA;;AAEA;AACE;AACD;AACD;AACA;AACE;AACA;AACA;AAED;AACF;;;;AAMD;AACE;AACE;;AAEJ;AAEA;;;AAGI;AACE;AACA;AACD;;AAEL;;;;;AAMA;AACE;AAEA;AACE;AACA;;;AAEA;;;AAGA;;;AAIJ;;;;;;;;;;;;;;;;AAgBA;;;;;;;;;;;;;;AAcC;AAED;AAKF;;AAGE;AACA;AACA;AACA;AACA;AACA;AACD;;"}
|
|
@@ -4,7 +4,7 @@ import { Filters } from './components/filters';
|
|
|
4
4
|
import { Toolbar } from './components/toolbar';
|
|
5
5
|
import { VirtualizedContent } from './components/virtualized-content';
|
|
6
6
|
import { DataTableProps } from './data-table.types';
|
|
7
|
-
declare function DataTableRoot<TData, TValue>({ data, columns, query, mode, isLoading, loadingRowCount, defaultSort, children, onTableQueryChange, onLoadMore, onRowClick, onColumnVisibilityChange }: React.PropsWithChildren<DataTableProps<TData, TValue>>): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
declare function DataTableRoot<TData, TValue>({ data, columns, query, mode, isLoading, loadingRowCount, defaultSort, children, onTableQueryChange, onLoadMore, onRowClick, onColumnVisibilityChange, stickyGroupHeader, getRowId }: React.PropsWithChildren<DataTableProps<TData, TValue>>): import("react/jsx-runtime").JSX.Element;
|
|
8
8
|
export declare const DataTable: typeof DataTableRoot & {
|
|
9
9
|
Content: typeof Content;
|
|
10
10
|
VirtualizedContent: typeof VirtualizedContent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../../components/data-table/data-table.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EACL,cAAc,EAMf,MAAM,oBAAoB,CAAC;AAW5B,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EACpC,IAAS,EACT,OAAO,EACP,KAAK,EACL,IAAe,EACf,SAAiB,EACjB,eAAmB,EACnB,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,wBAAwB,EACzB,EAAE,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../../components/data-table/data-table.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EACL,cAAc,EAMf,MAAM,oBAAoB,CAAC;AAW5B,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EACpC,IAAS,EACT,OAAO,EACP,KAAK,EACL,IAAe,EACf,SAAiB,EACjB,eAAmB,EACnB,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,wBAAwB,EACxB,iBAAyB,EACzB,QAAQ,EACT,EAAE,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,2CA0KxD;AAED,eAAO,MAAM,SAAS;;;;;;;CAOpB,CAAC"}
|
|
@@ -12,7 +12,7 @@ import { TableContext } from './context.js';
|
|
|
12
12
|
import { defaultGroupOption } from './data-table.types.js';
|
|
13
13
|
import { getDefaultTableQuery, getInitialColumnVisibility, queryToTableState, getColumnsWithFilterFn, groupData, hasQueryChanged, transformToDataTableQuery } from './utils/index.js';
|
|
14
14
|
|
|
15
|
-
function DataTableRoot({ data = [], columns, query, mode = 'client', isLoading = false, loadingRowCount = 3, defaultSort, children, onTableQueryChange, onLoadMore, onRowClick, onColumnVisibilityChange }) {
|
|
15
|
+
function DataTableRoot({ data = [], columns, query, mode = 'client', isLoading = false, loadingRowCount = 3, defaultSort, children, onTableQueryChange, onLoadMore, onRowClick, onColumnVisibilityChange, stickyGroupHeader = false, getRowId }) {
|
|
16
16
|
const defaultTableQuery = useMemo(() => getDefaultTableQuery(defaultSort, query), [defaultSort, query]);
|
|
17
17
|
const initialColumnVisibility = getInitialColumnVisibility(columns);
|
|
18
18
|
const [columnVisibility, setColumnVisibility] = useState(initialColumnVisibility);
|
|
@@ -55,6 +55,7 @@ function DataTableRoot({ data = [], columns, query, mode = 'client', isLoading =
|
|
|
55
55
|
const table = useReactTable({
|
|
56
56
|
data: groupedData,
|
|
57
57
|
columns: columnsWithFilters,
|
|
58
|
+
getRowId,
|
|
58
59
|
getCoreRowModel: getCoreRowModel(),
|
|
59
60
|
getExpandedRowModel: getExpandedRowModel(),
|
|
60
61
|
getSubRows: row => row?.subRows || [],
|
|
@@ -121,7 +122,8 @@ function DataTableRoot({ data = [], columns, query, mode = 'client', isLoading =
|
|
|
121
122
|
defaultSort,
|
|
122
123
|
loadingRowCount,
|
|
123
124
|
onRowClick,
|
|
124
|
-
shouldShowFilters
|
|
125
|
+
shouldShowFilters,
|
|
126
|
+
stickyGroupHeader
|
|
125
127
|
};
|
|
126
128
|
}, [
|
|
127
129
|
table,
|
|
@@ -135,7 +137,8 @@ function DataTableRoot({ data = [], columns, query, mode = 'client', isLoading =
|
|
|
135
137
|
defaultSort,
|
|
136
138
|
loadingRowCount,
|
|
137
139
|
onRowClick,
|
|
138
|
-
shouldShowFilters
|
|
140
|
+
shouldShowFilters,
|
|
141
|
+
stickyGroupHeader
|
|
139
142
|
]);
|
|
140
143
|
return (jsx(TableContext.Provider, { value: contextValue, children: children }));
|
|
141
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.js","sources":["../../../components/data-table/data-table.tsx"],"sourcesContent":["'use client';\n\nimport {\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n Updater,\n useReactTable,\n VisibilityState\n} from '@tanstack/react-table';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Content } from './components/content';\nimport { DisplaySettings } from './components/display-settings';\nimport { Filters } from './components/filters';\nimport { TableSearch } from './components/search';\nimport { Toolbar } from './components/toolbar';\nimport { VirtualizedContent } from './components/virtualized-content';\nimport { TableContext } from './context';\nimport {\n DataTableProps,\n defaultGroupOption,\n GroupedData,\n InternalQuery,\n TableContextType,\n TableQueryUpdateFn\n} from './data-table.types';\nimport {\n getColumnsWithFilterFn,\n getDefaultTableQuery,\n getInitialColumnVisibility,\n groupData,\n hasQueryChanged,\n queryToTableState,\n transformToDataTableQuery\n} from './utils';\n\nfunction DataTableRoot<TData, TValue>({\n data = [],\n columns,\n query,\n mode = 'client',\n isLoading = false,\n loadingRowCount = 3,\n defaultSort,\n children,\n onTableQueryChange,\n onLoadMore,\n onRowClick,\n onColumnVisibilityChange\n}: React.PropsWithChildren<DataTableProps<TData, TValue>>) {\n const defaultTableQuery = useMemo(\n () => getDefaultTableQuery(defaultSort, query),\n [defaultSort, query]\n );\n const initialColumnVisibility = getInitialColumnVisibility(columns);\n\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n initialColumnVisibility\n );\n const handleColumnVisibilityChange = useCallback(\n (value: Updater<VisibilityState>) => {\n setColumnVisibility(prev => {\n const newValue = typeof value === 'function' ? value(prev) : value;\n onColumnVisibilityChange?.(newValue);\n return newValue;\n });\n },\n [onColumnVisibilityChange]\n );\n\n const [tableQuery, setTableQuery] =\n useState<InternalQuery>(defaultTableQuery);\n\n const oldQueryRef = useRef<InternalQuery | null>(null);\n\n const reactTableState = useMemo(\n () => queryToTableState(tableQuery),\n [tableQuery]\n );\n\n const onDisplaySettingsReset = useCallback(() => {\n setTableQuery(prev => ({\n ...prev,\n ...defaultTableQuery,\n sort: [defaultSort],\n group_by: [defaultGroupOption.id]\n }));\n handleColumnVisibilityChange(initialColumnVisibility);\n }, [\n defaultSort,\n defaultTableQuery,\n initialColumnVisibility,\n handleColumnVisibilityChange\n ]);\n\n const group_by = tableQuery.group_by?.[0];\n\n const columnsWithFilters = useMemo(\n () => getColumnsWithFilterFn<TData, TValue>(columns, tableQuery.filters),\n [columns, tableQuery.filters]\n );\n\n const groupedData = useMemo(\n () => groupData(data, group_by, columns),\n [data, group_by, columns]\n );\n\n useEffect(() => {\n if (\n tableQuery &&\n onTableQueryChange &&\n hasQueryChanged(oldQueryRef.current, tableQuery) &&\n mode === 'server'\n ) {\n onTableQueryChange(transformToDataTableQuery(tableQuery));\n oldQueryRef.current = tableQuery;\n }\n }, [tableQuery, onTableQueryChange]);\n\n const table = useReactTable({\n data: groupedData as unknown as TData[],\n columns: columnsWithFilters,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getSubRows: row => (row as unknown as GroupedData<TData>)?.subRows || [],\n getSortedRowModel: mode === 'server' ? undefined : getSortedRowModel(),\n getFilteredRowModel: mode === 'server' ? undefined : getFilteredRowModel(),\n manualSorting: mode === 'server',\n manualFiltering: mode === 'server',\n onColumnVisibilityChange: handleColumnVisibilityChange,\n globalFilterFn: mode === 'server' ? undefined : 'auto',\n initialState: {\n columnVisibility: initialColumnVisibility\n },\n filterFromLeafRows: true,\n state: {\n ...reactTableState,\n columnVisibility: columnVisibility,\n expanded:\n group_by && group_by !== defaultGroupOption.id ? true : undefined\n }\n });\n\n function updateTableQuery(fn: TableQueryUpdateFn) {\n setTableQuery(prev => fn(prev));\n }\n\n const loadMoreData = useCallback(() => {\n if (mode === 'server' && onLoadMore) {\n onLoadMore();\n }\n }, [mode, onLoadMore]);\n\n const searchQuery = query?.search;\n useEffect(() => {\n if (searchQuery) {\n updateTableQuery(prev => ({\n ...prev,\n search: searchQuery\n }));\n }\n }, [searchQuery]);\n\n // Determine if filters should be visible\n // Filters should be visible if there is data OR if filters are applied (empty state)\n // Filters should NOT be visible if no data AND no filters (zero state)\n // Note: Search alone does not show the filter bar\n const shouldShowFilters = useMemo(() => {\n const hasFilters = tableQuery?.filters && tableQuery.filters.length > 0;\n\n try {\n const rowModel = table.getRowModel();\n const hasData = (rowModel?.rows?.length ?? 0) > 0;\n return hasData || hasFilters;\n } catch {\n // If table is not ready yet, check if we have initial data\n // If no filters and no data, don't show filters\n return hasFilters || data.length > 0;\n }\n }, [table, tableQuery, data.length]);\n\n const contextValue: TableContextType<TData, TValue> = useMemo(() => {\n return {\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters\n };\n }, [\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters\n ]);\n\n return (\n <TableContext.Provider value={contextValue}>\n {children}\n </TableContext.Provider>\n );\n}\n\nexport const DataTable = Object.assign(DataTableRoot, {\n Content: Content,\n VirtualizedContent: VirtualizedContent,\n Toolbar: Toolbar,\n Search: TableSearch,\n Filters: Filters,\n DisplayControls: DisplaySettings\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAqCA;;
|
|
1
|
+
{"version":3,"file":"data-table.js","sources":["../../../components/data-table/data-table.tsx"],"sourcesContent":["'use client';\n\nimport {\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n Updater,\n useReactTable,\n VisibilityState\n} from '@tanstack/react-table';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Content } from './components/content';\nimport { DisplaySettings } from './components/display-settings';\nimport { Filters } from './components/filters';\nimport { TableSearch } from './components/search';\nimport { Toolbar } from './components/toolbar';\nimport { VirtualizedContent } from './components/virtualized-content';\nimport { TableContext } from './context';\nimport {\n DataTableProps,\n defaultGroupOption,\n GroupedData,\n InternalQuery,\n TableContextType,\n TableQueryUpdateFn\n} from './data-table.types';\nimport {\n getColumnsWithFilterFn,\n getDefaultTableQuery,\n getInitialColumnVisibility,\n groupData,\n hasQueryChanged,\n queryToTableState,\n transformToDataTableQuery\n} from './utils';\n\nfunction DataTableRoot<TData, TValue>({\n data = [],\n columns,\n query,\n mode = 'client',\n isLoading = false,\n loadingRowCount = 3,\n defaultSort,\n children,\n onTableQueryChange,\n onLoadMore,\n onRowClick,\n onColumnVisibilityChange,\n stickyGroupHeader = false,\n getRowId\n}: React.PropsWithChildren<DataTableProps<TData, TValue>>) {\n const defaultTableQuery = useMemo(\n () => getDefaultTableQuery(defaultSort, query),\n [defaultSort, query]\n );\n const initialColumnVisibility = getInitialColumnVisibility(columns);\n\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n initialColumnVisibility\n );\n const handleColumnVisibilityChange = useCallback(\n (value: Updater<VisibilityState>) => {\n setColumnVisibility(prev => {\n const newValue = typeof value === 'function' ? value(prev) : value;\n onColumnVisibilityChange?.(newValue);\n return newValue;\n });\n },\n [onColumnVisibilityChange]\n );\n\n const [tableQuery, setTableQuery] =\n useState<InternalQuery>(defaultTableQuery);\n\n const oldQueryRef = useRef<InternalQuery | null>(null);\n\n const reactTableState = useMemo(\n () => queryToTableState(tableQuery),\n [tableQuery]\n );\n\n const onDisplaySettingsReset = useCallback(() => {\n setTableQuery(prev => ({\n ...prev,\n ...defaultTableQuery,\n sort: [defaultSort],\n group_by: [defaultGroupOption.id]\n }));\n handleColumnVisibilityChange(initialColumnVisibility);\n }, [\n defaultSort,\n defaultTableQuery,\n initialColumnVisibility,\n handleColumnVisibilityChange\n ]);\n\n const group_by = tableQuery.group_by?.[0];\n\n const columnsWithFilters = useMemo(\n () => getColumnsWithFilterFn<TData, TValue>(columns, tableQuery.filters),\n [columns, tableQuery.filters]\n );\n\n const groupedData = useMemo(\n () => groupData(data, group_by, columns),\n [data, group_by, columns]\n );\n\n useEffect(() => {\n if (\n tableQuery &&\n onTableQueryChange &&\n hasQueryChanged(oldQueryRef.current, tableQuery) &&\n mode === 'server'\n ) {\n onTableQueryChange(transformToDataTableQuery(tableQuery));\n oldQueryRef.current = tableQuery;\n }\n }, [tableQuery, onTableQueryChange]);\n\n const table = useReactTable({\n data: groupedData as unknown as TData[],\n columns: columnsWithFilters,\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getSubRows: row => (row as unknown as GroupedData<TData>)?.subRows || [],\n getSortedRowModel: mode === 'server' ? undefined : getSortedRowModel(),\n getFilteredRowModel: mode === 'server' ? undefined : getFilteredRowModel(),\n manualSorting: mode === 'server',\n manualFiltering: mode === 'server',\n onColumnVisibilityChange: handleColumnVisibilityChange,\n globalFilterFn: mode === 'server' ? undefined : 'auto',\n initialState: {\n columnVisibility: initialColumnVisibility\n },\n filterFromLeafRows: true,\n state: {\n ...reactTableState,\n columnVisibility: columnVisibility,\n expanded:\n group_by && group_by !== defaultGroupOption.id ? true : undefined\n }\n });\n\n function updateTableQuery(fn: TableQueryUpdateFn) {\n setTableQuery(prev => fn(prev));\n }\n\n const loadMoreData = useCallback(() => {\n if (mode === 'server' && onLoadMore) {\n onLoadMore();\n }\n }, [mode, onLoadMore]);\n\n const searchQuery = query?.search;\n useEffect(() => {\n if (searchQuery) {\n updateTableQuery(prev => ({\n ...prev,\n search: searchQuery\n }));\n }\n }, [searchQuery]);\n\n // Determine if filters should be visible\n // Filters should be visible if there is data OR if filters are applied (empty state)\n // Filters should NOT be visible if no data AND no filters (zero state)\n // Note: Search alone does not show the filter bar\n const shouldShowFilters = useMemo(() => {\n const hasFilters = tableQuery?.filters && tableQuery.filters.length > 0;\n\n try {\n const rowModel = table.getRowModel();\n const hasData = (rowModel?.rows?.length ?? 0) > 0;\n return hasData || hasFilters;\n } catch {\n // If table is not ready yet, check if we have initial data\n // If no filters and no data, don't show filters\n return hasFilters || data.length > 0;\n }\n }, [table, tableQuery, data.length]);\n\n const contextValue: TableContextType<TData, TValue> = useMemo(() => {\n return {\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters,\n stickyGroupHeader\n };\n }, [\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters,\n stickyGroupHeader\n ]);\n\n return (\n <TableContext.Provider value={contextValue}>\n {children}\n </TableContext.Provider>\n );\n}\n\nexport const DataTable = Object.assign(DataTableRoot, {\n Content: Content,\n VirtualizedContent: VirtualizedContent,\n Toolbar: Toolbar,\n Search: TableSearch,\n Filters: Filters,\n DisplayControls: DisplaySettings\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAqCA;;AAoBE;;AAKA;;AAGM;AACA;AACA;AACF;AACF;;AAOF;AAEA;AAKA;AACE;AACE;AACA;;AAEA;AACD;;AAEH;;;;;AAKC;;;;;AAeC;;AAGE;;AAGA;AACA;;AAEJ;;AAGE;AACA;;;;;AAKA;AACA;;;AAGA;;AAEA;AACE;AACD;AACD;AACA;AACE;AACA;AACA;AAED;AACF;;;;AAMD;AACE;AACE;;AAEJ;AAEA;;;AAGI;AACE;AACA;AACD;;AAEL;;;;;AAMA;AACE;AAEA;AACE;AACA;;;AAEA;;;AAGA;;;AAIJ;;;;;;;;;;;;;;;;AAgBA;;;;;;;;;;;;;;AAcC;AAED;AAKF;;AAGE;AACA;AACA;AACA;AACA;AACA;AACD;;"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var styles = {"toolbar":"data-table-module_toolbar__SsniX","display-popover-content":"data-table-module_display-popover-content__fyCAs","display-popover-properties-container":"data-table-module_display-popover-properties-container__5d1QY","display-popover-properties-select":"data-table-module_display-popover-properties-select__XCZFA","display-popover-reset-container":"data-table-module_display-popover-reset-container__EO-tX","display-popover-sort-icon":"data-table-module_display-popover-sort-icon__qS4Tv","flex-1":"data-table-module_flex-1__bRXzB","contentRoot":"data-table-module_contentRoot__SFof5","row":"data-table-module_row__TqG9x","clickable":"data-table-module_clickable__BGrE5","head":"data-table-module_head__xUe2x","cell":"data-table-module_cell__YNzml","emptyStateCell":"data-table-module_emptyStateCell__icRK5","scrollContainer":"data-table-module_scrollContainer__eKR0-","stickyHeader":"data-table-module_stickyHeader__hWOCt","virtualTable":"data-table-module_virtualTable__GB8Q0","virtualHeaderGroup":"data-table-module_virtualHeaderGroup__dhJXA","virtualHeaderRow":"data-table-module_virtualHeaderRow__LqMog","virtualBodyGroup":"data-table-module_virtualBodyGroup__xlRy5","virtualRow":"data-table-module_virtualRow__dIERR","virtualHead":"data-table-module_virtualHead__Xt-ov","virtualCell":"data-table-module_virtualCell__8i2Lt","virtualSectionHeader":"data-table-module_virtualSectionHeader__rsMjl","stickyLoaderContainer":"data-table-module_stickyLoaderContainer__ueYwH","loaderRow":"data-table-module_loaderRow__yivkT","display___popover___content":"data-table-module_display-popover-content__fyCAs","display___popover___properties___container":"data-table-module_display-popover-properties-container__5d1QY","display___popover___properties___select":"data-table-module_display-popover-properties-select__XCZFA","display___popover___reset___container":"data-table-module_display-popover-reset-container__EO-tX","display___popover___sort___icon":"data-table-module_display-popover-sort-icon__qS4Tv","flex___1":"data-table-module_flex-1__bRXzB"};
|
|
5
|
+
var styles = {"toolbar":"data-table-module_toolbar__SsniX","display-popover-content":"data-table-module_display-popover-content__fyCAs","display-popover-properties-container":"data-table-module_display-popover-properties-container__5d1QY","display-popover-properties-select":"data-table-module_display-popover-properties-select__XCZFA","display-popover-reset-container":"data-table-module_display-popover-reset-container__EO-tX","display-popover-sort-icon":"data-table-module_display-popover-sort-icon__qS4Tv","flex-1":"data-table-module_flex-1__bRXzB","contentRoot":"data-table-module_contentRoot__SFof5","row":"data-table-module_row__TqG9x","clickable":"data-table-module_clickable__BGrE5","head":"data-table-module_head__xUe2x","cell":"data-table-module_cell__YNzml","emptyStateCell":"data-table-module_emptyStateCell__icRK5","scrollContainer":"data-table-module_scrollContainer__eKR0-","stickyHeader":"data-table-module_stickyHeader__hWOCt","virtualTable":"data-table-module_virtualTable__GB8Q0","virtualHeaderGroup":"data-table-module_virtualHeaderGroup__dhJXA","virtualHeaderRow":"data-table-module_virtualHeaderRow__LqMog","virtualBodyGroup":"data-table-module_virtualBodyGroup__xlRy5","virtualRow":"data-table-module_virtualRow__dIERR","virtualHead":"data-table-module_virtualHead__Xt-ov","virtualCell":"data-table-module_virtualCell__8i2Lt","virtualSectionHeader":"data-table-module_virtualSectionHeader__rsMjl","stickyGroupAnchor":"data-table-module_stickyGroupAnchor__T-OZ3","stickyLoaderContainer":"data-table-module_stickyLoaderContainer__ueYwH","loaderRow":"data-table-module_loaderRow__yivkT","stickySectionHeader":"data-table-module_stickySectionHeader__CdMzK","display___popover___content":"data-table-module_display-popover-content__fyCAs","display___popover___properties___container":"data-table-module_display-popover-properties-container__5d1QY","display___popover___properties___select":"data-table-module_display-popover-properties-select__XCZFA","display___popover___reset___container":"data-table-module_display-popover-reset-container__EO-tX","display___popover___sort___icon":"data-table-module_display-popover-sort-icon__qS4Tv","flex___1":"data-table-module_flex-1__bRXzB"};
|
|
6
6
|
|
|
7
7
|
exports.default = styles;
|
|
8
8
|
//# sourceMappingURL=data-table.module.css.cjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var styles = {"toolbar":"data-table-module_toolbar__SsniX","display-popover-content":"data-table-module_display-popover-content__fyCAs","display-popover-properties-container":"data-table-module_display-popover-properties-container__5d1QY","display-popover-properties-select":"data-table-module_display-popover-properties-select__XCZFA","display-popover-reset-container":"data-table-module_display-popover-reset-container__EO-tX","display-popover-sort-icon":"data-table-module_display-popover-sort-icon__qS4Tv","flex-1":"data-table-module_flex-1__bRXzB","contentRoot":"data-table-module_contentRoot__SFof5","row":"data-table-module_row__TqG9x","clickable":"data-table-module_clickable__BGrE5","head":"data-table-module_head__xUe2x","cell":"data-table-module_cell__YNzml","emptyStateCell":"data-table-module_emptyStateCell__icRK5","scrollContainer":"data-table-module_scrollContainer__eKR0-","stickyHeader":"data-table-module_stickyHeader__hWOCt","virtualTable":"data-table-module_virtualTable__GB8Q0","virtualHeaderGroup":"data-table-module_virtualHeaderGroup__dhJXA","virtualHeaderRow":"data-table-module_virtualHeaderRow__LqMog","virtualBodyGroup":"data-table-module_virtualBodyGroup__xlRy5","virtualRow":"data-table-module_virtualRow__dIERR","virtualHead":"data-table-module_virtualHead__Xt-ov","virtualCell":"data-table-module_virtualCell__8i2Lt","virtualSectionHeader":"data-table-module_virtualSectionHeader__rsMjl","stickyLoaderContainer":"data-table-module_stickyLoaderContainer__ueYwH","loaderRow":"data-table-module_loaderRow__yivkT","display___popover___content":"data-table-module_display-popover-content__fyCAs","display___popover___properties___container":"data-table-module_display-popover-properties-container__5d1QY","display___popover___properties___select":"data-table-module_display-popover-properties-select__XCZFA","display___popover___reset___container":"data-table-module_display-popover-reset-container__EO-tX","display___popover___sort___icon":"data-table-module_display-popover-sort-icon__qS4Tv","flex___1":"data-table-module_flex-1__bRXzB"};
|
|
1
|
+
var styles = {"toolbar":"data-table-module_toolbar__SsniX","display-popover-content":"data-table-module_display-popover-content__fyCAs","display-popover-properties-container":"data-table-module_display-popover-properties-container__5d1QY","display-popover-properties-select":"data-table-module_display-popover-properties-select__XCZFA","display-popover-reset-container":"data-table-module_display-popover-reset-container__EO-tX","display-popover-sort-icon":"data-table-module_display-popover-sort-icon__qS4Tv","flex-1":"data-table-module_flex-1__bRXzB","contentRoot":"data-table-module_contentRoot__SFof5","row":"data-table-module_row__TqG9x","clickable":"data-table-module_clickable__BGrE5","head":"data-table-module_head__xUe2x","cell":"data-table-module_cell__YNzml","emptyStateCell":"data-table-module_emptyStateCell__icRK5","scrollContainer":"data-table-module_scrollContainer__eKR0-","stickyHeader":"data-table-module_stickyHeader__hWOCt","virtualTable":"data-table-module_virtualTable__GB8Q0","virtualHeaderGroup":"data-table-module_virtualHeaderGroup__dhJXA","virtualHeaderRow":"data-table-module_virtualHeaderRow__LqMog","virtualBodyGroup":"data-table-module_virtualBodyGroup__xlRy5","virtualRow":"data-table-module_virtualRow__dIERR","virtualHead":"data-table-module_virtualHead__Xt-ov","virtualCell":"data-table-module_virtualCell__8i2Lt","virtualSectionHeader":"data-table-module_virtualSectionHeader__rsMjl","stickyGroupAnchor":"data-table-module_stickyGroupAnchor__T-OZ3","stickyLoaderContainer":"data-table-module_stickyLoaderContainer__ueYwH","loaderRow":"data-table-module_loaderRow__yivkT","stickySectionHeader":"data-table-module_stickySectionHeader__CdMzK","display___popover___content":"data-table-module_display-popover-content__fyCAs","display___popover___properties___container":"data-table-module_display-popover-properties-container__5d1QY","display___popover___properties___select":"data-table-module_display-popover-properties-select__XCZFA","display___popover___reset___container":"data-table-module_display-popover-reset-container__EO-tX","display___popover___sort___icon":"data-table-module_display-popover-sort-icon__qS4Tv","flex___1":"data-table-module_flex-1__bRXzB"};
|
|
2
2
|
|
|
3
3
|
export { styles as default };
|
|
4
4
|
//# sourceMappingURL=data-table.module.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.types.cjs","sources":["../../../components/data-table/data-table.types.tsx"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n Table,\n VisibilityState\n} from '@tanstack/table-core';\nimport type {\n DataTableFilterOperatorTypes,\n FilterOperatorTypes,\n FilterSelectOption,\n FilterTypes,\n FilterValueType\n} from '~/types/filters';\nimport type { BaseSelectProps } from '../select/select-root';\n\nexport type DataTableMode = 'client' | 'server';\n\nexport const SortOrders = {\n ASC: 'asc',\n DESC: 'desc'\n} as const;\n\nexport interface DataTableFilterValues {\n value: any;\n // Only one of these value fields should be present at a time\n boolValue?: boolean;\n stringValue?: string;\n numberValue?: number;\n}\n// Internal filter with UI operators and metadata\nexport interface InternalFilter extends DataTableFilterValues {\n _type?: FilterTypes;\n _dataType?: FilterValueType;\n name: string;\n operator: FilterOperatorTypes;\n}\n\n// Data table filter for backend API (no internal fields)\nexport interface DataTableFilter extends DataTableFilterValues {\n name: string;\n operator: DataTableFilterOperatorTypes;\n}\n\ntype SortOrdersKeys = keyof typeof SortOrders;\nexport type SortOrdersValues = (typeof SortOrders)[SortOrdersKeys];\n\nexport interface DataTableSort {\n name: string;\n order: SortOrdersValues;\n}\n\n// Internal query with UI operators and metadata\nexport interface InternalQuery {\n filters?: InternalFilter[];\n sort?: DataTableSort[];\n group_by?: string[];\n offset?: number;\n limit?: number;\n search?: string;\n}\n\n// Data table query for backend API (clean, no internal fields)\nexport interface DataTableQuery extends Omit<InternalQuery, 'filters'> {\n filters?: DataTableFilter[];\n}\n\nexport type DataTableColumn<TData, TValue> = Omit<\n Column<TData, TValue>,\n 'columnDef'\n> & {\n columnDef: DataTableColumnDef<TData, TValue>;\n};\n\nexport type DataTableColumnDef<TData, TValue> = ColumnDef<TData, TValue> & {\n accessorKey: string;\n header: string;\n filterType?: FilterTypes;\n dataType?: FilterValueType;\n enableColumnFilter?: boolean;\n enableSorting?: boolean;\n enableHiding?: boolean;\n defaultHidden?: boolean;\n filterOptions?: FilterSelectOption[];\n filterProps?: {\n select?: BaseSelectProps;\n };\n classNames?: {\n cell?: string;\n header?: string;\n };\n styles?: {\n cell?: React.CSSProperties;\n header?: React.CSSProperties;\n };\n enableGrouping?: boolean;\n showGroupCount?: boolean;\n groupCountMap?: Record<string, number>;\n groupLabelsMap?: Record<string, string>;\n // TODO: implement these\n icon?: React.ReactNode;\n};\n\nexport interface DataTableProps<TData, TValue> {\n columns: DataTableColumnDef<TData, TValue>[];\n data: TData[];\n query?: DataTableQuery; // Initial query (will be transformed to internal format)\n mode?: DataTableMode;\n isLoading?: boolean;\n loadingRowCount?: number;\n onTableQueryChange?: (query: DataTableQuery) => void;\n defaultSort: DataTableSort;\n onLoadMore?: () => Promise<void>;\n onRowClick?: (row: TData) => void;\n onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void;\n}\n\nexport type DataTableContentClassNames = {\n root?: string;\n table?: string;\n header?: string;\n body?: string;\n row?: string;\n};\n\nexport type DataTableContentBaseProps = {\n emptyState?: React.ReactNode;\n zeroState?: React.ReactNode;\n classNames?: DataTableContentClassNames;\n};\n\nexport type DataTableContentProps = DataTableContentBaseProps;\n\nexport type VirtualizedContentProps = DataTableContentBaseProps & {\n /** Height of each row in pixels. */\n rowHeight?: number;\n /** Height of group header rows in pixels. Falls back to rowHeight if not set. */\n groupHeaderHeight?: number;\n /** Number of rows to render outside visible area. */\n overscan?: number;\n /** Distance in pixels from bottom to trigger load more. */\n loadMoreOffset?: number;\n};\n\nexport type TableQueryUpdateFn = (query: InternalQuery) => InternalQuery;\n\nexport type TableContextType<TData, TValue> = {\n table: Table<TData>;\n columns: DataTableColumnDef<TData, TValue>[];\n isLoading?: boolean;\n loadMoreData: () => void;\n mode: DataTableMode;\n defaultSort: DataTableSort;\n tableQuery?: InternalQuery;\n loadingRowCount?: number;\n onDisplaySettingsReset: () => void;\n updateTableQuery: (fn: TableQueryUpdateFn) => void;\n onRowClick?: (row: TData) => void;\n shouldShowFilters?: boolean;\n};\n\nexport interface ColumnData {\n label: string;\n id: string;\n isVisible?: boolean;\n}\n\ninterface SubRows<_T> {}\n\nexport interface GroupedData<T> extends SubRows<T> {\n label: string;\n group_key: string;\n subRows: T[];\n count?: number;\n showGroupCount?: boolean;\n}\n\nexport const defaultGroupOption = {\n id: '--',\n label: 'No grouping'\n};\n"],"names":[],"mappings":";;AAiBa,MAAA,UAAU,GAAG;AACxB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;EACH;
|
|
1
|
+
{"version":3,"file":"data-table.types.cjs","sources":["../../../components/data-table/data-table.types.tsx"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n Table,\n VisibilityState\n} from '@tanstack/table-core';\nimport type {\n DataTableFilterOperatorTypes,\n FilterOperatorTypes,\n FilterSelectOption,\n FilterTypes,\n FilterValueType\n} from '~/types/filters';\nimport type { BaseSelectProps } from '../select/select-root';\n\nexport type DataTableMode = 'client' | 'server';\n\nexport const SortOrders = {\n ASC: 'asc',\n DESC: 'desc'\n} as const;\n\nexport interface DataTableFilterValues {\n value: any;\n // Only one of these value fields should be present at a time\n boolValue?: boolean;\n stringValue?: string;\n numberValue?: number;\n}\n// Internal filter with UI operators and metadata\nexport interface InternalFilter extends DataTableFilterValues {\n _type?: FilterTypes;\n _dataType?: FilterValueType;\n name: string;\n operator: FilterOperatorTypes;\n}\n\n// Data table filter for backend API (no internal fields)\nexport interface DataTableFilter extends DataTableFilterValues {\n name: string;\n operator: DataTableFilterOperatorTypes;\n}\n\ntype SortOrdersKeys = keyof typeof SortOrders;\nexport type SortOrdersValues = (typeof SortOrders)[SortOrdersKeys];\n\nexport interface DataTableSort {\n name: string;\n order: SortOrdersValues;\n}\n\n// Internal query with UI operators and metadata\nexport interface InternalQuery {\n filters?: InternalFilter[];\n sort?: DataTableSort[];\n group_by?: string[];\n offset?: number;\n limit?: number;\n search?: string;\n}\n\n// Data table query for backend API (clean, no internal fields)\nexport interface DataTableQuery extends Omit<InternalQuery, 'filters'> {\n filters?: DataTableFilter[];\n}\n\nexport type DataTableColumn<TData, TValue> = Omit<\n Column<TData, TValue>,\n 'columnDef'\n> & {\n columnDef: DataTableColumnDef<TData, TValue>;\n};\n\nexport type DataTableColumnDef<TData, TValue> = ColumnDef<TData, TValue> & {\n accessorKey: string;\n header: string;\n filterType?: FilterTypes;\n dataType?: FilterValueType;\n enableColumnFilter?: boolean;\n enableSorting?: boolean;\n enableHiding?: boolean;\n defaultHidden?: boolean;\n filterOptions?: FilterSelectOption[];\n filterProps?: {\n select?: BaseSelectProps;\n };\n classNames?: {\n cell?: string;\n header?: string;\n };\n styles?: {\n cell?: React.CSSProperties;\n header?: React.CSSProperties;\n };\n enableGrouping?: boolean;\n showGroupCount?: boolean;\n groupCountMap?: Record<string, number>;\n groupLabelsMap?: Record<string, string>;\n // TODO: implement these\n icon?: React.ReactNode;\n};\n\nexport interface DataTableProps<TData, TValue> {\n columns: DataTableColumnDef<TData, TValue>[];\n data: TData[];\n query?: DataTableQuery; // Initial query (will be transformed to internal format)\n mode?: DataTableMode;\n isLoading?: boolean;\n loadingRowCount?: number;\n onTableQueryChange?: (query: DataTableQuery) => void;\n defaultSort: DataTableSort;\n onLoadMore?: () => Promise<void>;\n onRowClick?: (row: TData) => void;\n onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void;\n /** When true, group headers stick under the table header while scrolling. Default is false. */\n stickyGroupHeader?: boolean;\n /** Return a stable unique id for each row (used as React key). Use for sortable/filterable tables. */\n getRowId?: (row: TData, index: number) => string;\n}\n\nexport type DataTableContentClassNames = {\n root?: string;\n table?: string;\n header?: string;\n body?: string;\n row?: string;\n};\n\nexport type DataTableContentBaseProps = {\n emptyState?: React.ReactNode;\n zeroState?: React.ReactNode;\n classNames?: DataTableContentClassNames;\n};\n\nexport type DataTableContentProps = DataTableContentBaseProps;\n\nexport type VirtualizedContentProps = DataTableContentBaseProps & {\n /** Height of each row in pixels. */\n rowHeight?: number;\n /** Height of group header rows in pixels. Falls back to rowHeight if not set. */\n groupHeaderHeight?: number;\n /** Number of rows to render outside visible area. */\n overscan?: number;\n /** Distance in pixels from bottom to trigger load more. */\n loadMoreOffset?: number;\n};\n\nexport type TableQueryUpdateFn = (query: InternalQuery) => InternalQuery;\n\nexport type TableContextType<TData, TValue> = {\n table: Table<TData>;\n columns: DataTableColumnDef<TData, TValue>[];\n isLoading?: boolean;\n loadMoreData: () => void;\n mode: DataTableMode;\n defaultSort: DataTableSort;\n tableQuery?: InternalQuery;\n loadingRowCount?: number;\n onDisplaySettingsReset: () => void;\n updateTableQuery: (fn: TableQueryUpdateFn) => void;\n onRowClick?: (row: TData) => void;\n shouldShowFilters?: boolean;\n stickyGroupHeader?: boolean;\n};\n\nexport interface ColumnData {\n label: string;\n id: string;\n isVisible?: boolean;\n}\n\ninterface SubRows<_T> {}\n\nexport interface GroupedData<T> extends SubRows<T> {\n label: string;\n group_key: string;\n subRows: T[];\n count?: number;\n showGroupCount?: boolean;\n}\n\nexport const defaultGroupOption = {\n id: '--',\n label: 'No grouping'\n};\n"],"names":[],"mappings":";;AAiBa,MAAA,UAAU,GAAG;AACxB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;EACH;AAiKE,MAAA,kBAAkB,GAAG;AAChC,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,KAAK,EAAE,aAAa;;;;;;"}
|
|
@@ -81,6 +81,10 @@ export interface DataTableProps<TData, TValue> {
|
|
|
81
81
|
onLoadMore?: () => Promise<void>;
|
|
82
82
|
onRowClick?: (row: TData) => void;
|
|
83
83
|
onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void;
|
|
84
|
+
/** When true, group headers stick under the table header while scrolling. Default is false. */
|
|
85
|
+
stickyGroupHeader?: boolean;
|
|
86
|
+
/** Return a stable unique id for each row (used as React key). Use for sortable/filterable tables. */
|
|
87
|
+
getRowId?: (row: TData, index: number) => string;
|
|
84
88
|
}
|
|
85
89
|
export type DataTableContentClassNames = {
|
|
86
90
|
root?: string;
|
|
@@ -119,6 +123,7 @@ export type TableContextType<TData, TValue> = {
|
|
|
119
123
|
updateTableQuery: (fn: TableQueryUpdateFn) => void;
|
|
120
124
|
onRowClick?: (row: TData) => void;
|
|
121
125
|
shouldShowFilters?: boolean;
|
|
126
|
+
stickyGroupHeader?: boolean;
|
|
122
127
|
};
|
|
123
128
|
export interface ColumnData {
|
|
124
129
|
label: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.types.d.ts","sourceRoot":"","sources":["../../../components/data-table/data-table.types.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"data-table.types.d.ts","sourceRoot":"","sources":["../../../components/data-table/data-table.types.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.types.js","sources":["../../../components/data-table/data-table.types.tsx"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n Table,\n VisibilityState\n} from '@tanstack/table-core';\nimport type {\n DataTableFilterOperatorTypes,\n FilterOperatorTypes,\n FilterSelectOption,\n FilterTypes,\n FilterValueType\n} from '~/types/filters';\nimport type { BaseSelectProps } from '../select/select-root';\n\nexport type DataTableMode = 'client' | 'server';\n\nexport const SortOrders = {\n ASC: 'asc',\n DESC: 'desc'\n} as const;\n\nexport interface DataTableFilterValues {\n value: any;\n // Only one of these value fields should be present at a time\n boolValue?: boolean;\n stringValue?: string;\n numberValue?: number;\n}\n// Internal filter with UI operators and metadata\nexport interface InternalFilter extends DataTableFilterValues {\n _type?: FilterTypes;\n _dataType?: FilterValueType;\n name: string;\n operator: FilterOperatorTypes;\n}\n\n// Data table filter for backend API (no internal fields)\nexport interface DataTableFilter extends DataTableFilterValues {\n name: string;\n operator: DataTableFilterOperatorTypes;\n}\n\ntype SortOrdersKeys = keyof typeof SortOrders;\nexport type SortOrdersValues = (typeof SortOrders)[SortOrdersKeys];\n\nexport interface DataTableSort {\n name: string;\n order: SortOrdersValues;\n}\n\n// Internal query with UI operators and metadata\nexport interface InternalQuery {\n filters?: InternalFilter[];\n sort?: DataTableSort[];\n group_by?: string[];\n offset?: number;\n limit?: number;\n search?: string;\n}\n\n// Data table query for backend API (clean, no internal fields)\nexport interface DataTableQuery extends Omit<InternalQuery, 'filters'> {\n filters?: DataTableFilter[];\n}\n\nexport type DataTableColumn<TData, TValue> = Omit<\n Column<TData, TValue>,\n 'columnDef'\n> & {\n columnDef: DataTableColumnDef<TData, TValue>;\n};\n\nexport type DataTableColumnDef<TData, TValue> = ColumnDef<TData, TValue> & {\n accessorKey: string;\n header: string;\n filterType?: FilterTypes;\n dataType?: FilterValueType;\n enableColumnFilter?: boolean;\n enableSorting?: boolean;\n enableHiding?: boolean;\n defaultHidden?: boolean;\n filterOptions?: FilterSelectOption[];\n filterProps?: {\n select?: BaseSelectProps;\n };\n classNames?: {\n cell?: string;\n header?: string;\n };\n styles?: {\n cell?: React.CSSProperties;\n header?: React.CSSProperties;\n };\n enableGrouping?: boolean;\n showGroupCount?: boolean;\n groupCountMap?: Record<string, number>;\n groupLabelsMap?: Record<string, string>;\n // TODO: implement these\n icon?: React.ReactNode;\n};\n\nexport interface DataTableProps<TData, TValue> {\n columns: DataTableColumnDef<TData, TValue>[];\n data: TData[];\n query?: DataTableQuery; // Initial query (will be transformed to internal format)\n mode?: DataTableMode;\n isLoading?: boolean;\n loadingRowCount?: number;\n onTableQueryChange?: (query: DataTableQuery) => void;\n defaultSort: DataTableSort;\n onLoadMore?: () => Promise<void>;\n onRowClick?: (row: TData) => void;\n onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void;\n}\n\nexport type DataTableContentClassNames = {\n root?: string;\n table?: string;\n header?: string;\n body?: string;\n row?: string;\n};\n\nexport type DataTableContentBaseProps = {\n emptyState?: React.ReactNode;\n zeroState?: React.ReactNode;\n classNames?: DataTableContentClassNames;\n};\n\nexport type DataTableContentProps = DataTableContentBaseProps;\n\nexport type VirtualizedContentProps = DataTableContentBaseProps & {\n /** Height of each row in pixels. */\n rowHeight?: number;\n /** Height of group header rows in pixels. Falls back to rowHeight if not set. */\n groupHeaderHeight?: number;\n /** Number of rows to render outside visible area. */\n overscan?: number;\n /** Distance in pixels from bottom to trigger load more. */\n loadMoreOffset?: number;\n};\n\nexport type TableQueryUpdateFn = (query: InternalQuery) => InternalQuery;\n\nexport type TableContextType<TData, TValue> = {\n table: Table<TData>;\n columns: DataTableColumnDef<TData, TValue>[];\n isLoading?: boolean;\n loadMoreData: () => void;\n mode: DataTableMode;\n defaultSort: DataTableSort;\n tableQuery?: InternalQuery;\n loadingRowCount?: number;\n onDisplaySettingsReset: () => void;\n updateTableQuery: (fn: TableQueryUpdateFn) => void;\n onRowClick?: (row: TData) => void;\n shouldShowFilters?: boolean;\n};\n\nexport interface ColumnData {\n label: string;\n id: string;\n isVisible?: boolean;\n}\n\ninterface SubRows<_T> {}\n\nexport interface GroupedData<T> extends SubRows<T> {\n label: string;\n group_key: string;\n subRows: T[];\n count?: number;\n showGroupCount?: boolean;\n}\n\nexport const defaultGroupOption = {\n id: '--',\n label: 'No grouping'\n};\n"],"names":[],"mappings":"AAiBa,MAAA,UAAU,GAAG;AACxB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;EACH;
|
|
1
|
+
{"version":3,"file":"data-table.types.js","sources":["../../../components/data-table/data-table.types.tsx"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n Table,\n VisibilityState\n} from '@tanstack/table-core';\nimport type {\n DataTableFilterOperatorTypes,\n FilterOperatorTypes,\n FilterSelectOption,\n FilterTypes,\n FilterValueType\n} from '~/types/filters';\nimport type { BaseSelectProps } from '../select/select-root';\n\nexport type DataTableMode = 'client' | 'server';\n\nexport const SortOrders = {\n ASC: 'asc',\n DESC: 'desc'\n} as const;\n\nexport interface DataTableFilterValues {\n value: any;\n // Only one of these value fields should be present at a time\n boolValue?: boolean;\n stringValue?: string;\n numberValue?: number;\n}\n// Internal filter with UI operators and metadata\nexport interface InternalFilter extends DataTableFilterValues {\n _type?: FilterTypes;\n _dataType?: FilterValueType;\n name: string;\n operator: FilterOperatorTypes;\n}\n\n// Data table filter for backend API (no internal fields)\nexport interface DataTableFilter extends DataTableFilterValues {\n name: string;\n operator: DataTableFilterOperatorTypes;\n}\n\ntype SortOrdersKeys = keyof typeof SortOrders;\nexport type SortOrdersValues = (typeof SortOrders)[SortOrdersKeys];\n\nexport interface DataTableSort {\n name: string;\n order: SortOrdersValues;\n}\n\n// Internal query with UI operators and metadata\nexport interface InternalQuery {\n filters?: InternalFilter[];\n sort?: DataTableSort[];\n group_by?: string[];\n offset?: number;\n limit?: number;\n search?: string;\n}\n\n// Data table query for backend API (clean, no internal fields)\nexport interface DataTableQuery extends Omit<InternalQuery, 'filters'> {\n filters?: DataTableFilter[];\n}\n\nexport type DataTableColumn<TData, TValue> = Omit<\n Column<TData, TValue>,\n 'columnDef'\n> & {\n columnDef: DataTableColumnDef<TData, TValue>;\n};\n\nexport type DataTableColumnDef<TData, TValue> = ColumnDef<TData, TValue> & {\n accessorKey: string;\n header: string;\n filterType?: FilterTypes;\n dataType?: FilterValueType;\n enableColumnFilter?: boolean;\n enableSorting?: boolean;\n enableHiding?: boolean;\n defaultHidden?: boolean;\n filterOptions?: FilterSelectOption[];\n filterProps?: {\n select?: BaseSelectProps;\n };\n classNames?: {\n cell?: string;\n header?: string;\n };\n styles?: {\n cell?: React.CSSProperties;\n header?: React.CSSProperties;\n };\n enableGrouping?: boolean;\n showGroupCount?: boolean;\n groupCountMap?: Record<string, number>;\n groupLabelsMap?: Record<string, string>;\n // TODO: implement these\n icon?: React.ReactNode;\n};\n\nexport interface DataTableProps<TData, TValue> {\n columns: DataTableColumnDef<TData, TValue>[];\n data: TData[];\n query?: DataTableQuery; // Initial query (will be transformed to internal format)\n mode?: DataTableMode;\n isLoading?: boolean;\n loadingRowCount?: number;\n onTableQueryChange?: (query: DataTableQuery) => void;\n defaultSort: DataTableSort;\n onLoadMore?: () => Promise<void>;\n onRowClick?: (row: TData) => void;\n onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void;\n /** When true, group headers stick under the table header while scrolling. Default is false. */\n stickyGroupHeader?: boolean;\n /** Return a stable unique id for each row (used as React key). Use for sortable/filterable tables. */\n getRowId?: (row: TData, index: number) => string;\n}\n\nexport type DataTableContentClassNames = {\n root?: string;\n table?: string;\n header?: string;\n body?: string;\n row?: string;\n};\n\nexport type DataTableContentBaseProps = {\n emptyState?: React.ReactNode;\n zeroState?: React.ReactNode;\n classNames?: DataTableContentClassNames;\n};\n\nexport type DataTableContentProps = DataTableContentBaseProps;\n\nexport type VirtualizedContentProps = DataTableContentBaseProps & {\n /** Height of each row in pixels. */\n rowHeight?: number;\n /** Height of group header rows in pixels. Falls back to rowHeight if not set. */\n groupHeaderHeight?: number;\n /** Number of rows to render outside visible area. */\n overscan?: number;\n /** Distance in pixels from bottom to trigger load more. */\n loadMoreOffset?: number;\n};\n\nexport type TableQueryUpdateFn = (query: InternalQuery) => InternalQuery;\n\nexport type TableContextType<TData, TValue> = {\n table: Table<TData>;\n columns: DataTableColumnDef<TData, TValue>[];\n isLoading?: boolean;\n loadMoreData: () => void;\n mode: DataTableMode;\n defaultSort: DataTableSort;\n tableQuery?: InternalQuery;\n loadingRowCount?: number;\n onDisplaySettingsReset: () => void;\n updateTableQuery: (fn: TableQueryUpdateFn) => void;\n onRowClick?: (row: TData) => void;\n shouldShowFilters?: boolean;\n stickyGroupHeader?: boolean;\n};\n\nexport interface ColumnData {\n label: string;\n id: string;\n isVisible?: boolean;\n}\n\ninterface SubRows<_T> {}\n\nexport interface GroupedData<T> extends SubRows<T> {\n label: string;\n group_key: string;\n subRows: T[];\n count?: number;\n showGroupCount?: boolean;\n}\n\nexport const defaultGroupOption = {\n id: '--',\n label: 'No grouping'\n};\n"],"names":[],"mappings":"AAiBa,MAAA,UAAU,GAAG;AACxB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;EACH;AAiKE,MAAA,kBAAkB,GAAG;AAChC,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,KAAK,EAAE,aAAa;;;;;"}
|
|
@@ -38,18 +38,18 @@ const filterOperationsMap = {
|
|
|
38
38
|
String(filterValue.value).toLowerCase());
|
|
39
39
|
},
|
|
40
40
|
contains: (row, columnId, filterValue, _addMeta) => {
|
|
41
|
-
const columnValue = row.getValue(columnId).toLowerCase();
|
|
42
|
-
const filterStr = filterValue.value.toLowerCase();
|
|
41
|
+
const columnValue = String(row.getValue(columnId)).toLowerCase();
|
|
42
|
+
const filterStr = String(filterValue.value).toLowerCase();
|
|
43
43
|
return columnValue.includes(filterStr);
|
|
44
44
|
},
|
|
45
45
|
starts_with: (row, columnId, filterValue, _addMeta) => {
|
|
46
|
-
const columnValue = row.getValue(columnId).toLowerCase();
|
|
47
|
-
const filterStr = filterValue.value.toLowerCase();
|
|
46
|
+
const columnValue = String(row.getValue(columnId)).toLowerCase();
|
|
47
|
+
const filterStr = String(filterValue.value).toLowerCase();
|
|
48
48
|
return columnValue.startsWith(filterStr);
|
|
49
49
|
},
|
|
50
50
|
ends_with: (row, columnId, filterValue, _addMeta) => {
|
|
51
|
-
const columnValue = row.getValue(columnId).toLowerCase();
|
|
52
|
-
const filterStr = filterValue.value.toLowerCase();
|
|
51
|
+
const columnValue = String(row.getValue(columnId)).toLowerCase();
|
|
52
|
+
const filterStr = String(filterValue.value).toLowerCase();
|
|
53
53
|
return columnValue.endsWith(filterStr);
|
|
54
54
|
}
|
|
55
55
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-operations.cjs","sources":["../../../../components/data-table/utils/filter-operations.tsx"],"sourcesContent":["import type { FilterFn } from '@tanstack/table-core';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\n\nimport {\n DataTableFilterOperatorTypes,\n DateFilterOperatorType,\n EmptyFilterValue,\n FilterOperatorTypes,\n FilterType,\n FilterTypes,\n FilterValue,\n FilterValueType,\n MultiSelectFilterOperatorType,\n NumberFilterOperatorType,\n SelectFilterOperatorType,\n StringFilterOperatorType\n} from '~/types/filters';\nimport { DataTableFilterValues } from '../data-table.types';\n\ndayjs.extend(isSameOrAfter);\ndayjs.extend(isSameOrBefore);\n\nexport type FilterFunctionsMap = {\n number: Record<NumberFilterOperatorType, FilterFn<unknown>>;\n string: Record<StringFilterOperatorType, FilterFn<unknown>>;\n date: Record<DateFilterOperatorType, FilterFn<unknown>>;\n select: Record<SelectFilterOperatorType, FilterFn<unknown>>;\n multiselect: Record<MultiSelectFilterOperatorType, FilterFn<unknown>>;\n};\n\nexport const filterOperationsMap: FilterFunctionsMap = {\n number: {\n eq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) === Number(filterValue.value);\n },\n neq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) !== Number(filterValue.value);\n },\n lt: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) < Number(filterValue.value);\n },\n lte: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) <= Number(filterValue.value);\n },\n gt: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) > Number(filterValue.value);\n },\n gte: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) >= Number(filterValue.value);\n }\n },\n string: {\n eq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return (\n String(row.getValue(columnId)).toLowerCase() ===\n String(filterValue.value).toLowerCase()\n );\n },\n neq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return (\n String(row.getValue(columnId)).toLowerCase() !==\n String(filterValue.value).toLowerCase()\n );\n },\n contains: (row, columnId, filterValue: FilterValue, _addMeta) => {\n const columnValue = (row.getValue(columnId) as string).toLowerCase();\n const filterStr = (filterValue.value as string).toLowerCase();\n return columnValue.includes(filterStr);\n },\n starts_with: (row, columnId, filterValue: FilterValue, _addMeta) => {\n const columnValue = (row.getValue(columnId) as string).toLowerCase();\n const filterStr = (filterValue.value as string).toLowerCase();\n return columnValue.startsWith(filterStr);\n },\n ends_with: (row, columnId, filterValue: FilterValue, _addMeta) => {\n const columnValue = (row.getValue(columnId) as string).toLowerCase();\n const filterStr = (filterValue.value as string).toLowerCase();\n return columnValue.endsWith(filterStr);\n }\n },\n date: {\n eq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return dayjs(row.getValue(columnId)).isSame(\n dayjs(filterValue.date),\n 'day'\n );\n },\n neq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return !dayjs(row.getValue(columnId)).isSame(\n dayjs(filterValue.date),\n 'day'\n );\n },\n lt: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return dayjs(row.getValue(columnId)).isBefore(\n dayjs(filterValue.date),\n 'day'\n );\n },\n lte: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return dayjs(row.getValue(columnId)).isSameOrBefore(\n dayjs(filterValue.date),\n 'day'\n );\n },\n gt: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return dayjs(row.getValue(columnId)).isAfter(\n dayjs(filterValue.date),\n 'day'\n );\n },\n gte: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return dayjs(row.getValue(columnId)).isSameOrAfter(\n dayjs(filterValue.date),\n 'day'\n );\n }\n },\n select: {\n eq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n if (String(filterValue.value) === EmptyFilterValue) {\n return row.getValue(columnId) === '';\n }\n // Select only supports string values\n return String(row.getValue(columnId)) === String(filterValue.value);\n },\n neq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n if (String(filterValue.value) === EmptyFilterValue) {\n return row.getValue(columnId) !== '';\n }\n // Select only supports string values\n return String(row.getValue(columnId)) !== String(filterValue.value);\n }\n },\n multiselect: {\n in: (row, columnId, filterValue: FilterValue, _addMeta) => {\n if (!Array.isArray(filterValue.value)) return false;\n\n return filterValue.value\n .map(value => (value === EmptyFilterValue ? '' : String(value)))\n .includes(String(row.getValue(columnId)));\n },\n notin: (row, columnId, filterValue: FilterValue, _addMeta) => {\n if (!Array.isArray(filterValue.value)) return false;\n\n return !filterValue.value\n .map(value => (value === EmptyFilterValue ? '' : String(value)))\n .includes(String(row.getValue(columnId)));\n }\n }\n} as const;\n\nexport function getFilterFn<T extends keyof FilterFunctionsMap>(\n type: T,\n operator: FilterOperatorTypes\n) {\n // @ts-expect-error FilterOperatorTypes is union of all possible operators\n return filterOperationsMap[type][operator];\n}\n\nconst handleStringBasedTypes = (\n filterType: FilterTypes,\n value: any,\n operator?: FilterOperatorTypes | DataTableFilterOperatorTypes\n): DataTableFilterValues => {\n switch (filterType) {\n case FilterType.date: {\n const dateValue = dayjs(value);\n return {\n value,\n stringValue: dateValue.isValid() ? dateValue.toISOString() : ''\n };\n }\n case FilterType.select:\n return {\n stringValue: value === EmptyFilterValue ? '' : value,\n value\n };\n case FilterType.multiselect:\n return {\n value,\n stringValue: value\n .map((value: any) =>\n value === EmptyFilterValue ? '' : String(value)\n )\n .join()\n };\n case FilterType.string: {\n // Apply wildcards for ilike operations\n let processedValue = value;\n // Check if we need to apply wildcards (operator could be UI type or already converted to 'ilike')\n if (operator === 'contains') {\n processedValue = `%${value}%`;\n } else if (operator === 'starts_with') {\n processedValue = `${value}%`;\n } else if (operator === 'ends_with') {\n processedValue = `%${value}`;\n } else if (operator === 'ilike') {\n // If already converted to ilike, assume it needs contains-style wildcards\n // unless the value already has wildcards\n if (!value.includes('%')) {\n processedValue = `%${value}%`;\n }\n }\n return {\n stringValue: processedValue,\n value\n };\n }\n default:\n return {\n stringValue: value,\n value\n };\n }\n};\n\nexport const getFilterOperator = ({\n value,\n filterType,\n operator\n}: {\n value: any;\n filterType?: FilterTypes;\n operator: FilterOperatorTypes;\n}): DataTableFilterOperatorTypes => {\n if (value === EmptyFilterValue && filterType === FilterType.select) {\n return 'empty';\n }\n\n // Map string filter operators to ilike for DataTableFilter\n if (\n filterType === FilterType.string &&\n (operator === 'contains' ||\n operator === 'starts_with' ||\n operator === 'ends_with')\n ) {\n return 'ilike';\n }\n\n return operator as DataTableFilterOperatorTypes;\n};\n\nexport const getFilterValue = ({\n value,\n dataType = 'string',\n filterType = FilterType.string,\n operator\n}: {\n value: any;\n dataType?: FilterValueType;\n filterType?: FilterTypes;\n operator?: FilterOperatorTypes | DataTableFilterOperatorTypes;\n}): DataTableFilterValues => {\n if (dataType === 'boolean') {\n return { boolValue: value, value };\n }\n if (dataType === 'number') {\n return { numberValue: value, value };\n }\n\n // Handle string-based types\n return handleStringBasedTypes(filterType, value, operator);\n};\n\nexport const getDataType = ({\n filterType = FilterType.string,\n dataType = 'string'\n}: {\n dataType?: FilterValueType;\n filterType?: FilterTypes;\n}): FilterValueType => {\n switch (filterType) {\n case FilterType.multiselect:\n case FilterType.select:\n return dataType;\n case FilterType.date:\n return 'string';\n default:\n return filterType;\n }\n};\n"],"names":["EmptyFilterValue","FilterType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filter-operations.cjs","sources":["../../../../components/data-table/utils/filter-operations.tsx"],"sourcesContent":["import type { FilterFn } from '@tanstack/table-core';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\n\nimport {\n DataTableFilterOperatorTypes,\n DateFilterOperatorType,\n EmptyFilterValue,\n FilterOperatorTypes,\n FilterType,\n FilterTypes,\n FilterValue,\n FilterValueType,\n MultiSelectFilterOperatorType,\n NumberFilterOperatorType,\n SelectFilterOperatorType,\n StringFilterOperatorType\n} from '~/types/filters';\nimport { DataTableFilterValues } from '../data-table.types';\n\ndayjs.extend(isSameOrAfter);\ndayjs.extend(isSameOrBefore);\n\nexport type FilterFunctionsMap = {\n number: Record<NumberFilterOperatorType, FilterFn<unknown>>;\n string: Record<StringFilterOperatorType, FilterFn<unknown>>;\n date: Record<DateFilterOperatorType, FilterFn<unknown>>;\n select: Record<SelectFilterOperatorType, FilterFn<unknown>>;\n multiselect: Record<MultiSelectFilterOperatorType, FilterFn<unknown>>;\n};\n\nexport const filterOperationsMap: FilterFunctionsMap = {\n number: {\n eq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) === Number(filterValue.value);\n },\n neq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) !== Number(filterValue.value);\n },\n lt: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) < Number(filterValue.value);\n },\n lte: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) <= Number(filterValue.value);\n },\n gt: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) > Number(filterValue.value);\n },\n gte: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return Number(row.getValue(columnId)) >= Number(filterValue.value);\n }\n },\n string: {\n eq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return (\n String(row.getValue(columnId)).toLowerCase() ===\n String(filterValue.value).toLowerCase()\n );\n },\n neq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return (\n String(row.getValue(columnId)).toLowerCase() !==\n String(filterValue.value).toLowerCase()\n );\n },\n contains: (row, columnId, filterValue: FilterValue, _addMeta) => {\n const columnValue = String(row.getValue(columnId)).toLowerCase();\n const filterStr = String(filterValue.value).toLowerCase();\n return columnValue.includes(filterStr);\n },\n starts_with: (row, columnId, filterValue: FilterValue, _addMeta) => {\n const columnValue = String(row.getValue(columnId)).toLowerCase();\n const filterStr = String(filterValue.value).toLowerCase();\n return columnValue.startsWith(filterStr);\n },\n ends_with: (row, columnId, filterValue: FilterValue, _addMeta) => {\n const columnValue = String(row.getValue(columnId)).toLowerCase();\n const filterStr = String(filterValue.value).toLowerCase();\n return columnValue.endsWith(filterStr);\n }\n },\n date: {\n eq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return dayjs(row.getValue(columnId)).isSame(\n dayjs(filterValue.date),\n 'day'\n );\n },\n neq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return !dayjs(row.getValue(columnId)).isSame(\n dayjs(filterValue.date),\n 'day'\n );\n },\n lt: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return dayjs(row.getValue(columnId)).isBefore(\n dayjs(filterValue.date),\n 'day'\n );\n },\n lte: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return dayjs(row.getValue(columnId)).isSameOrBefore(\n dayjs(filterValue.date),\n 'day'\n );\n },\n gt: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return dayjs(row.getValue(columnId)).isAfter(\n dayjs(filterValue.date),\n 'day'\n );\n },\n gte: (row, columnId, filterValue: FilterValue, _addMeta) => {\n return dayjs(row.getValue(columnId)).isSameOrAfter(\n dayjs(filterValue.date),\n 'day'\n );\n }\n },\n select: {\n eq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n if (String(filterValue.value) === EmptyFilterValue) {\n return row.getValue(columnId) === '';\n }\n // Select only supports string values\n return String(row.getValue(columnId)) === String(filterValue.value);\n },\n neq: (row, columnId, filterValue: FilterValue, _addMeta) => {\n if (String(filterValue.value) === EmptyFilterValue) {\n return row.getValue(columnId) !== '';\n }\n // Select only supports string values\n return String(row.getValue(columnId)) !== String(filterValue.value);\n }\n },\n multiselect: {\n in: (row, columnId, filterValue: FilterValue, _addMeta) => {\n if (!Array.isArray(filterValue.value)) return false;\n\n return filterValue.value\n .map(value => (value === EmptyFilterValue ? '' : String(value)))\n .includes(String(row.getValue(columnId)));\n },\n notin: (row, columnId, filterValue: FilterValue, _addMeta) => {\n if (!Array.isArray(filterValue.value)) return false;\n\n return !filterValue.value\n .map(value => (value === EmptyFilterValue ? '' : String(value)))\n .includes(String(row.getValue(columnId)));\n }\n }\n} as const;\n\nexport function getFilterFn<T extends keyof FilterFunctionsMap>(\n type: T,\n operator: FilterOperatorTypes\n) {\n // @ts-expect-error FilterOperatorTypes is union of all possible operators\n return filterOperationsMap[type][operator];\n}\n\nconst handleStringBasedTypes = (\n filterType: FilterTypes,\n value: any,\n operator?: FilterOperatorTypes | DataTableFilterOperatorTypes\n): DataTableFilterValues => {\n switch (filterType) {\n case FilterType.date: {\n const dateValue = dayjs(value);\n return {\n value,\n stringValue: dateValue.isValid() ? dateValue.toISOString() : ''\n };\n }\n case FilterType.select:\n return {\n stringValue: value === EmptyFilterValue ? '' : value,\n value\n };\n case FilterType.multiselect:\n return {\n value,\n stringValue: value\n .map((value: any) =>\n value === EmptyFilterValue ? '' : String(value)\n )\n .join()\n };\n case FilterType.string: {\n // Apply wildcards for ilike operations\n let processedValue = value;\n // Check if we need to apply wildcards (operator could be UI type or already converted to 'ilike')\n if (operator === 'contains') {\n processedValue = `%${value}%`;\n } else if (operator === 'starts_with') {\n processedValue = `${value}%`;\n } else if (operator === 'ends_with') {\n processedValue = `%${value}`;\n } else if (operator === 'ilike') {\n // If already converted to ilike, assume it needs contains-style wildcards\n // unless the value already has wildcards\n if (!value.includes('%')) {\n processedValue = `%${value}%`;\n }\n }\n return {\n stringValue: processedValue,\n value\n };\n }\n default:\n return {\n stringValue: value,\n value\n };\n }\n};\n\nexport const getFilterOperator = ({\n value,\n filterType,\n operator\n}: {\n value: any;\n filterType?: FilterTypes;\n operator: FilterOperatorTypes;\n}): DataTableFilterOperatorTypes => {\n if (value === EmptyFilterValue && filterType === FilterType.select) {\n return 'empty';\n }\n\n // Map string filter operators to ilike for DataTableFilter\n if (\n filterType === FilterType.string &&\n (operator === 'contains' ||\n operator === 'starts_with' ||\n operator === 'ends_with')\n ) {\n return 'ilike';\n }\n\n return operator as DataTableFilterOperatorTypes;\n};\n\nexport const getFilterValue = ({\n value,\n dataType = 'string',\n filterType = FilterType.string,\n operator\n}: {\n value: any;\n dataType?: FilterValueType;\n filterType?: FilterTypes;\n operator?: FilterOperatorTypes | DataTableFilterOperatorTypes;\n}): DataTableFilterValues => {\n if (dataType === 'boolean') {\n return { boolValue: value, value };\n }\n if (dataType === 'number') {\n return { numberValue: value, value };\n }\n\n // Handle string-based types\n return handleStringBasedTypes(filterType, value, operator);\n};\n\nexport const getDataType = ({\n filterType = FilterType.string,\n dataType = 'string'\n}: {\n dataType?: FilterValueType;\n filterType?: FilterTypes;\n}): FilterValueType => {\n switch (filterType) {\n case FilterType.multiselect:\n case FilterType.select:\n return dataType;\n case FilterType.date:\n return 'string';\n default:\n return filterType;\n }\n};\n"],"names":["EmptyFilterValue","FilterType"],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ export declare const getFilterValue: ({ value, dataType, filterType, operator }:
|
|
|
19
19
|
value: any;
|
|
20
20
|
dataType?: FilterValueType | undefined;
|
|
21
21
|
filterType?: "string" | "number" | "select" | "date" | "multiselect" | undefined;
|
|
22
|
-
operator?: "empty" | "
|
|
22
|
+
operator?: "empty" | "eq" | "neq" | "ilike" | "lt" | "lte" | "gt" | "gte" | "contains" | "starts_with" | "ends_with" | "in" | "notin" | undefined;
|
|
23
23
|
}) => DataTableFilterValues;
|
|
24
24
|
export declare const getDataType: ({ filterType, dataType }: {
|
|
25
25
|
dataType?: FilterValueType | undefined;
|