@umodeapporg/ui 0.0.0-canary.ca10e69
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 +78 -0
- package/dist/assets/images/common-pngs/sparkles.png.js +5 -0
- package/dist/assets/images/common-pngs/sparkles.png.js.map +1 -0
- package/dist/assets/umode-ui.css +467 -0
- package/dist/components/DateTime/DatePicker.d.ts +21 -0
- package/dist/components/DateTime/DatePicker.js +124 -0
- package/dist/components/DateTime/DatePicker.js.map +1 -0
- package/dist/components/DateTime/DateRangePicker.d.ts +21 -0
- package/dist/components/DateTime/DateRangePicker.js +208 -0
- package/dist/components/DateTime/DateRangePicker.js.map +1 -0
- package/dist/components/Form/ControlledButton.d.ts +25 -0
- package/dist/components/Form/ControlledButton.js +73 -0
- package/dist/components/Form/ControlledButton.js.map +1 -0
- package/dist/components/Form/ControlledCheckbox.d.ts +16 -0
- package/dist/components/Form/ControlledCheckbox.js +115 -0
- package/dist/components/Form/ControlledCheckbox.js.map +1 -0
- package/dist/components/Form/ControlledDialog.d.ts +51 -0
- package/dist/components/Form/ControlledDialog.js +191 -0
- package/dist/components/Form/ControlledDialog.js.map +1 -0
- package/dist/components/Form/ControlledDialogPrimitives.d.ts +53 -0
- package/dist/components/Form/ControlledDialogPrimitives.js +245 -0
- package/dist/components/Form/ControlledDialogPrimitives.js.map +1 -0
- package/dist/components/Form/ControlledDrawer.d.ts +37 -0
- package/dist/components/Form/ControlledDrawer.js +241 -0
- package/dist/components/Form/ControlledDrawer.js.map +1 -0
- package/dist/components/Form/ControlledForm/InputField.d.ts +11 -0
- package/dist/components/Form/ControlledForm/InputField.js +75 -0
- package/dist/components/Form/ControlledForm/InputField.js.map +1 -0
- package/dist/components/Form/ControlledForm/index.d.ts +27 -0
- package/dist/components/Form/ControlledForm/index.js +113 -0
- package/dist/components/Form/ControlledForm/index.js.map +1 -0
- package/dist/components/Form/ControlledImage/Img.d.ts +11 -0
- package/dist/components/Form/ControlledImage/Img.js +29 -0
- package/dist/components/Form/ControlledImage/Img.js.map +1 -0
- package/dist/components/Form/ControlledImage/index.d.ts +33 -0
- package/dist/components/Form/ControlledImage/index.js +110 -0
- package/dist/components/Form/ControlledImage/index.js.map +1 -0
- package/dist/components/Form/ControlledImage/useImage.d.ts +9 -0
- package/dist/components/Form/ControlledImage/useImage.js +110 -0
- package/dist/components/Form/ControlledImage/useImage.js.map +1 -0
- package/dist/components/Form/ControlledInput.d.ts +23 -0
- package/dist/components/Form/ControlledInput.js +52 -0
- package/dist/components/Form/ControlledInput.js.map +1 -0
- package/dist/components/Form/ControlledRadio.d.ts +15 -0
- package/dist/components/Form/ControlledRadio.js +91 -0
- package/dist/components/Form/ControlledRadio.js.map +1 -0
- package/dist/components/Form/ControlledSelect.d.ts +53 -0
- package/dist/components/Form/ControlledSelect.js +797 -0
- package/dist/components/Form/ControlledSelect.js.map +1 -0
- package/dist/components/Form/ControlledSwitch.d.ts +21 -0
- package/dist/components/Form/ControlledSwitch.js +107 -0
- package/dist/components/Form/ControlledSwitch.js.map +1 -0
- package/dist/components/Form/ControlledTabs.d.ts +75 -0
- package/dist/components/Form/ControlledTabs.js +515 -0
- package/dist/components/Form/ControlledTabs.js.map +1 -0
- package/dist/components/Form/ControlledTabsPrimitives.d.ts +43 -0
- package/dist/components/Form/ControlledTabsPrimitives.js +48 -0
- package/dist/components/Form/ControlledTabsPrimitives.js.map +1 -0
- package/dist/components/Form/ControlledTextarea.d.ts +22 -0
- package/dist/components/Form/ControlledTextarea.js +46 -0
- package/dist/components/Form/ControlledTextarea.js.map +1 -0
- package/dist/components/Form/ControlledTimeline.d.ts +26 -0
- package/dist/components/Form/ControlledTimeline.js +60 -0
- package/dist/components/Form/ControlledTimeline.js.map +1 -0
- package/dist/components/Form/ControlledViewToggle.d.ts +74 -0
- package/dist/components/Form/ControlledViewToggle.js +157 -0
- package/dist/components/Form/ControlledViewToggle.js.map +1 -0
- package/dist/components/Form/ControlledVoiceTextarea.d.ts +13 -0
- package/dist/components/Form/ControlledVoiceTextarea.js +99 -0
- package/dist/components/Form/ControlledVoiceTextarea.js.map +1 -0
- package/dist/components/Form/CurrencyInput.d.ts +8 -0
- package/dist/components/Form/CurrencyInput.js +17 -0
- package/dist/components/Form/CurrencyInput.js.map +1 -0
- package/dist/components/Form/FieldLabel.d.ts +16 -0
- package/dist/components/Form/FieldLabel.js +7 -0
- package/dist/components/Form/FieldLabel.js.map +1 -0
- package/dist/components/Form/RichTextEditor.d.ts +86 -0
- package/dist/components/Form/RichTextEditor.js +581 -0
- package/dist/components/Form/RichTextEditor.js.map +1 -0
- package/dist/components/Form/attachments/AttachmentPreviewList.d.ts +22 -0
- package/dist/components/Form/attachments/AttachmentPreviewList.js +95 -0
- package/dist/components/Form/attachments/AttachmentPreviewList.js.map +1 -0
- package/dist/components/Form/attachments/FileDropzone.d.ts +12 -0
- package/dist/components/Form/attachments/FileDropzone.js +84 -0
- package/dist/components/Form/attachments/FileDropzone.js.map +1 -0
- package/dist/components/Navigation/ControlledBreadcrumb.d.ts +13 -0
- package/dist/components/Navigation/ControlledBreadcrumb.js +24 -0
- package/dist/components/Navigation/ControlledBreadcrumb.js.map +1 -0
- package/dist/components/Navigation/ErrorPage.d.ts +2 -0
- package/dist/components/Navigation/ErrorPage.js +27 -0
- package/dist/components/Navigation/ErrorPage.js.map +1 -0
- package/dist/components/Navigation/LinkButton.d.ts +26 -0
- package/dist/components/Navigation/LinkButton.js +82 -0
- package/dist/components/Navigation/LinkButton.js.map +1 -0
- package/dist/components/Navigation/PageTitle.d.ts +95 -0
- package/dist/components/Navigation/PageTitle.js +241 -0
- package/dist/components/Navigation/PageTitle.js.map +1 -0
- package/dist/components/Navigation/PageTitleCollapseContext.d.ts +13 -0
- package/dist/components/Navigation/PageTitleCollapseContext.js +9 -0
- package/dist/components/Navigation/PageTitleCollapseContext.js.map +1 -0
- package/dist/components/Navigation/PageTitleNavigationContext.d.ts +21 -0
- package/dist/components/Navigation/PageTitleNavigationContext.js +17 -0
- package/dist/components/Navigation/PageTitleNavigationContext.js.map +1 -0
- package/dist/components/Navigation/ReactRouterNavigationAdapter.d.ts +7 -0
- package/dist/components/Navigation/ReactRouterNavigationAdapter.js +27 -0
- package/dist/components/Navigation/ReactRouterNavigationAdapter.js.map +1 -0
- package/dist/components/Navigation/UiNavigationContext.d.ts +38 -0
- package/dist/components/Navigation/UiNavigationContext.js +44 -0
- package/dist/components/Navigation/UiNavigationContext.js.map +1 -0
- package/dist/components/Search/UnifiedSearchBar.d.ts +31 -0
- package/dist/components/Search/UnifiedSearchBar.js +167 -0
- package/dist/components/Search/UnifiedSearchBar.js.map +1 -0
- package/dist/components/Search/filters/ActiveFiltersBar.d.ts +15 -0
- package/dist/components/Search/filters/ActiveFiltersBar.js +48 -0
- package/dist/components/Search/filters/ActiveFiltersBar.js.map +1 -0
- package/dist/components/Search/filters/FilterChipsRow.d.ts +17 -0
- package/dist/components/Search/filters/FilterChipsRow.js +113 -0
- package/dist/components/Search/filters/FilterChipsRow.js.map +1 -0
- package/dist/components/Search/filters/FilterFieldControl.d.ts +19 -0
- package/dist/components/Search/filters/FilterFieldControl.js +390 -0
- package/dist/components/Search/filters/FilterFieldControl.js.map +1 -0
- package/dist/components/Search/filters/FiltersButton.d.ts +24 -0
- package/dist/components/Search/filters/FiltersButton.js +52 -0
- package/dist/components/Search/filters/FiltersButton.js.map +1 -0
- package/dist/components/Search/filters/FiltersForm.d.ts +18 -0
- package/dist/components/Search/filters/FiltersForm.js +112 -0
- package/dist/components/Search/filters/FiltersForm.js.map +1 -0
- package/dist/components/Search/filters/FiltersPanel.d.ts +32 -0
- package/dist/components/Search/filters/FiltersPanel.js +266 -0
- package/dist/components/Search/filters/FiltersPanel.js.map +1 -0
- package/dist/components/Search/filters/FiltersSummaryTooltip.d.ts +20 -0
- package/dist/components/Search/filters/FiltersSummaryTooltip.js +26 -0
- package/dist/components/Search/filters/FiltersSummaryTooltip.js.map +1 -0
- package/dist/components/Search/filters/filterTypes.d.ts +162 -0
- package/dist/components/Search/filters/filterTypes.js +2 -0
- package/dist/components/Search/filters/filterTypes.js.map +1 -0
- package/dist/components/Search/filters/filterValues.d.ts +22 -0
- package/dist/components/Search/filters/filterValues.js +91 -0
- package/dist/components/Search/filters/filterValues.js.map +1 -0
- package/dist/components/Search/filters/filtersLayout.d.ts +4 -0
- package/dist/components/Search/filters/filtersLayout.js +18 -0
- package/dist/components/Search/filters/filtersLayout.js.map +1 -0
- package/dist/components/Search/filters/index.d.ts +11 -0
- package/dist/components/Search/filters/index.js +32 -0
- package/dist/components/Search/filters/index.js.map +1 -0
- package/dist/components/Search/filters/useFilters.d.ts +33 -0
- package/dist/components/Search/filters/useFilters.js +162 -0
- package/dist/components/Search/filters/useFilters.js.map +1 -0
- package/dist/components/Search/index.d.ts +2 -0
- package/dist/components/Search/index.js +34 -0
- package/dist/components/Search/index.js.map +1 -0
- package/dist/components/Shell/AppHeader.d.ts +25 -0
- package/dist/components/Shell/AppHeader.js +69 -0
- package/dist/components/Shell/AppHeader.js.map +1 -0
- package/dist/components/Shell/AppShell.d.ts +22 -0
- package/dist/components/Shell/AppShell.js +146 -0
- package/dist/components/Shell/AppShell.js.map +1 -0
- package/dist/components/Shell/AppSidebar.d.ts +20 -0
- package/dist/components/Shell/AppSidebar.js +93 -0
- package/dist/components/Shell/AppSidebar.js.map +1 -0
- package/dist/components/Shell/LanguageToggle.d.ts +8 -0
- package/dist/components/Shell/LanguageToggle.js +59 -0
- package/dist/components/Shell/LanguageToggle.js.map +1 -0
- package/dist/components/Shell/PumpkinGlyph.d.ts +13 -0
- package/dist/components/Shell/PumpkinGlyph.js +29 -0
- package/dist/components/Shell/PumpkinGlyph.js.map +1 -0
- package/dist/components/Shell/SidebarMenu.d.ts +29 -0
- package/dist/components/Shell/SidebarMenu.js +254 -0
- package/dist/components/Shell/SidebarMenu.js.map +1 -0
- package/dist/components/Shell/ThemeToggle.d.ts +18 -0
- package/dist/components/Shell/ThemeToggle.js +68 -0
- package/dist/components/Shell/ThemeToggle.js.map +1 -0
- package/dist/components/Shell/headerControlStyles.d.ts +10 -0
- package/dist/components/Shell/headerControlStyles.js +11 -0
- package/dist/components/Shell/headerControlStyles.js.map +1 -0
- package/dist/components/Shell/sidebarFavorites.d.ts +21 -0
- package/dist/components/Shell/sidebarFavorites.js +69 -0
- package/dist/components/Shell/sidebarFavorites.js.map +1 -0
- package/dist/components/Shell/useSidebarState.d.ts +14 -0
- package/dist/components/Shell/useSidebarState.js +106 -0
- package/dist/components/Shell/useSidebarState.js.map +1 -0
- package/dist/components/UI/AccordionIcon.d.ts +10 -0
- package/dist/components/UI/AccordionIcon.js +22 -0
- package/dist/components/UI/AccordionIcon.js.map +1 -0
- package/dist/components/UI/AlertInfo/dismissedAlertsStore.d.ts +2 -0
- package/dist/components/UI/AlertInfo/dismissedAlertsStore.js +22 -0
- package/dist/components/UI/AlertInfo/dismissedAlertsStore.js.map +1 -0
- package/dist/components/UI/AlertInfo/index.d.ts +30 -0
- package/dist/components/UI/AlertInfo/index.js +78 -0
- package/dist/components/UI/AlertInfo/index.js.map +1 -0
- package/dist/components/UI/BaseDataCard.d.ts +27 -0
- package/dist/components/UI/BaseDataCard.js +170 -0
- package/dist/components/UI/BaseDataCard.js.map +1 -0
- package/dist/components/UI/BulkActionBar.d.ts +35 -0
- package/dist/components/UI/BulkActionBar.js +127 -0
- package/dist/components/UI/BulkActionBar.js.map +1 -0
- package/dist/components/UI/Chips/OutlinedChip.d.ts +42 -0
- package/dist/components/UI/Chips/OutlinedChip.js +190 -0
- package/dist/components/UI/Chips/OutlinedChip.js.map +1 -0
- package/dist/components/UI/Chips/StatusChip.d.ts +8 -0
- package/dist/components/UI/Chips/StatusChip.js +33 -0
- package/dist/components/UI/Chips/StatusChip.js.map +1 -0
- package/dist/components/UI/Chips/chipTones.d.ts +6 -0
- package/dist/components/UI/Chips/chipTones.js +53 -0
- package/dist/components/UI/Chips/chipTones.js.map +1 -0
- package/dist/components/UI/ColorSwatch.d.ts +30 -0
- package/dist/components/UI/ColorSwatch.js +53 -0
- package/dist/components/UI/ColorSwatch.js.map +1 -0
- package/dist/components/UI/Colors.d.ts +10 -0
- package/dist/components/UI/Colors.js +41 -0
- package/dist/components/UI/Colors.js.map +1 -0
- package/dist/components/UI/ControlledAccordion.d.ts +38 -0
- package/dist/components/UI/ControlledAccordion.js +95 -0
- package/dist/components/UI/ControlledAccordion.js.map +1 -0
- package/dist/components/UI/ControlledCollapse.d.ts +18 -0
- package/dist/components/UI/ControlledCollapse.js +40 -0
- package/dist/components/UI/ControlledCollapse.js.map +1 -0
- package/dist/components/UI/ControlledMenu.d.ts +79 -0
- package/dist/components/UI/ControlledMenu.js +234 -0
- package/dist/components/UI/ControlledMenu.js.map +1 -0
- package/dist/components/UI/ControlledPopover.d.ts +59 -0
- package/dist/components/UI/ControlledPopover.js +189 -0
- package/dist/components/UI/ControlledPopover.js.map +1 -0
- package/dist/components/UI/ControlledProgress.d.ts +13 -0
- package/dist/components/UI/ControlledProgress.js +46 -0
- package/dist/components/UI/ControlledProgress.js.map +1 -0
- package/dist/components/UI/ControlledSlider.d.ts +15 -0
- package/dist/components/UI/ControlledSlider.js +34 -0
- package/dist/components/UI/ControlledSlider.js.map +1 -0
- package/dist/components/UI/ControlledTooltip.d.ts +21 -0
- package/dist/components/UI/ControlledTooltip.js +146 -0
- package/dist/components/UI/ControlledTooltip.js.map +1 -0
- package/dist/components/UI/CustomBadge.d.ts +15 -0
- package/dist/components/UI/CustomBadge.js +34 -0
- package/dist/components/UI/CustomBadge.js.map +1 -0
- package/dist/components/UI/CustomCard.d.ts +13 -0
- package/dist/components/UI/CustomCard.js +36 -0
- package/dist/components/UI/CustomCard.js.map +1 -0
- package/dist/components/UI/CustomChart.d.ts +21 -0
- package/dist/components/UI/CustomChart.js +108 -0
- package/dist/components/UI/CustomChart.js.map +1 -0
- package/dist/components/UI/DataTable/DataTable.d.ts +108 -0
- package/dist/components/UI/DataTable/DataTable.js +606 -0
- package/dist/components/UI/DataTable/DataTable.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableAutoCard.d.ts +20 -0
- package/dist/components/UI/DataTable/DataTableAutoCard.js +39 -0
- package/dist/components/UI/DataTable/DataTableAutoCard.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBody.d.ts +33 -0
- package/dist/components/UI/DataTable/DataTableBody.js +260 -0
- package/dist/components/UI/DataTable/DataTableBody.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBodyCell.d.ts +21 -0
- package/dist/components/UI/DataTable/DataTableBodyCell.js +88 -0
- package/dist/components/UI/DataTable/DataTableBodyCell.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBulkEditButton.d.ts +11 -0
- package/dist/components/UI/DataTable/DataTableBulkEditButton.js +24 -0
- package/dist/components/UI/DataTable/DataTableBulkEditButton.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBulkEditDialog.d.ts +25 -0
- package/dist/components/UI/DataTable/DataTableBulkEditDialog.js +282 -0
- package/dist/components/UI/DataTable/DataTableBulkEditDialog.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.d.ts +13 -0
- package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.js +95 -0
- package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.d.ts +20 -0
- package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.js +94 -0
- package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableColumnToggle.d.ts +34 -0
- package/dist/components/UI/DataTable/DataTableColumnToggle.js +170 -0
- package/dist/components/UI/DataTable/DataTableColumnToggle.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableDetailModal.d.ts +17 -0
- package/dist/components/UI/DataTable/DataTableDetailModal.js +109 -0
- package/dist/components/UI/DataTable/DataTableDetailModal.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableDetailPanel.d.ts +21 -0
- package/dist/components/UI/DataTable/DataTableDetailPanel.js +51 -0
- package/dist/components/UI/DataTable/DataTableDetailPanel.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableDetailTable.d.ts +35 -0
- package/dist/components/UI/DataTable/DataTableDetailTable.js +129 -0
- package/dist/components/UI/DataTable/DataTableDetailTable.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableEditModeButton.d.ts +12 -0
- package/dist/components/UI/DataTable/DataTableEditModeButton.js +29 -0
- package/dist/components/UI/DataTable/DataTableEditModeButton.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableFilters.d.ts +20 -0
- package/dist/components/UI/DataTable/DataTableFilters.js +65 -0
- package/dist/components/UI/DataTable/DataTableFilters.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableHead.d.ts +27 -0
- package/dist/components/UI/DataTable/DataTableHead.js +198 -0
- package/dist/components/UI/DataTable/DataTableHead.js.map +1 -0
- package/dist/components/UI/DataTable/DataTablePagination.d.ts +15 -0
- package/dist/components/UI/DataTable/DataTablePagination.js +149 -0
- package/dist/components/UI/DataTable/DataTablePagination.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableSaveButton.d.ts +13 -0
- package/dist/components/UI/DataTable/DataTableSaveButton.js +21 -0
- package/dist/components/UI/DataTable/DataTableSaveButton.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableSegmentedTabs.d.ts +8 -0
- package/dist/components/UI/DataTable/DataTableSegmentedTabs.js +35 -0
- package/dist/components/UI/DataTable/DataTableSegmentedTabs.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableStates.d.ts +17 -0
- package/dist/components/UI/DataTable/DataTableStates.js +59 -0
- package/dist/components/UI/DataTable/DataTableStates.js.map +1 -0
- package/dist/components/UI/DataTable/DataTableToolbar.d.ts +28 -0
- package/dist/components/UI/DataTable/DataTableToolbar.js +110 -0
- package/dist/components/UI/DataTable/DataTableToolbar.js.map +1 -0
- package/dist/components/UI/DataTable/applyDataTableFilters.d.ts +16 -0
- package/dist/components/UI/DataTable/applyDataTableFilters.js +54 -0
- package/dist/components/UI/DataTable/applyDataTableFilters.js.map +1 -0
- package/dist/components/UI/DataTable/bulkEditValues.d.ts +8 -0
- package/dist/components/UI/DataTable/bulkEditValues.js +13 -0
- package/dist/components/UI/DataTable/bulkEditValues.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableActionsCell.d.ts +7 -0
- package/dist/components/UI/DataTable/cells/DataTableActionsCell.js +55 -0
- package/dist/components/UI/DataTable/cells/DataTableActionsCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableCell.d.ts +15 -0
- package/dist/components/UI/DataTable/cells/DataTableCell.js +63 -0
- package/dist/components/UI/DataTable/cells/DataTableCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableCodeCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableCodeCell.js +7 -0
- package/dist/components/UI/DataTable/cells/DataTableCodeCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableColorCell.d.ts +7 -0
- package/dist/components/UI/DataTable/cells/DataTableColorCell.js +10 -0
- package/dist/components/UI/DataTable/cells/DataTableColorCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableCountCell.d.ts +5 -0
- package/dist/components/UI/DataTable/cells/DataTableCountCell.js +7 -0
- package/dist/components/UI/DataTable/cells/DataTableCountCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableDateCell.d.ts +5 -0
- package/dist/components/UI/DataTable/cells/DataTableDateCell.js +12 -0
- package/dist/components/UI/DataTable/cells/DataTableDateCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableEditableCell.d.ts +23 -0
- package/dist/components/UI/DataTable/cells/DataTableEditableCell.js +242 -0
- package/dist/components/UI/DataTable/cells/DataTableEditableCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.d.ts +10 -0
- package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js +7 -0
- package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableOriginCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableOriginCell.js +25 -0
- package/dist/components/UI/DataTable/cells/DataTableOriginCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableStatusCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableStatusCell.js +24 -0
- package/dist/components/UI/DataTable/cells/DataTableStatusCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableTagCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableTagCell.js +25 -0
- package/dist/components/UI/DataTable/cells/DataTableTagCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableTextCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableTextCell.js +7 -0
- package/dist/components/UI/DataTable/cells/DataTableTextCell.js.map +1 -0
- package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.d.ts +6 -0
- package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js +10 -0
- package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js.map +1 -0
- package/dist/components/UI/DataTable/dataTableClasses.d.ts +12 -0
- package/dist/components/UI/DataTable/dataTableClasses.js +29 -0
- package/dist/components/UI/DataTable/dataTableClasses.js.map +1 -0
- package/dist/components/UI/DataTable/dataTableColumnWidths.d.ts +15 -0
- package/dist/components/UI/DataTable/dataTableColumnWidths.js +153 -0
- package/dist/components/UI/DataTable/dataTableColumnWidths.js.map +1 -0
- package/dist/components/UI/DataTable/dataTableColumnsStore.d.ts +12 -0
- package/dist/components/UI/DataTable/dataTableColumnsStore.js +68 -0
- package/dist/components/UI/DataTable/dataTableColumnsStore.js.map +1 -0
- package/dist/components/UI/DataTable/dataTableMotion.d.ts +6 -0
- package/dist/components/UI/DataTable/dataTableMotion.js +15 -0
- package/dist/components/UI/DataTable/dataTableMotion.js.map +1 -0
- package/dist/components/UI/DataTable/grid/GridFillHandle.d.ts +8 -0
- package/dist/components/UI/DataTable/grid/GridFillHandle.js +70 -0
- package/dist/components/UI/DataTable/grid/GridFillHandle.js.map +1 -0
- package/dist/components/UI/DataTable/grid/GridProvider.d.ts +36 -0
- package/dist/components/UI/DataTable/grid/GridProvider.js +128 -0
- package/dist/components/UI/DataTable/grid/GridProvider.js.map +1 -0
- package/dist/components/UI/DataTable/grid/fill/fillStrategies.d.ts +19 -0
- package/dist/components/UI/DataTable/grid/fill/fillStrategies.js +73 -0
- package/dist/components/UI/DataTable/grid/fill/fillStrategies.js.map +1 -0
- package/dist/components/UI/DataTable/grid/gridStore.d.ts +82 -0
- package/dist/components/UI/DataTable/grid/gridStore.js +259 -0
- package/dist/components/UI/DataTable/grid/gridStore.js.map +1 -0
- package/dist/components/UI/DataTable/grid/gridTypes.d.ts +59 -0
- package/dist/components/UI/DataTable/grid/gridTypes.js +27 -0
- package/dist/components/UI/DataTable/grid/gridTypes.js.map +1 -0
- package/dist/components/UI/DataTable/grid/useGridFillApply.d.ts +18 -0
- package/dist/components/UI/DataTable/grid/useGridFillApply.js +74 -0
- package/dist/components/UI/DataTable/grid/useGridFillApply.js.map +1 -0
- package/dist/components/UI/DataTable/grid/useGridInstance.d.ts +27 -0
- package/dist/components/UI/DataTable/grid/useGridInstance.js +41 -0
- package/dist/components/UI/DataTable/grid/useGridInstance.js.map +1 -0
- package/dist/components/UI/DataTable/grid/useGridKeyboard.d.ts +25 -0
- package/dist/components/UI/DataTable/grid/useGridKeyboard.js +135 -0
- package/dist/components/UI/DataTable/grid/useGridKeyboard.js.map +1 -0
- package/dist/components/UI/DataTable/index.d.ts +19 -0
- package/dist/components/UI/DataTable/index.js +34 -0
- package/dist/components/UI/DataTable/index.js.map +1 -0
- package/dist/components/UI/DataTable/types.d.ts +535 -0
- package/dist/components/UI/DataTable/types.js +13 -0
- package/dist/components/UI/DataTable/types.js.map +1 -0
- package/dist/components/UI/DataTable/useCellEditingState.d.ts +20 -0
- package/dist/components/UI/DataTable/useCellEditingState.js +33 -0
- package/dist/components/UI/DataTable/useCellEditingState.js.map +1 -0
- package/dist/components/UI/DataTable/useColumnOrder.d.ts +25 -0
- package/dist/components/UI/DataTable/useColumnOrder.js +94 -0
- package/dist/components/UI/DataTable/useColumnOrder.js.map +1 -0
- package/dist/components/UI/DataTable/useColumnSizing.d.ts +9 -0
- package/dist/components/UI/DataTable/useColumnSizing.js +21 -0
- package/dist/components/UI/DataTable/useColumnSizing.js.map +1 -0
- package/dist/components/UI/DataTable/useColumnVisibility.d.ts +19 -0
- package/dist/components/UI/DataTable/useColumnVisibility.js +47 -0
- package/dist/components/UI/DataTable/useColumnVisibility.js.map +1 -0
- package/dist/components/UI/DataTable/useDataTableCommitQueue.d.ts +69 -0
- package/dist/components/UI/DataTable/useDataTableCommitQueue.js +220 -0
- package/dist/components/UI/DataTable/useDataTableCommitQueue.js.map +1 -0
- package/dist/components/UI/DataTable/useDataTableEditBuffer.d.ts +36 -0
- package/dist/components/UI/DataTable/useDataTableEditBuffer.js +29 -0
- package/dist/components/UI/DataTable/useDataTableEditBuffer.js.map +1 -0
- package/dist/components/UI/DataTable/useDataTableInstance.d.ts +65 -0
- package/dist/components/UI/DataTable/useDataTableInstance.js +336 -0
- package/dist/components/UI/DataTable/useDataTableInstance.js.map +1 -0
- package/dist/components/UI/DataTable/useDataTableSource.d.ts +85 -0
- package/dist/components/UI/DataTable/useDataTableSource.js +199 -0
- package/dist/components/UI/DataTable/useDataTableSource.js.map +1 -0
- package/dist/components/UI/DataTable/useDataTableUndoHistory.d.ts +30 -0
- package/dist/components/UI/DataTable/useDataTableUndoHistory.js +130 -0
- package/dist/components/UI/DataTable/useDataTableUndoHistory.js.map +1 -0
- package/dist/components/UI/DataTable/useFlipRows.d.ts +22 -0
- package/dist/components/UI/DataTable/useFlipRows.js +90 -0
- package/dist/components/UI/DataTable/useFlipRows.js.map +1 -0
- package/dist/components/UI/ErrorBoundary.d.ts +20 -0
- package/dist/components/UI/ErrorBoundary.js +36 -0
- package/dist/components/UI/ErrorBoundary.js.map +1 -0
- package/dist/components/UI/Flow/FlowAnnotationDraftPreview.d.ts +6 -0
- package/dist/components/UI/Flow/FlowAnnotationDraftPreview.js +65 -0
- package/dist/components/UI/Flow/FlowAnnotationDraftPreview.js.map +1 -0
- package/dist/components/UI/Flow/FlowAnnotationNode.d.ts +34 -0
- package/dist/components/UI/Flow/FlowAnnotationNode.js +231 -0
- package/dist/components/UI/Flow/FlowAnnotationNode.js.map +1 -0
- package/dist/components/UI/Flow/FlowAnnotationToolbar.d.ts +32 -0
- package/dist/components/UI/Flow/FlowAnnotationToolbar.js +298 -0
- package/dist/components/UI/Flow/FlowAnnotationToolbar.js.map +1 -0
- package/dist/components/UI/Flow/FlowBlockNode.d.ts +35 -0
- package/dist/components/UI/Flow/FlowBlockNode.js +91 -0
- package/dist/components/UI/Flow/FlowBlockNode.js.map +1 -0
- package/dist/components/UI/Flow/FlowCanvas.d.ts +23 -0
- package/dist/components/UI/Flow/FlowCanvas.js +559 -0
- package/dist/components/UI/Flow/FlowCanvas.js.map +1 -0
- package/dist/components/UI/Flow/FlowConnectionEdge.d.ts +18 -0
- package/dist/components/UI/Flow/FlowConnectionEdge.js +116 -0
- package/dist/components/UI/Flow/FlowConnectionEdge.js.map +1 -0
- package/dist/components/UI/Flow/FlowEditorProvider.d.ts +17 -0
- package/dist/components/UI/Flow/FlowEditorProvider.js +27 -0
- package/dist/components/UI/Flow/FlowEditorProvider.js.map +1 -0
- package/dist/components/UI/Flow/FlowInspector.d.ts +11 -0
- package/dist/components/UI/Flow/FlowInspector.js +131 -0
- package/dist/components/UI/Flow/FlowInspector.js.map +1 -0
- package/dist/components/UI/Flow/FlowIssueList.d.ts +8 -0
- package/dist/components/UI/Flow/FlowIssueList.js +55 -0
- package/dist/components/UI/Flow/FlowIssueList.js.map +1 -0
- package/dist/components/UI/Flow/FlowLaneMap.d.ts +30 -0
- package/dist/components/UI/Flow/FlowLaneMap.js +206 -0
- package/dist/components/UI/Flow/FlowLaneMap.js.map +1 -0
- package/dist/components/UI/Flow/FlowNodeShell.d.ts +20 -0
- package/dist/components/UI/Flow/FlowNodeShell.js +81 -0
- package/dist/components/UI/Flow/FlowNodeShell.js.map +1 -0
- package/dist/components/UI/Flow/FlowResizablePanel.d.ts +20 -0
- package/dist/components/UI/Flow/FlowResizablePanel.js +118 -0
- package/dist/components/UI/Flow/FlowResizablePanel.js.map +1 -0
- package/dist/components/UI/Flow/FlowSelectionBar.d.ts +10 -0
- package/dist/components/UI/Flow/FlowSelectionBar.js +56 -0
- package/dist/components/UI/Flow/FlowSelectionBar.js.map +1 -0
- package/dist/components/UI/Flow/FlowZoomControls.d.ts +12 -0
- package/dist/components/UI/Flow/FlowZoomControls.js +54 -0
- package/dist/components/UI/Flow/FlowZoomControls.js.map +1 -0
- package/dist/components/UI/Flow/flowAnnotations.d.ts +38 -0
- package/dist/components/UI/Flow/flowAnnotations.js +123 -0
- package/dist/components/UI/Flow/flowAnnotations.js.map +1 -0
- package/dist/components/UI/Flow/flowBlockRegistry.d.ts +12 -0
- package/dist/components/UI/Flow/flowBlockRegistry.js +20 -0
- package/dist/components/UI/Flow/flowBlockRegistry.js.map +1 -0
- package/dist/components/UI/Flow/flowEditorStore.d.ts +73 -0
- package/dist/components/UI/Flow/flowEditorStore.js +402 -0
- package/dist/components/UI/Flow/flowEditorStore.js.map +1 -0
- package/dist/components/UI/Flow/flowGraph.d.ts +32 -0
- package/dist/components/UI/Flow/flowGraph.js +157 -0
- package/dist/components/UI/Flow/flowGraph.js.map +1 -0
- package/dist/components/UI/Flow/flowTypes.d.ts +104 -0
- package/dist/components/UI/Flow/flowTypes.js +2 -0
- package/dist/components/UI/Flow/flowTypes.js.map +1 -0
- package/dist/components/UI/Flow/flowViewport.d.ts +25 -0
- package/dist/components/UI/Flow/flowViewport.js +31 -0
- package/dist/components/UI/Flow/flowViewport.js.map +1 -0
- package/dist/components/UI/Flow/index.d.ts +13 -0
- package/dist/components/UI/Flow/index.js +44 -0
- package/dist/components/UI/Flow/index.js.map +1 -0
- package/dist/components/UI/Flow/useFlowAnnotationDrawing.d.ts +25 -0
- package/dist/components/UI/Flow/useFlowAnnotationDrawing.js +117 -0
- package/dist/components/UI/Flow/useFlowAnnotationDrawing.js.map +1 -0
- package/dist/components/UI/Flow/useFlowLabels.d.ts +10 -0
- package/dist/components/UI/Flow/useFlowLabels.js +51 -0
- package/dist/components/UI/Flow/useFlowLabels.js.map +1 -0
- package/dist/components/UI/GeneratedByAI.d.ts +2 -0
- package/dist/components/UI/GeneratedByAI.js +12 -0
- package/dist/components/UI/GeneratedByAI.js.map +1 -0
- package/dist/components/UI/HorizontalScrollArea.d.ts +22 -0
- package/dist/components/UI/HorizontalScrollArea.js +74 -0
- package/dist/components/UI/HorizontalScrollArea.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.d.ts +21 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js +235 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.d.ts +8 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.js +67 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.d.ts +8 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.js +39 -0
- package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/imageAiReview.d.ts +22 -0
- package/dist/components/UI/ImageAiAdjust/imageAiReview.js +37 -0
- package/dist/components/UI/ImageAiAdjust/imageAiReview.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/imageAiVerification.d.ts +19 -0
- package/dist/components/UI/ImageAiAdjust/imageAiVerification.js +25 -0
- package/dist/components/UI/ImageAiAdjust/imageAiVerification.js.map +1 -0
- package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.d.ts +52 -0
- package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js +109 -0
- package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/AnnotationEditor.d.ts +13 -0
- package/dist/components/UI/ImageAnnotator/AnnotationEditor.js +362 -0
- package/dist/components/UI/ImageAnnotator/AnnotationEditor.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.d.ts +15 -0
- package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js +61 -0
- package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/annotationStyle.d.ts +28 -0
- package/dist/components/UI/ImageAnnotator/annotationStyle.js +56 -0
- package/dist/components/UI/ImageAnnotator/annotationStyle.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationCropFrame.d.ts +16 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationCropFrame.js +156 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationCropFrame.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.d.ts +17 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js +329 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.d.ts +10 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js +127 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.d.ts +26 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js +241 -0
- package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.d.ts +15 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js +77 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.d.ts +11 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js +70 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.d.ts +12 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.js +89 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.d.ts +8 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js +58 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.d.ts +13 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js +183 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.d.ts +17 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js +79 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.d.ts +15 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js +46 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.d.ts +10 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js +91 -0
- package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.d.ts +21 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js +45 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationCrop.d.ts +12 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationCrop.js +64 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationCrop.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationElements.d.ts +15 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js +165 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationExport.d.ts +15 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js +23 -0
- package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.d.ts +8 -0
- package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js +10 -0
- package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.d.ts +9 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js +56 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.d.ts +29 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js +160 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.d.ts +14 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js +80 -0
- package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.d.ts +5 -0
- package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js +23 -0
- package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.d.ts +2 -0
- package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js +27 -0
- package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js.map +1 -0
- package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.d.ts +98 -0
- package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js +13 -0
- package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js.map +1 -0
- package/dist/components/UI/ImageMaskPainter/index.d.ts +24 -0
- package/dist/components/UI/ImageMaskPainter/index.js +284 -0
- package/dist/components/UI/ImageMaskPainter/index.js.map +1 -0
- package/dist/components/UI/ImageMaskPainter/maskStrokes.d.ts +19 -0
- package/dist/components/UI/ImageMaskPainter/maskStrokes.js +71 -0
- package/dist/components/UI/ImageMaskPainter/maskStrokes.js.map +1 -0
- package/dist/components/UI/ImagePlaceholder.d.ts +24 -0
- package/dist/components/UI/ImagePlaceholder.js +29 -0
- package/dist/components/UI/ImagePlaceholder.js.map +1 -0
- package/dist/components/UI/ImageZoomOverlay.d.ts +7 -0
- package/dist/components/UI/ImageZoomOverlay.js +53 -0
- package/dist/components/UI/ImageZoomOverlay.js.map +1 -0
- package/dist/components/UI/InformationCard.d.ts +26 -0
- package/dist/components/UI/InformationCard.js +89 -0
- package/dist/components/UI/InformationCard.js.map +1 -0
- package/dist/components/UI/Kanban/KanbanBoard.d.ts +26 -0
- package/dist/components/UI/Kanban/KanbanBoard.js +91 -0
- package/dist/components/UI/Kanban/KanbanBoard.js.map +1 -0
- package/dist/components/UI/Kanban/KanbanCard.d.ts +22 -0
- package/dist/components/UI/Kanban/KanbanCard.js +47 -0
- package/dist/components/UI/Kanban/KanbanCard.js.map +1 -0
- package/dist/components/UI/Kanban/KanbanLane.d.ts +37 -0
- package/dist/components/UI/Kanban/KanbanLane.js +77 -0
- package/dist/components/UI/Kanban/KanbanLane.js.map +1 -0
- package/dist/components/UI/Kanban/index.d.ts +4 -0
- package/dist/components/UI/Kanban/index.js +11 -0
- package/dist/components/UI/Kanban/index.js.map +1 -0
- package/dist/components/UI/Kanban/kanbanBoardContext.d.ts +13 -0
- package/dist/components/UI/Kanban/kanbanBoardContext.js +13 -0
- package/dist/components/UI/Kanban/kanbanBoardContext.js.map +1 -0
- package/dist/components/UI/LazyMarkdown.d.ts +5 -0
- package/dist/components/UI/LazyMarkdown.js +8 -0
- package/dist/components/UI/LazyMarkdown.js.map +1 -0
- package/dist/components/UI/LoadingPage.d.ts +2 -0
- package/dist/components/UI/LoadingPage.js +13 -0
- package/dist/components/UI/LoadingPage.js.map +1 -0
- package/dist/components/UI/LoadingSpinner.d.ts +14 -0
- package/dist/components/UI/LoadingSpinner.js +32 -0
- package/dist/components/UI/LoadingSpinner.js.map +1 -0
- package/dist/components/UI/MaterialSymbol/consts.d.ts +2 -0
- package/dist/components/UI/MaterialSymbol/consts.js +3472 -0
- package/dist/components/UI/MaterialSymbol/consts.js.map +1 -0
- package/dist/components/UI/MaterialSymbol/index.d.ts +18 -0
- package/dist/components/UI/MaterialSymbol/index.js +51 -0
- package/dist/components/UI/MaterialSymbol/index.js.map +1 -0
- package/dist/components/UI/MaterialSymbol/types.d.ts +37 -0
- package/dist/components/UI/MaterialSymbol/types.js +2 -0
- package/dist/components/UI/MaterialSymbol/types.js.map +1 -0
- package/dist/components/UI/NoDataFound/index.d.ts +31 -0
- package/dist/components/UI/NoDataFound/index.js +215 -0
- package/dist/components/UI/NoDataFound/index.js.map +1 -0
- package/dist/components/UI/NoDataFound/noDataFoundPresets.d.ts +31 -0
- package/dist/components/UI/NoDataFound/noDataFoundPresets.js +99 -0
- package/dist/components/UI/NoDataFound/noDataFoundPresets.js.map +1 -0
- package/dist/components/UI/ReferenceCard.d.ts +16 -0
- package/dist/components/UI/ReferenceCard.js +59 -0
- package/dist/components/UI/ReferenceCard.js.map +1 -0
- package/dist/components/UI/RichTextContent.d.ts +14 -0
- package/dist/components/UI/RichTextContent.js +30 -0
- package/dist/components/UI/RichTextContent.js.map +1 -0
- package/dist/components/UI/SkeletonLoading.d.ts +9 -0
- package/dist/components/UI/SkeletonLoading.js +20 -0
- package/dist/components/UI/SkeletonLoading.js.map +1 -0
- package/dist/components/UI/ThreeDots.d.ts +11 -0
- package/dist/components/UI/ThreeDots.js +22 -0
- package/dist/components/UI/ThreeDots.js.map +1 -0
- package/dist/components/UI/Toast.d.ts +16 -0
- package/dist/components/UI/Toast.js +81 -0
- package/dist/components/UI/Toast.js.map +1 -0
- package/dist/components/UI/ToastHost.d.ts +2 -0
- package/dist/components/UI/ToastHost.js +25 -0
- package/dist/components/UI/ToastHost.js.map +1 -0
- package/dist/components/UI/TypingEffect.d.ts +10 -0
- package/dist/components/UI/TypingEffect.js +31 -0
- package/dist/components/UI/TypingEffect.js.map +1 -0
- package/dist/components/UI/UmodeLogo.d.ts +10 -0
- package/dist/components/UI/UmodeLogo.js +128 -0
- package/dist/components/UI/UmodeLogo.js.map +1 -0
- package/dist/components/UI/UserMenu.d.ts +50 -0
- package/dist/components/UI/UserMenu.js +212 -0
- package/dist/components/UI/UserMenu.js.map +1 -0
- package/dist/components/UI/UsersAvatar.d.ts +7 -0
- package/dist/components/UI/UsersAvatar.js +29 -0
- package/dist/components/UI/UsersAvatar.js.map +1 -0
- package/dist/components/UI/access/UiAccessContext.d.ts +21 -0
- package/dist/components/UI/access/UiAccessContext.js +14 -0
- package/dist/components/UI/access/UiAccessContext.js.map +1 -0
- package/dist/components/UI/cells/ArrayCell.d.ts +5 -0
- package/dist/components/UI/cells/ArrayCell.js +25 -0
- package/dist/components/UI/cells/ArrayCell.js.map +1 -0
- package/dist/components/UI/cells/BooleanCell.d.ts +5 -0
- package/dist/components/UI/cells/BooleanCell.js +22 -0
- package/dist/components/UI/cells/BooleanCell.js.map +1 -0
- package/dist/components/UI/cells/DetailsTableCell.d.ts +7 -0
- package/dist/components/UI/cells/DetailsTableCell.js +30 -0
- package/dist/components/UI/cells/DetailsTableCell.js.map +1 -0
- package/dist/components/UI/cells/ProductImageCell.d.ts +5 -0
- package/dist/components/UI/cells/ProductImageCell.js +21 -0
- package/dist/components/UI/cells/ProductImageCell.js.map +1 -0
- package/dist/components/UI/cells/UrlLinkCell.d.ts +6 -0
- package/dist/components/UI/cells/UrlLinkCell.js +19 -0
- package/dist/components/UI/cells/UrlLinkCell.js.map +1 -0
- package/dist/components/Upload/SimpleUploaderComponent.d.ts +9 -0
- package/dist/components/Upload/SimpleUploaderComponent.js +72 -0
- package/dist/components/Upload/SimpleUploaderComponent.js.map +1 -0
- package/dist/components/Upload/UploaderComponent.d.ts +29 -0
- package/dist/components/Upload/UploaderComponent.js +241 -0
- package/dist/components/Upload/UploaderComponent.js.map +1 -0
- package/dist/components/Upload/XlsExportButton.d.ts +13 -0
- package/dist/components/Upload/XlsExportButton.js +47 -0
- package/dist/components/Upload/XlsExportButton.js.map +1 -0
- package/dist/helpers/composeRefs.d.ts +7 -0
- package/dist/helpers/composeRefs.js +14 -0
- package/dist/helpers/composeRefs.js.map +1 -0
- package/dist/helpers/dateHelpers.d.ts +47 -0
- package/dist/helpers/dateHelpers.js +69 -0
- package/dist/helpers/dateHelpers.js.map +1 -0
- package/dist/helpers/fileAttachments.d.ts +3 -0
- package/dist/helpers/fileAttachments.js +17 -0
- package/dist/helpers/fileAttachments.js.map +1 -0
- package/dist/helpers/formatHelpers.d.ts +36 -0
- package/dist/helpers/formatHelpers.js +65 -0
- package/dist/helpers/formatHelpers.js.map +1 -0
- package/dist/helpers/iconFont.d.ts +9 -0
- package/dist/helpers/iconFont.js +37 -0
- package/dist/helpers/iconFont.js.map +1 -0
- package/dist/helpers/imageCompression.d.ts +5 -0
- package/dist/helpers/imageCompression.js +49 -0
- package/dist/helpers/imageCompression.js.map +1 -0
- package/dist/helpers/imageFile.d.ts +32 -0
- package/dist/helpers/imageFile.js +108 -0
- package/dist/helpers/imageFile.js.map +1 -0
- package/dist/helpers/layeredSurfaces.d.ts +28 -0
- package/dist/helpers/layeredSurfaces.js +19 -0
- package/dist/helpers/layeredSurfaces.js.map +1 -0
- package/dist/helpers/mathHelpers.d.ts +14 -0
- package/dist/helpers/mathHelpers.js +13 -0
- package/dist/helpers/mathHelpers.js.map +1 -0
- package/dist/helpers/mergeClasses.d.ts +10 -0
- package/dist/helpers/mergeClasses.js +34 -0
- package/dist/helpers/mergeClasses.js.map +1 -0
- package/dist/helpers/moduleLoadErrorHelpers.d.ts +1 -0
- package/dist/helpers/moduleLoadErrorHelpers.js +25 -0
- package/dist/helpers/moduleLoadErrorHelpers.js.map +1 -0
- package/dist/helpers/objectHelpers.d.ts +13 -0
- package/dist/helpers/objectHelpers.js +59 -0
- package/dist/helpers/objectHelpers.js.map +1 -0
- package/dist/helpers/portalHost.d.ts +10 -0
- package/dist/helpers/portalHost.js +7 -0
- package/dist/helpers/portalHost.js.map +1 -0
- package/dist/helpers/richText.d.ts +46 -0
- package/dist/helpers/richText.js +197 -0
- package/dist/helpers/richText.js.map +1 -0
- package/dist/helpers/stringHelpers.d.ts +45 -0
- package/dist/helpers/stringHelpers.js +57 -0
- package/dist/helpers/stringHelpers.js.map +1 -0
- package/dist/helpers/themeSkins.d.ts +12 -0
- package/dist/helpers/themeSkins.js +13 -0
- package/dist/helpers/themeSkins.js.map +1 -0
- package/dist/helpers/themeTokens.d.ts +28 -0
- package/dist/helpers/themeTokens.js +35 -0
- package/dist/helpers/themeTokens.js.map +1 -0
- package/dist/helpers/uiErrorPresenter.d.ts +21 -0
- package/dist/helpers/uiErrorPresenter.js +10 -0
- package/dist/helpers/uiErrorPresenter.js.map +1 -0
- package/dist/helpers/uiLogger.d.ts +8 -0
- package/dist/helpers/uiLogger.js +16 -0
- package/dist/helpers/uiLogger.js.map +1 -0
- package/dist/helpers/uiPreferences.d.ts +13 -0
- package/dist/helpers/uiPreferences.js +35 -0
- package/dist/helpers/uiPreferences.js.map +1 -0
- package/dist/helpers/urlParamSync.d.ts +19 -0
- package/dist/helpers/urlParamSync.js +54 -0
- package/dist/helpers/urlParamSync.js.map +1 -0
- package/dist/helpers/utilityHelpers.d.ts +81 -0
- package/dist/helpers/utilityHelpers.js +133 -0
- package/dist/helpers/utilityHelpers.js.map +1 -0
- package/dist/helpers/validationHelpers.d.ts +36 -0
- package/dist/helpers/validationHelpers.js +44 -0
- package/dist/helpers/validationHelpers.js.map +1 -0
- package/dist/hooks/useAnchoredFloating.d.ts +22 -0
- package/dist/hooks/useAnchoredFloating.js +59 -0
- package/dist/hooks/useAnchoredFloating.js.map +1 -0
- package/dist/hooks/useBreakpoint.d.ts +16 -0
- package/dist/hooks/useBreakpoint.js +47 -0
- package/dist/hooks/useBreakpoint.js.map +1 -0
- package/dist/hooks/useDebounce.d.ts +8 -0
- package/dist/hooks/useDebounce.js +36 -0
- package/dist/hooks/useDebounce.js.map +1 -0
- package/dist/hooks/useFileAttachments.d.ts +43 -0
- package/dist/hooks/useFileAttachments.js +158 -0
- package/dist/hooks/useFileAttachments.js.map +1 -0
- package/dist/hooks/useHoverCapable.d.ts +6 -0
- package/dist/hooks/useHoverCapable.js +28 -0
- package/dist/hooks/useHoverCapable.js.map +1 -0
- package/dist/hooks/useInlineEditor.d.ts +5 -0
- package/dist/hooks/useInlineEditor.js +42 -0
- package/dist/hooks/useInlineEditor.js.map +1 -0
- package/dist/hooks/useMobile.d.ts +7 -0
- package/dist/hooks/useMobile.js +8 -0
- package/dist/hooks/useMobile.js.map +1 -0
- package/dist/hooks/useNotification.d.ts +38 -0
- package/dist/hooks/useNotification.js +39 -0
- package/dist/hooks/useNotification.js.map +1 -0
- package/dist/hooks/useResolvedTheme.d.ts +7 -0
- package/dist/hooks/useResolvedTheme.js +15 -0
- package/dist/hooks/useResolvedTheme.js.map +1 -0
- package/dist/hooks/useThemeSkin.d.ts +7 -0
- package/dist/hooks/useThemeSkin.js +19 -0
- package/dist/hooks/useThemeSkin.js.map +1 -0
- package/dist/hooks/useVoiceTranscription.d.ts +29 -0
- package/dist/hooks/useVoiceTranscription.js +208 -0
- package/dist/hooks/useVoiceTranscription.js.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.js +157 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/IFileAttachment.d.ts +18 -0
- package/dist/interfaces/IFileAttachment.js +2 -0
- package/dist/interfaces/IFileAttachment.js.map +1 -0
- package/dist/interfaces/IFilterOption.d.ts +12 -0
- package/dist/interfaces/IFilterOption.js +2 -0
- package/dist/interfaces/IFilterOption.js.map +1 -0
- package/dist/locales/en/ui.json.d.ts +682 -0
- package/dist/locales/en/ui.json.js +120 -0
- package/dist/locales/en/ui.json.js.map +1 -0
- package/dist/locales/index.d.ts +1362 -0
- package/dist/locales/index.js +7 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/locales/pt/ui.json.d.ts +682 -0
- package/dist/locales/pt/ui.json.js +120 -0
- package/dist/locales/pt/ui.json.js.map +1 -0
- package/dist/motion/index.d.ts +2 -0
- package/dist/motion/index.js +17 -0
- package/dist/motion/index.js.map +1 -0
- package/dist/motion/motionPresets.d.ts +44 -0
- package/dist/motion/motionPresets.js +67 -0
- package/dist/motion/motionPresets.js.map +1 -0
- package/dist/motion/motionTokens.d.ts +40 -0
- package/dist/motion/motionTokens.js +29 -0
- package/dist/motion/motionTokens.js.map +1 -0
- package/package.json +245 -0
- package/src/assets/fonts/LICENSE-Inter.txt +92 -0
- package/src/assets/fonts/LICENSE-MaterialSymbols.txt +202 -0
- package/src/assets/fonts/LICENSE-Virgil.txt +45 -0
- package/src/assets/fonts/inter-latin-ext.woff2 +0 -0
- package/src/assets/fonts/inter-latin.woff2 +0 -0
- package/src/assets/fonts/material-symbols-outlined.woff2 +0 -0
- package/src/assets/fonts/virgil.woff2 +0 -0
- package/src/assets/styles/base.css +585 -0
- package/src/assets/styles/index.css +1 -0
- package/src/assets/styles/theme.css +453 -0
- package/tailwind-plugins/glass.js +162 -0
- package/tailwind.preset.js +392 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useState, useCallback, useMemo, useContext } from "react";
|
|
3
|
+
const EDITABLE_CELL_ATTR = "data-datatable-editable-cell";
|
|
4
|
+
const buildEditableCellKey = (rowId, columnId) => `${rowId}::${columnId}`;
|
|
5
|
+
const DataTableCellEditingContext = createContext(null);
|
|
6
|
+
const useDataTableCellEditing = () => useContext(DataTableCellEditingContext);
|
|
7
|
+
const DataTableCellEditingProvider = ({ children }) => {
|
|
8
|
+
const [editingCellKey, setEditingCellKey] = useState(null);
|
|
9
|
+
const startEditing = useCallback((cellKey) => setEditingCellKey(cellKey), []);
|
|
10
|
+
const stopEditing = useCallback(() => setEditingCellKey(null), []);
|
|
11
|
+
const navigate = useCallback((currentCellKey, direction) => {
|
|
12
|
+
const cells = Array.from(document.querySelectorAll(`[${EDITABLE_CELL_ATTR}]`)).map((node) => node.getAttribute(EDITABLE_CELL_ATTR) ?? "").filter((key) => key !== "");
|
|
13
|
+
const index = cells.indexOf(currentCellKey);
|
|
14
|
+
if (index === -1) {
|
|
15
|
+
setEditingCellKey(null);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const next = cells[(index + direction + cells.length) % cells.length];
|
|
19
|
+
setEditingCellKey(next === currentCellKey ? null : next);
|
|
20
|
+
}, []);
|
|
21
|
+
const value = useMemo(
|
|
22
|
+
() => ({ editingCellKey, startEditing, stopEditing, navigate }),
|
|
23
|
+
[editingCellKey, startEditing, stopEditing, navigate]
|
|
24
|
+
);
|
|
25
|
+
return /* @__PURE__ */ jsx(DataTableCellEditingContext.Provider, { value, children });
|
|
26
|
+
};
|
|
27
|
+
export {
|
|
28
|
+
EDITABLE_CELL_ATTR,
|
|
29
|
+
buildEditableCellKey,
|
|
30
|
+
DataTableCellEditingProvider as default,
|
|
31
|
+
useDataTableCellEditing
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=useCellEditingState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCellEditingState.js","sources":["../../../../src/components/UI/DataTable/useCellEditingState.tsx"],"sourcesContent":["import React, { createContext, useCallback, useContext, useMemo, useState } from 'react';\n\n/** Marca a célula editável no DOM para que a navegação por Tab siga a ordem visual da tabela. */\nexport const EDITABLE_CELL_ATTR = 'data-datatable-editable-cell';\n\nexport const buildEditableCellKey = (rowId: string, columnId: string): string => `${rowId}::${columnId}`;\n\ninterface IDataTableCellEditing {\n editingCellKey: string | null;\n startEditing: (cellKey: string) => void;\n stopEditing: () => void;\n navigate: (currentCellKey: string, direction: 1 | -1) => void;\n}\n\nconst DataTableCellEditingContext = createContext<IDataTableCellEditing | null>(null);\n\n/** Estado da célula em edição no modo `editing.clickToEdit`; `null` fora dele. */\nexport const useDataTableCellEditing = (): IDataTableCellEditing | null => useContext(DataTableCellEditingContext);\n\n/**\n * Guarda qual célula está aberta para edição. Vive em um provider próprio para que abrir ou fechar\n * uma célula re-renderize apenas as células, nunca a tabela inteira.\n */\nconst DataTableCellEditingProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [editingCellKey, setEditingCellKey] = useState<string | null>(null);\n\n const startEditing = useCallback((cellKey: string) => setEditingCellKey(cellKey), []);\n const stopEditing = useCallback(() => setEditingCellKey(null), []);\n\n // A ordem vem do DOM: as células editáveis se marcam com `EDITABLE_CELL_ATTR`, então Tab anda na\n // mesma sequência que o usuário lê, sem a tabela precisar manter um índice paralelo.\n const navigate = useCallback((currentCellKey: string, direction: 1 | -1) => {\n const cells = Array.from(document.querySelectorAll<HTMLElement>(`[${EDITABLE_CELL_ATTR}]`))\n .map((node) => node.getAttribute(EDITABLE_CELL_ATTR) ?? '')\n .filter((key) => key !== '');\n const index = cells.indexOf(currentCellKey);\n if (index === -1) {\n setEditingCellKey(null);\n return;\n }\n const next = cells[(index + direction + cells.length) % cells.length];\n setEditingCellKey(next === currentCellKey ? null : next);\n }, []);\n\n const value = useMemo<IDataTableCellEditing>(\n () => ({ editingCellKey, startEditing, stopEditing, navigate }),\n [editingCellKey, startEditing, stopEditing, navigate],\n );\n\n return <DataTableCellEditingContext.Provider value={value}>{children}</DataTableCellEditingContext.Provider>;\n};\n\nexport default DataTableCellEditingProvider;\n"],"names":[],"mappings":";;AAGO,MAAM,qBAAqB;AAE3B,MAAM,uBAAuB,CAAC,OAAe,aAA6B,GAAG,KAAK,KAAK,QAAQ;AAStG,MAAM,8BAA8B,cAA4C,IAAI;AAG7E,MAAM,0BAA0B,MAAoC,WAAW,2BAA2B;AAMjH,MAAM,+BAAwE,CAAC,EAAE,eAAe;AAC9F,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAwB,IAAI;AAExE,QAAM,eAAe,YAAY,CAAC,YAAoB,kBAAkB,OAAO,GAAG,EAAE;AACpF,QAAM,cAAc,YAAY,MAAM,kBAAkB,IAAI,GAAG,CAAA,CAAE;AAIjE,QAAM,WAAW,YAAY,CAAC,gBAAwB,cAAsB;AAC1E,UAAM,QAAQ,MAAM,KAAK,SAAS,iBAA8B,IAAI,kBAAkB,GAAG,CAAC,EACvF,IAAI,CAAC,SAAS,KAAK,aAAa,kBAAkB,KAAK,EAAE,EACzD,OAAO,CAAC,QAAQ,QAAQ,EAAE;AAC7B,UAAM,QAAQ,MAAM,QAAQ,cAAc;AAC1C,QAAI,UAAU,IAAI;AAChB,wBAAkB,IAAI;AACtB;AAAA,IACF;AACA,UAAM,OAAO,OAAO,QAAQ,YAAY,MAAM,UAAU,MAAM,MAAM;AACpE,sBAAkB,SAAS,iBAAiB,OAAO,IAAI;AAAA,EACzD,GAAG,CAAA,CAAE;AAEL,QAAM,QAAQ;AAAA,IACZ,OAAO,EAAE,gBAAgB,cAAc,aAAa,SAAA;AAAA,IACpD,CAAC,gBAAgB,cAAc,aAAa,QAAQ;AAAA,EAAA;AAGtD,SAAO,oBAAC,4BAA4B,UAA5B,EAAqC,OAAe,SAAA,CAAS;AACvE;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Updater } from '@tanstack/react-table';
|
|
2
|
+
import { IDataTableColumnConfig, IDataTableConfig, IDataTableRow } from './types';
|
|
3
|
+
export declare const getFixedEndColumns: <T extends IDataTableRow>(columns: Array<IDataTableColumnConfig<T>>) => Array<IDataTableColumnConfig<T>>;
|
|
4
|
+
export declare const getFixedStartColumns: <T extends IDataTableRow>(columns: Array<IDataTableColumnConfig<T>>) => Array<IDataTableColumnConfig<T>>;
|
|
5
|
+
export declare const getReorderableColumns: <T extends IDataTableRow>(columns: Array<IDataTableColumnConfig<T>>) => Array<IDataTableColumnConfig<T>>;
|
|
6
|
+
export declare const resolveColumnOrder: <R extends IDataTableRow>(storageKey: string, columns: Array<IDataTableColumnConfig<R>>) => Array<string>;
|
|
7
|
+
interface IUseColumnOrderResult {
|
|
8
|
+
columnOrder: Array<string>;
|
|
9
|
+
onColumnOrderChange: (updater: Updater<Array<string>>) => void;
|
|
10
|
+
resetColumnOrder: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare const useColumnOrder: <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(config: IDataTableConfig<T, C>) => IUseColumnOrderResult;
|
|
13
|
+
interface IUseDetailColumnOrderResult {
|
|
14
|
+
detailColumnOrder: Array<string>;
|
|
15
|
+
onDetailColumnOrderChange: (updater: Updater<Array<string>>) => void;
|
|
16
|
+
resetDetailColumnOrder: () => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Column order for the nested detail table of a `detailTable` expansion.
|
|
20
|
+
* Same reconcile/persist semantics as the parent order, stored under the
|
|
21
|
+
* detail entry (`${entityKey}:detail`). Pass `null` columns for tables without
|
|
22
|
+
* a detailTable expansion: the hook is inert then.
|
|
23
|
+
*/
|
|
24
|
+
export declare const useDetailColumnOrder: <C extends IDataTableRow>(entityKey: string, columns: Array<IDataTableColumnConfig<C>> | null) => IUseDetailColumnOrderResult;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { useState, useEffect } from "react";
|
|
2
|
+
import { readColumnsEntry, writeColumnsEntry, detailColumnsEntryKey } from "./dataTableColumnsStore.js";
|
|
3
|
+
const getFixedEndColumns = (columns) => (columns ?? []).filter((column) => column.type === "actions");
|
|
4
|
+
const getFixedStartColumns = (columns) => (columns ?? []).filter((column) => column.type !== "actions" && column.hideable === false);
|
|
5
|
+
const getReorderableColumns = (columns) => (columns ?? []).filter((column) => column.type !== "actions" && column.hideable !== false);
|
|
6
|
+
const mergeReorderableOrder = (reorderableIds, persistedIds) => {
|
|
7
|
+
const defaultIndexById = new Map(reorderableIds.map((id, index) => [id, index]));
|
|
8
|
+
const result = persistedIds.filter((id) => defaultIndexById.has(id));
|
|
9
|
+
const persistedSet = new Set(result);
|
|
10
|
+
for (const id of reorderableIds) {
|
|
11
|
+
if (persistedSet.has(id)) continue;
|
|
12
|
+
const defaultIndex = defaultIndexById.get(id) ?? 0;
|
|
13
|
+
const insertAt = result.findIndex((existingId) => (defaultIndexById.get(existingId) ?? 0) > defaultIndex);
|
|
14
|
+
if (insertAt === -1) result.push(id);
|
|
15
|
+
else result.splice(insertAt, 0, id);
|
|
16
|
+
}
|
|
17
|
+
return result;
|
|
18
|
+
};
|
|
19
|
+
const buildDefaultColumnOrder = (columns) => [
|
|
20
|
+
...getFixedStartColumns(columns).map((column) => column.id),
|
|
21
|
+
...getReorderableColumns(columns).map((column) => column.id),
|
|
22
|
+
...getFixedEndColumns(columns).map((column) => column.id)
|
|
23
|
+
];
|
|
24
|
+
const resolveColumnOrder = (storageKey, columns) => {
|
|
25
|
+
const reorderableIds = getReorderableColumns(columns).map((column) => column.id);
|
|
26
|
+
const persisted = readColumnsEntry(storageKey).order;
|
|
27
|
+
const mergedReorderable = persisted ? mergeReorderableOrder(reorderableIds, persisted) : reorderableIds;
|
|
28
|
+
return [
|
|
29
|
+
...getFixedStartColumns(columns).map((column) => column.id),
|
|
30
|
+
...mergedReorderable,
|
|
31
|
+
...getFixedEndColumns(columns).map((column) => column.id)
|
|
32
|
+
];
|
|
33
|
+
};
|
|
34
|
+
const reconcileColumnOrder = (previous, columns) => {
|
|
35
|
+
const reorderableIds = getReorderableColumns(columns).map((column) => column.id);
|
|
36
|
+
const reorderableIdSet = new Set(reorderableIds);
|
|
37
|
+
const previousReorderable = previous.filter((id) => reorderableIdSet.has(id));
|
|
38
|
+
const next = [
|
|
39
|
+
...getFixedStartColumns(columns).map((column) => column.id),
|
|
40
|
+
...mergeReorderableOrder(reorderableIds, previousReorderable),
|
|
41
|
+
...getFixedEndColumns(columns).map((column) => column.id)
|
|
42
|
+
];
|
|
43
|
+
return next.length === previous.length && next.every((id, index) => id === previous[index]) ? previous : next;
|
|
44
|
+
};
|
|
45
|
+
const useColumnOrder = (config) => {
|
|
46
|
+
const [columnOrder, setColumnOrder] = useState(
|
|
47
|
+
() => resolveColumnOrder(config.entityKey, config.columns)
|
|
48
|
+
);
|
|
49
|
+
const onColumnOrderChange = (updater) => {
|
|
50
|
+
setColumnOrder((previous) => typeof updater === "function" ? updater(previous) : updater);
|
|
51
|
+
};
|
|
52
|
+
const resetColumnOrder = () => {
|
|
53
|
+
setColumnOrder(buildDefaultColumnOrder(config.columns));
|
|
54
|
+
};
|
|
55
|
+
const columnIdsSignature = config.columns.map((column) => column.id).join("|");
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
setColumnOrder((previous) => reconcileColumnOrder(previous, config.columns));
|
|
58
|
+
}, [columnIdsSignature]);
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
writeColumnsEntry(config.entityKey, { order: columnOrder });
|
|
61
|
+
}, [config.entityKey, columnOrder]);
|
|
62
|
+
return { columnOrder, onColumnOrderChange, resetColumnOrder };
|
|
63
|
+
};
|
|
64
|
+
const useDetailColumnOrder = (entityKey, columns) => {
|
|
65
|
+
const [detailColumnOrder, setDetailColumnOrder] = useState(
|
|
66
|
+
() => columns ? resolveColumnOrder(detailColumnsEntryKey(entityKey), columns) : []
|
|
67
|
+
);
|
|
68
|
+
const onDetailColumnOrderChange = (updater) => {
|
|
69
|
+
setDetailColumnOrder((previous) => typeof updater === "function" ? updater(previous) : updater);
|
|
70
|
+
};
|
|
71
|
+
const resetDetailColumnOrder = () => {
|
|
72
|
+
if (columns) setDetailColumnOrder(buildDefaultColumnOrder(columns));
|
|
73
|
+
};
|
|
74
|
+
const hasDetailColumns = !!columns;
|
|
75
|
+
const detailColumnIdsSignature = (columns ?? []).map((column) => column.id).join("|");
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (!columns) return;
|
|
78
|
+
setDetailColumnOrder((previous) => reconcileColumnOrder(previous, columns));
|
|
79
|
+
}, [detailColumnIdsSignature, hasDetailColumns]);
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
if (!hasDetailColumns) return;
|
|
82
|
+
writeColumnsEntry(detailColumnsEntryKey(entityKey), { order: detailColumnOrder });
|
|
83
|
+
}, [entityKey, hasDetailColumns, detailColumnOrder]);
|
|
84
|
+
return { detailColumnOrder, onDetailColumnOrderChange, resetDetailColumnOrder };
|
|
85
|
+
};
|
|
86
|
+
export {
|
|
87
|
+
getFixedEndColumns,
|
|
88
|
+
getFixedStartColumns,
|
|
89
|
+
getReorderableColumns,
|
|
90
|
+
resolveColumnOrder,
|
|
91
|
+
useColumnOrder,
|
|
92
|
+
useDetailColumnOrder
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=useColumnOrder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useColumnOrder.js","sources":["../../../../src/components/UI/DataTable/useColumnOrder.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Updater } from '@tanstack/react-table';\n\nimport { detailColumnsEntryKey, readColumnsEntry, writeColumnsEntry } from './dataTableColumnsStore';\nimport type { IDataTableColumnConfig, IDataTableConfig, IDataTableRow } from './types';\n\n// Fixed columns never enter the drag list. Identity/first columns (`hideable:\n// false`) stay pinned to the start; the `actions` column stays pinned to the\n// end. Only the middle columns are reorderable. `actions` is checked first so a\n// column that is both non-hideable and `actions` lands at the end, not the start.\nexport const getFixedEndColumns = <T extends IDataTableRow>(\n columns: Array<IDataTableColumnConfig<T>>,\n): Array<IDataTableColumnConfig<T>> => (columns ?? []).filter((column) => column.type === 'actions');\n\nexport const getFixedStartColumns = <T extends IDataTableRow>(\n columns: Array<IDataTableColumnConfig<T>>,\n): Array<IDataTableColumnConfig<T>> =>\n (columns ?? []).filter((column) => column.type !== 'actions' && column.hideable === false);\n\nexport const getReorderableColumns = <T extends IDataTableRow>(\n columns: Array<IDataTableColumnConfig<T>>,\n): Array<IDataTableColumnConfig<T>> =>\n (columns ?? []).filter((column) => column.type !== 'actions' && column.hideable !== false);\n\n// Reconcile the persisted reorderable ids with the current config:\n// - keep saved ids that are still reorderable, in the saved order;\n// - drop obsolete ids silently (they are absent from the current config);\n// - insert reorderable ids missing from persistence at their default config\n// position (relative to the other reorderable columns).\nconst mergeReorderableOrder = (reorderableIds: Array<string>, persistedIds: Array<string>): Array<string> => {\n const defaultIndexById = new Map(reorderableIds.map((id, index) => [id, index]));\n\n const result = persistedIds.filter((id) => defaultIndexById.has(id));\n const persistedSet = new Set(result);\n\n for (const id of reorderableIds) {\n if (persistedSet.has(id)) continue;\n\n const defaultIndex = defaultIndexById.get(id) ?? 0;\n const insertAt = result.findIndex((existingId) => (defaultIndexById.get(existingId) ?? 0) > defaultIndex);\n\n if (insertAt === -1) result.push(id);\n else result.splice(insertAt, 0, id);\n }\n\n return result;\n};\n\nconst buildDefaultColumnOrder = <R extends IDataTableRow>(columns: Array<IDataTableColumnConfig<R>>): Array<string> => [\n ...getFixedStartColumns(columns).map((column) => column.id),\n ...getReorderableColumns(columns).map((column) => column.id),\n ...getFixedEndColumns(columns).map((column) => column.id),\n];\n\n// Full column order = fixed start + (persisted-merged) reorderable + fixed end.\n// Fixed columns are always re-anchored from the current config, so a column that\n// changed to fixed since the order was saved lands in the right bucket.\nexport const resolveColumnOrder = <R extends IDataTableRow>(\n storageKey: string,\n columns: Array<IDataTableColumnConfig<R>>,\n): Array<string> => {\n const reorderableIds = getReorderableColumns(columns).map((column) => column.id);\n const persisted = readColumnsEntry(storageKey).order;\n const mergedReorderable = persisted ? mergeReorderableOrder(reorderableIds, persisted) : reorderableIds;\n\n return [\n ...getFixedStartColumns(columns).map((column) => column.id),\n ...mergedReorderable,\n ...getFixedEndColumns(columns).map((column) => column.id),\n ];\n};\n\ninterface IUseColumnOrderResult {\n columnOrder: Array<string>;\n onColumnOrderChange: (updater: Updater<Array<string>>) => void;\n resetColumnOrder: () => void;\n}\n\n// Reconcile a stateful order with the CURRENT config columns. Columns that\n// appeared since the state was built (async/dynamic columns) land at their\n// config position instead of being appended by TanStack; columns that left are\n// dropped; the user's order of surviving reorderable columns is preserved.\n// Returns the previous array identity when nothing changed, so the sync effect\n// below never loops.\nconst reconcileColumnOrder = <R extends IDataTableRow>(\n previous: Array<string>,\n columns: Array<IDataTableColumnConfig<R>>,\n): Array<string> => {\n const reorderableIds = getReorderableColumns(columns).map((column) => column.id);\n const reorderableIdSet = new Set(reorderableIds);\n const previousReorderable = previous.filter((id) => reorderableIdSet.has(id));\n\n const next = [\n ...getFixedStartColumns(columns).map((column) => column.id),\n ...mergeReorderableOrder(reorderableIds, previousReorderable),\n ...getFixedEndColumns(columns).map((column) => column.id),\n ];\n\n return next.length === previous.length && next.every((id, index) => id === previous[index]) ? previous : next;\n};\n\nexport const useColumnOrder = <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(\n config: IDataTableConfig<T, C>,\n): IUseColumnOrderResult => {\n const [columnOrder, setColumnOrder] = useState<Array<string>>(() =>\n resolveColumnOrder(config.entityKey, config.columns),\n );\n\n const onColumnOrderChange = (updater: Updater<Array<string>>) => {\n setColumnOrder((previous) => (typeof updater === 'function' ? updater(previous) : updater));\n };\n\n const resetColumnOrder = () => {\n setColumnOrder(buildDefaultColumnOrder(config.columns));\n };\n\n // Config columns can change while mounted (columns fetched async, dynamic\n // catalogs). Re-anchor the order so new ids take their config position.\n const columnIdsSignature = config.columns.map((column) => column.id).join('|');\n useEffect(() => {\n setColumnOrder((previous) => reconcileColumnOrder(previous, config.columns));\n }, [columnIdsSignature]);\n\n useEffect(() => {\n writeColumnsEntry(config.entityKey, { order: columnOrder });\n }, [config.entityKey, columnOrder]);\n\n return { columnOrder, onColumnOrderChange, resetColumnOrder };\n};\n\ninterface IUseDetailColumnOrderResult {\n detailColumnOrder: Array<string>;\n onDetailColumnOrderChange: (updater: Updater<Array<string>>) => void;\n resetDetailColumnOrder: () => void;\n}\n\n/**\n * Column order for the nested detail table of a `detailTable` expansion.\n * Same reconcile/persist semantics as the parent order, stored under the\n * detail entry (`${entityKey}:detail`). Pass `null` columns for tables without\n * a detailTable expansion: the hook is inert then.\n */\nexport const useDetailColumnOrder = <C extends IDataTableRow>(\n entityKey: string,\n columns: Array<IDataTableColumnConfig<C>> | null,\n): IUseDetailColumnOrderResult => {\n const [detailColumnOrder, setDetailColumnOrder] = useState<Array<string>>(() =>\n columns ? resolveColumnOrder(detailColumnsEntryKey(entityKey), columns) : [],\n );\n\n const onDetailColumnOrderChange = (updater: Updater<Array<string>>) => {\n setDetailColumnOrder((previous) => (typeof updater === 'function' ? updater(previous) : updater));\n };\n\n const resetDetailColumnOrder = () => {\n if (columns) setDetailColumnOrder(buildDefaultColumnOrder(columns));\n };\n\n const hasDetailColumns = !!columns;\n\n // Same re-anchoring as the parent order when the detail columns change while mounted.\n const detailColumnIdsSignature = (columns ?? []).map((column) => column.id).join('|');\n useEffect(() => {\n if (!columns) return;\n setDetailColumnOrder((previous) => reconcileColumnOrder(previous, columns));\n }, [detailColumnIdsSignature, hasDetailColumns]);\n\n useEffect(() => {\n if (!hasDetailColumns) return;\n writeColumnsEntry(detailColumnsEntryKey(entityKey), { order: detailColumnOrder });\n }, [entityKey, hasDetailColumns, detailColumnOrder]);\n\n return { detailColumnOrder, onDetailColumnOrderChange, resetDetailColumnOrder };\n};\n"],"names":[],"mappings":";;AAWO,MAAM,qBAAqB,CAChC,aACsC,WAAW,CAAA,GAAI,OAAO,CAAC,WAAW,OAAO,SAAS,SAAS;AAE5F,MAAM,uBAAuB,CAClC,aAEC,WAAW,CAAA,GAAI,OAAO,CAAC,WAAW,OAAO,SAAS,aAAa,OAAO,aAAa,KAAK;AAEpF,MAAM,wBAAwB,CACnC,aAEC,WAAW,CAAA,GAAI,OAAO,CAAC,WAAW,OAAO,SAAS,aAAa,OAAO,aAAa,KAAK;AAO3F,MAAM,wBAAwB,CAAC,gBAA+B,iBAA+C;AAC3G,QAAM,mBAAmB,IAAI,IAAI,eAAe,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC;AAE/E,QAAM,SAAS,aAAa,OAAO,CAAC,OAAO,iBAAiB,IAAI,EAAE,CAAC;AACnE,QAAM,eAAe,IAAI,IAAI,MAAM;AAEnC,aAAW,MAAM,gBAAgB;AAC/B,QAAI,aAAa,IAAI,EAAE,EAAG;AAE1B,UAAM,eAAe,iBAAiB,IAAI,EAAE,KAAK;AACjD,UAAM,WAAW,OAAO,UAAU,CAAC,gBAAgB,iBAAiB,IAAI,UAAU,KAAK,KAAK,YAAY;AAExG,QAAI,aAAa,GAAI,QAAO,KAAK,EAAE;AAAA,QAC9B,QAAO,OAAO,UAAU,GAAG,EAAE;AAAA,EACpC;AAEA,SAAO;AACT;AAEA,MAAM,0BAA0B,CAA0B,YAA6D;AAAA,EACrH,GAAG,qBAAqB,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,EAAE;AAAA,EAC1D,GAAG,sBAAsB,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,EAAE;AAAA,EAC3D,GAAG,mBAAmB,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,EAAE;AAC1D;AAKO,MAAM,qBAAqB,CAChC,YACA,YACkB;AAClB,QAAM,iBAAiB,sBAAsB,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,EAAE;AAC/E,QAAM,YAAY,iBAAiB,UAAU,EAAE;AAC/C,QAAM,oBAAoB,YAAY,sBAAsB,gBAAgB,SAAS,IAAI;AAEzF,SAAO;AAAA,IACL,GAAG,qBAAqB,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,EAAE;AAAA,IAC1D,GAAG;AAAA,IACH,GAAG,mBAAmB,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,EAAE;AAAA,EAAA;AAE5D;AAcA,MAAM,uBAAuB,CAC3B,UACA,YACkB;AAClB,QAAM,iBAAiB,sBAAsB,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,EAAE;AAC/E,QAAM,mBAAmB,IAAI,IAAI,cAAc;AAC/C,QAAM,sBAAsB,SAAS,OAAO,CAAC,OAAO,iBAAiB,IAAI,EAAE,CAAC;AAE5E,QAAM,OAAO;AAAA,IACX,GAAG,qBAAqB,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,EAAE;AAAA,IAC1D,GAAG,sBAAsB,gBAAgB,mBAAmB;AAAA,IAC5D,GAAG,mBAAmB,OAAO,EAAE,IAAI,CAAC,WAAW,OAAO,EAAE;AAAA,EAAA;AAG1D,SAAO,KAAK,WAAW,SAAS,UAAU,KAAK,MAAM,CAAC,IAAI,UAAU,OAAO,SAAS,KAAK,CAAC,IAAI,WAAW;AAC3G;AAEO,MAAM,iBAAiB,CAC5B,WAC0B;AAC1B,QAAM,CAAC,aAAa,cAAc,IAAI;AAAA,IAAwB,MAC5D,mBAAmB,OAAO,WAAW,OAAO,OAAO;AAAA,EAAA;AAGrD,QAAM,sBAAsB,CAAC,YAAoC;AAC/D,mBAAe,CAAC,aAAc,OAAO,YAAY,aAAa,QAAQ,QAAQ,IAAI,OAAQ;AAAA,EAC5F;AAEA,QAAM,mBAAmB,MAAM;AAC7B,mBAAe,wBAAwB,OAAO,OAAO,CAAC;AAAA,EACxD;AAIA,QAAM,qBAAqB,OAAO,QAAQ,IAAI,CAAC,WAAW,OAAO,EAAE,EAAE,KAAK,GAAG;AAC7E,YAAU,MAAM;AACd,mBAAe,CAAC,aAAa,qBAAqB,UAAU,OAAO,OAAO,CAAC;AAAA,EAC7E,GAAG,CAAC,kBAAkB,CAAC;AAEvB,YAAU,MAAM;AACd,sBAAkB,OAAO,WAAW,EAAE,OAAO,aAAa;AAAA,EAC5D,GAAG,CAAC,OAAO,WAAW,WAAW,CAAC;AAElC,SAAO,EAAE,aAAa,qBAAqB,iBAAA;AAC7C;AAcO,MAAM,uBAAuB,CAClC,WACA,YACgC;AAChC,QAAM,CAAC,mBAAmB,oBAAoB,IAAI;AAAA,IAAwB,MACxE,UAAU,mBAAmB,sBAAsB,SAAS,GAAG,OAAO,IAAI,CAAA;AAAA,EAAC;AAG7E,QAAM,4BAA4B,CAAC,YAAoC;AACrE,yBAAqB,CAAC,aAAc,OAAO,YAAY,aAAa,QAAQ,QAAQ,IAAI,OAAQ;AAAA,EAClG;AAEA,QAAM,yBAAyB,MAAM;AACnC,QAAI,QAAS,sBAAqB,wBAAwB,OAAO,CAAC;AAAA,EACpE;AAEA,QAAM,mBAAmB,CAAC,CAAC;AAG3B,QAAM,4BAA4B,WAAW,CAAA,GAAI,IAAI,CAAC,WAAW,OAAO,EAAE,EAAE,KAAK,GAAG;AACpF,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,yBAAqB,CAAC,aAAa,qBAAqB,UAAU,OAAO,CAAC;AAAA,EAC5E,GAAG,CAAC,0BAA0B,gBAAgB,CAAC;AAE/C,YAAU,MAAM;AACd,QAAI,CAAC,iBAAkB;AACvB,sBAAkB,sBAAsB,SAAS,GAAG,EAAE,OAAO,mBAAmB;AAAA,EAClF,GAAG,CAAC,WAAW,kBAAkB,iBAAiB,CAAC;AAEnD,SAAO,EAAE,mBAAmB,2BAA2B,uBAAA;AACzD;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ColumnSizingState, Updater } from '@tanstack/react-table';
|
|
2
|
+
import { IDataTableConfig, IDataTableRow } from './types';
|
|
3
|
+
interface IUseColumnSizingResult {
|
|
4
|
+
columnSizing: ColumnSizingState;
|
|
5
|
+
onColumnSizingChange: (updater: Updater<ColumnSizingState>) => void;
|
|
6
|
+
resetColumnSizing: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const useColumnSizing: <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(config: IDataTableConfig<T, C>) => IUseColumnSizingResult;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useState, useEffect } from "react";
|
|
2
|
+
import { readColumnsEntry, writeColumnsEntry } from "./dataTableColumnsStore.js";
|
|
3
|
+
const useColumnSizing = (config) => {
|
|
4
|
+
const [columnSizing, setColumnSizing] = useState(
|
|
5
|
+
() => readColumnsEntry(config.entityKey).sizing ?? {}
|
|
6
|
+
);
|
|
7
|
+
const onColumnSizingChange = (updater) => {
|
|
8
|
+
setColumnSizing((previous) => typeof updater === "function" ? updater(previous) : updater);
|
|
9
|
+
};
|
|
10
|
+
const resetColumnSizing = () => {
|
|
11
|
+
setColumnSizing({});
|
|
12
|
+
};
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
writeColumnsEntry(config.entityKey, { sizing: columnSizing });
|
|
15
|
+
}, [config.entityKey, columnSizing]);
|
|
16
|
+
return { columnSizing, onColumnSizingChange, resetColumnSizing };
|
|
17
|
+
};
|
|
18
|
+
export {
|
|
19
|
+
useColumnSizing
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=useColumnSizing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useColumnSizing.js","sources":["../../../../src/components/UI/DataTable/useColumnSizing.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { ColumnSizingState, Updater } from '@tanstack/react-table';\n\nimport { readColumnsEntry, writeColumnsEntry } from './dataTableColumnsStore';\nimport type { IDataTableConfig, IDataTableRow } from './types';\n\ninterface IUseColumnSizingResult {\n columnSizing: ColumnSizingState;\n onColumnSizingChange: (updater: Updater<ColumnSizingState>) => void;\n resetColumnSizing: () => void;\n}\n\n// An empty sizing map means \"use the seeded default widths\", so appearance is\n// preserved until the user drags a column edge. Persisted widths (per column id)\n// override the seed. Mirrors useColumnVisibility/useColumnOrder: state seeded\n// from the shared columns entry and written back on every change.\nexport const useColumnSizing = <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(\n config: IDataTableConfig<T, C>,\n): IUseColumnSizingResult => {\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>(\n () => readColumnsEntry(config.entityKey).sizing ?? {},\n );\n\n const onColumnSizingChange = (updater: Updater<ColumnSizingState>) => {\n setColumnSizing((previous) => (typeof updater === 'function' ? updater(previous) : updater));\n };\n\n const resetColumnSizing = () => {\n setColumnSizing({});\n };\n\n useEffect(() => {\n writeColumnsEntry(config.entityKey, { sizing: columnSizing });\n }, [config.entityKey, columnSizing]);\n\n return { columnSizing, onColumnSizingChange, resetColumnSizing };\n};\n"],"names":[],"mappings":";;AAiBO,MAAM,kBAAkB,CAC7B,WAC2B;AAC3B,QAAM,CAAC,cAAc,eAAe,IAAI;AAAA,IACtC,MAAM,iBAAiB,OAAO,SAAS,EAAE,UAAU,CAAA;AAAA,EAAC;AAGtD,QAAM,uBAAuB,CAAC,YAAwC;AACpE,oBAAgB,CAAC,aAAc,OAAO,YAAY,aAAa,QAAQ,QAAQ,IAAI,OAAQ;AAAA,EAC7F;AAEA,QAAM,oBAAoB,MAAM;AAC9B,oBAAgB,CAAA,CAAE;AAAA,EACpB;AAEA,YAAU,MAAM;AACd,sBAAkB,OAAO,WAAW,EAAE,QAAQ,cAAc;AAAA,EAC9D,GAAG,CAAC,OAAO,WAAW,YAAY,CAAC;AAEnC,SAAO,EAAE,cAAc,sBAAsB,kBAAA;AAC/C;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Updater, VisibilityState } from '@tanstack/react-table';
|
|
2
|
+
import { IDataTableColumnConfig, IDataTableConfig, IDataTableRow } from './types';
|
|
3
|
+
interface IUseColumnVisibilityResult {
|
|
4
|
+
columnVisibility: VisibilityState;
|
|
5
|
+
onColumnVisibilityChange: (updater: Updater<VisibilityState>) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const useColumnVisibility: <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(config: IDataTableConfig<T, C>) => IUseColumnVisibilityResult;
|
|
8
|
+
interface IUseDetailColumnVisibilityResult {
|
|
9
|
+
detailColumnVisibility: VisibilityState;
|
|
10
|
+
toggleDetailColumn: (columnId: string) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Visibility state for the nested detail table of a `detailTable` expansion.
|
|
14
|
+
* Lives at the DataTable level (not per expanded row) so every open detail
|
|
15
|
+
* table shares one state and one persisted entry. Pass `null` columns for
|
|
16
|
+
* tables without a detailTable expansion: the hook is inert then.
|
|
17
|
+
*/
|
|
18
|
+
export declare const useDetailColumnVisibility: <C extends IDataTableRow>(entityKey: string, columns: Array<IDataTableColumnConfig<C>> | null) => IUseDetailColumnVisibilityResult;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { useState, useEffect } from "react";
|
|
2
|
+
import { writeColumnsEntry, detailColumnsEntryKey, readColumnsEntry } from "./dataTableColumnsStore.js";
|
|
3
|
+
const resolveInitialColumnVisibility = (storageKey, columns) => {
|
|
4
|
+
const visibility = {};
|
|
5
|
+
for (const column of columns) {
|
|
6
|
+
if (column.hideable === false) continue;
|
|
7
|
+
if (column.defaultHidden) visibility[column.id] = false;
|
|
8
|
+
}
|
|
9
|
+
const persisted = readColumnsEntry(storageKey).visibility;
|
|
10
|
+
if (!persisted) return visibility;
|
|
11
|
+
for (const column of columns) {
|
|
12
|
+
if (column.hideable === false) continue;
|
|
13
|
+
if (typeof persisted[column.id] === "boolean") visibility[column.id] = persisted[column.id];
|
|
14
|
+
}
|
|
15
|
+
return visibility;
|
|
16
|
+
};
|
|
17
|
+
const useColumnVisibility = (config) => {
|
|
18
|
+
const [columnVisibility, setColumnVisibility] = useState(
|
|
19
|
+
() => resolveInitialColumnVisibility(config.entityKey, config.columns)
|
|
20
|
+
);
|
|
21
|
+
const onColumnVisibilityChange = (updater) => {
|
|
22
|
+
setColumnVisibility((previous) => typeof updater === "function" ? updater(previous) : updater);
|
|
23
|
+
};
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
writeColumnsEntry(config.entityKey, { visibility: columnVisibility });
|
|
26
|
+
}, [config.entityKey, columnVisibility]);
|
|
27
|
+
return { columnVisibility, onColumnVisibilityChange };
|
|
28
|
+
};
|
|
29
|
+
const useDetailColumnVisibility = (entityKey, columns) => {
|
|
30
|
+
const [detailColumnVisibility, setDetailColumnVisibility] = useState(
|
|
31
|
+
() => columns ? resolveInitialColumnVisibility(detailColumnsEntryKey(entityKey), columns) : {}
|
|
32
|
+
);
|
|
33
|
+
const toggleDetailColumn = (columnId) => {
|
|
34
|
+
setDetailColumnVisibility((previous) => ({ ...previous, [columnId]: !(previous[columnId] ?? true) }));
|
|
35
|
+
};
|
|
36
|
+
const hasDetailColumns = !!columns;
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (!hasDetailColumns) return;
|
|
39
|
+
writeColumnsEntry(detailColumnsEntryKey(entityKey), { visibility: detailColumnVisibility });
|
|
40
|
+
}, [entityKey, hasDetailColumns, detailColumnVisibility]);
|
|
41
|
+
return { detailColumnVisibility, toggleDetailColumn };
|
|
42
|
+
};
|
|
43
|
+
export {
|
|
44
|
+
useColumnVisibility,
|
|
45
|
+
useDetailColumnVisibility
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=useColumnVisibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useColumnVisibility.js","sources":["../../../../src/components/UI/DataTable/useColumnVisibility.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Updater, VisibilityState } from '@tanstack/react-table';\n\nimport { detailColumnsEntryKey, readColumnsEntry, writeColumnsEntry } from './dataTableColumnsStore';\nimport type { IDataTableColumnConfig, IDataTableConfig, IDataTableRow } from './types';\n\n// Non-hideable columns are always forced visible. The persisted map only ever\n// stores the state of hideable columns, so it can never blank out the table.\nconst resolveInitialColumnVisibility = <R extends IDataTableRow>(\n storageKey: string,\n columns: Array<IDataTableColumnConfig<R>>,\n): VisibilityState => {\n const visibility: VisibilityState = {};\n\n for (const column of columns) {\n if (column.hideable === false) continue;\n if (column.defaultHidden) visibility[column.id] = false;\n }\n\n const persisted = readColumnsEntry(storageKey).visibility;\n if (!persisted) return visibility;\n\n for (const column of columns) {\n if (column.hideable === false) continue;\n if (typeof persisted[column.id] === 'boolean') visibility[column.id] = persisted[column.id];\n }\n\n return visibility;\n};\n\ninterface IUseColumnVisibilityResult {\n columnVisibility: VisibilityState;\n onColumnVisibilityChange: (updater: Updater<VisibilityState>) => void;\n}\n\nexport const useColumnVisibility = <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(\n config: IDataTableConfig<T, C>,\n): IUseColumnVisibilityResult => {\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(() =>\n resolveInitialColumnVisibility(config.entityKey, config.columns),\n );\n\n const onColumnVisibilityChange = (updater: Updater<VisibilityState>) => {\n setColumnVisibility((previous) => (typeof updater === 'function' ? updater(previous) : updater));\n };\n\n useEffect(() => {\n writeColumnsEntry(config.entityKey, { visibility: columnVisibility });\n }, [config.entityKey, columnVisibility]);\n\n return { columnVisibility, onColumnVisibilityChange };\n};\n\ninterface IUseDetailColumnVisibilityResult {\n detailColumnVisibility: VisibilityState;\n toggleDetailColumn: (columnId: string) => void;\n}\n\n/**\n * Visibility state for the nested detail table of a `detailTable` expansion.\n * Lives at the DataTable level (not per expanded row) so every open detail\n * table shares one state and one persisted entry. Pass `null` columns for\n * tables without a detailTable expansion: the hook is inert then.\n */\nexport const useDetailColumnVisibility = <C extends IDataTableRow>(\n entityKey: string,\n columns: Array<IDataTableColumnConfig<C>> | null,\n): IUseDetailColumnVisibilityResult => {\n const [detailColumnVisibility, setDetailColumnVisibility] = useState<VisibilityState>(() =>\n columns ? resolveInitialColumnVisibility(detailColumnsEntryKey(entityKey), columns) : {},\n );\n\n const toggleDetailColumn = (columnId: string) => {\n setDetailColumnVisibility((previous) => ({ ...previous, [columnId]: !(previous[columnId] ?? true) }));\n };\n\n const hasDetailColumns = !!columns;\n\n useEffect(() => {\n if (!hasDetailColumns) return;\n writeColumnsEntry(detailColumnsEntryKey(entityKey), { visibility: detailColumnVisibility });\n }, [entityKey, hasDetailColumns, detailColumnVisibility]);\n\n return { detailColumnVisibility, toggleDetailColumn };\n};\n"],"names":[],"mappings":";;AASA,MAAM,iCAAiC,CACrC,YACA,YACoB;AACpB,QAAM,aAA8B,CAAA;AAEpC,aAAW,UAAU,SAAS;AAC5B,QAAI,OAAO,aAAa,MAAO;AAC/B,QAAI,OAAO,cAAe,YAAW,OAAO,EAAE,IAAI;AAAA,EACpD;AAEA,QAAM,YAAY,iBAAiB,UAAU,EAAE;AAC/C,MAAI,CAAC,UAAW,QAAO;AAEvB,aAAW,UAAU,SAAS;AAC5B,QAAI,OAAO,aAAa,MAAO;AAC/B,QAAI,OAAO,UAAU,OAAO,EAAE,MAAM,UAAW,YAAW,OAAO,EAAE,IAAI,UAAU,OAAO,EAAE;AAAA,EAC5F;AAEA,SAAO;AACT;AAOO,MAAM,sBAAsB,CACjC,WAC+B;AAC/B,QAAM,CAAC,kBAAkB,mBAAmB,IAAI;AAAA,IAA0B,MACxE,+BAA+B,OAAO,WAAW,OAAO,OAAO;AAAA,EAAA;AAGjE,QAAM,2BAA2B,CAAC,YAAsC;AACtE,wBAAoB,CAAC,aAAc,OAAO,YAAY,aAAa,QAAQ,QAAQ,IAAI,OAAQ;AAAA,EACjG;AAEA,YAAU,MAAM;AACd,sBAAkB,OAAO,WAAW,EAAE,YAAY,kBAAkB;AAAA,EACtE,GAAG,CAAC,OAAO,WAAW,gBAAgB,CAAC;AAEvC,SAAO,EAAE,kBAAkB,yBAAA;AAC7B;AAaO,MAAM,4BAA4B,CACvC,WACA,YACqC;AACrC,QAAM,CAAC,wBAAwB,yBAAyB,IAAI;AAAA,IAA0B,MACpF,UAAU,+BAA+B,sBAAsB,SAAS,GAAG,OAAO,IAAI,CAAA;AAAA,EAAC;AAGzF,QAAM,qBAAqB,CAAC,aAAqB;AAC/C,8BAA0B,CAAC,cAAc,EAAE,GAAG,UAAU,CAAC,QAAQ,GAAG,EAAE,SAAS,QAAQ,KAAK,QAAQ;AAAA,EACtG;AAEA,QAAM,mBAAmB,CAAC,CAAC;AAE3B,YAAU,MAAM;AACd,QAAI,CAAC,iBAAkB;AACvB,sBAAkB,sBAAsB,SAAS,GAAG,EAAE,YAAY,wBAAwB;AAAA,EAC5F,GAAG,CAAC,WAAW,kBAAkB,sBAAsB,CAAC;AAExD,SAAO,EAAE,wBAAwB,mBAAA;AACnC;"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { IDataTableFillChange, IDataTableRow } from './types';
|
|
2
|
+
export type TDataTableCommitStatus = 'pending' | 'saving' | 'saved' | 'error';
|
|
3
|
+
export interface IDataTableCommitItem<T extends IDataTableRow> {
|
|
4
|
+
row: T;
|
|
5
|
+
/** Accumulated values for that row, keyed by column id. */
|
|
6
|
+
changes: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Per-row outcome of a batch save. Returning it lets an endpoint with partial
|
|
10
|
+
* success mark only the rows that actually failed, instead of the whole batch.
|
|
11
|
+
*/
|
|
12
|
+
export interface IDataTableCommitRowResult {
|
|
13
|
+
rowId: string;
|
|
14
|
+
ok: boolean;
|
|
15
|
+
message?: string;
|
|
16
|
+
}
|
|
17
|
+
interface IUseDataTableCommitQueueParams<T extends IDataTableRow> {
|
|
18
|
+
rows: Array<T>;
|
|
19
|
+
/** One call per row, run with limited concurrency. The common case. */
|
|
20
|
+
saveRow?: (item: IDataTableCommitItem<T>) => Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* One call for everything, for hosts that own a bulk endpoint. Wins over
|
|
23
|
+
* `saveRow`. Return per-row results to report partial success; returning
|
|
24
|
+
* nothing means every row saved.
|
|
25
|
+
*/
|
|
26
|
+
saveBatch?: (items: Array<IDataTableCommitItem<T>>) => Promise<void | Array<IDataTableCommitRowResult>>;
|
|
27
|
+
/**
|
|
28
|
+
* Writes an edited value onto the row for the optimistic overlay. The default
|
|
29
|
+
* assigns the column id as a top-level key, which only holds when the column id
|
|
30
|
+
* IS the row field: a column reading `row.productReferenceId` (or a dotted path)
|
|
31
|
+
* must provide this, or the save succeeds and the screen never changes.
|
|
32
|
+
*/
|
|
33
|
+
applyChange?: (row: T, columnId: string, value: unknown) => T;
|
|
34
|
+
debounceMs?: number;
|
|
35
|
+
concurrency?: number;
|
|
36
|
+
/** `false` keeps every change pending until `flush()` (an explicit save button). */
|
|
37
|
+
autoFlush?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface IUseDataTableCommitQueueResult<T extends IDataTableRow> {
|
|
40
|
+
/** `rows` with every applied edit merged in, so the cells show what was typed. */
|
|
41
|
+
mergedRows: Array<T>;
|
|
42
|
+
onCellChange: (row: T, columnId: string, value: unknown) => void;
|
|
43
|
+
/** Whole fill range in one update: one render, one flush, one request per row. */
|
|
44
|
+
onFillCells: (changes: Array<IDataTableFillChange<T>>) => void;
|
|
45
|
+
flush: () => Promise<void>;
|
|
46
|
+
retryFailed: () => Promise<void>;
|
|
47
|
+
statuses: ReadonlyMap<string, TDataTableCommitStatus>;
|
|
48
|
+
isDirty: boolean;
|
|
49
|
+
isSaving: boolean;
|
|
50
|
+
pendingCount: number;
|
|
51
|
+
errorCount: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The single persistence path for inline editing. It replaces the fire-and-forget
|
|
55
|
+
* buffer with a queue that:
|
|
56
|
+
*
|
|
57
|
+
* - deduplicates by (row, column), so typing three times in a cell sends one value;
|
|
58
|
+
* - stamps every change with a sequence number, so a slow response can never mark
|
|
59
|
+
* a newer value as saved (and never overwrites it);
|
|
60
|
+
* - runs one request per row with a concurrency cap, instead of `Promise.all` over
|
|
61
|
+
* everything (a 40-row fill would otherwise open 40 sockets at once);
|
|
62
|
+
* - keeps the optimistic overlay until the cell is actually saved, so a refetch
|
|
63
|
+
* arriving mid-flight no longer wipes what the user typed;
|
|
64
|
+
* - flushes on unmount and warns on tab close, so leaving the page does not
|
|
65
|
+
* silently discard pending edits;
|
|
66
|
+
* - exposes a per-cell status the table paints (saving / saved / error).
|
|
67
|
+
*/
|
|
68
|
+
export declare function useDataTableCommitQueue<T extends IDataTableRow>({ rows, saveRow, saveBatch, applyChange, debounceMs, concurrency, autoFlush, }: IUseDataTableCommitQueueParams<T>): IUseDataTableCommitQueueResult<T>;
|
|
69
|
+
export {};
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { useRef, useState, useCallback, useEffect, useMemo } from "react";
|
|
2
|
+
import { uiLogger } from "../../../helpers/uiLogger.js";
|
|
3
|
+
import { buildGridCellKey } from "./grid/gridTypes.js";
|
|
4
|
+
const DEFAULT_DEBOUNCE_MS = 800;
|
|
5
|
+
const DEFAULT_CONCURRENCY = 4;
|
|
6
|
+
const runWithConcurrency = async (items, limit, worker) => {
|
|
7
|
+
let nextIndex = 0;
|
|
8
|
+
const runners = Array.from({ length: Math.max(1, Math.min(limit, items.length)) }, async () => {
|
|
9
|
+
while (nextIndex < items.length) {
|
|
10
|
+
const item = items[nextIndex];
|
|
11
|
+
nextIndex += 1;
|
|
12
|
+
if (item !== void 0) await worker(item);
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
await Promise.all(runners);
|
|
16
|
+
};
|
|
17
|
+
function useDataTableCommitQueue({
|
|
18
|
+
rows,
|
|
19
|
+
saveRow,
|
|
20
|
+
saveBatch,
|
|
21
|
+
applyChange,
|
|
22
|
+
debounceMs = DEFAULT_DEBOUNCE_MS,
|
|
23
|
+
concurrency = DEFAULT_CONCURRENCY,
|
|
24
|
+
autoFlush = true
|
|
25
|
+
}) {
|
|
26
|
+
const overlayRef = useRef(/* @__PURE__ */ new Map());
|
|
27
|
+
const pendingRef = useRef(/* @__PURE__ */ new Map());
|
|
28
|
+
const inFlightRef = useRef(/* @__PURE__ */ new Map());
|
|
29
|
+
const statusesRef = useRef(/* @__PURE__ */ new Map());
|
|
30
|
+
const sequenceRef = useRef(0);
|
|
31
|
+
const timeoutRef = useRef(null);
|
|
32
|
+
const isSavingRef = useRef(false);
|
|
33
|
+
const rowsRef = useRef(rows);
|
|
34
|
+
rowsRef.current = rows;
|
|
35
|
+
const saveRowRef = useRef(saveRow);
|
|
36
|
+
saveRowRef.current = saveRow;
|
|
37
|
+
const saveBatchRef = useRef(saveBatch);
|
|
38
|
+
saveBatchRef.current = saveBatch;
|
|
39
|
+
const applyChangeRef = useRef(applyChange);
|
|
40
|
+
applyChangeRef.current = applyChange;
|
|
41
|
+
const [version, setVersion] = useState(0);
|
|
42
|
+
const publish = useCallback(() => setVersion((current) => current + 1), []);
|
|
43
|
+
const flushRef = useRef(async () => void 0);
|
|
44
|
+
const flush = useCallback(async () => {
|
|
45
|
+
if (timeoutRef.current) {
|
|
46
|
+
clearTimeout(timeoutRef.current);
|
|
47
|
+
timeoutRef.current = null;
|
|
48
|
+
}
|
|
49
|
+
if (pendingRef.current.size === 0) return;
|
|
50
|
+
const outgoing = Array.from(pendingRef.current.values());
|
|
51
|
+
pendingRef.current.clear();
|
|
52
|
+
const rowById = new Map(rowsRef.current.map((row) => [row.id, row]));
|
|
53
|
+
const itemsByRowId = /* @__PURE__ */ new Map();
|
|
54
|
+
outgoing.forEach((change) => {
|
|
55
|
+
const cellKey = buildGridCellKey(change.rowId, change.columnId);
|
|
56
|
+
inFlightRef.current.set(cellKey, change.sequence);
|
|
57
|
+
statusesRef.current.set(cellKey, "saving");
|
|
58
|
+
const row = rowById.get(change.rowId);
|
|
59
|
+
if (!row) return;
|
|
60
|
+
const item = itemsByRowId.get(change.rowId) ?? { row, changes: {} };
|
|
61
|
+
item.changes[change.columnId] = change.value;
|
|
62
|
+
itemsByRowId.set(change.rowId, item);
|
|
63
|
+
});
|
|
64
|
+
isSavingRef.current = true;
|
|
65
|
+
publish();
|
|
66
|
+
const settleRow = (rowChanges, succeeded) => {
|
|
67
|
+
rowChanges.forEach((change) => {
|
|
68
|
+
const cellKey = buildGridCellKey(change.rowId, change.columnId);
|
|
69
|
+
if (inFlightRef.current.get(cellKey) !== change.sequence) return;
|
|
70
|
+
inFlightRef.current.delete(cellKey);
|
|
71
|
+
statusesRef.current.set(cellKey, succeeded ? "saved" : "error");
|
|
72
|
+
if (!succeeded) pendingRef.current.set(cellKey, change);
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
const changesByRowId = /* @__PURE__ */ new Map();
|
|
76
|
+
outgoing.forEach((change) => {
|
|
77
|
+
const list = changesByRowId.get(change.rowId) ?? [];
|
|
78
|
+
list.push(change);
|
|
79
|
+
changesByRowId.set(change.rowId, list);
|
|
80
|
+
});
|
|
81
|
+
const items = Array.from(itemsByRowId.values());
|
|
82
|
+
try {
|
|
83
|
+
if (saveBatchRef.current) {
|
|
84
|
+
try {
|
|
85
|
+
const rowResults = await saveBatchRef.current(items);
|
|
86
|
+
const failedRowIds = new Set(
|
|
87
|
+
(Array.isArray(rowResults) ? rowResults : []).filter((result) => !result.ok).map((result) => result.rowId)
|
|
88
|
+
);
|
|
89
|
+
changesByRowId.forEach((rowChanges, rowId) => settleRow(rowChanges, !failedRowIds.has(rowId)));
|
|
90
|
+
} catch (error) {
|
|
91
|
+
uiLogger.error("DataTable batch save failed", error);
|
|
92
|
+
changesByRowId.forEach((rowChanges) => settleRow(rowChanges, false));
|
|
93
|
+
}
|
|
94
|
+
} else if (saveRowRef.current) {
|
|
95
|
+
await runWithConcurrency(items, concurrency, async (item) => {
|
|
96
|
+
const rowChanges = changesByRowId.get(item.row.id) ?? [];
|
|
97
|
+
try {
|
|
98
|
+
await saveRowRef.current?.(item);
|
|
99
|
+
settleRow(rowChanges, true);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
uiLogger.error("DataTable row save failed", error);
|
|
102
|
+
settleRow(rowChanges, false);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
} finally {
|
|
107
|
+
isSavingRef.current = false;
|
|
108
|
+
publish();
|
|
109
|
+
}
|
|
110
|
+
}, [concurrency, publish]);
|
|
111
|
+
flushRef.current = flush;
|
|
112
|
+
const scheduleFlush = useCallback(() => {
|
|
113
|
+
if (!autoFlush) return;
|
|
114
|
+
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
115
|
+
timeoutRef.current = setTimeout(() => {
|
|
116
|
+
void flushRef.current();
|
|
117
|
+
}, debounceMs);
|
|
118
|
+
}, [autoFlush, debounceMs]);
|
|
119
|
+
const applyChanges = useCallback(
|
|
120
|
+
(changes) => {
|
|
121
|
+
changes.forEach(({ rowId, columnId, value }) => {
|
|
122
|
+
sequenceRef.current += 1;
|
|
123
|
+
const rowOverlay = { ...overlayRef.current.get(rowId) ?? {}, [columnId]: value };
|
|
124
|
+
overlayRef.current.set(rowId, rowOverlay);
|
|
125
|
+
const cellKey = buildGridCellKey(rowId, columnId);
|
|
126
|
+
pendingRef.current.set(cellKey, { rowId, columnId, value, sequence: sequenceRef.current });
|
|
127
|
+
statusesRef.current.set(cellKey, "pending");
|
|
128
|
+
});
|
|
129
|
+
publish();
|
|
130
|
+
scheduleFlush();
|
|
131
|
+
},
|
|
132
|
+
[publish, scheduleFlush]
|
|
133
|
+
);
|
|
134
|
+
const onCellChange = useCallback(
|
|
135
|
+
(row, columnId, value) => applyChanges([{ rowId: row.id, columnId, value }]),
|
|
136
|
+
[applyChanges]
|
|
137
|
+
);
|
|
138
|
+
const onFillCells = useCallback(
|
|
139
|
+
(changes) => applyChanges(
|
|
140
|
+
(changes ?? []).map((change) => ({ rowId: change.row.id, columnId: change.columnId, value: change.value }))
|
|
141
|
+
),
|
|
142
|
+
[applyChanges]
|
|
143
|
+
);
|
|
144
|
+
const retryFailed = useCallback(async () => {
|
|
145
|
+
const failedKeys = Array.from(statusesRef.current.entries()).filter(([, status]) => status === "error").map(([cellKey]) => cellKey);
|
|
146
|
+
if (failedKeys.length === 0) return;
|
|
147
|
+
failedKeys.forEach((cellKey) => statusesRef.current.set(cellKey, "pending"));
|
|
148
|
+
await flush();
|
|
149
|
+
}, [flush]);
|
|
150
|
+
const previousRowsRef = useRef(rows);
|
|
151
|
+
useEffect(() => {
|
|
152
|
+
if (previousRowsRef.current === rows) return;
|
|
153
|
+
previousRowsRef.current = rows;
|
|
154
|
+
let changed = false;
|
|
155
|
+
overlayRef.current.forEach((rowOverlay, rowId) => {
|
|
156
|
+
Object.keys(rowOverlay).forEach((columnId) => {
|
|
157
|
+
const cellKey = buildGridCellKey(rowId, columnId);
|
|
158
|
+
if (statusesRef.current.get(cellKey) !== "saved") return;
|
|
159
|
+
delete rowOverlay[columnId];
|
|
160
|
+
statusesRef.current.delete(cellKey);
|
|
161
|
+
changed = true;
|
|
162
|
+
});
|
|
163
|
+
if (Object.keys(rowOverlay).length === 0) overlayRef.current.delete(rowId);
|
|
164
|
+
});
|
|
165
|
+
if (changed) publish();
|
|
166
|
+
}, [rows, publish]);
|
|
167
|
+
useEffect(
|
|
168
|
+
() => () => {
|
|
169
|
+
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
170
|
+
void flushRef.current();
|
|
171
|
+
},
|
|
172
|
+
[]
|
|
173
|
+
);
|
|
174
|
+
const hasUnsavedWork = pendingRef.current.size > 0 || inFlightRef.current.size > 0;
|
|
175
|
+
useEffect(() => {
|
|
176
|
+
if (!hasUnsavedWork) return void 0;
|
|
177
|
+
const handleBeforeUnload = (event) => {
|
|
178
|
+
void flushRef.current();
|
|
179
|
+
event.preventDefault();
|
|
180
|
+
event.returnValue = "";
|
|
181
|
+
};
|
|
182
|
+
window.addEventListener("beforeunload", handleBeforeUnload);
|
|
183
|
+
return () => window.removeEventListener("beforeunload", handleBeforeUnload);
|
|
184
|
+
}, [hasUnsavedWork]);
|
|
185
|
+
const mergedRows = useMemo(() => {
|
|
186
|
+
const safeRows = rows ?? [];
|
|
187
|
+
if (overlayRef.current.size === 0) return safeRows;
|
|
188
|
+
const applyToRow = applyChangeRef.current ?? ((row, columnId, value) => ({
|
|
189
|
+
...row,
|
|
190
|
+
[columnId]: value
|
|
191
|
+
}));
|
|
192
|
+
return safeRows.map((row) => {
|
|
193
|
+
const rowOverlay = overlayRef.current.get(row.id);
|
|
194
|
+
if (!rowOverlay || Object.keys(rowOverlay).length === 0) return row;
|
|
195
|
+
return Object.entries(rowOverlay).reduce(
|
|
196
|
+
(current, [columnId, value]) => applyToRow(current, columnId, value),
|
|
197
|
+
row
|
|
198
|
+
);
|
|
199
|
+
});
|
|
200
|
+
}, [rows, version]);
|
|
201
|
+
const statuses = useMemo(() => new Map(statusesRef.current), [version]);
|
|
202
|
+
const pendingCount = pendingRef.current.size + inFlightRef.current.size;
|
|
203
|
+
const errorCount = Array.from(statusesRef.current.values()).filter((status) => status === "error").length;
|
|
204
|
+
return {
|
|
205
|
+
mergedRows,
|
|
206
|
+
onCellChange,
|
|
207
|
+
onFillCells,
|
|
208
|
+
flush,
|
|
209
|
+
retryFailed,
|
|
210
|
+
statuses,
|
|
211
|
+
isDirty: pendingCount > 0,
|
|
212
|
+
isSaving: isSavingRef.current,
|
|
213
|
+
pendingCount,
|
|
214
|
+
errorCount
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
export {
|
|
218
|
+
useDataTableCommitQueue
|
|
219
|
+
};
|
|
220
|
+
//# sourceMappingURL=useDataTableCommitQueue.js.map
|