@iamsaroj/smart-ui 0.2.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/CHANGELOG.md +35 -0
- package/LICENSE +21 -0
- package/README.md +49 -0
- package/dist/calendar-engine/agenda-view.d.ts +8 -0
- package/dist/calendar-engine/agenda-view.d.ts.map +1 -0
- package/dist/calendar-engine/agenda-view.js +26 -0
- package/dist/calendar-engine/agenda-view.js.map +1 -0
- package/dist/calendar-engine/booking.d.ts +13 -0
- package/dist/calendar-engine/booking.d.ts.map +1 -0
- package/dist/calendar-engine/booking.js +45 -0
- package/dist/calendar-engine/booking.js.map +1 -0
- package/dist/calendar-engine/calendar-utils.d.ts +74 -0
- package/dist/calendar-engine/calendar-utils.d.ts.map +1 -0
- package/dist/calendar-engine/calendar-utils.js +221 -0
- package/dist/calendar-engine/calendar-utils.js.map +1 -0
- package/dist/calendar-engine/calendar.d.ts +62 -0
- package/dist/calendar-engine/calendar.d.ts.map +1 -0
- package/dist/calendar-engine/calendar.js +81 -0
- package/dist/calendar-engine/calendar.js.map +1 -0
- package/dist/calendar-engine/event-color.d.ts +20 -0
- package/dist/calendar-engine/event-color.d.ts.map +1 -0
- package/dist/calendar-engine/event-color.js +59 -0
- package/dist/calendar-engine/event-color.js.map +1 -0
- package/dist/calendar-engine/index.d.ts +11 -0
- package/dist/calendar-engine/index.d.ts.map +1 -0
- package/dist/calendar-engine/index.js +6 -0
- package/dist/calendar-engine/index.js.map +1 -0
- package/dist/calendar-engine/month-view.d.ts +10 -0
- package/dist/calendar-engine/month-view.d.ts.map +1 -0
- package/dist/calendar-engine/month-view.js +72 -0
- package/dist/calendar-engine/month-view.js.map +1 -0
- package/dist/calendar-engine/recurrence.d.ts +47 -0
- package/dist/calendar-engine/recurrence.d.ts.map +1 -0
- package/dist/calendar-engine/recurrence.js +209 -0
- package/dist/calendar-engine/recurrence.js.map +1 -0
- package/dist/calendar-engine/shared.d.ts +72 -0
- package/dist/calendar-engine/shared.d.ts.map +1 -0
- package/dist/calendar-engine/shared.js +34 -0
- package/dist/calendar-engine/shared.js.map +1 -0
- package/dist/calendar-engine/time-grid-view.d.ts +13 -0
- package/dist/calendar-engine/time-grid-view.d.ts.map +1 -0
- package/dist/calendar-engine/time-grid-view.js +203 -0
- package/dist/calendar-engine/time-grid-view.js.map +1 -0
- package/dist/calendar-engine/types.d.ts +138 -0
- package/dist/calendar-engine/types.d.ts.map +1 -0
- package/dist/calendar-engine/types.js +2 -0
- package/dist/calendar-engine/types.js.map +1 -0
- package/dist/calendar-engine/use-calendar.d.ts +7 -0
- package/dist/calendar-engine/use-calendar.d.ts.map +1 -0
- package/dist/calendar-engine/use-calendar.js +25 -0
- package/dist/calendar-engine/use-calendar.js.map +1 -0
- package/dist/components/accordion.d.ts +7 -0
- package/dist/components/accordion.d.ts.map +1 -0
- package/dist/components/accordion.js +10 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.d.ts +19 -0
- package/dist/components/alert-dialog.d.ts.map +1 -0
- package/dist/components/alert-dialog.js +18 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/alert.d.ts +11 -0
- package/dist/components/alert.d.ts.map +1 -0
- package/dist/components/alert.js +20 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/aspect-ratio.d.ts +5 -0
- package/dist/components/aspect-ratio.d.ts.map +1 -0
- package/dist/components/aspect-ratio.js +7 -0
- package/dist/components/aspect-ratio.js.map +1 -0
- package/dist/components/avatar.d.ts +12 -0
- package/dist/components/avatar.d.ts.map +1 -0
- package/dist/components/avatar.js +11 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +8 -0
- package/dist/components/badge.d.ts.map +1 -0
- package/dist/components/badge.js +33 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/breadcrumb.d.ts +11 -0
- package/dist/components/breadcrumb.d.ts.map +1 -0
- package/dist/components/breadcrumb.js +23 -0
- package/dist/components/breadcrumb.js.map +1 -0
- package/dist/components/button.d.ts +9 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +34 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.d.ts +11 -0
- package/dist/components/calendar.d.ts.map +1 -0
- package/dist/components/calendar.js +77 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.d.ts +12 -0
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js +11 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/carousel.d.ts +29 -0
- package/dist/components/carousel.d.ts.map +1 -0
- package/dist/components/carousel.js +94 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/chart.d.ts +45 -0
- package/dist/components/chart.d.ts.map +1 -0
- package/dist/components/chart.js +133 -0
- package/dist/components/chart.js.map +1 -0
- package/dist/components/checkbox.d.ts +4 -0
- package/dist/components/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox.js +8 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/collapsible.d.ts +6 -0
- package/dist/components/collapsible.d.ts.map +1 -0
- package/dist/components/collapsible.js +7 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/combobox.d.ts +35 -0
- package/dist/components/combobox.d.ts.map +1 -0
- package/dist/components/combobox.js +45 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/command.d.ts +20 -0
- package/dist/components/command.d.ts.map +1 -0
- package/dist/components/command.js +18 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/context-menu.d.ts +30 -0
- package/dist/components/context-menu.d.ts.map +1 -0
- package/dist/components/context-menu.js +22 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/data-table.d.ts +12 -0
- package/dist/components/data-table.d.ts.map +1 -0
- package/dist/components/data-table.js +44 -0
- package/dist/components/data-table.js.map +1 -0
- package/dist/components/date-picker.d.ts +33 -0
- package/dist/components/date-picker.d.ts.map +1 -0
- package/dist/components/date-picker.js +29 -0
- package/dist/components/date-picker.js.map +1 -0
- package/dist/components/dialog.d.ts +18 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +18 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/drawer.d.ts +14 -0
- package/dist/components/drawer.d.ts.map +1 -0
- package/dist/components/drawer.js +15 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +30 -0
- package/dist/components/dropdown-menu.d.ts.map +1 -0
- package/dist/components/dropdown-menu.js +22 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/hover-card.d.ts +6 -0
- package/dist/components/hover-card.d.ts.map +1 -0
- package/dist/components/hover-card.js +8 -0
- package/dist/components/hover-card.js.map +1 -0
- package/dist/components/input-group.d.ts +19 -0
- package/dist/components/input-group.d.ts.map +1 -0
- package/dist/components/input-group.js +46 -0
- package/dist/components/input-group.js.map +1 -0
- package/dist/components/input-otp.d.ts +12 -0
- package/dist/components/input-otp.d.ts.map +1 -0
- package/dist/components/input-otp.js +16 -0
- package/dist/components/input-otp.js.map +1 -0
- package/dist/components/input.d.ts +4 -0
- package/dist/components/input.d.ts.map +1 -0
- package/dist/components/input.js +6 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/kbd.d.ts +5 -0
- package/dist/components/kbd.d.ts.map +1 -0
- package/dist/components/kbd.js +6 -0
- package/dist/components/kbd.js.map +1 -0
- package/dist/components/label.d.ts +4 -0
- package/dist/components/label.d.ts.map +1 -0
- package/dist/components/label.js +5 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/menubar.d.ts +30 -0
- package/dist/components/menubar.d.ts.map +1 -0
- package/dist/components/menubar.js +24 -0
- package/dist/components/menubar.js.map +1 -0
- package/dist/components/navigation-menu.d.ts +12 -0
- package/dist/components/navigation-menu.d.ts.map +1 -0
- package/dist/components/navigation-menu.js +18 -0
- package/dist/components/navigation-menu.js.map +1 -0
- package/dist/components/pagination.d.ts +18 -0
- package/dist/components/pagination.d.ts.map +1 -0
- package/dist/components/pagination.js +13 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/popover.d.ts +10 -0
- package/dist/components/popover.d.ts.map +1 -0
- package/dist/components/popover.js +12 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.d.ts +8 -0
- package/dist/components/progress.d.ts.map +1 -0
- package/dist/components/progress.js +10 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.d.ts +6 -0
- package/dist/components/radio-group.d.ts.map +1 -0
- package/dist/components/radio-group.js +9 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/scroll-area.d.ts +5 -0
- package/dist/components/scroll-area.d.ts.map +1 -0
- package/dist/components/scroll-area.js +8 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/select.d.ts +16 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +16 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.d.ts +4 -0
- package/dist/components/separator.d.ts.map +1 -0
- package/dist/components/separator.js +6 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.d.ts +15 -0
- package/dist/components/sheet.d.ts.map +1 -0
- package/dist/components/sheet.js +18 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/sidebar.d.ts +64 -0
- package/dist/components/sidebar.d.ts.map +1 -0
- package/dist/components/sidebar.js +224 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/skeleton.d.ts +3 -0
- package/dist/components/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton.js +5 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.d.ts +4 -0
- package/dist/components/slider.d.ts.map +1 -0
- package/dist/components/slider.js +13 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/sonner.d.ts +4 -0
- package/dist/components/sonner.d.ts.map +1 -0
- package/dist/components/sonner.js +25 -0
- package/dist/components/sonner.js.map +1 -0
- package/dist/components/switch.d.ts +6 -0
- package/dist/components/switch.d.ts.map +1 -0
- package/dist/components/switch.js +7 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table.d.ts +11 -0
- package/dist/components/table.d.ts.map +1 -0
- package/dist/components/table.js +12 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.d.ts +11 -0
- package/dist/components/tabs.d.ts.map +1 -0
- package/dist/components/tabs.js +23 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/textarea.d.ts +4 -0
- package/dist/components/textarea.d.ts.map +1 -0
- package/dist/components/textarea.js +5 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/toggle-group.d.ts +11 -0
- package/dist/components/toggle-group.d.ts.map +1 -0
- package/dist/components/toggle-group.js +22 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/toggle.d.ts +9 -0
- package/dist/components/toggle.d.ts.map +1 -0
- package/dist/components/toggle.js +25 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/tooltip.d.ts +7 -0
- package/dist/components/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip.js +10 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/data-grid/action-column-cell.d.ts +41 -0
- package/dist/data-grid/action-column-cell.d.ts.map +1 -0
- package/dist/data-grid/action-column-cell.js +114 -0
- package/dist/data-grid/action-column-cell.js.map +1 -0
- package/dist/data-grid/action-column.d.ts +144 -0
- package/dist/data-grid/action-column.d.ts.map +1 -0
- package/dist/data-grid/action-column.js +156 -0
- package/dist/data-grid/action-column.js.map +1 -0
- package/dist/data-grid/create-page-fetcher.d.ts +57 -0
- package/dist/data-grid/create-page-fetcher.d.ts.map +1 -0
- package/dist/data-grid/create-page-fetcher.js +41 -0
- package/dist/data-grid/create-page-fetcher.js.map +1 -0
- package/dist/data-grid/data-grid.d.ts +65 -0
- package/dist/data-grid/data-grid.d.ts.map +1 -0
- package/dist/data-grid/data-grid.js +95 -0
- package/dist/data-grid/data-grid.js.map +1 -0
- package/dist/data-grid/empty-state.d.ts +13 -0
- package/dist/data-grid/empty-state.d.ts.map +1 -0
- package/dist/data-grid/empty-state.js +6 -0
- package/dist/data-grid/empty-state.js.map +1 -0
- package/dist/data-grid/formula-guard.d.ts +22 -0
- package/dist/data-grid/formula-guard.d.ts.map +1 -0
- package/dist/data-grid/formula-guard.js +28 -0
- package/dist/data-grid/formula-guard.js.map +1 -0
- package/dist/data-grid/grid-internals.d.ts +16 -0
- package/dist/data-grid/grid-internals.d.ts.map +1 -0
- package/dist/data-grid/grid-internals.js +73 -0
- package/dist/data-grid/grid-internals.js.map +1 -0
- package/dist/data-grid/grid-theme.d.ts +8 -0
- package/dist/data-grid/grid-theme.d.ts.map +1 -0
- package/dist/data-grid/grid-theme.js +23 -0
- package/dist/data-grid/grid-theme.js.map +1 -0
- package/dist/data-grid/grid-toolbar.d.ts +40 -0
- package/dist/data-grid/grid-toolbar.d.ts.map +1 -0
- package/dist/data-grid/grid-toolbar.js +13 -0
- package/dist/data-grid/grid-toolbar.js.map +1 -0
- package/dist/data-grid/index.d.ts +10 -0
- package/dist/data-grid/index.d.ts.map +1 -0
- package/dist/data-grid/index.js +9 -0
- package/dist/data-grid/index.js.map +1 -0
- package/dist/data-grid/pagination.d.ts +146 -0
- package/dist/data-grid/pagination.d.ts.map +1 -0
- package/dist/data-grid/pagination.js +128 -0
- package/dist/data-grid/pagination.js.map +1 -0
- package/dist/data-grid/server-data-grid.d.ts +109 -0
- package/dist/data-grid/server-data-grid.d.ts.map +1 -0
- package/dist/data-grid/server-data-grid.js +240 -0
- package/dist/data-grid/server-data-grid.js.map +1 -0
- package/dist/data-grid/server-grid-internals.d.ts +79 -0
- package/dist/data-grid/server-grid-internals.d.ts.map +1 -0
- package/dist/data-grid/server-grid-internals.js +137 -0
- package/dist/data-grid/server-grid-internals.js.map +1 -0
- package/dist/data-grid/use-action-column.d.ts +22 -0
- package/dist/data-grid/use-action-column.d.ts.map +1 -0
- package/dist/data-grid/use-action-column.js +63 -0
- package/dist/data-grid/use-action-column.js.map +1 -0
- package/dist/data-grid/use-server-grid-selection.d.ts +35 -0
- package/dist/data-grid/use-server-grid-selection.d.ts.map +1 -0
- package/dist/data-grid/use-server-grid-selection.js +81 -0
- package/dist/data-grid/use-server-grid-selection.js.map +1 -0
- package/dist/form-engine/base.d.ts +19 -0
- package/dist/form-engine/base.d.ts.map +1 -0
- package/dist/form-engine/base.js +2 -0
- package/dist/form-engine/base.js.map +1 -0
- package/dist/form-engine/field-registry.d.ts +285 -0
- package/dist/form-engine/field-registry.d.ts.map +1 -0
- package/dist/form-engine/field-registry.js +306 -0
- package/dist/form-engine/field-registry.js.map +1 -0
- package/dist/form-engine/field-types.d.ts +201 -0
- package/dist/form-engine/field-types.d.ts.map +1 -0
- package/dist/form-engine/field-types.js +14 -0
- package/dist/form-engine/field-types.js.map +1 -0
- package/dist/form-engine/index.d.ts +20 -0
- package/dist/form-engine/index.d.ts.map +1 -0
- package/dist/form-engine/index.js +21 -0
- package/dist/form-engine/index.js.map +1 -0
- package/dist/form-engine/smart-checkbox-field.d.ts +5 -0
- package/dist/form-engine/smart-checkbox-field.d.ts.map +1 -0
- package/dist/form-engine/smart-checkbox-field.js +9 -0
- package/dist/form-engine/smart-checkbox-field.js.map +1 -0
- package/dist/form-engine/smart-checkbox-group-field.d.ts +10 -0
- package/dist/form-engine/smart-checkbox-group-field.d.ts.map +1 -0
- package/dist/form-engine/smart-checkbox-group-field.js +5 -0
- package/dist/form-engine/smart-checkbox-group-field.js.map +1 -0
- package/dist/form-engine/smart-combobox-field.d.ts +11 -0
- package/dist/form-engine/smart-combobox-field.d.ts.map +1 -0
- package/dist/form-engine/smart-combobox-field.js +5 -0
- package/dist/form-engine/smart-combobox-field.js.map +1 -0
- package/dist/form-engine/smart-date-field.d.ts +8 -0
- package/dist/form-engine/smart-date-field.d.ts.map +1 -0
- package/dist/form-engine/smart-date-field.js +17 -0
- package/dist/form-engine/smart-date-field.js.map +1 -0
- package/dist/form-engine/smart-date-range-field.d.ts +15 -0
- package/dist/form-engine/smart-date-range-field.d.ts.map +1 -0
- package/dist/form-engine/smart-date-range-field.js +25 -0
- package/dist/form-engine/smart-date-range-field.js.map +1 -0
- package/dist/form-engine/smart-datetime-field.d.ts +12 -0
- package/dist/form-engine/smart-datetime-field.d.ts.map +1 -0
- package/dist/form-engine/smart-datetime-field.js +12 -0
- package/dist/form-engine/smart-datetime-field.js.map +1 -0
- package/dist/form-engine/smart-form-internals.d.ts +14 -0
- package/dist/form-engine/smart-form-internals.d.ts.map +1 -0
- package/dist/form-engine/smart-form-internals.js +64 -0
- package/dist/form-engine/smart-form-internals.js.map +1 -0
- package/dist/form-engine/smart-form.d.ts +55 -0
- package/dist/form-engine/smart-form.d.ts.map +1 -0
- package/dist/form-engine/smart-form.js +229 -0
- package/dist/form-engine/smart-form.js.map +1 -0
- package/dist/form-engine/smart-input-field.d.ts +9 -0
- package/dist/form-engine/smart-input-field.d.ts.map +1 -0
- package/dist/form-engine/smart-input-field.js +5 -0
- package/dist/form-engine/smart-input-field.js.map +1 -0
- package/dist/form-engine/smart-month-field.d.ts +8 -0
- package/dist/form-engine/smart-month-field.d.ts.map +1 -0
- package/dist/form-engine/smart-month-field.js +12 -0
- package/dist/form-engine/smart-month-field.js.map +1 -0
- package/dist/form-engine/smart-multi-select-field.d.ts +11 -0
- package/dist/form-engine/smart-multi-select-field.d.ts.map +1 -0
- package/dist/form-engine/smart-multi-select-field.js +5 -0
- package/dist/form-engine/smart-multi-select-field.js.map +1 -0
- package/dist/form-engine/smart-number-field.d.ts +22 -0
- package/dist/form-engine/smart-number-field.d.ts.map +1 -0
- package/dist/form-engine/smart-number-field.js +115 -0
- package/dist/form-engine/smart-number-field.js.map +1 -0
- package/dist/form-engine/smart-password-field.d.ts +7 -0
- package/dist/form-engine/smart-password-field.d.ts.map +1 -0
- package/dist/form-engine/smart-password-field.js +5 -0
- package/dist/form-engine/smart-password-field.js.map +1 -0
- package/dist/form-engine/smart-radio-group-field.d.ts +10 -0
- package/dist/form-engine/smart-radio-group-field.d.ts.map +1 -0
- package/dist/form-engine/smart-radio-group-field.js +5 -0
- package/dist/form-engine/smart-radio-group-field.js.map +1 -0
- package/dist/form-engine/smart-segmented-field.d.ts +9 -0
- package/dist/form-engine/smart-segmented-field.d.ts.map +1 -0
- package/dist/form-engine/smart-segmented-field.js +5 -0
- package/dist/form-engine/smart-segmented-field.js.map +1 -0
- package/dist/form-engine/smart-select-field.d.ts +10 -0
- package/dist/form-engine/smart-select-field.d.ts.map +1 -0
- package/dist/form-engine/smart-select-field.js +5 -0
- package/dist/form-engine/smart-select-field.js.map +1 -0
- package/dist/form-engine/smart-slug-field.d.ts +12 -0
- package/dist/form-engine/smart-slug-field.d.ts.map +1 -0
- package/dist/form-engine/smart-slug-field.js +14 -0
- package/dist/form-engine/smart-slug-field.js.map +1 -0
- package/dist/form-engine/smart-switch-field.d.ts +5 -0
- package/dist/form-engine/smart-switch-field.d.ts.map +1 -0
- package/dist/form-engine/smart-switch-field.js +9 -0
- package/dist/form-engine/smart-switch-field.js.map +1 -0
- package/dist/form-engine/smart-tel-field.d.ts +7 -0
- package/dist/form-engine/smart-tel-field.d.ts.map +1 -0
- package/dist/form-engine/smart-tel-field.js +6 -0
- package/dist/form-engine/smart-tel-field.js.map +1 -0
- package/dist/form-engine/smart-text-editor-field.d.ts +15 -0
- package/dist/form-engine/smart-text-editor-field.d.ts.map +1 -0
- package/dist/form-engine/smart-text-editor-field.js +5 -0
- package/dist/form-engine/smart-text-editor-field.js.map +1 -0
- package/dist/form-engine/smart-textarea-field.d.ts +8 -0
- package/dist/form-engine/smart-textarea-field.d.ts.map +1 -0
- package/dist/form-engine/smart-textarea-field.js +5 -0
- package/dist/form-engine/smart-textarea-field.js.map +1 -0
- package/dist/form-engine/smart-time-field.d.ts +10 -0
- package/dist/form-engine/smart-time-field.d.ts.map +1 -0
- package/dist/form-engine/smart-time-field.js +5 -0
- package/dist/form-engine/smart-time-field.js.map +1 -0
- package/dist/form-engine/smart-time-range-field.d.ts +13 -0
- package/dist/form-engine/smart-time-range-field.d.ts.map +1 -0
- package/dist/form-engine/smart-time-range-field.js +5 -0
- package/dist/form-engine/smart-time-range-field.js.map +1 -0
- package/dist/form-engine/smart-year-field.d.ts +8 -0
- package/dist/form-engine/smart-year-field.d.ts.map +1 -0
- package/dist/form-engine/smart-year-field.js +5 -0
- package/dist/form-engine/smart-year-field.js.map +1 -0
- package/dist/form-engine/smart-yesno-field.d.ts +12 -0
- package/dist/form-engine/smart-yesno-field.d.ts.map +1 -0
- package/dist/form-engine/smart-yesno-field.js +14 -0
- package/dist/form-engine/smart-yesno-field.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +17 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/lexical-text-editor/SmartTextEditor.d.ts +61 -0
- package/dist/lexical-text-editor/SmartTextEditor.d.ts.map +1 -0
- package/dist/lexical-text-editor/SmartTextEditor.js +145 -0
- package/dist/lexical-text-editor/SmartTextEditor.js.map +1 -0
- package/dist/lexical-text-editor/editor-nodes.d.ts +3 -0
- package/dist/lexical-text-editor/editor-nodes.d.ts.map +1 -0
- package/dist/lexical-text-editor/editor-nodes.js +25 -0
- package/dist/lexical-text-editor/editor-nodes.js.map +1 -0
- package/dist/lexical-text-editor/editor-theme.d.ts +3 -0
- package/dist/lexical-text-editor/editor-theme.d.ts.map +1 -0
- package/dist/lexical-text-editor/editor-theme.js +78 -0
- package/dist/lexical-text-editor/editor-theme.js.map +1 -0
- package/dist/lexical-text-editor/index.d.ts +8 -0
- package/dist/lexical-text-editor/index.d.ts.map +1 -0
- package/dist/lexical-text-editor/index.js +6 -0
- package/dist/lexical-text-editor/index.js.map +1 -0
- package/dist/lexical-text-editor/nodes/image-node.d.ts +41 -0
- package/dist/lexical-text-editor/nodes/image-node.d.ts.map +1 -0
- package/dist/lexical-text-editor/nodes/image-node.js +89 -0
- package/dist/lexical-text-editor/nodes/image-node.js.map +1 -0
- package/dist/lexical-text-editor/nodes/page-break-node.d.ts +25 -0
- package/dist/lexical-text-editor/nodes/page-break-node.d.ts.map +1 -0
- package/dist/lexical-text-editor/nodes/page-break-node.js +84 -0
- package/dist/lexical-text-editor/nodes/page-break-node.js.map +1 -0
- package/dist/lexical-text-editor/plugins/auto-link-plugin.d.ts +3 -0
- package/dist/lexical-text-editor/plugins/auto-link-plugin.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/auto-link-plugin.js +12 -0
- package/dist/lexical-text-editor/plugins/auto-link-plugin.js.map +1 -0
- package/dist/lexical-text-editor/plugins/code-highlight-plugin.d.ts +6 -0
- package/dist/lexical-text-editor/plugins/code-highlight-plugin.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/code-highlight-plugin.js +14 -0
- package/dist/lexical-text-editor/plugins/code-highlight-plugin.js.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/align-menu.d.ts +7 -0
- package/dist/lexical-text-editor/plugins/toolbar/align-menu.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/align-menu.js +8 -0
- package/dist/lexical-text-editor/plugins/toolbar/align-menu.js.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/block-format-menu.d.ts +20 -0
- package/dist/lexical-text-editor/plugins/toolbar/block-format-menu.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/block-format-menu.js +78 -0
- package/dist/lexical-text-editor/plugins/toolbar/block-format-menu.js.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/constants.d.ts +36 -0
- package/dist/lexical-text-editor/plugins/toolbar/constants.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/constants.js +67 -0
- package/dist/lexical-text-editor/plugins/toolbar/constants.js.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/inline-marks.d.ts +14 -0
- package/dist/lexical-text-editor/plugins/toolbar/inline-marks.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/inline-marks.js +129 -0
- package/dist/lexical-text-editor/plugins/toolbar/inline-marks.js.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/insert-menu.d.ts +8 -0
- package/dist/lexical-text-editor/plugins/toolbar/insert-menu.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/insert-menu.js +87 -0
- package/dist/lexical-text-editor/plugins/toolbar/insert-menu.js.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/link-editor.d.ts +11 -0
- package/dist/lexical-text-editor/plugins/toolbar/link-editor.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/link-editor.js +51 -0
- package/dist/lexical-text-editor/plugins/toolbar/link-editor.js.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/primitives.d.ts +39 -0
- package/dist/lexical-text-editor/plugins/toolbar/primitives.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/primitives.js +47 -0
- package/dist/lexical-text-editor/plugins/toolbar/primitives.js.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/use-insert-commands.d.ts +9 -0
- package/dist/lexical-text-editor/plugins/toolbar/use-insert-commands.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/use-insert-commands.js +29 -0
- package/dist/lexical-text-editor/plugins/toolbar/use-insert-commands.js.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/use-toolbar-state.d.ts +30 -0
- package/dist/lexical-text-editor/plugins/toolbar/use-toolbar-state.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar/use-toolbar-state.js +128 -0
- package/dist/lexical-text-editor/plugins/toolbar/use-toolbar-state.js.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar-plugin.d.ts +8 -0
- package/dist/lexical-text-editor/plugins/toolbar-plugin.d.ts.map +1 -0
- package/dist/lexical-text-editor/plugins/toolbar-plugin.js +51 -0
- package/dist/lexical-text-editor/plugins/toolbar-plugin.js.map +1 -0
- package/dist/lexical-text-editor/sanitize.d.ts +24 -0
- package/dist/lexical-text-editor/sanitize.d.ts.map +1 -0
- package/dist/lexical-text-editor/sanitize.js +140 -0
- package/dist/lexical-text-editor/sanitize.js.map +1 -0
- package/dist/lib/format.d.ts +17 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +40 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/leading-space.d.ts +28 -0
- package/dist/lib/leading-space.d.ts.map +1 -0
- package/dist/lib/leading-space.js +34 -0
- package/dist/lib/leading-space.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +4 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/xlsx.d.ts +80 -0
- package/dist/lib/xlsx.d.ts.map +1 -0
- package/dist/lib/xlsx.js +377 -0
- package/dist/lib/xlsx.js.map +1 -0
- package/dist/search-engine/build-query.d.ts +29 -0
- package/dist/search-engine/build-query.d.ts.map +1 -0
- package/dist/search-engine/build-query.js +51 -0
- package/dist/search-engine/build-query.js.map +1 -0
- package/dist/search-engine/index.d.ts +15 -0
- package/dist/search-engine/index.d.ts.map +1 -0
- package/dist/search-engine/index.js +13 -0
- package/dist/search-engine/index.js.map +1 -0
- package/dist/search-engine/smart-search-form.d.ts +92 -0
- package/dist/search-engine/smart-search-form.d.ts.map +1 -0
- package/dist/search-engine/smart-search-form.js +136 -0
- package/dist/search-engine/smart-search-form.js.map +1 -0
- package/dist/search-engine/types.d.ts +40 -0
- package/dist/search-engine/types.d.ts.map +1 -0
- package/dist/search-engine/types.js +11 -0
- package/dist/search-engine/types.js.map +1 -0
- package/dist/smart-components/buttons/action-button.d.ts +66 -0
- package/dist/smart-components/buttons/action-button.d.ts.map +1 -0
- package/dist/smart-components/buttons/action-button.js +79 -0
- package/dist/smart-components/buttons/action-button.js.map +1 -0
- package/dist/smart-components/buttons/action-buttons.d.ts +122 -0
- package/dist/smart-components/buttons/action-buttons.d.ts.map +1 -0
- package/dist/smart-components/buttons/action-buttons.js +42 -0
- package/dist/smart-components/buttons/action-buttons.js.map +1 -0
- package/dist/smart-components/buttons/action-config.d.ts +181 -0
- package/dist/smart-components/buttons/action-config.d.ts.map +1 -0
- package/dist/smart-components/buttons/action-config.js +128 -0
- package/dist/smart-components/buttons/action-config.js.map +1 -0
- package/dist/smart-components/buttons/index.d.ts +4 -0
- package/dist/smart-components/buttons/index.d.ts.map +1 -0
- package/dist/smart-components/buttons/index.js +7 -0
- package/dist/smart-components/buttons/index.js.map +1 -0
- package/dist/smart-components/loading-overlay.d.ts +16 -0
- package/dist/smart-components/loading-overlay.d.ts.map +1 -0
- package/dist/smart-components/loading-overlay.js +13 -0
- package/dist/smart-components/loading-overlay.js.map +1 -0
- package/dist/smart-components/page/index.d.ts +19 -0
- package/dist/smart-components/page/index.d.ts.map +1 -0
- package/dist/smart-components/page/index.js +33 -0
- package/dist/smart-components/page/index.js.map +1 -0
- package/dist/smart-components/page/layouts/page-states.d.ts +17 -0
- package/dist/smart-components/page/layouts/page-states.d.ts.map +1 -0
- package/dist/smart-components/page/layouts/page-states.js +12 -0
- package/dist/smart-components/page/layouts/page-states.js.map +1 -0
- package/dist/smart-components/page/layouts/slot-buckets.d.ts +21 -0
- package/dist/smart-components/page/layouts/slot-buckets.d.ts.map +1 -0
- package/dist/smart-components/page/layouts/slot-buckets.js +2 -0
- package/dist/smart-components/page/layouts/slot-buckets.js.map +1 -0
- package/dist/smart-components/page/layouts/split-layout.d.ts +13 -0
- package/dist/smart-components/page/layouts/split-layout.d.ts.map +1 -0
- package/dist/smart-components/page/layouts/split-layout.js +14 -0
- package/dist/smart-components/page/layouts/split-layout.js.map +1 -0
- package/dist/smart-components/page/layouts/standard-layout.d.ts +18 -0
- package/dist/smart-components/page/layouts/standard-layout.d.ts.map +1 -0
- package/dist/smart-components/page/layouts/standard-layout.js +61 -0
- package/dist/smart-components/page/layouts/standard-layout.js.map +1 -0
- package/dist/smart-components/page/page-context.d.ts +51 -0
- package/dist/smart-components/page/page-context.d.ts.map +1 -0
- package/dist/smart-components/page/page-context.js +21 -0
- package/dist/smart-components/page/page-context.js.map +1 -0
- package/dist/smart-components/page/slot.d.ts +19 -0
- package/dist/smart-components/page/slot.d.ts.map +1 -0
- package/dist/smart-components/page/slot.js +18 -0
- package/dist/smart-components/page/slot.js.map +1 -0
- package/dist/smart-components/page/smart-grid-area.d.ts +75 -0
- package/dist/smart-components/page/smart-grid-area.d.ts.map +1 -0
- package/dist/smart-components/page/smart-grid-area.js +61 -0
- package/dist/smart-components/page/smart-grid-area.js.map +1 -0
- package/dist/smart-components/page/smart-page-container.d.ts +66 -0
- package/dist/smart-components/page/smart-page-container.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-container.js +93 -0
- package/dist/smart-components/page/smart-page-container.js.map +1 -0
- package/dist/smart-components/page/smart-page-content.d.ts +70 -0
- package/dist/smart-components/page/smart-page-content.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-content.js +78 -0
- package/dist/smart-components/page/smart-page-content.js.map +1 -0
- package/dist/smart-components/page/smart-page-empty.d.ts +47 -0
- package/dist/smart-components/page/smart-page-empty.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-empty.js +37 -0
- package/dist/smart-components/page/smart-page-empty.js.map +1 -0
- package/dist/smart-components/page/smart-page-error.d.ts +59 -0
- package/dist/smart-components/page/smart-page-error.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-error.js +45 -0
- package/dist/smart-components/page/smart-page-error.js.map +1 -0
- package/dist/smart-components/page/smart-page-filters.d.ts +38 -0
- package/dist/smart-components/page/smart-page-filters.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-filters.js +33 -0
- package/dist/smart-components/page/smart-page-filters.js.map +1 -0
- package/dist/smart-components/page/smart-page-footer.d.ts +49 -0
- package/dist/smart-components/page/smart-page-footer.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-footer.js +49 -0
- package/dist/smart-components/page/smart-page-footer.js.map +1 -0
- package/dist/smart-components/page/smart-page-header.d.ts +145 -0
- package/dist/smart-components/page/smart-page-header.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-header.js +129 -0
- package/dist/smart-components/page/smart-page-header.js.map +1 -0
- package/dist/smart-components/page/smart-page-hero.d.ts +43 -0
- package/dist/smart-components/page/smart-page-hero.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-hero.js +42 -0
- package/dist/smart-components/page/smart-page-hero.js.map +1 -0
- package/dist/smart-components/page/smart-page-loading.d.ts +31 -0
- package/dist/smart-components/page/smart-page-loading.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-loading.js +29 -0
- package/dist/smart-components/page/smart-page-loading.js.map +1 -0
- package/dist/smart-components/page/smart-page-search.d.ts +39 -0
- package/dist/smart-components/page/smart-page-search.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-search.js +38 -0
- package/dist/smart-components/page/smart-page-search.js.map +1 -0
- package/dist/smart-components/page/smart-page-section.d.ts +55 -0
- package/dist/smart-components/page/smart-page-section.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-section.js +41 -0
- package/dist/smart-components/page/smart-page-section.js.map +1 -0
- package/dist/smart-components/page/smart-page-status-bar.d.ts +34 -0
- package/dist/smart-components/page/smart-page-status-bar.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-status-bar.js +33 -0
- package/dist/smart-components/page/smart-page-status-bar.js.map +1 -0
- package/dist/smart-components/page/smart-page-tabs.d.ts +93 -0
- package/dist/smart-components/page/smart-page-tabs.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page-tabs.js +87 -0
- package/dist/smart-components/page/smart-page-tabs.js.map +1 -0
- package/dist/smart-components/page/smart-page.d.ts +141 -0
- package/dist/smart-components/page/smart-page.d.ts.map +1 -0
- package/dist/smart-components/page/smart-page.js +295 -0
- package/dist/smart-components/page/smart-page.js.map +1 -0
- package/dist/smart-components/page/smart-sidebar.d.ts +70 -0
- package/dist/smart-components/page/smart-sidebar.d.ts.map +1 -0
- package/dist/smart-components/page/smart-sidebar.js +54 -0
- package/dist/smart-components/page/smart-sidebar.js.map +1 -0
- package/dist/smart-components/page/smart-toolbar.d.ts +40 -0
- package/dist/smart-components/page/smart-toolbar.d.ts.map +1 -0
- package/dist/smart-components/page/smart-toolbar.js +39 -0
- package/dist/smart-components/page/smart-toolbar.js.map +1 -0
- package/dist/smart-components/search-input.d.ts +20 -0
- package/dist/smart-components/search-input.d.ts.map +1 -0
- package/dist/smart-components/search-input.js +12 -0
- package/dist/smart-components/search-input.js.map +1 -0
- package/dist/smart-components/smart-accordion.d.ts +53 -0
- package/dist/smart-components/smart-accordion.d.ts.map +1 -0
- package/dist/smart-components/smart-accordion.js +33 -0
- package/dist/smart-components/smart-accordion.js.map +1 -0
- package/dist/smart-components/smart-alert.d.ts +44 -0
- package/dist/smart-components/smart-alert.d.ts.map +1 -0
- package/dist/smart-components/smart-alert.js +27 -0
- package/dist/smart-components/smart-alert.js.map +1 -0
- package/dist/smart-components/smart-avatar.d.ts +3 -0
- package/dist/smart-components/smart-avatar.d.ts.map +1 -0
- package/dist/smart-components/smart-avatar.js +4 -0
- package/dist/smart-components/smart-avatar.js.map +1 -0
- package/dist/smart-components/smart-badge.d.ts +28 -0
- package/dist/smart-components/smart-badge.d.ts.map +1 -0
- package/dist/smart-components/smart-badge.js +24 -0
- package/dist/smart-components/smart-badge.js.map +1 -0
- package/dist/smart-components/smart-breadcrumb.d.ts +43 -0
- package/dist/smart-components/smart-breadcrumb.d.ts.map +1 -0
- package/dist/smart-components/smart-breadcrumb.js +37 -0
- package/dist/smart-components/smart-breadcrumb.js.map +1 -0
- package/dist/smart-components/smart-button.d.ts +22 -0
- package/dist/smart-components/smart-button.d.ts.map +1 -0
- package/dist/smart-components/smart-button.js +15 -0
- package/dist/smart-components/smart-button.js.map +1 -0
- package/dist/smart-components/smart-calendar.d.ts +78 -0
- package/dist/smart-components/smart-calendar.d.ts.map +1 -0
- package/dist/smart-components/smart-calendar.js +45 -0
- package/dist/smart-components/smart-calendar.js.map +1 -0
- package/dist/smart-components/smart-card.d.ts +55 -0
- package/dist/smart-components/smart-card.d.ts.map +1 -0
- package/dist/smart-components/smart-card.js +37 -0
- package/dist/smart-components/smart-card.js.map +1 -0
- package/dist/smart-components/smart-checkbox-group.d.ts +48 -0
- package/dist/smart-components/smart-checkbox-group.d.ts.map +1 -0
- package/dist/smart-components/smart-checkbox-group.js +48 -0
- package/dist/smart-components/smart-checkbox-group.js.map +1 -0
- package/dist/smart-components/smart-checkbox.d.ts +34 -0
- package/dist/smart-components/smart-checkbox.d.ts.map +1 -0
- package/dist/smart-components/smart-checkbox.js +34 -0
- package/dist/smart-components/smart-checkbox.js.map +1 -0
- package/dist/smart-components/smart-combobox.d.ts +36 -0
- package/dist/smart-components/smart-combobox.d.ts.map +1 -0
- package/dist/smart-components/smart-combobox.js +32 -0
- package/dist/smart-components/smart-combobox.js.map +1 -0
- package/dist/smart-components/smart-confirm-dialog.d.ts +63 -0
- package/dist/smart-components/smart-confirm-dialog.d.ts.map +1 -0
- package/dist/smart-components/smart-confirm-dialog.js +45 -0
- package/dist/smart-components/smart-confirm-dialog.js.map +1 -0
- package/dist/smart-components/smart-context-menu.d.ts +58 -0
- package/dist/smart-components/smart-context-menu.d.ts.map +1 -0
- package/dist/smart-components/smart-context-menu.js +38 -0
- package/dist/smart-components/smart-context-menu.js.map +1 -0
- package/dist/smart-components/smart-date-picker.d.ts +99 -0
- package/dist/smart-components/smart-date-picker.d.ts.map +1 -0
- package/dist/smart-components/smart-date-picker.js +78 -0
- package/dist/smart-components/smart-date-picker.js.map +1 -0
- package/dist/smart-components/smart-date-range-picker.d.ts +37 -0
- package/dist/smart-components/smart-date-range-picker.d.ts.map +1 -0
- package/dist/smart-components/smart-date-range-picker.js +38 -0
- package/dist/smart-components/smart-date-range-picker.js.map +1 -0
- package/dist/smart-components/smart-dialog.d.ts +75 -0
- package/dist/smart-components/smart-dialog.d.ts.map +1 -0
- package/dist/smart-components/smart-dialog.js +61 -0
- package/dist/smart-components/smart-dialog.js.map +1 -0
- package/dist/smart-components/smart-drawer.d.ts +48 -0
- package/dist/smart-components/smart-drawer.d.ts.map +1 -0
- package/dist/smart-components/smart-drawer.js +32 -0
- package/dist/smart-components/smart-drawer.js.map +1 -0
- package/dist/smart-components/smart-field.d.ts +47 -0
- package/dist/smart-components/smart-field.d.ts.map +1 -0
- package/dist/smart-components/smart-field.js +44 -0
- package/dist/smart-components/smart-field.js.map +1 -0
- package/dist/smart-components/smart-input-group.d.ts +60 -0
- package/dist/smart-components/smart-input-group.d.ts.map +1 -0
- package/dist/smart-components/smart-input-group.js +40 -0
- package/dist/smart-components/smart-input-group.js.map +1 -0
- package/dist/smart-components/smart-input.d.ts +46 -0
- package/dist/smart-components/smart-input.d.ts.map +1 -0
- package/dist/smart-components/smart-input.js +36 -0
- package/dist/smart-components/smart-input.js.map +1 -0
- package/dist/smart-components/smart-label.d.ts +22 -0
- package/dist/smart-components/smart-label.d.ts.map +1 -0
- package/dist/smart-components/smart-label.js +17 -0
- package/dist/smart-components/smart-label.js.map +1 -0
- package/dist/smart-components/smart-month-picker.d.ts +30 -0
- package/dist/smart-components/smart-month-picker.d.ts.map +1 -0
- package/dist/smart-components/smart-month-picker.js +53 -0
- package/dist/smart-components/smart-month-picker.js.map +1 -0
- package/dist/smart-components/smart-multi-select.d.ts +38 -0
- package/dist/smart-components/smart-multi-select.d.ts.map +1 -0
- package/dist/smart-components/smart-multi-select.js +56 -0
- package/dist/smart-components/smart-multi-select.js.map +1 -0
- package/dist/smart-components/smart-native-select.d.ts +45 -0
- package/dist/smart-components/smart-native-select.d.ts.map +1 -0
- package/dist/smart-components/smart-native-select.js +33 -0
- package/dist/smart-components/smart-native-select.js.map +1 -0
- package/dist/smart-components/smart-nav-sidebar.d.ts +47 -0
- package/dist/smart-components/smart-nav-sidebar.d.ts.map +1 -0
- package/dist/smart-components/smart-nav-sidebar.js +37 -0
- package/dist/smart-components/smart-nav-sidebar.js.map +1 -0
- package/dist/smart-components/smart-password-input.d.ts +31 -0
- package/dist/smart-components/smart-password-input.d.ts.map +1 -0
- package/dist/smart-components/smart-password-input.js +30 -0
- package/dist/smart-components/smart-password-input.js.map +1 -0
- package/dist/smart-components/smart-radio-group.d.ts +58 -0
- package/dist/smart-components/smart-radio-group.d.ts.map +1 -0
- package/dist/smart-components/smart-radio-group.js +49 -0
- package/dist/smart-components/smart-radio-group.js.map +1 -0
- package/dist/smart-components/smart-segmented.d.ts +33 -0
- package/dist/smart-components/smart-segmented.d.ts.map +1 -0
- package/dist/smart-components/smart-segmented.js +25 -0
- package/dist/smart-components/smart-segmented.js.map +1 -0
- package/dist/smart-components/smart-select.d.ts +71 -0
- package/dist/smart-components/smart-select.d.ts.map +1 -0
- package/dist/smart-components/smart-select.js +44 -0
- package/dist/smart-components/smart-select.js.map +1 -0
- package/dist/smart-components/smart-separator.d.ts +3 -0
- package/dist/smart-components/smart-separator.d.ts.map +1 -0
- package/dist/smart-components/smart-separator.js +4 -0
- package/dist/smart-components/smart-separator.js.map +1 -0
- package/dist/smart-components/smart-sheet.d.ts +79 -0
- package/dist/smart-components/smart-sheet.d.ts.map +1 -0
- package/dist/smart-components/smart-sheet.js +47 -0
- package/dist/smart-components/smart-sheet.js.map +1 -0
- package/dist/smart-components/smart-stat-card.d.ts +47 -0
- package/dist/smart-components/smart-stat-card.d.ts.map +1 -0
- package/dist/smart-components/smart-stat-card.js +35 -0
- package/dist/smart-components/smart-stat-card.js.map +1 -0
- package/dist/smart-components/smart-stepper.d.ts +24 -0
- package/dist/smart-components/smart-stepper.d.ts.map +1 -0
- package/dist/smart-components/smart-stepper.js +24 -0
- package/dist/smart-components/smart-stepper.js.map +1 -0
- package/dist/smart-components/smart-switch.d.ts +34 -0
- package/dist/smart-components/smart-switch.d.ts.map +1 -0
- package/dist/smart-components/smart-switch.js +34 -0
- package/dist/smart-components/smart-switch.js.map +1 -0
- package/dist/smart-components/smart-textarea.d.ts +38 -0
- package/dist/smart-components/smart-textarea.d.ts.map +1 -0
- package/dist/smart-components/smart-textarea.js +28 -0
- package/dist/smart-components/smart-textarea.js.map +1 -0
- package/dist/smart-components/smart-time-picker.d.ts +59 -0
- package/dist/smart-components/smart-time-picker.d.ts.map +1 -0
- package/dist/smart-components/smart-time-picker.js +129 -0
- package/dist/smart-components/smart-time-picker.js.map +1 -0
- package/dist/smart-components/smart-time-range-picker.d.ts +39 -0
- package/dist/smart-components/smart-time-range-picker.d.ts.map +1 -0
- package/dist/smart-components/smart-time-range-picker.js +26 -0
- package/dist/smart-components/smart-time-range-picker.js.map +1 -0
- package/dist/smart-components/smart-toaster.d.ts +10 -0
- package/dist/smart-components/smart-toaster.d.ts.map +1 -0
- package/dist/smart-components/smart-toaster.js +21 -0
- package/dist/smart-components/smart-toaster.js.map +1 -0
- package/dist/smart-components/smart-year-picker.d.ts +29 -0
- package/dist/smart-components/smart-year-picker.d.ts.map +1 -0
- package/dist/smart-components/smart-year-picker.js +43 -0
- package/dist/smart-components/smart-year-picker.js.map +1 -0
- package/dist/smart-components/spinner.d.ts +10 -0
- package/dist/smart-components/spinner.d.ts.map +1 -0
- package/dist/smart-components/spinner.js +5 -0
- package/dist/smart-components/spinner.js.map +1 -0
- package/dist/transfer-list-engine/index.d.ts +5 -0
- package/dist/transfer-list-engine/index.d.ts.map +1 -0
- package/dist/transfer-list-engine/index.js +3 -0
- package/dist/transfer-list-engine/index.js.map +1 -0
- package/dist/transfer-list-engine/transfer-list.d.ts +53 -0
- package/dist/transfer-list-engine/transfer-list.d.ts.map +1 -0
- package/dist/transfer-list-engine/transfer-list.js +190 -0
- package/dist/transfer-list-engine/transfer-list.js.map +1 -0
- package/dist/transfer-list-engine/transfer-utils.d.ts +30 -0
- package/dist/transfer-list-engine/transfer-utils.d.ts.map +1 -0
- package/dist/transfer-list-engine/transfer-utils.js +69 -0
- package/dist/transfer-list-engine/transfer-utils.js.map +1 -0
- package/dist/transfer-list-engine/types.d.ts +51 -0
- package/dist/transfer-list-engine/types.d.ts.map +1 -0
- package/dist/transfer-list-engine/types.js +2 -0
- package/dist/transfer-list-engine/types.js.map +1 -0
- package/dist/tree-engine/index.d.ts +6 -0
- package/dist/tree-engine/index.d.ts.map +1 -0
- package/dist/tree-engine/index.js +3 -0
- package/dist/tree-engine/index.js.map +1 -0
- package/dist/tree-engine/tree-utils.d.ts +84 -0
- package/dist/tree-engine/tree-utils.d.ts.map +1 -0
- package/dist/tree-engine/tree-utils.js +271 -0
- package/dist/tree-engine/tree-utils.js.map +1 -0
- package/dist/tree-engine/tree.d.ts +98 -0
- package/dist/tree-engine/tree.d.ts.map +1 -0
- package/dist/tree-engine/tree.js +430 -0
- package/dist/tree-engine/tree.js.map +1 -0
- package/dist/tree-engine/types.d.ts +85 -0
- package/dist/tree-engine/types.d.ts.map +1 -0
- package/dist/tree-engine/types.js +2 -0
- package/dist/tree-engine/types.js.map +1 -0
- package/dist/tree-engine/use-tree.d.ts +12 -0
- package/dist/tree-engine/use-tree.d.ts.map +1 -0
- package/dist/tree-engine/use-tree.js +34 -0
- package/dist/tree-engine/use-tree.js.map +1 -0
- package/package.json +158 -0
- package/src/styles/globals.css +161 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Wrap an item schema in the Spring Data `Page<T>` envelope, the response shape
|
|
4
|
+
* produced by a Spring `Page`/`Pageable` controller (and a common pagination
|
|
5
|
+
* contract generally):
|
|
6
|
+
*
|
|
7
|
+
* ```jsonc
|
|
8
|
+
* { "content": [...], "totalElements": 20, "totalPages": 4, "number": 0, "size": 5, ... }
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Validate a paged response with `pageSchema(itemSchema).parse(data)`, mirroring
|
|
12
|
+
* the `schema.parse` convention used by every other hook in this layer.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const usersPageSchema = pageSchema(userRowSchema);
|
|
17
|
+
* const page = usersPageSchema.parse(await api.get("/users", { params }));
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare const pageSchema: <TItem extends z.ZodTypeAny>(item: TItem) => z.ZodObject<{
|
|
21
|
+
content: z.ZodArray<TItem>;
|
|
22
|
+
totalElements: z.ZodNumber;
|
|
23
|
+
totalPages: z.ZodNumber;
|
|
24
|
+
number: z.ZodNumber;
|
|
25
|
+
size: z.ZodNumber;
|
|
26
|
+
first: z.ZodOptional<z.ZodBoolean>;
|
|
27
|
+
last: z.ZodOptional<z.ZodBoolean>;
|
|
28
|
+
numberOfElements: z.ZodOptional<z.ZodNumber>;
|
|
29
|
+
empty: z.ZodOptional<z.ZodBoolean>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
/**
|
|
32
|
+
* Convenience type mirroring what {@link pageSchema} parses into — the Spring
|
|
33
|
+
* Data `Page<T>` response envelope.
|
|
34
|
+
*
|
|
35
|
+
* (Named `SPageResponse` rather than `SPage` so it doesn't collide with the
|
|
36
|
+
* `SPage` page-layout component.)
|
|
37
|
+
*/
|
|
38
|
+
export interface SPageResponse<TItem> {
|
|
39
|
+
content: TItem[];
|
|
40
|
+
totalElements: number;
|
|
41
|
+
totalPages: number;
|
|
42
|
+
number: number;
|
|
43
|
+
size: number;
|
|
44
|
+
first?: boolean;
|
|
45
|
+
last?: boolean;
|
|
46
|
+
numberOfElements?: number;
|
|
47
|
+
empty?: boolean;
|
|
48
|
+
}
|
|
49
|
+
/** A single sort instruction. */
|
|
50
|
+
export interface ServerSort {
|
|
51
|
+
field: string;
|
|
52
|
+
dir: "asc" | "desc";
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* A single normalized filter, distilled from AG Grid's heterogeneous filter
|
|
56
|
+
* model into a flat, transport-agnostic shape an app can serialize however its
|
|
57
|
+
* backend expects.
|
|
58
|
+
*/
|
|
59
|
+
export interface ServerFilter {
|
|
60
|
+
/** Column field the filter applies to. */
|
|
61
|
+
field: string;
|
|
62
|
+
/** AG Grid filter family: `"text" | "number" | "date" | "set"`. */
|
|
63
|
+
filterType: string;
|
|
64
|
+
/** Operator, e.g. `"contains" | "equals" | "greaterThan" | "inRange" | "set"`. */
|
|
65
|
+
type: string;
|
|
66
|
+
/** Primary value (or the array of selected values for a set filter). */
|
|
67
|
+
value: unknown;
|
|
68
|
+
/** Upper bound for range operators (`inRange`). */
|
|
69
|
+
valueTo?: unknown;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* What {@link SmartServerGrid}'s `fetchRows` receives — everything the server
|
|
73
|
+
* needs to return one block of rows, in a framework-agnostic form. Both the AG
|
|
74
|
+
* Grid block coordinates (`startRow`/`endRow`) and the page-oriented equivalents
|
|
75
|
+
* (`page`/`pageSize`) are provided so callers can use whichever their API speaks.
|
|
76
|
+
*/
|
|
77
|
+
export interface ServerFetchParams {
|
|
78
|
+
/** Zero-based index of the first requested row (inclusive). */
|
|
79
|
+
startRow: number;
|
|
80
|
+
/** Index of the row after the last requested row (exclusive). */
|
|
81
|
+
endRow: number;
|
|
82
|
+
/** Zero-based page index — `floor(startRow / pageSize)`. */
|
|
83
|
+
page: number;
|
|
84
|
+
/** Rows per page/block — `endRow - startRow`. */
|
|
85
|
+
pageSize: number;
|
|
86
|
+
/** Active sort instructions, in priority order. */
|
|
87
|
+
sort: ServerSort[];
|
|
88
|
+
/** Active filters. */
|
|
89
|
+
filters: ServerFilter[];
|
|
90
|
+
}
|
|
91
|
+
/** What `fetchRows` resolves to: the block of rows plus the total row count. */
|
|
92
|
+
export interface ServerFetchResult<TRow> {
|
|
93
|
+
rows: TRow[];
|
|
94
|
+
/** Total rows on the server for the current filters (e.g. `Page.totalElements`). */
|
|
95
|
+
total: number;
|
|
96
|
+
}
|
|
97
|
+
/** Convert an AG Grid filter model into a flat list of {@link ServerFilter}. */
|
|
98
|
+
export declare const normalizeFilterModel: (filterModel: Record<string, unknown> | null | undefined) => ServerFilter[];
|
|
99
|
+
/**
|
|
100
|
+
* Translate one AG Grid Infinite-Row-Model `getRows` request into the
|
|
101
|
+
* normalized {@link ServerFetchParams} passed to a grid's `fetchRows`. Pure and
|
|
102
|
+
* framework-agnostic (AG Grid's `sortModel`/`filterModel` are accepted by
|
|
103
|
+
* structural shape, so this module never imports AG Grid).
|
|
104
|
+
*/
|
|
105
|
+
export declare const buildServerFetchParams: (input: {
|
|
106
|
+
startRow: number;
|
|
107
|
+
endRow: number;
|
|
108
|
+
sortModel: ReadonlyArray<{
|
|
109
|
+
colId: string;
|
|
110
|
+
sort: "asc" | "desc";
|
|
111
|
+
}>;
|
|
112
|
+
filterModel?: Record<string, unknown> | null;
|
|
113
|
+
}) => ServerFetchParams;
|
|
114
|
+
/**
|
|
115
|
+
* Serialize sort instructions into Spring's `sort=field,dir` strings (one per
|
|
116
|
+
* sorted column, in priority order). The page (`page`/`size`) and filter dialect
|
|
117
|
+
* vary per backend, so those stay app-owned — only the unambiguous sort encoding
|
|
118
|
+
* is provided here.
|
|
119
|
+
*
|
|
120
|
+
* @example `toSpringSort([{ field: "mrr", dir: "desc" }])` → `["mrr,desc"]`
|
|
121
|
+
*/
|
|
122
|
+
export declare const toSpringSort: (sort: ReadonlyArray<ServerSort>) => string[];
|
|
123
|
+
/**
|
|
124
|
+
* Serialize a single {@link ServerFilter} into the `<op>:<value>` value used by
|
|
125
|
+
* the Spring query dialect below:
|
|
126
|
+
*
|
|
127
|
+
* - `inRange` → `inRange:<from>:<to>`
|
|
128
|
+
* - set (array value) → `set:<a>,<b>,<c>`
|
|
129
|
+
* - everything else → `<op>:<value>`
|
|
130
|
+
*/
|
|
131
|
+
export declare const encodeSpringFilter: (filter: ServerFilter) => string;
|
|
132
|
+
/**
|
|
133
|
+
* Serialize normalized {@link ServerFetchParams} into a Spring Data query string
|
|
134
|
+
* (without the leading `?`) — the encoder half of the query contract:
|
|
135
|
+
*
|
|
136
|
+
* - paging → `page=0&size=20`
|
|
137
|
+
* - sorting → `sort=name,asc&sort=mrr,desc` (repeatable, Spring style)
|
|
138
|
+
* - filters → `<field>=<op>:<value>`, e.g. `name=contains:ada`,
|
|
139
|
+
* `mrr=inRange:1000:2000`, `status=set:Active,Pending`
|
|
140
|
+
*
|
|
141
|
+
* This is the default `buildQuery` for {@link createPageFetcher}. The matching
|
|
142
|
+
* *decoder* stays server/app-side (backends parse however they like), so it is
|
|
143
|
+
* intentionally not shipped here.
|
|
144
|
+
*/
|
|
145
|
+
export declare const buildSpringQuery: (params: ServerFetchParams) => string;
|
|
146
|
+
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/data-grid/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK;;;;;;;;;;iBAoB9D,CAAA;AAEJ;;;;;;GAMG;AACH,MAAM,WAAW,aAAa,CAAC,KAAK;IAClC,OAAO,EAAE,KAAK,EAAE,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAMD,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,KAAK,GAAG,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAA;IAClB,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,KAAK,EAAE,OAAO,CAAA;IACd,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAA;IAChB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAA;IACd,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAA;IACZ,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAA;IAChB,mDAAmD;IACnD,IAAI,EAAE,UAAU,EAAE,CAAA;IAClB,sBAAsB;IACtB,OAAO,EAAE,YAAY,EAAE,CAAA;CACxB;AAED,gFAAgF;AAChF,MAAM,WAAW,iBAAiB,CAAC,IAAI;IACrC,IAAI,EAAE,IAAI,EAAE,CAAA;IACZ,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAA;CACd;AAuCD,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,GAC/B,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,KACtD,YAAY,EAKd,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO;IAC5C,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC,CAAA;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC7C,KAAG,iBAUH,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,aAAa,CAAC,UAAU,CAAC,KAAG,MAAM,EAC7B,CAAA;AAExC;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,YAAY,KAAG,MAQzD,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,iBAAiB,KAAG,MAQ5D,CAAA"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/* -------------------------------------------------------------------------- */
|
|
3
|
+
/* Spring Data `Page<T>` shape */
|
|
4
|
+
/* -------------------------------------------------------------------------- */
|
|
5
|
+
/**
|
|
6
|
+
* Wrap an item schema in the Spring Data `Page<T>` envelope, the response shape
|
|
7
|
+
* produced by a Spring `Page`/`Pageable` controller (and a common pagination
|
|
8
|
+
* contract generally):
|
|
9
|
+
*
|
|
10
|
+
* ```jsonc
|
|
11
|
+
* { "content": [...], "totalElements": 20, "totalPages": 4, "number": 0, "size": 5, ... }
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* Validate a paged response with `pageSchema(itemSchema).parse(data)`, mirroring
|
|
15
|
+
* the `schema.parse` convention used by every other hook in this layer.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const usersPageSchema = pageSchema(userRowSchema);
|
|
20
|
+
* const page = usersPageSchema.parse(await api.get("/users", { params }));
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export const pageSchema = (item) => z.object({
|
|
24
|
+
/** The rows for this page. */
|
|
25
|
+
content: z.array(item),
|
|
26
|
+
/** Total rows across every page (drives the infinite-scroll row count). */
|
|
27
|
+
totalElements: z.number(),
|
|
28
|
+
/** Total number of pages. */
|
|
29
|
+
totalPages: z.number(),
|
|
30
|
+
/** Zero-based index of the current page. */
|
|
31
|
+
number: z.number(),
|
|
32
|
+
/** Page size used for this response. */
|
|
33
|
+
size: z.number(),
|
|
34
|
+
/** Whether this is the first page. */
|
|
35
|
+
first: z.boolean().optional(),
|
|
36
|
+
/** Whether this is the last page. */
|
|
37
|
+
last: z.boolean().optional(),
|
|
38
|
+
/** Number of rows actually present in `content`. */
|
|
39
|
+
numberOfElements: z.number().optional(),
|
|
40
|
+
/** Whether the page is empty. */
|
|
41
|
+
empty: z.boolean().optional(),
|
|
42
|
+
});
|
|
43
|
+
const normalizeFilterItem = (field, raw) => {
|
|
44
|
+
// For combined conditions we take the first condition (a pragmatic v1 choice —
|
|
45
|
+
// most server contracts accept a single predicate per field).
|
|
46
|
+
const item = raw.condition1 ?? raw;
|
|
47
|
+
const isSet = Array.isArray(item.values);
|
|
48
|
+
return {
|
|
49
|
+
field,
|
|
50
|
+
filterType: item.filterType ?? (isSet ? "set" : "text"),
|
|
51
|
+
type: item.type ?? (isSet ? "set" : "contains"),
|
|
52
|
+
value: isSet ? item.values : (item.filter ?? item.dateFrom),
|
|
53
|
+
valueTo: item.filterTo ?? item.dateTo,
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
/** Convert an AG Grid filter model into a flat list of {@link ServerFilter}. */
|
|
57
|
+
export const normalizeFilterModel = (filterModel) => {
|
|
58
|
+
if (!filterModel)
|
|
59
|
+
return [];
|
|
60
|
+
return Object.entries(filterModel).map(([field, raw]) => normalizeFilterItem(field, (raw ?? {})));
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Translate one AG Grid Infinite-Row-Model `getRows` request into the
|
|
64
|
+
* normalized {@link ServerFetchParams} passed to a grid's `fetchRows`. Pure and
|
|
65
|
+
* framework-agnostic (AG Grid's `sortModel`/`filterModel` are accepted by
|
|
66
|
+
* structural shape, so this module never imports AG Grid).
|
|
67
|
+
*/
|
|
68
|
+
export const buildServerFetchParams = (input) => {
|
|
69
|
+
const pageSize = Math.max(input.endRow - input.startRow, 1);
|
|
70
|
+
return {
|
|
71
|
+
startRow: input.startRow,
|
|
72
|
+
endRow: input.endRow,
|
|
73
|
+
pageSize,
|
|
74
|
+
page: Math.floor(input.startRow / pageSize),
|
|
75
|
+
sort: input.sortModel.map((s) => ({ field: s.colId, dir: s.sort })),
|
|
76
|
+
filters: normalizeFilterModel(input.filterModel),
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Serialize sort instructions into Spring's `sort=field,dir` strings (one per
|
|
81
|
+
* sorted column, in priority order). The page (`page`/`size`) and filter dialect
|
|
82
|
+
* vary per backend, so those stay app-owned — only the unambiguous sort encoding
|
|
83
|
+
* is provided here.
|
|
84
|
+
*
|
|
85
|
+
* @example `toSpringSort([{ field: "mrr", dir: "desc" }])` → `["mrr,desc"]`
|
|
86
|
+
*/
|
|
87
|
+
export const toSpringSort = (sort) => sort.map((s) => `${s.field},${s.dir}`);
|
|
88
|
+
/**
|
|
89
|
+
* Serialize a single {@link ServerFilter} into the `<op>:<value>` value used by
|
|
90
|
+
* the Spring query dialect below:
|
|
91
|
+
*
|
|
92
|
+
* - `inRange` → `inRange:<from>:<to>`
|
|
93
|
+
* - set (array value) → `set:<a>,<b>,<c>`
|
|
94
|
+
* - everything else → `<op>:<value>`
|
|
95
|
+
*/
|
|
96
|
+
export const encodeSpringFilter = (filter) => {
|
|
97
|
+
if (filter.type === "inRange") {
|
|
98
|
+
return `inRange:${String(filter.value)}:${String(filter.valueTo)}`;
|
|
99
|
+
}
|
|
100
|
+
if (Array.isArray(filter.value)) {
|
|
101
|
+
return `set:${filter.value.map(String).join(",")}`;
|
|
102
|
+
}
|
|
103
|
+
return `${filter.type}:${String(filter.value)}`;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Serialize normalized {@link ServerFetchParams} into a Spring Data query string
|
|
107
|
+
* (without the leading `?`) — the encoder half of the query contract:
|
|
108
|
+
*
|
|
109
|
+
* - paging → `page=0&size=20`
|
|
110
|
+
* - sorting → `sort=name,asc&sort=mrr,desc` (repeatable, Spring style)
|
|
111
|
+
* - filters → `<field>=<op>:<value>`, e.g. `name=contains:ada`,
|
|
112
|
+
* `mrr=inRange:1000:2000`, `status=set:Active,Pending`
|
|
113
|
+
*
|
|
114
|
+
* This is the default `buildQuery` for {@link createPageFetcher}. The matching
|
|
115
|
+
* *decoder* stays server/app-side (backends parse however they like), so it is
|
|
116
|
+
* intentionally not shipped here.
|
|
117
|
+
*/
|
|
118
|
+
export const buildSpringQuery = (params) => {
|
|
119
|
+
const sp = new URLSearchParams();
|
|
120
|
+
sp.set("page", String(params.page));
|
|
121
|
+
sp.set("size", String(params.pageSize));
|
|
122
|
+
for (const sort of toSpringSort(params.sort))
|
|
123
|
+
sp.append("sort", sort);
|
|
124
|
+
for (const filter of params.filters)
|
|
125
|
+
sp.append(filter.field, encodeSpringFilter(filter));
|
|
126
|
+
return sp.toString();
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/data-grid/pagination.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { type ForwardedRef, type ReactElement, type ReactNode } from "react";
|
|
2
|
+
import { type ServerFetchParams, type ServerFetchResult, type ServerFilter } from "./pagination";
|
|
3
|
+
import { type DataGridColumn, type DataGridDensity } from "./grid-internals";
|
|
4
|
+
import { type ServerSelection } from "./use-server-grid-selection";
|
|
5
|
+
import type { GridActionColumnOptions } from "./action-column";
|
|
6
|
+
export type { ServerSelection };
|
|
7
|
+
/** Imperative handle exposed via `ref`. */
|
|
8
|
+
export interface SmartServerGridHandle<TRow> {
|
|
9
|
+
/** Re-fetch the loaded blocks from the server, keeping scroll position. */
|
|
10
|
+
refresh: () => void;
|
|
11
|
+
/** Purge every block and re-fetch from the first row. */
|
|
12
|
+
reload: () => void;
|
|
13
|
+
/** All selected row ids (including rows not currently loaded). */
|
|
14
|
+
getSelectedIds: () => string[];
|
|
15
|
+
/** Selected rows currently loaded in the grid cache. */
|
|
16
|
+
getSelectedRows: () => TRow[];
|
|
17
|
+
/** Clear the selection. */
|
|
18
|
+
clearSelection: () => void;
|
|
19
|
+
}
|
|
20
|
+
export interface SmartServerGridProps<TRow> {
|
|
21
|
+
/** Column definitions. */
|
|
22
|
+
columns: DataGridColumn<TRow>[];
|
|
23
|
+
/**
|
|
24
|
+
* Fetch one block of rows from the server. Receives normalized paging, sort
|
|
25
|
+
* and filter params plus an `AbortSignal`, and resolves to `{ rows, total }`.
|
|
26
|
+
* Rejecting (or throwing) surfaces the error overlay with a **Retry** button.
|
|
27
|
+
*/
|
|
28
|
+
fetchRows: (params: ServerFetchParams, signal: AbortSignal) => Promise<ServerFetchResult<TRow>>;
|
|
29
|
+
/** Stable row id — required for selection and block reconciliation across pages. */
|
|
30
|
+
getRowId: (row: TRow) => string;
|
|
31
|
+
/**
|
|
32
|
+
* Config-driven Edit/Delete action column — pinned, permission-aware and
|
|
33
|
+
* row-aware, with per-row loading and optional delete confirmation. The
|
|
34
|
+
* column auto-hides when disabled or when every action is statically hidden.
|
|
35
|
+
*/
|
|
36
|
+
actionColumn?: GridActionColumnOptions<TRow>;
|
|
37
|
+
/**
|
|
38
|
+
* External filters merged into every fetch — e.g. driven by a dedicated search
|
|
39
|
+
* form rather than the column headers. Changing this array (by identity)
|
|
40
|
+
* resets to page 1 and refetches; it stays out of the grid's own state, so
|
|
41
|
+
* typing in the form never hits the server until you swap the array in.
|
|
42
|
+
*/
|
|
43
|
+
filters?: ServerFilter[];
|
|
44
|
+
/** Show the classic pager (`true`) or stream via infinite scroll (`false`). Default `true`. */
|
|
45
|
+
pagination?: boolean;
|
|
46
|
+
/** Rows per server block / page. Default `20`. */
|
|
47
|
+
pageSize?: number;
|
|
48
|
+
/** Page-size options shown in the pager selector. */
|
|
49
|
+
pageSizeOptions?: number[];
|
|
50
|
+
/** Row selection mode. Default `"none"`. */
|
|
51
|
+
selection?: "single" | "multiple" | "none";
|
|
52
|
+
/** Fired when selection changes — loaded selected rows plus every selected id. */
|
|
53
|
+
onSelectionChange?: (selection: ServerSelection<TRow>) => void;
|
|
54
|
+
/**
|
|
55
|
+
* Fired on row double-click with the full row object. Designed as the
|
|
56
|
+
* extension point for row-level actions (open a drawer, navigate, …).
|
|
57
|
+
*/
|
|
58
|
+
onRowDoubleClick?: (row: TRow) => void;
|
|
59
|
+
/**
|
|
60
|
+
* Per-column header filters (text/number/set inputs + filter menu). Default
|
|
61
|
+
* `true`. Set `false` to remove all in-header filtering — sorting stays
|
|
62
|
+
* enabled — when filtering is driven by an external search form instead.
|
|
63
|
+
*/
|
|
64
|
+
columnFilters?: boolean;
|
|
65
|
+
/** Floating filter row beneath the headers (only applies when `columnFilters`). Default `true`. */
|
|
66
|
+
floatingFilters?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* `localStorage` key. When set, the grid persists column order / size /
|
|
69
|
+
* visibility plus the active sort and filters, and restores them on reload.
|
|
70
|
+
*/
|
|
71
|
+
persistStateKey?: string;
|
|
72
|
+
/** Title rendered in the toolbar. */
|
|
73
|
+
title?: ReactNode;
|
|
74
|
+
/** Extra toolbar content rendered on the right. */
|
|
75
|
+
toolbarActions?: ReactNode;
|
|
76
|
+
/** Manual refresh button. Default `true`. */
|
|
77
|
+
refreshable?: boolean;
|
|
78
|
+
/** Column visibility menu. Default `true`. */
|
|
79
|
+
columnSelector?: boolean;
|
|
80
|
+
/** Export-to-Excel (`.xlsx`) button — exports the loaded/displayed rows. Default `true`. */
|
|
81
|
+
exportExcel?: boolean;
|
|
82
|
+
/** Export file name (without extension); a timestamp + `.xlsx` are appended. Default `"export"`. */
|
|
83
|
+
exportFileName?: string;
|
|
84
|
+
/** Row density. Default `"normal"`. */
|
|
85
|
+
density?: DataGridDensity;
|
|
86
|
+
/**
|
|
87
|
+
* Fill the parent instead of using a fixed `height`. The grid becomes a
|
|
88
|
+
* flex column (`h-full`) whose body grows to consume the remaining space and
|
|
89
|
+
* resizes automatically with its container — use inside a
|
|
90
|
+
* `flex-1 min-h-0` parent for a full-viewport layout. Default `false`.
|
|
91
|
+
*/
|
|
92
|
+
fill?: boolean;
|
|
93
|
+
/** Grid height when `fill` is `false`. Default `480`. */
|
|
94
|
+
height?: number | string;
|
|
95
|
+
/** Empty-state content shown when the server returns no rows. */
|
|
96
|
+
emptyState?: {
|
|
97
|
+
title?: string;
|
|
98
|
+
description?: string;
|
|
99
|
+
};
|
|
100
|
+
className?: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* `forwardRef` erases generics, so re-assert the generic call signature. This is
|
|
104
|
+
* the standard "generic forwardRef" cast — runtime is unchanged.
|
|
105
|
+
*/
|
|
106
|
+
export declare const SmartServerGrid: <TRow>(props: SmartServerGridProps<TRow> & {
|
|
107
|
+
ref?: ForwardedRef<SmartServerGridHandle<TRow>>;
|
|
108
|
+
}) => ReactElement;
|
|
109
|
+
//# sourceMappingURL=server-data-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-data-grid.d.ts","sourceRoot":"","sources":["../../src/data-grid/server-data-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAgBd,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,cAAc,CAAA;AAErB,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,eAAe,EAErB,MAAM,kBAAkB,CAAA;AAQzB,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAA;AACpC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAK9D,YAAY,EAAE,eAAe,EAAE,CAAA;AAE/B,2CAA2C;AAC3C,MAAM,WAAW,qBAAqB,CAAC,IAAI;IACzC,2EAA2E;IAC3E,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,yDAAyD;IACzD,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,kEAAkE;IAClE,cAAc,EAAE,MAAM,MAAM,EAAE,CAAA;IAC9B,wDAAwD;IACxD,eAAe,EAAE,MAAM,IAAI,EAAE,CAAA;IAC7B,2BAA2B;IAC3B,cAAc,EAAE,MAAM,IAAI,CAAA;CAC3B;AAED,MAAM,WAAW,oBAAoB,CAAC,IAAI;IACxC,0BAA0B;IAC1B,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAA;IAC/B;;;;OAIG;IACH,SAAS,EAAE,CACT,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;IACrC,oFAAoF;IACpF,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAA;IAC/B;;;;OAIG;IACH,YAAY,CAAC,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAA;IAE5C;;;;;OAKG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IAExB,+FAA+F;IAC/F,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAE1B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAA;IAC1C,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;IAC9D;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,CAAA;IAEtC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mGAAmG;IACnG,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,qCAAqC;IACrC,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,mDAAmD;IACnD,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,4FAA4F;IAC5F,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,oGAAoG;IACpG,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,uCAAuC;IACvC,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,iEAAiE;IACjE,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACrD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAsYD;;;GAGG;AACH,eAAO,MAAM,eAAe,EAA+B,CAAC,IAAI,EAC9D,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAAG;IAClC,GAAG,CAAC,EAAE,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAA;CAChD,KACE,YAAY,CAAA"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState, } from "react";
|
|
3
|
+
import { AgGridReact } from "ag-grid-react";
|
|
4
|
+
import { FileSpreadsheet } from "lucide-react";
|
|
5
|
+
import { cn } from "@iamsaroj/smart-ui/lib/utils";
|
|
6
|
+
import { downloadXlsx, timestampForFilename } from "@iamsaroj/smart-ui/lib/xlsx";
|
|
7
|
+
import { GridToolbar } from "./grid-toolbar";
|
|
8
|
+
import { SmartLoadingOverlay } from "@iamsaroj/smart-ui/smart-components/loading-overlay";
|
|
9
|
+
import { SmartPageError } from "@iamsaroj/smart-ui/smart-components/page/smart-page-error";
|
|
10
|
+
import { dataGridTheme } from "./grid-theme";
|
|
11
|
+
import { ensureGridModules, NoRowsOverlay, resolveColumnId, resolveColumnLabel, rowHeightByDensity, } from "./grid-internals";
|
|
12
|
+
import { collectGridExport, createGridDatasource, debounce, readPersistedGridState, writePersistedGridState, } from "./server-grid-internals";
|
|
13
|
+
import { useServerGridSelection, } from "./use-server-grid-selection";
|
|
14
|
+
import { useGridActionColumn, withActionColumn } from "./use-action-column";
|
|
15
|
+
/**
|
|
16
|
+
* Server-driven data grid built on AG Grid Community's **Infinite Row Model**.
|
|
17
|
+
* One datasource powers both modes: with `pagination` it renders a classic
|
|
18
|
+
* pager, without it streams rows via infinite scroll. Sorting runs server-side
|
|
19
|
+
* (each change re-queries through `fetchRows`) and filtering is supplied through
|
|
20
|
+
* the `filters` prop (e.g. a search form) rather than column headers. It ships
|
|
21
|
+
* loading + error/retry states, manual refresh, column resize/reorder, a column
|
|
22
|
+
* visibility menu, Excel export, row double-click, cross-page selection, an
|
|
23
|
+
* optional full-viewport `fill` layout, and column-state persistence.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* <SmartServerGrid
|
|
28
|
+
* columns={columns}
|
|
29
|
+
* getRowId={(u) => u.id}
|
|
30
|
+
* fetchRows={fetchUsersPage}
|
|
31
|
+
* filters={searchFilters} // from a search form
|
|
32
|
+
* columnFilters={false}
|
|
33
|
+
* pagination={false} // infinite scroll
|
|
34
|
+
* selection="multiple"
|
|
35
|
+
* fill
|
|
36
|
+
* />
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
const SmartServerGridInner = (props, ref) => {
|
|
40
|
+
const { columns, fetchRows, getRowId, actionColumn, filters, pagination = true, pageSize = 20, pageSizeOptions = [5, 10, 20, 50], selection = "none", onSelectionChange, onRowDoubleClick, columnFilters = true, floatingFilters = true, persistStateKey, title, toolbarActions, refreshable = true, columnSelector = true, exportExcel = true, exportFileName = "export", density = "normal", fill = false, height = 480, emptyState, className, } = props;
|
|
41
|
+
ensureGridModules();
|
|
42
|
+
// Latest props read by the (stable) datasource + grid callbacks, without
|
|
43
|
+
// re-creating them — recreating the datasource would reset the grid.
|
|
44
|
+
const gridApiRef = useRef(null);
|
|
45
|
+
const fetchRowsRef = useRef(fetchRows);
|
|
46
|
+
const getRowIdRef = useRef(getRowId);
|
|
47
|
+
const onRowDoubleClickRef = useRef(onRowDoubleClick);
|
|
48
|
+
const filtersRef = useRef(filters);
|
|
49
|
+
const persistKeyRef = useRef(persistStateKey);
|
|
50
|
+
useLayoutEffect(() => {
|
|
51
|
+
fetchRowsRef.current = fetchRows;
|
|
52
|
+
getRowIdRef.current = getRowId;
|
|
53
|
+
onRowDoubleClickRef.current = onRowDoubleClick;
|
|
54
|
+
filtersRef.current = filters;
|
|
55
|
+
persistKeyRef.current = persistStateKey;
|
|
56
|
+
});
|
|
57
|
+
const controllersRef = useRef(new Set());
|
|
58
|
+
const [initialLoading, setInitialLoading] = useState(true);
|
|
59
|
+
const [error, setError] = useState(null);
|
|
60
|
+
// In-flight block count drives the "loading more" bar shown while infinite
|
|
61
|
+
// scroll fetches subsequent pages (the overlay only covers the first load).
|
|
62
|
+
const inFlightRef = useRef(0);
|
|
63
|
+
const [loadingMore, setLoadingMore] = useState(false);
|
|
64
|
+
const [columnVisibility, setColumnVisibility] = useState(() => {
|
|
65
|
+
const initial = {};
|
|
66
|
+
columns.forEach((column, index) => {
|
|
67
|
+
initial[resolveColumnId(column, index)] = column.hide !== true;
|
|
68
|
+
});
|
|
69
|
+
return initial;
|
|
70
|
+
});
|
|
71
|
+
// Cross-page selection lives in a dedicated hook — the selected-id set is the
|
|
72
|
+
// source of truth, so a selection survives block reloads (see the hook).
|
|
73
|
+
const gridSelection = useServerGridSelection(gridApiRef, onSelectionChange);
|
|
74
|
+
const actionColumnDef = useGridActionColumn(actionColumn);
|
|
75
|
+
const effectiveColumns = useMemo(() => withActionColumn(columns, actionColumnDef), [columns, actionColumnDef]);
|
|
76
|
+
const saveState = useCallback(() => {
|
|
77
|
+
const api = gridApiRef.current;
|
|
78
|
+
const key = persistKeyRef.current;
|
|
79
|
+
if (!api || !key)
|
|
80
|
+
return;
|
|
81
|
+
writePersistedGridState(key, {
|
|
82
|
+
columnState: api.getColumnState(),
|
|
83
|
+
filterModel: api.getFilterModel(),
|
|
84
|
+
});
|
|
85
|
+
}, []);
|
|
86
|
+
const schedulePersistRef = useRef(null);
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
schedulePersistRef.current = debounce(saveState, 300);
|
|
89
|
+
}, [saveState]);
|
|
90
|
+
const schedulePersist = useCallback(() => schedulePersistRef.current?.(), []);
|
|
91
|
+
const restoreState = useCallback((api) => {
|
|
92
|
+
const key = persistKeyRef.current;
|
|
93
|
+
if (!key)
|
|
94
|
+
return;
|
|
95
|
+
const parsed = readPersistedGridState(key);
|
|
96
|
+
if (!parsed)
|
|
97
|
+
return;
|
|
98
|
+
if (parsed.columnState)
|
|
99
|
+
api.applyColumnState({ state: parsed.columnState, applyOrder: true });
|
|
100
|
+
if (parsed.filterModel)
|
|
101
|
+
api.setFilterModel(parsed.filterModel);
|
|
102
|
+
}, []);
|
|
103
|
+
// External filters changed (Search / Reset) → reset to page 1 and refetch.
|
|
104
|
+
// Skip the mount run so the datasource's own first fetch isn't duplicated.
|
|
105
|
+
const didMountRef = useRef(false);
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
if (!didMountRef.current) {
|
|
108
|
+
didMountRef.current = true;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
setError(null);
|
|
112
|
+
setInitialLoading(true);
|
|
113
|
+
gridApiRef.current?.purgeInfiniteCache();
|
|
114
|
+
}, [filters]);
|
|
115
|
+
const defaultColDef = useMemo(() => ({
|
|
116
|
+
sortable: true,
|
|
117
|
+
filter: columnFilters,
|
|
118
|
+
floatingFilter: columnFilters && floatingFilters,
|
|
119
|
+
resizable: true,
|
|
120
|
+
flex: 1,
|
|
121
|
+
minWidth: 120,
|
|
122
|
+
}), [columnFilters, floatingFilters]);
|
|
123
|
+
const rowSelection = useMemo(() => {
|
|
124
|
+
// No `headerCheckbox` in the infinite row model (AG Grid warning #129) — a
|
|
125
|
+
// "select all" can't span rows the client hasn't loaded. Per-row checkboxes
|
|
126
|
+
// plus our cross-page id tracking are what make sense here. `multiRow`
|
|
127
|
+
// defaults headerCheckbox to true, so it must be disabled explicitly.
|
|
128
|
+
if (selection === "multiple")
|
|
129
|
+
return { mode: "multiRow", checkboxes: true, headerCheckbox: false };
|
|
130
|
+
if (selection === "single")
|
|
131
|
+
return { mode: "singleRow", checkboxes: true };
|
|
132
|
+
return undefined;
|
|
133
|
+
}, [selection]);
|
|
134
|
+
const toggleableColumns = useMemo(() => columns.map((column, index) => {
|
|
135
|
+
const id = resolveColumnId(column, index);
|
|
136
|
+
return { id, label: resolveColumnLabel(column, id) };
|
|
137
|
+
}), [columns]);
|
|
138
|
+
const getRowIdCb = useCallback((params) => getRowIdRef.current(params.data), []);
|
|
139
|
+
const handleGridReady = useCallback((event) => {
|
|
140
|
+
gridApiRef.current = event.api;
|
|
141
|
+
// Restore sort/filter/columns BEFORE the first fetch so the first request
|
|
142
|
+
// already reflects the persisted state, then start the datasource.
|
|
143
|
+
restoreState(event.api);
|
|
144
|
+
// Created once per grid instantiation (gridReady fires once), so the
|
|
145
|
+
// datasource identity is stable for the grid's lifetime — a new one
|
|
146
|
+
// would purge the cache. It reads the latest `fetchRows` / `filters`
|
|
147
|
+
// through ref getters; the translation/abort/error flow lives in
|
|
148
|
+
// `createGridDatasource` (server-grid-internals), where it is unit-tested.
|
|
149
|
+
event.api.setGridOption("datasource", createGridDatasource({
|
|
150
|
+
getFetchRows: () => fetchRowsRef.current,
|
|
151
|
+
getExternalFilters: () => filtersRef.current,
|
|
152
|
+
controllers: controllersRef.current,
|
|
153
|
+
onFetchStart: () => {
|
|
154
|
+
inFlightRef.current += 1;
|
|
155
|
+
setLoadingMore(true);
|
|
156
|
+
},
|
|
157
|
+
onSuccess: () => setError(null),
|
|
158
|
+
onError: setError,
|
|
159
|
+
onSettled: () => {
|
|
160
|
+
setInitialLoading(false);
|
|
161
|
+
inFlightRef.current = Math.max(0, inFlightRef.current - 1);
|
|
162
|
+
if (inFlightRef.current === 0)
|
|
163
|
+
setLoadingMore(false);
|
|
164
|
+
},
|
|
165
|
+
}));
|
|
166
|
+
}, [restoreState]);
|
|
167
|
+
const handleRowDoubleClicked = useCallback((event) => {
|
|
168
|
+
if (event.data)
|
|
169
|
+
onRowDoubleClickRef.current?.(event.data);
|
|
170
|
+
}, []);
|
|
171
|
+
const handleRetry = useCallback(() => {
|
|
172
|
+
setError(null);
|
|
173
|
+
setInitialLoading(true);
|
|
174
|
+
gridApiRef.current?.purgeInfiniteCache();
|
|
175
|
+
}, []);
|
|
176
|
+
const handleRefresh = useCallback(() => {
|
|
177
|
+
setError(null);
|
|
178
|
+
gridApiRef.current?.refreshInfiniteCache();
|
|
179
|
+
}, []);
|
|
180
|
+
const handleToggleColumn = useCallback((id, visible) => {
|
|
181
|
+
setColumnVisibility((prev) => ({ ...prev, [id]: visible }));
|
|
182
|
+
gridApiRef.current?.setColumnsVisible([id], visible);
|
|
183
|
+
schedulePersist();
|
|
184
|
+
}, [schedulePersist]);
|
|
185
|
+
const handleExport = useCallback(() => {
|
|
186
|
+
const api = gridApiRef.current;
|
|
187
|
+
if (!api)
|
|
188
|
+
return;
|
|
189
|
+
// Export the displayed columns (respecting visibility + order) and the rows
|
|
190
|
+
// currently loaded in the cache, using each cell's *displayed* value.
|
|
191
|
+
const { headers, rows } = collectGridExport(api);
|
|
192
|
+
const sheetName = typeof title === "string" && title.length > 0 ? title : "Export";
|
|
193
|
+
downloadXlsx(`${exportFileName}-${timestampForFilename()}`, {
|
|
194
|
+
name: sheetName,
|
|
195
|
+
headers,
|
|
196
|
+
rows,
|
|
197
|
+
});
|
|
198
|
+
}, [exportFileName, title]);
|
|
199
|
+
useImperativeHandle(ref, () => ({
|
|
200
|
+
refresh: () => gridApiRef.current?.refreshInfiniteCache(),
|
|
201
|
+
reload: handleRetry,
|
|
202
|
+
getSelectedIds: gridSelection.getSelectedIds,
|
|
203
|
+
getSelectedRows: gridSelection.collectLoadedSelectedRows,
|
|
204
|
+
clearSelection: gridSelection.clearSelection,
|
|
205
|
+
}), [
|
|
206
|
+
handleRetry,
|
|
207
|
+
gridSelection.getSelectedIds,
|
|
208
|
+
gridSelection.collectLoadedSelectedRows,
|
|
209
|
+
gridSelection.clearSelection,
|
|
210
|
+
]);
|
|
211
|
+
const showToolbar = title ||
|
|
212
|
+
refreshable ||
|
|
213
|
+
columnSelector ||
|
|
214
|
+
exportExcel ||
|
|
215
|
+
toolbarActions ||
|
|
216
|
+
selection !== "none";
|
|
217
|
+
return (_jsxs("div", { className: cn("flex flex-col gap-3", fill && "h-full min-h-0", className), style: fill ? { height: "100%" } : undefined, children: [showToolbar ? (_jsx(GridToolbar, { className: cn("shrink-0", fill && "px-4 pt-4"), title: title, leadingContent: selection !== "none" && gridSelection.selectedCount > 0 ? (_jsxs("span", { className: "text-sm text-muted-foreground", children: [gridSelection.selectedCount, " selected"] })) : null, toolbarActions: toolbarActions, onRefresh: refreshable ? handleRefresh : undefined, columns: columnSelector
|
|
218
|
+
? toggleableColumns.map((column) => ({
|
|
219
|
+
...column,
|
|
220
|
+
visible: columnVisibility[column.id] ?? true,
|
|
221
|
+
}))
|
|
222
|
+
: undefined, onToggleColumn: handleToggleColumn, onExport: exportExcel ? handleExport : undefined, exportIcon: _jsx(FileSpreadsheet, { className: "h-4 w-4" }) })) : null, _jsxs("div", { className: cn("relative w-full", fill && "min-h-0 flex-1"), style: fill ? undefined : { height }, children: [_jsx(AgGridReact, { className: "h-full w-full", theme: dataGridTheme, rowModelType: "infinite", cacheBlockSize: pageSize, columnDefs: effectiveColumns, defaultColDef: defaultColDef, suppressCellFocus: true, rowSelection: rowSelection, pagination: pagination,
|
|
223
|
+
// Page-size props only apply to the pager; passing them in infinite
|
|
224
|
+
// scroll mode trips AG Grid warning #94 when `pageSize` isn't one of
|
|
225
|
+
// the selector options (`cacheBlockSize` already carries the size).
|
|
226
|
+
paginationPageSize: pagination ? pageSize : undefined, paginationPageSizeSelector: pagination ? pageSizeOptions : undefined, rowHeight: rowHeightByDensity[density], getRowId: getRowIdCb, animateRows: true, noRowsOverlayComponent: NoRowsOverlay, noRowsOverlayComponentParams: {
|
|
227
|
+
title: emptyState?.title,
|
|
228
|
+
description: emptyState?.description,
|
|
229
|
+
}, onGridReady: handleGridReady, onModelUpdated: gridSelection.reapplySelection, onRowSelected: gridSelection.handleRowSelected, onRowDoubleClicked: handleRowDoubleClicked, onSortChanged: schedulePersist, onFilterChanged: schedulePersist, onColumnMoved: schedulePersist, onColumnResized: schedulePersist, onColumnVisible: schedulePersist, onColumnPinned: schedulePersist }), loadingMore && !initialLoading && !error ? (_jsx("div", { role: "status", "aria-live": "polite", "aria-label": "Loading more rows", className: "pointer-events-none absolute inset-x-0 top-0 z-40 h-0.5 overflow-hidden bg-primary/20", children: _jsx("div", { className: "h-full w-1/4 bg-primary", style: {
|
|
230
|
+
animation: "grid-indeterminate 1.1s ease-in-out infinite",
|
|
231
|
+
} }) })) : null, initialLoading && !error ? (_jsx(SmartLoadingOverlay, { loading: true, label: "Loading data\u2026" })) : null, error ? (_jsx(SmartPageError, { variant: "overlay", title: "Couldn\u2019t load data", description: error, onRetry: handleRetry, retryLabel: "Retry" })) : null] })] }));
|
|
232
|
+
};
|
|
233
|
+
const SmartServerGridForwarded = forwardRef(SmartServerGridInner);
|
|
234
|
+
SmartServerGridForwarded.displayName = "SmartServerGrid";
|
|
235
|
+
/**
|
|
236
|
+
* `forwardRef` erases generics, so re-assert the generic call signature. This is
|
|
237
|
+
* the standard "generic forwardRef" cast — runtime is unchanged.
|
|
238
|
+
*/
|
|
239
|
+
export const SmartServerGrid = SmartServerGridForwarded;
|
|
240
|
+
//# sourceMappingURL=server-data-grid.js.map
|