@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 @@
|
|
|
1
|
+
{"version":3,"file":"GridFillHandle.js","sources":["../../../../../src/components/UI/DataTable/grid/GridFillHandle.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport ControlledButton from '@/components/Form/ControlledButton';\nimport ControlledTooltip from '@/components/UI/ControlledTooltip';\n\nimport { useGridCellRegistry, useGridStoreApi } from './GridProvider';\nimport { GRID_CELL_DATA_ATTR, GRID_COLUMN_DATA_ATTR, GRID_ROW_DATA_ATTR } from './gridTypes';\n\n/**\n * The small square at the bottom-right of the selection. It drives the drag with\n * pointer capture, so every move event is delivered to this element and the grid\n * needs no document-level pointer listeners.\n */\nconst GridFillHandle: React.FC = () => {\n const { t } = useTranslation('ui');\n const store = useGridStoreApi();\n const registry = useGridCellRegistry();\n const [isDragging, setIsDragging] = useState(false);\n\n useEffect(() => {\n if (!isDragging || !store) return undefined;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return;\n store.getState().cancelFill();\n setIsDragging(false);\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isDragging, store]);\n\n const handlePointerDown = (event: React.PointerEvent<HTMLButtonElement>) => {\n if (!store) return;\n event.preventDefault();\n event.stopPropagation();\n event.currentTarget.setPointerCapture(event.pointerId);\n store.getState().startFill();\n setIsDragging(true);\n };\n\n const handlePointerMove = (event: React.PointerEvent<HTMLButtonElement>) => {\n if (!store || !store.getState().fillSourceRect) return;\n\n const elementUnderPointer = document.elementFromPoint(event.clientX, event.clientY);\n const cell = elementUnderPointer?.closest(`[${GRID_CELL_DATA_ATTR}]`);\n const rowId = cell?.getAttribute(GRID_ROW_DATA_ATTR);\n const columnId = cell?.getAttribute(GRID_COLUMN_DATA_ATTR);\n if (!rowId || !columnId) return;\n\n store.getState().updateFillTarget({ rowId, columnId });\n };\n\n const handlePointerUp = (event: React.PointerEvent<HTMLButtonElement>) => {\n setIsDragging(false);\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n if (!store) return;\n\n const result = store.getState().endFill();\n if (result) registry?.commitFill(result);\n };\n\n return (\n <ControlledTooltip content={t('dataTable.fillHandle')}>\n <ControlledButton\n defaultHtmlButton\n // Out of the tab order on purpose: the handle is a pointer affordance, and\n // the keyboard reaches the same result by editing the cells directly.\n tabIndex={-1}\n // The cell below listens to `mousedown` to move the active cell. Preventing\n // the pointer event does not always suppress that compatibility event, and\n // letting it through would collapse the range the drag is about to read.\n onMouseDown={(event) => event.stopPropagation()}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={() => {\n setIsDragging(false);\n store?.getState().cancelFill();\n }}\n className=\"absolute bottom-0 right-0 z-30 size-2 cursor-crosshair rounded-[0.125rem] bg-brand\"\n >\n {null}\n </ControlledButton>\n </ControlledTooltip>\n );\n};\n\nexport default GridFillHandle;\n"],"names":[],"mappings":";;;;;;;AAcA,MAAM,iBAA2B,MAAM;AACrC,QAAM,EAAE,EAAA,IAAM,eAAe,IAAI;AACjC,QAAM,QAAQ,gBAAA;AACd,QAAM,WAAW,oBAAA;AACjB,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAElD,YAAU,MAAM;AACd,QAAI,CAAC,cAAc,CAAC,MAAO,QAAO;AAElC,UAAM,gBAAgB,CAAC,UAAyB;AAC9C,UAAI,MAAM,QAAQ,SAAU;AAC5B,YAAM,SAAA,EAAW,WAAA;AACjB,oBAAc,KAAK;AAAA,IACrB;AAEA,WAAO,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM,OAAO,oBAAoB,WAAW,aAAa;AAAA,EAClE,GAAG,CAAC,YAAY,KAAK,CAAC;AAEtB,QAAM,oBAAoB,CAAC,UAAiD;AAC1E,QAAI,CAAC,MAAO;AACZ,UAAM,eAAA;AACN,UAAM,gBAAA;AACN,UAAM,cAAc,kBAAkB,MAAM,SAAS;AACrD,UAAM,SAAA,EAAW,UAAA;AACjB,kBAAc,IAAI;AAAA,EACpB;AAEA,QAAM,oBAAoB,CAAC,UAAiD;AAC1E,QAAI,CAAC,SAAS,CAAC,MAAM,SAAA,EAAW,eAAgB;AAEhD,UAAM,sBAAsB,SAAS,iBAAiB,MAAM,SAAS,MAAM,OAAO;AAClF,UAAM,OAAO,qBAAqB,QAAQ,IAAI,mBAAmB,GAAG;AACpE,UAAM,QAAQ,MAAM,aAAa,kBAAkB;AACnD,UAAM,WAAW,MAAM,aAAa,qBAAqB;AACzD,QAAI,CAAC,SAAS,CAAC,SAAU;AAEzB,UAAM,WAAW,iBAAiB,EAAE,OAAO,UAAU;AAAA,EACvD;AAEA,QAAM,kBAAkB,CAAC,UAAiD;AACxE,kBAAc,KAAK;AACnB,QAAI,MAAM,cAAc,kBAAkB,MAAM,SAAS,GAAG;AAC1D,YAAM,cAAc,sBAAsB,MAAM,SAAS;AAAA,IAC3D;AACA,QAAI,CAAC,MAAO;AAEZ,UAAM,SAAS,MAAM,SAAA,EAAW,QAAA;AAChC,QAAI,OAAQ,WAAU,WAAW,MAAM;AAAA,EACzC;AAEA,SACE,oBAAC,mBAAA,EAAkB,SAAS,EAAE,sBAAsB,GAClD,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,mBAAiB;AAAA,MAGjB,UAAU;AAAA,MAIV,aAAa,CAAC,UAAU,MAAM,gBAAA;AAAA,MAC9B,eAAe;AAAA,MACf,eAAe;AAAA,MACf,aAAa;AAAA,MACb,iBAAiB,MAAM;AACrB,sBAAc,KAAK;AACnB,eAAO,SAAA,EAAW,WAAA;AAAA,MACpB;AAAA,MACA,WAAU;AAAA,MAET,UAAA;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { StoreApi } from 'zustand/vanilla';
|
|
3
|
+
import { IGridFillResult, IGridState } from './gridStore';
|
|
4
|
+
import { IGridCellCoord } from './gridTypes';
|
|
5
|
+
export interface IGridCellRegistry {
|
|
6
|
+
register: (cellKey: string, element: HTMLElement | null) => void;
|
|
7
|
+
focusCell: (coord: IGridCellCoord) => void;
|
|
8
|
+
/** Whether a click on this cell opens its editor. */
|
|
9
|
+
canEditCell: (coord: IGridCellCoord) => boolean;
|
|
10
|
+
/** Hands a finished fill drag to the host table, which owns the row data. */
|
|
11
|
+
commitFill: (result: IGridFillResult) => void;
|
|
12
|
+
}
|
|
13
|
+
/** The grid store of the closest spreadsheet-enabled table, or `null` outside one. */
|
|
14
|
+
export declare const useGridStoreApi: () => StoreApi<IGridState> | null;
|
|
15
|
+
export declare const useGridCellRegistry: () => IGridCellRegistry | null;
|
|
16
|
+
/**
|
|
17
|
+
* Per-cell subscription to the grid state, as a bitmask. Reading a primitive
|
|
18
|
+
* through `useSyncExternalStore` means moving the active cell re-renders the two
|
|
19
|
+
* cells that changed, never the table.
|
|
20
|
+
*/
|
|
21
|
+
export declare const useGridCellState: (rowId: string, columnId: string) => number;
|
|
22
|
+
interface IGridProviderProps {
|
|
23
|
+
store: StoreApi<IGridState>;
|
|
24
|
+
/** The scroll region that holds the table: a press outside it releases the active cell. */
|
|
25
|
+
gridAreaRef?: React.RefObject<HTMLElement | null>;
|
|
26
|
+
canEditCell: (coord: IGridCellCoord) => boolean;
|
|
27
|
+
onFillCommit?: (result: IGridFillResult) => void;
|
|
28
|
+
children: React.ReactNode;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Owns the DOM side of the grid: the cell element registry and the focus/scroll
|
|
32
|
+
* effect. It subscribes imperatively, so following the active cell costs no
|
|
33
|
+
* render of its own.
|
|
34
|
+
*/
|
|
35
|
+
declare const GridProvider: React.FC<IGridProviderProps>;
|
|
36
|
+
export default GridProvider;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useRef, useMemo, useEffect, useContext, useCallback, useSyncExternalStore } from "react";
|
|
3
|
+
import { LAYERED_SURFACE_SELECTOR, isPressOnLayeredSurface } from "../../../../helpers/layeredSurfaces.js";
|
|
4
|
+
import { selectGridCellState } from "./gridStore.js";
|
|
5
|
+
import { buildGridCellKey } from "./gridTypes.js";
|
|
6
|
+
const GridStoreContext = createContext(null);
|
|
7
|
+
const GridCellRegistryContext = createContext(null);
|
|
8
|
+
const useGridStoreApi = () => useContext(GridStoreContext);
|
|
9
|
+
const useGridCellRegistry = () => useContext(GridCellRegistryContext);
|
|
10
|
+
const useGridCellState = (rowId, columnId) => {
|
|
11
|
+
const store = useGridStoreApi();
|
|
12
|
+
const subscribe = useCallback(
|
|
13
|
+
(onStoreChange) => store ? store.subscribe(onStoreChange) : () => void 0,
|
|
14
|
+
[store]
|
|
15
|
+
);
|
|
16
|
+
const getSnapshot = useCallback(
|
|
17
|
+
() => store ? selectGridCellState(store.getState(), rowId, columnId) : 0,
|
|
18
|
+
[store, rowId, columnId]
|
|
19
|
+
);
|
|
20
|
+
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
21
|
+
};
|
|
22
|
+
const EDITOR_FOCUS_SELECTOR = 'input, textarea, select, [contenteditable="true"], button, [tabindex]';
|
|
23
|
+
const isPickerTrigger = (element) => element instanceof HTMLInputElement && element.readOnly;
|
|
24
|
+
const isTextField = (element) => element instanceof HTMLInputElement && !element.readOnly || element instanceof HTMLTextAreaElement;
|
|
25
|
+
const placeCaretAtEnd = (field) => {
|
|
26
|
+
try {
|
|
27
|
+
const end = field.value.length;
|
|
28
|
+
field.setSelectionRange(end, end);
|
|
29
|
+
} catch {
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const GridEditingFocus = ({
|
|
33
|
+
store,
|
|
34
|
+
elements
|
|
35
|
+
}) => {
|
|
36
|
+
const editingKey = useSyncExternalStore(
|
|
37
|
+
useCallback((onStoreChange) => store.subscribe(onStoreChange), [store]),
|
|
38
|
+
() => {
|
|
39
|
+
const editing = store.getState().editingCell;
|
|
40
|
+
return editing ? buildGridCellKey(editing.rowId, editing.columnId) : null;
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (!editingKey) return;
|
|
45
|
+
const editor = elements.get(editingKey)?.querySelector(EDITOR_FOCUS_SELECTOR);
|
|
46
|
+
if (!editor) return;
|
|
47
|
+
editor.focus({ preventScroll: true });
|
|
48
|
+
const { editingEntry, editingSeed } = store.getState();
|
|
49
|
+
if (isPickerTrigger(editor)) {
|
|
50
|
+
if (editingEntry !== "keyboard") editor.click();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!isTextField(editor)) return;
|
|
54
|
+
if (editingEntry === "keyboard" && editingSeed == null) editor.select();
|
|
55
|
+
else placeCaretAtEnd(editor);
|
|
56
|
+
}, [editingKey, elements, store]);
|
|
57
|
+
return null;
|
|
58
|
+
};
|
|
59
|
+
const isPressAboveGrid = (target, gridArea) => {
|
|
60
|
+
const hostSurface = gridArea?.closest(LAYERED_SURFACE_SELECTOR) ?? null;
|
|
61
|
+
if (hostSurface) return isPressOnLayeredSurface(target, hostSurface);
|
|
62
|
+
return isPressOnLayeredSurface(target) || Boolean(target.closest(LAYERED_SURFACE_SELECTOR));
|
|
63
|
+
};
|
|
64
|
+
const GridProvider = ({ store, gridAreaRef, canEditCell, onFillCommit, children }) => {
|
|
65
|
+
const elementsRef = useRef(/* @__PURE__ */ new Map());
|
|
66
|
+
const onFillCommitRef = useRef(onFillCommit);
|
|
67
|
+
onFillCommitRef.current = onFillCommit;
|
|
68
|
+
const canEditCellRef = useRef(canEditCell);
|
|
69
|
+
canEditCellRef.current = canEditCell;
|
|
70
|
+
const registry = useMemo(
|
|
71
|
+
() => ({
|
|
72
|
+
commitFill: (result) => onFillCommitRef.current?.(result),
|
|
73
|
+
canEditCell: (coord) => canEditCellRef.current(coord),
|
|
74
|
+
register: (cellKey, element) => {
|
|
75
|
+
if (element) elementsRef.current.set(cellKey, element);
|
|
76
|
+
else elementsRef.current.delete(cellKey);
|
|
77
|
+
},
|
|
78
|
+
focusCell: (coord) => {
|
|
79
|
+
const element = elementsRef.current.get(buildGridCellKey(coord.rowId, coord.columnId));
|
|
80
|
+
if (!element) return;
|
|
81
|
+
element.focus({ preventScroll: true });
|
|
82
|
+
element.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
83
|
+
}
|
|
84
|
+
}),
|
|
85
|
+
[]
|
|
86
|
+
);
|
|
87
|
+
useEffect(
|
|
88
|
+
() => store.subscribe((state, previous) => {
|
|
89
|
+
const activeChanged = state.activeCell?.rowId !== previous.activeCell?.rowId || state.activeCell?.columnId !== previous.activeCell?.columnId;
|
|
90
|
+
const editingEnded = !!previous.editingCell && !state.editingCell;
|
|
91
|
+
if (!activeChanged && !editingEnded) return;
|
|
92
|
+
if (state.editingCell) return;
|
|
93
|
+
const coord = state.activeCell;
|
|
94
|
+
if (!coord) return;
|
|
95
|
+
const element = elementsRef.current.get(buildGridCellKey(coord.rowId, coord.columnId));
|
|
96
|
+
if (!element) return;
|
|
97
|
+
if (editingEnded || !element.contains(document.activeElement)) element.focus({ preventScroll: true });
|
|
98
|
+
element.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
99
|
+
}),
|
|
100
|
+
[store]
|
|
101
|
+
);
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
const handlePointerDown = (event) => {
|
|
104
|
+
const { activeCell, editingCell } = store.getState();
|
|
105
|
+
if (!activeCell && !editingCell) return;
|
|
106
|
+
const target = event.target instanceof Element ? event.target : null;
|
|
107
|
+
if (!target) return;
|
|
108
|
+
const gridArea = gridAreaRef?.current ?? null;
|
|
109
|
+
if (gridArea?.contains(target) || isPressAboveGrid(target, gridArea)) return;
|
|
110
|
+
const focused = document.activeElement;
|
|
111
|
+
if (focused instanceof HTMLElement && gridArea?.contains(focused)) focused.blur();
|
|
112
|
+
store.getState().releaseActiveCell();
|
|
113
|
+
};
|
|
114
|
+
document.addEventListener("pointerdown", handlePointerDown);
|
|
115
|
+
return () => document.removeEventListener("pointerdown", handlePointerDown);
|
|
116
|
+
}, [store, gridAreaRef]);
|
|
117
|
+
return /* @__PURE__ */ jsx(GridStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxs(GridCellRegistryContext.Provider, { value: registry, children: [
|
|
118
|
+
/* @__PURE__ */ jsx(GridEditingFocus, { store, elements: elementsRef.current }),
|
|
119
|
+
children
|
|
120
|
+
] }) });
|
|
121
|
+
};
|
|
122
|
+
export {
|
|
123
|
+
GridProvider as default,
|
|
124
|
+
useGridCellRegistry,
|
|
125
|
+
useGridCellState,
|
|
126
|
+
useGridStoreApi
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=GridProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridProvider.js","sources":["../../../../../src/components/UI/DataTable/grid/GridProvider.tsx"],"sourcesContent":["import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef, useSyncExternalStore } from 'react';\nimport { type StoreApi } from 'zustand/vanilla';\n\nimport { isPressOnLayeredSurface, LAYERED_SURFACE_SELECTOR } from '@/helpers/layeredSurfaces';\n\nimport { type IGridFillResult, type IGridState, selectGridCellState } from './gridStore';\nimport { buildGridCellKey, type IGridCellCoord } from './gridTypes';\n\nexport interface IGridCellRegistry {\n register: (cellKey: string, element: HTMLElement | null) => void;\n focusCell: (coord: IGridCellCoord) => void;\n /** Whether a click on this cell opens its editor. */\n canEditCell: (coord: IGridCellCoord) => boolean;\n /** Hands a finished fill drag to the host table, which owns the row data. */\n commitFill: (result: IGridFillResult) => void;\n}\n\nconst GridStoreContext = createContext<StoreApi<IGridState> | null>(null);\nconst GridCellRegistryContext = createContext<IGridCellRegistry | null>(null);\n\n/** The grid store of the closest spreadsheet-enabled table, or `null` outside one. */\nexport const useGridStoreApi = (): StoreApi<IGridState> | null => useContext(GridStoreContext);\n\nexport const useGridCellRegistry = (): IGridCellRegistry | null => useContext(GridCellRegistryContext);\n\n/**\n * Per-cell subscription to the grid state, as a bitmask. Reading a primitive\n * through `useSyncExternalStore` means moving the active cell re-renders the two\n * cells that changed, never the table.\n */\nexport const useGridCellState = (rowId: string, columnId: string): number => {\n const store = useGridStoreApi();\n\n const subscribe = useCallback(\n (onStoreChange: () => void) => (store ? store.subscribe(onStoreChange) : () => undefined),\n [store],\n );\n\n const getSnapshot = useCallback(\n () => (store ? selectGridCellState(store.getState(), rowId, columnId) : 0),\n [store, rowId, columnId],\n );\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n};\n\nconst EDITOR_FOCUS_SELECTOR = 'input, textarea, select, [contenteditable=\"true\"], button, [tabindex]';\n\n/** Select and date editors render a read-only input that opens their popup on click. */\nconst isPickerTrigger = (element: HTMLElement): boolean => element instanceof HTMLInputElement && element.readOnly;\n\nconst isTextField = (element: HTMLElement): element is HTMLInputElement | HTMLTextAreaElement =>\n (element instanceof HTMLInputElement && !element.readOnly) || element instanceof HTMLTextAreaElement;\n\nconst placeCaretAtEnd = (field: HTMLInputElement | HTMLTextAreaElement): void => {\n // `setSelectionRange` throws on input types without a caret (email, number).\n try {\n const end = field.value.length;\n field.setSelectionRange(end, end);\n } catch {\n // The browser already put the caret somewhere usable.\n }\n};\n\n/**\n * Moves the focus into the editor once React has actually mounted it. The store\n * subscription cannot do this: it runs during the state update, before the cell\n * has swapped its read view for the editor.\n */\nconst GridEditingFocus: React.FC<{ store: StoreApi<IGridState>; elements: Map<string, HTMLElement> }> = ({\n store,\n elements,\n}) => {\n const editingKey = useSyncExternalStore(\n useCallback((onStoreChange: () => void) => store.subscribe(onStoreChange), [store]),\n () => {\n const editing = store.getState().editingCell;\n return editing ? buildGridCellKey(editing.rowId, editing.columnId) : null;\n },\n );\n\n useEffect(() => {\n if (!editingKey) return;\n\n const editor = elements.get(editingKey)?.querySelector<HTMLElement>(EDITOR_FOCUS_SELECTOR);\n if (!editor) return;\n\n editor.focus({ preventScroll: true });\n\n const { editingEntry, editingSeed } = store.getState();\n\n if (isPickerTrigger(editor)) {\n if (editingEntry !== 'keyboard') editor.click();\n return;\n }\n\n if (!isTextField(editor)) return;\n\n if (editingEntry === 'keyboard' && editingSeed == null) editor.select();\n else placeCaretAtEnd(editor);\n }, [editingKey, elements, store]);\n\n return null;\n};\n\n/**\n * Whether a press outside the grid area belongs to something painted above the table (a select\n * listbox, a date picker, a toast), which is work on the open cell rather than leaving it. Inside\n * a drawer or dialog the comparison is directional, otherwise any press on that host surface would\n * count as layered and the grid would never let go.\n */\nconst isPressAboveGrid = (target: Element, gridArea: Element | null): boolean => {\n const hostSurface = gridArea?.closest(LAYERED_SURFACE_SELECTOR) ?? null;\n if (hostSurface) return isPressOnLayeredSurface(target, hostSurface);\n return isPressOnLayeredSurface(target) || Boolean(target.closest(LAYERED_SURFACE_SELECTOR));\n};\n\ninterface IGridProviderProps {\n store: StoreApi<IGridState>;\n /** The scroll region that holds the table: a press outside it releases the active cell. */\n gridAreaRef?: React.RefObject<HTMLElement | null>;\n canEditCell: (coord: IGridCellCoord) => boolean;\n onFillCommit?: (result: IGridFillResult) => void;\n children: React.ReactNode;\n}\n\n/**\n * Owns the DOM side of the grid: the cell element registry and the focus/scroll\n * effect. It subscribes imperatively, so following the active cell costs no\n * render of its own.\n */\nconst GridProvider: React.FC<IGridProviderProps> = ({ store, gridAreaRef, canEditCell, onFillCommit, children }) => {\n const elementsRef = useRef(new Map<string, HTMLElement>());\n\n // Read through a ref so the registry identity never changes: it reaches every\n // cell, and a new object there would re-render the whole body.\n const onFillCommitRef = useRef(onFillCommit);\n onFillCommitRef.current = onFillCommit;\n const canEditCellRef = useRef(canEditCell);\n canEditCellRef.current = canEditCell;\n\n const registry = useMemo<IGridCellRegistry>(\n () => ({\n commitFill: (result) => onFillCommitRef.current?.(result),\n canEditCell: (coord) => canEditCellRef.current(coord),\n register: (cellKey, element) => {\n if (element) elementsRef.current.set(cellKey, element);\n else elementsRef.current.delete(cellKey);\n },\n focusCell: (coord) => {\n const element = elementsRef.current.get(buildGridCellKey(coord.rowId, coord.columnId));\n if (!element) return;\n element.focus({ preventScroll: true });\n element.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n },\n }),\n [],\n );\n\n useEffect(\n () =>\n store.subscribe((state, previous) => {\n const activeChanged =\n state.activeCell?.rowId !== previous.activeCell?.rowId ||\n state.activeCell?.columnId !== previous.activeCell?.columnId;\n const editingEnded = !!previous.editingCell && !state.editingCell;\n\n if (!activeChanged && !editingEnded) return;\n if (state.editingCell) return;\n\n const coord = state.activeCell;\n if (!coord) return;\n\n const element = elementsRef.current.get(buildGridCellKey(coord.rowId, coord.columnId));\n if (!element) return;\n\n // Leaving edit mode has to claim the focus BEFORE the editor unmounts,\n // otherwise the browser drops it on the body and the arrows stop working.\n if (editingEnded || !element.contains(document.activeElement)) element.focus({ preventScroll: true });\n\n element.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }),\n [store],\n );\n\n // Without this only another cell took the focus away: a press anywhere else on the page left\n // the editor open and the cell outlined, and a field outside the table lost its focus back to it.\n useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n const { activeCell, editingCell } = store.getState();\n if (!activeCell && !editingCell) return;\n\n const target = event.target instanceof Element ? event.target : null;\n if (!target) return;\n\n const gridArea = gridAreaRef?.current ?? null;\n if (gridArea?.contains(target) || isPressAboveGrid(target, gridArea)) return;\n\n // Editors that save on blur have to commit before the store unmounts them.\n const focused = document.activeElement;\n if (focused instanceof HTMLElement && gridArea?.contains(focused)) focused.blur();\n\n store.getState().releaseActiveCell();\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n return () => document.removeEventListener('pointerdown', handlePointerDown);\n }, [store, gridAreaRef]);\n\n return (\n <GridStoreContext.Provider value={store}>\n <GridCellRegistryContext.Provider value={registry}>\n <GridEditingFocus store={store} elements={elementsRef.current} />\n {children}\n </GridCellRegistryContext.Provider>\n </GridStoreContext.Provider>\n );\n};\n\nexport default GridProvider;\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A fill strategy reads the dragged source values and produces the value for each
|
|
3
|
+
* position beyond them. Adding a pattern (weekdays, month steps, text with a
|
|
4
|
+
* trailing counter) is one entry in `GRID_FILL_STRATEGIES`, and no other file in
|
|
5
|
+
* the grid changes.
|
|
6
|
+
*/
|
|
7
|
+
export interface IGridFillStrategy {
|
|
8
|
+
id: string;
|
|
9
|
+
/** Whether this strategy recognizes the source values as its own pattern. */
|
|
10
|
+
detect: (values: Array<unknown>) => boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Value for the target at `offset` (1 = the first cell after the source, in the
|
|
13
|
+
* drag direction). `direction` is 1 downwards and -1 upwards.
|
|
14
|
+
*/
|
|
15
|
+
generate: (values: Array<unknown>, offset: number, direction: 1 | -1) => unknown;
|
|
16
|
+
}
|
|
17
|
+
/** Order matters: the first strategy that recognizes the source wins. */
|
|
18
|
+
export declare const GRID_FILL_STRATEGIES: Array<IGridFillStrategy>;
|
|
19
|
+
export declare const resolveFillStrategy: (values: Array<unknown>, preferredId?: string) => IGridFillStrategy;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const toFiniteNumber = (value) => {
|
|
2
|
+
if (typeof value === "number") return Number.isFinite(value) ? value : null;
|
|
3
|
+
if (typeof value !== "string" || value.trim() === "") return null;
|
|
4
|
+
const parsed = Number(value.replace(",", "."));
|
|
5
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
6
|
+
};
|
|
7
|
+
const toValidDate = (value) => {
|
|
8
|
+
if (typeof value !== "string" && !(value instanceof Date)) return null;
|
|
9
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
10
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
11
|
+
};
|
|
12
|
+
const DAY_IN_MS = 24 * 60 * 60 * 1e3;
|
|
13
|
+
const constantStrategy = {
|
|
14
|
+
id: "constant",
|
|
15
|
+
detect: () => true,
|
|
16
|
+
generate: (values, offset) => {
|
|
17
|
+
if (values.length === 0) return null;
|
|
18
|
+
if (values.length === 1) return values[0];
|
|
19
|
+
const index = (offset - 1) % values.length;
|
|
20
|
+
return values[index];
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const numericSeriesStrategy = {
|
|
24
|
+
id: "numericSeries",
|
|
25
|
+
detect: (values) => {
|
|
26
|
+
if (values.length < 2) return false;
|
|
27
|
+
const numbers = values.map(toFiniteNumber);
|
|
28
|
+
if (numbers.some((entry) => entry == null)) return false;
|
|
29
|
+
const step = numbers[1] - numbers[0];
|
|
30
|
+
return numbers.every((entry, index) => index === 0 || entry - numbers[index - 1] === step);
|
|
31
|
+
},
|
|
32
|
+
generate: (values, offset, direction) => {
|
|
33
|
+
const numbers = values.map(toFiniteNumber);
|
|
34
|
+
const step = numbers[1] - numbers[0];
|
|
35
|
+
const anchor = direction === 1 ? numbers[numbers.length - 1] : numbers[0];
|
|
36
|
+
return anchor + step * offset * direction;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const dateSeriesStrategy = {
|
|
40
|
+
id: "dateSeries",
|
|
41
|
+
detect: (values) => {
|
|
42
|
+
if (values.length < 2) return false;
|
|
43
|
+
const dates = values.map(toValidDate);
|
|
44
|
+
if (dates.some((entry) => entry == null)) return false;
|
|
45
|
+
const step = dates[1].getTime() - dates[0].getTime();
|
|
46
|
+
if (step === 0 || step % DAY_IN_MS !== 0) return false;
|
|
47
|
+
return dates.every(
|
|
48
|
+
(entry, index) => index === 0 || entry.getTime() - dates[index - 1].getTime() === step
|
|
49
|
+
);
|
|
50
|
+
},
|
|
51
|
+
generate: (values, offset, direction) => {
|
|
52
|
+
const dates = values.map(toValidDate);
|
|
53
|
+
const step = dates[1].getTime() - dates[0].getTime();
|
|
54
|
+
const anchor = direction === 1 ? dates[dates.length - 1] : dates[0];
|
|
55
|
+
const next = new Date(anchor.getTime() + step * offset * direction);
|
|
56
|
+
return next.toISOString();
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const GRID_FILL_STRATEGIES = [
|
|
60
|
+
dateSeriesStrategy,
|
|
61
|
+
numericSeriesStrategy,
|
|
62
|
+
constantStrategy
|
|
63
|
+
];
|
|
64
|
+
const resolveFillStrategy = (values, preferredId) => {
|
|
65
|
+
const preferred = preferredId ? GRID_FILL_STRATEGIES.find((strategy) => strategy.id === preferredId) : void 0;
|
|
66
|
+
if (preferred) return preferred;
|
|
67
|
+
return GRID_FILL_STRATEGIES.find((strategy) => strategy.detect(values)) ?? constantStrategy;
|
|
68
|
+
};
|
|
69
|
+
export {
|
|
70
|
+
GRID_FILL_STRATEGIES,
|
|
71
|
+
resolveFillStrategy
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=fillStrategies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fillStrategies.js","sources":["../../../../../../src/components/UI/DataTable/grid/fill/fillStrategies.ts"],"sourcesContent":["/**\n * A fill strategy reads the dragged source values and produces the value for each\n * position beyond them. Adding a pattern (weekdays, month steps, text with a\n * trailing counter) is one entry in `GRID_FILL_STRATEGIES`, and no other file in\n * the grid changes.\n */\nexport interface IGridFillStrategy {\n id: string;\n /** Whether this strategy recognizes the source values as its own pattern. */\n detect: (values: Array<unknown>) => boolean;\n /**\n * Value for the target at `offset` (1 = the first cell after the source, in the\n * drag direction). `direction` is 1 downwards and -1 upwards.\n */\n generate: (values: Array<unknown>, offset: number, direction: 1 | -1) => unknown;\n}\n\nconst toFiniteNumber = (value: unknown): number | null => {\n if (typeof value === 'number') return Number.isFinite(value) ? value : null;\n if (typeof value !== 'string' || value.trim() === '') return null;\n\n // pt-BR decimals reach the cell as \"1,5\"; the editors keep the raw string.\n const parsed = Number(value.replace(',', '.'));\n return Number.isFinite(parsed) ? parsed : null;\n};\n\nconst toValidDate = (value: unknown): Date | null => {\n if (typeof value !== 'string' && !(value instanceof Date)) return null;\n\n const date = value instanceof Date ? value : new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n};\n\nconst DAY_IN_MS = 24 * 60 * 60 * 1000;\n\n/** Repeats the source cyclically. The fallback, and what a single source cell does. */\nconst constantStrategy: IGridFillStrategy = {\n id: 'constant',\n detect: () => true,\n generate: (values, offset) => {\n if (values.length === 0) return null;\n if (values.length === 1) return values[0];\n\n const index = (offset - 1) % values.length;\n return values[index];\n },\n};\n\n/** Two or more numbers with a constant step continue the progression. */\nconst numericSeriesStrategy: IGridFillStrategy = {\n id: 'numericSeries',\n detect: (values) => {\n if (values.length < 2) return false;\n\n const numbers = values.map(toFiniteNumber);\n if (numbers.some((entry) => entry == null)) return false;\n\n const step = (numbers[1] as number) - (numbers[0] as number);\n return numbers.every((entry, index) => index === 0 || (entry as number) - (numbers[index - 1] as number) === step);\n },\n generate: (values, offset, direction) => {\n const numbers = values.map(toFiniteNumber) as Array<number>;\n const step = numbers[1] - numbers[0];\n const anchor = direction === 1 ? numbers[numbers.length - 1] : numbers[0];\n\n return anchor + step * offset * direction;\n },\n};\n\n/** Two or more dates spaced by whole days continue the sequence. */\nconst dateSeriesStrategy: IGridFillStrategy = {\n id: 'dateSeries',\n detect: (values) => {\n if (values.length < 2) return false;\n\n const dates = values.map(toValidDate);\n if (dates.some((entry) => entry == null)) return false;\n\n const step = (dates[1] as Date).getTime() - (dates[0] as Date).getTime();\n if (step === 0 || step % DAY_IN_MS !== 0) return false;\n\n return dates.every(\n (entry, index) => index === 0 || (entry as Date).getTime() - (dates[index - 1] as Date).getTime() === step,\n );\n },\n generate: (values, offset, direction) => {\n const dates = values.map(toValidDate) as Array<Date>;\n const step = dates[1].getTime() - dates[0].getTime();\n const anchor = direction === 1 ? dates[dates.length - 1] : dates[0];\n const next = new Date(anchor.getTime() + step * offset * direction);\n\n return next.toISOString();\n },\n};\n\n/** Order matters: the first strategy that recognizes the source wins. */\nexport const GRID_FILL_STRATEGIES: Array<IGridFillStrategy> = [\n dateSeriesStrategy,\n numericSeriesStrategy,\n constantStrategy,\n];\n\nexport const resolveFillStrategy = (values: Array<unknown>, preferredId?: string): IGridFillStrategy => {\n const preferred = preferredId ? GRID_FILL_STRATEGIES.find((strategy) => strategy.id === preferredId) : undefined;\n if (preferred) return preferred;\n\n return GRID_FILL_STRATEGIES.find((strategy) => strategy.detect(values)) ?? constantStrategy;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { StoreApi } from 'zustand/vanilla';
|
|
2
|
+
import { IGridCellCoord, IGridStartEditingOptions, TGridEditingEntry, TGridSelectionMode } from './gridTypes';
|
|
3
|
+
export interface IGridMatrix {
|
|
4
|
+
rowIds: Array<string>;
|
|
5
|
+
columnIds: Array<string>;
|
|
6
|
+
rowIndexById: Map<string, number>;
|
|
7
|
+
columnIndexById: Map<string, number>;
|
|
8
|
+
}
|
|
9
|
+
export interface IGridSelectionRect {
|
|
10
|
+
rowStart: number;
|
|
11
|
+
rowEnd: number;
|
|
12
|
+
columnStart: number;
|
|
13
|
+
columnEnd: number;
|
|
14
|
+
}
|
|
15
|
+
export interface IGridMoveOptions {
|
|
16
|
+
/** Keeps the selection anchor and stretches the rectangle to the new cell. */
|
|
17
|
+
extend?: boolean;
|
|
18
|
+
/** Tab-style traversal: past the last column continues on the next row. */
|
|
19
|
+
wrap?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export type TGridEditingOutcome = 'commit' | 'cancel';
|
|
22
|
+
export interface IGridState {
|
|
23
|
+
/**
|
|
24
|
+
* Enquanto falso a tabela é uma tabela comum: nenhuma célula é focável, o
|
|
25
|
+
* clique na linha segue sendo do host e nada do grid aparece.
|
|
26
|
+
*/
|
|
27
|
+
isEditMode: boolean;
|
|
28
|
+
setEditMode: (isEditMode: boolean) => void;
|
|
29
|
+
selectionMode: TGridSelectionMode;
|
|
30
|
+
matrix: IGridMatrix;
|
|
31
|
+
activeCell: IGridCellCoord | null;
|
|
32
|
+
selectionAnchor: IGridCellCoord | null;
|
|
33
|
+
selectionRect: IGridSelectionRect | null;
|
|
34
|
+
editingCell: IGridCellCoord | null;
|
|
35
|
+
editingEntry: TGridEditingEntry | null;
|
|
36
|
+
/** Typed text that replaces the value of the cell being opened; `null` keeps the value. */
|
|
37
|
+
editingSeed: string | null;
|
|
38
|
+
/** How the last edit ended, so the cell knows whether to restore its value. */
|
|
39
|
+
editingOutcome: TGridEditingOutcome | null;
|
|
40
|
+
/** Selection snapshot taken when the fill drag started. */
|
|
41
|
+
fillSourceRect: IGridSelectionRect | null;
|
|
42
|
+
/** Cells the running fill drag would write. Null while the pointer is inside the source. */
|
|
43
|
+
fillTargetRect: IGridSelectionRect | null;
|
|
44
|
+
/** Per-cell persistence state fed by the host's commit queue. */
|
|
45
|
+
cellStatuses: ReadonlyMap<string, string>;
|
|
46
|
+
setCellStatuses: (statuses: ReadonlyMap<string, string>) => void;
|
|
47
|
+
setSelectionMode: (mode: TGridSelectionMode) => void;
|
|
48
|
+
setMatrix: (rowIds: Array<string>, columnIds: Array<string>) => void;
|
|
49
|
+
setActiveCell: (coord: IGridCellCoord, options?: {
|
|
50
|
+
extend?: boolean;
|
|
51
|
+
}) => void;
|
|
52
|
+
/** Returns whether the active cell actually moved, so the host can let Tab leave the grid. */
|
|
53
|
+
moveActiveCell: (rowDelta: number, columnDelta: number, options?: IGridMoveOptions) => boolean;
|
|
54
|
+
moveActiveToEdge: (rowDelta: number, columnDelta: number, options?: {
|
|
55
|
+
extend?: boolean;
|
|
56
|
+
}) => void;
|
|
57
|
+
/**
|
|
58
|
+
* Tab traversal over the cells that accept an editor, opening the one it lands on.
|
|
59
|
+
* Returns `false` past the first/last editable cell so the focus can leave the grid.
|
|
60
|
+
*/
|
|
61
|
+
moveToEditableCell: (direction: 1 | -1, canEditCell: (coord: IGridCellCoord) => boolean) => boolean;
|
|
62
|
+
startEditing: (coord?: IGridCellCoord, options?: IGridStartEditingOptions) => void;
|
|
63
|
+
stopEditing: (outcome?: TGridEditingOutcome) => void;
|
|
64
|
+
/**
|
|
65
|
+
* The grid lets go of the user: the open editor closes keeping its value, as Enter would,
|
|
66
|
+
* and no cell stays active or selected. Used when a press lands outside the table.
|
|
67
|
+
*/
|
|
68
|
+
releaseActiveCell: () => void;
|
|
69
|
+
clearSelection: () => void;
|
|
70
|
+
startFill: () => void;
|
|
71
|
+
updateFillTarget: (coord: IGridCellCoord) => void;
|
|
72
|
+
/** Clears the drag state and hands back what should be written, if anything. */
|
|
73
|
+
endFill: () => IGridFillResult | null;
|
|
74
|
+
cancelFill: () => void;
|
|
75
|
+
}
|
|
76
|
+
export interface IGridFillResult {
|
|
77
|
+
sourceRect: IGridSelectionRect;
|
|
78
|
+
targetRect: IGridSelectionRect;
|
|
79
|
+
matrix: IGridMatrix;
|
|
80
|
+
}
|
|
81
|
+
export declare const createGridStore: (selectionMode?: TGridSelectionMode, initialEditMode?: boolean) => StoreApi<IGridState>;
|
|
82
|
+
export declare const selectGridCellState: (state: IGridState, rowId: string, columnId: string) => number;
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { createStore } from "zustand/vanilla";
|
|
2
|
+
import { buildGridCellKey, GRID_CELL_ACTIVE, GRID_CELL_EDITING, GRID_CELL_SELECTED, GRID_CELL_FILL_HANDLE, GRID_CELL_FILL_PREVIEW, GRID_CELL_SAVING, GRID_CELL_SAVE_ERROR, GRID_CELL_TABBABLE } from "./gridTypes.js";
|
|
3
|
+
const EMPTY_MATRIX = {
|
|
4
|
+
rowIds: [],
|
|
5
|
+
columnIds: [],
|
|
6
|
+
rowIndexById: /* @__PURE__ */ new Map(),
|
|
7
|
+
columnIndexById: /* @__PURE__ */ new Map()
|
|
8
|
+
};
|
|
9
|
+
const sameIds = (current, next) => current.length === next.length && current.every((id, index) => id === next[index]);
|
|
10
|
+
const buildIndex = (ids) => new Map(ids.map((id, index) => [id, index]));
|
|
11
|
+
const buildRect = (matrix, anchor, focus) => {
|
|
12
|
+
if (!anchor || !focus) return null;
|
|
13
|
+
const anchorRow = matrix.rowIndexById.get(anchor.rowId);
|
|
14
|
+
const anchorColumn = matrix.columnIndexById.get(anchor.columnId);
|
|
15
|
+
const focusRow = matrix.rowIndexById.get(focus.rowId);
|
|
16
|
+
const focusColumn = matrix.columnIndexById.get(focus.columnId);
|
|
17
|
+
if (anchorRow == null || anchorColumn == null || focusRow == null || focusColumn == null) return null;
|
|
18
|
+
return {
|
|
19
|
+
rowStart: Math.min(anchorRow, focusRow),
|
|
20
|
+
rowEnd: Math.max(anchorRow, focusRow),
|
|
21
|
+
columnStart: Math.min(anchorColumn, focusColumn),
|
|
22
|
+
columnEnd: Math.max(anchorColumn, focusColumn)
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
const coordAt = (matrix, rowIndex, columnIndex) => {
|
|
26
|
+
const rowId = matrix.rowIds[rowIndex];
|
|
27
|
+
const columnId = matrix.columnIds[columnIndex];
|
|
28
|
+
if (rowId == null || columnId == null) return null;
|
|
29
|
+
return { rowId, columnId };
|
|
30
|
+
};
|
|
31
|
+
const isSameCoord = (left, right) => left?.rowId === right?.rowId && left?.columnId === right?.columnId;
|
|
32
|
+
const createGridStore = (selectionMode = "cell", initialEditMode = true) => createStore((set, get) => {
|
|
33
|
+
const focusCoord = (coord, extend) => {
|
|
34
|
+
const { matrix, selectionAnchor, selectionMode: mode, editingCell } = get();
|
|
35
|
+
const anchor = extend && mode === "range" ? selectionAnchor ?? coord : coord;
|
|
36
|
+
set({
|
|
37
|
+
activeCell: coord,
|
|
38
|
+
selectionAnchor: anchor,
|
|
39
|
+
selectionRect: buildRect(matrix, anchor, coord),
|
|
40
|
+
editingCell: null,
|
|
41
|
+
// Moving away from an open editor keeps what was typed: only Escape discards it.
|
|
42
|
+
editingOutcome: editingCell ? "commit" : null
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
return {
|
|
46
|
+
isEditMode: initialEditMode,
|
|
47
|
+
selectionMode,
|
|
48
|
+
matrix: EMPTY_MATRIX,
|
|
49
|
+
activeCell: null,
|
|
50
|
+
selectionAnchor: null,
|
|
51
|
+
selectionRect: null,
|
|
52
|
+
editingCell: null,
|
|
53
|
+
editingEntry: null,
|
|
54
|
+
editingSeed: null,
|
|
55
|
+
editingOutcome: null,
|
|
56
|
+
fillSourceRect: null,
|
|
57
|
+
fillTargetRect: null,
|
|
58
|
+
cellStatuses: /* @__PURE__ */ new Map(),
|
|
59
|
+
setEditMode: (isEditMode) => {
|
|
60
|
+
if (get().isEditMode === isEditMode) return;
|
|
61
|
+
set({
|
|
62
|
+
isEditMode,
|
|
63
|
+
activeCell: null,
|
|
64
|
+
selectionAnchor: null,
|
|
65
|
+
selectionRect: null,
|
|
66
|
+
editingCell: null,
|
|
67
|
+
editingOutcome: null,
|
|
68
|
+
fillSourceRect: null,
|
|
69
|
+
fillTargetRect: null
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
setCellStatuses: (statuses) => {
|
|
73
|
+
if (get().cellStatuses === statuses) return;
|
|
74
|
+
set({ cellStatuses: statuses });
|
|
75
|
+
},
|
|
76
|
+
setSelectionMode: (mode) => {
|
|
77
|
+
if (get().selectionMode === mode) return;
|
|
78
|
+
set({ selectionMode: mode });
|
|
79
|
+
},
|
|
80
|
+
setMatrix: (rowIds, columnIds) => {
|
|
81
|
+
const { matrix, activeCell, selectionAnchor, editingCell } = get();
|
|
82
|
+
if (sameIds(matrix.rowIds, rowIds) && sameIds(matrix.columnIds, columnIds)) return;
|
|
83
|
+
const nextMatrix = {
|
|
84
|
+
rowIds,
|
|
85
|
+
columnIds,
|
|
86
|
+
rowIndexById: buildIndex(rowIds),
|
|
87
|
+
columnIndexById: buildIndex(columnIds)
|
|
88
|
+
};
|
|
89
|
+
const stillExists = (coord) => !!coord && nextMatrix.rowIndexById.has(coord.rowId) && nextMatrix.columnIndexById.has(coord.columnId);
|
|
90
|
+
const nextActive = stillExists(activeCell) ? activeCell : null;
|
|
91
|
+
const nextAnchor = stillExists(selectionAnchor) ? selectionAnchor : nextActive;
|
|
92
|
+
set({
|
|
93
|
+
matrix: nextMatrix,
|
|
94
|
+
activeCell: nextActive,
|
|
95
|
+
selectionAnchor: nextAnchor,
|
|
96
|
+
selectionRect: buildRect(nextMatrix, nextAnchor, nextActive),
|
|
97
|
+
editingCell: stillExists(editingCell) ? editingCell : null
|
|
98
|
+
});
|
|
99
|
+
},
|
|
100
|
+
setActiveCell: (coord, options) => {
|
|
101
|
+
const { activeCell, editingCell } = get();
|
|
102
|
+
const extend = options?.extend ?? false;
|
|
103
|
+
if (!extend && isSameCoord(editingCell, coord)) return;
|
|
104
|
+
if (!extend && isSameCoord(activeCell, coord) && !editingCell) return;
|
|
105
|
+
focusCoord(coord, extend);
|
|
106
|
+
},
|
|
107
|
+
moveActiveCell: (rowDelta, columnDelta, options) => {
|
|
108
|
+
const { matrix, activeCell } = get();
|
|
109
|
+
if (matrix.rowIds.length === 0 || matrix.columnIds.length === 0) return false;
|
|
110
|
+
if (!activeCell) {
|
|
111
|
+
const first = coordAt(matrix, 0, 0);
|
|
112
|
+
if (first) focusCoord(first, false);
|
|
113
|
+
return !!first;
|
|
114
|
+
}
|
|
115
|
+
const rowIndex = matrix.rowIndexById.get(activeCell.rowId);
|
|
116
|
+
const columnIndex = matrix.columnIndexById.get(activeCell.columnId);
|
|
117
|
+
if (rowIndex == null || columnIndex == null) return false;
|
|
118
|
+
let nextRow = rowIndex + rowDelta;
|
|
119
|
+
let nextColumn = columnIndex + columnDelta;
|
|
120
|
+
if (options?.wrap && columnDelta !== 0) {
|
|
121
|
+
if (nextColumn >= matrix.columnIds.length) {
|
|
122
|
+
nextColumn = 0;
|
|
123
|
+
nextRow += 1;
|
|
124
|
+
} else if (nextColumn < 0) {
|
|
125
|
+
nextColumn = matrix.columnIds.length - 1;
|
|
126
|
+
nextRow -= 1;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (nextRow < 0 || nextRow >= matrix.rowIds.length) return false;
|
|
130
|
+
if (nextColumn < 0 || nextColumn >= matrix.columnIds.length) return false;
|
|
131
|
+
const next = coordAt(matrix, nextRow, nextColumn);
|
|
132
|
+
if (!next) return false;
|
|
133
|
+
focusCoord(next, options?.extend ?? false);
|
|
134
|
+
return true;
|
|
135
|
+
},
|
|
136
|
+
moveActiveToEdge: (rowDelta, columnDelta, options) => {
|
|
137
|
+
const { matrix, activeCell } = get();
|
|
138
|
+
if (matrix.rowIds.length === 0 || matrix.columnIds.length === 0) return;
|
|
139
|
+
const rowIndex = activeCell ? matrix.rowIndexById.get(activeCell.rowId) ?? 0 : 0;
|
|
140
|
+
const columnIndex = activeCell ? matrix.columnIndexById.get(activeCell.columnId) ?? 0 : 0;
|
|
141
|
+
const nextRow = rowDelta === 0 ? rowIndex : rowDelta > 0 ? matrix.rowIds.length - 1 : 0;
|
|
142
|
+
const nextColumn = columnDelta === 0 ? columnIndex : columnDelta > 0 ? matrix.columnIds.length - 1 : 0;
|
|
143
|
+
const next = coordAt(matrix, nextRow, nextColumn);
|
|
144
|
+
if (next) focusCoord(next, options?.extend ?? false);
|
|
145
|
+
},
|
|
146
|
+
moveToEditableCell: (direction, canEditCell) => {
|
|
147
|
+
const { matrix, activeCell } = get();
|
|
148
|
+
const columnCount = matrix.columnIds.length;
|
|
149
|
+
const cellCount = matrix.rowIds.length * columnCount;
|
|
150
|
+
if (cellCount === 0) return false;
|
|
151
|
+
const rowIndex = activeCell ? matrix.rowIndexById.get(activeCell.rowId) : void 0;
|
|
152
|
+
const columnIndex = activeCell ? matrix.columnIndexById.get(activeCell.columnId) : void 0;
|
|
153
|
+
const currentPosition = rowIndex != null && columnIndex != null ? rowIndex * columnCount + columnIndex : -1;
|
|
154
|
+
for (let position = currentPosition + direction; position >= 0 && position < cellCount; position += direction) {
|
|
155
|
+
const candidate = coordAt(matrix, Math.floor(position / columnCount), position % columnCount);
|
|
156
|
+
if (!candidate || !canEditCell(candidate)) continue;
|
|
157
|
+
focusCoord(candidate, false);
|
|
158
|
+
get().startEditing(candidate, { entry: "keyboard" });
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
return false;
|
|
162
|
+
},
|
|
163
|
+
startEditing: (coord, options) => {
|
|
164
|
+
const { activeCell, editingCell, matrix } = get();
|
|
165
|
+
const target = coord ?? activeCell;
|
|
166
|
+
if (!target || isSameCoord(editingCell, target)) return;
|
|
167
|
+
set({
|
|
168
|
+
activeCell: target,
|
|
169
|
+
selectionAnchor: target,
|
|
170
|
+
selectionRect: buildRect(matrix, target, target),
|
|
171
|
+
editingCell: target,
|
|
172
|
+
editingEntry: options?.entry ?? "keyboard",
|
|
173
|
+
editingSeed: options?.seed ?? null,
|
|
174
|
+
editingOutcome: null
|
|
175
|
+
});
|
|
176
|
+
},
|
|
177
|
+
stopEditing: (outcome = "commit") => {
|
|
178
|
+
if (!get().editingCell) return;
|
|
179
|
+
set({ editingCell: null, editingOutcome: outcome });
|
|
180
|
+
},
|
|
181
|
+
releaseActiveCell: () => {
|
|
182
|
+
const { activeCell, editingCell, fillSourceRect } = get();
|
|
183
|
+
if (!activeCell && !editingCell && !fillSourceRect) return;
|
|
184
|
+
set({
|
|
185
|
+
activeCell: null,
|
|
186
|
+
selectionAnchor: null,
|
|
187
|
+
selectionRect: null,
|
|
188
|
+
editingCell: null,
|
|
189
|
+
...editingCell ? { editingOutcome: "commit" } : {},
|
|
190
|
+
fillSourceRect: null,
|
|
191
|
+
fillTargetRect: null
|
|
192
|
+
});
|
|
193
|
+
},
|
|
194
|
+
clearSelection: () => {
|
|
195
|
+
const { activeCell, matrix } = get();
|
|
196
|
+
set({
|
|
197
|
+
selectionAnchor: activeCell,
|
|
198
|
+
selectionRect: buildRect(matrix, activeCell, activeCell)
|
|
199
|
+
});
|
|
200
|
+
},
|
|
201
|
+
startFill: () => {
|
|
202
|
+
const { selectionRect } = get();
|
|
203
|
+
if (!selectionRect) return;
|
|
204
|
+
set({ fillSourceRect: selectionRect, fillTargetRect: null, editingCell: null });
|
|
205
|
+
},
|
|
206
|
+
updateFillTarget: (coord) => {
|
|
207
|
+
const { fillSourceRect, fillTargetRect, matrix } = get();
|
|
208
|
+
if (!fillSourceRect) return;
|
|
209
|
+
const rowIndex = matrix.rowIndexById.get(coord.rowId);
|
|
210
|
+
if (rowIndex == null) return;
|
|
211
|
+
let nextTarget = null;
|
|
212
|
+
if (rowIndex > fillSourceRect.rowEnd) {
|
|
213
|
+
nextTarget = { ...fillSourceRect, rowStart: fillSourceRect.rowEnd + 1, rowEnd: rowIndex };
|
|
214
|
+
} else if (rowIndex < fillSourceRect.rowStart) {
|
|
215
|
+
nextTarget = { ...fillSourceRect, rowStart: rowIndex, rowEnd: fillSourceRect.rowStart - 1 };
|
|
216
|
+
}
|
|
217
|
+
const isSameTarget = nextTarget?.rowStart === fillTargetRect?.rowStart && nextTarget?.rowEnd === fillTargetRect?.rowEnd;
|
|
218
|
+
if (isSameTarget) return;
|
|
219
|
+
set({ fillTargetRect: nextTarget });
|
|
220
|
+
},
|
|
221
|
+
endFill: () => {
|
|
222
|
+
const { fillSourceRect, fillTargetRect, matrix } = get();
|
|
223
|
+
set({ fillSourceRect: null, fillTargetRect: null });
|
|
224
|
+
if (!fillSourceRect || !fillTargetRect) return null;
|
|
225
|
+
return { sourceRect: fillSourceRect, targetRect: fillTargetRect, matrix };
|
|
226
|
+
},
|
|
227
|
+
cancelFill: () => {
|
|
228
|
+
if (!get().fillSourceRect) return;
|
|
229
|
+
set({ fillSourceRect: null, fillTargetRect: null });
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
});
|
|
233
|
+
const isInsideRect = (rect, rowIndex, columnIndex) => !!rect && rowIndex != null && columnIndex != null && rowIndex >= rect.rowStart && rowIndex <= rect.rowEnd && columnIndex >= rect.columnStart && columnIndex <= rect.columnEnd;
|
|
234
|
+
const selectGridCellState = (state, rowId, columnId) => {
|
|
235
|
+
if (!state.isEditMode) return 0;
|
|
236
|
+
let mask = 0;
|
|
237
|
+
if (isSameCoord(state.activeCell, { rowId, columnId })) mask |= GRID_CELL_ACTIVE;
|
|
238
|
+
if (isSameCoord(state.editingCell, { rowId, columnId })) mask |= GRID_CELL_EDITING;
|
|
239
|
+
const rowIndex = state.matrix.rowIndexById.get(rowId);
|
|
240
|
+
const columnIndex = state.matrix.columnIndexById.get(columnId);
|
|
241
|
+
const rect = state.selectionRect;
|
|
242
|
+
if (isInsideRect(rect, rowIndex, columnIndex)) mask |= GRID_CELL_SELECTED;
|
|
243
|
+
if (rect && rowIndex === rect.rowEnd && columnIndex === rect.columnEnd) mask |= GRID_CELL_FILL_HANDLE;
|
|
244
|
+
if (isInsideRect(state.fillTargetRect, rowIndex, columnIndex)) mask |= GRID_CELL_FILL_PREVIEW;
|
|
245
|
+
if (state.cellStatuses.size > 0) {
|
|
246
|
+
const status = state.cellStatuses.get(buildGridCellKey(rowId, columnId));
|
|
247
|
+
if (status === "saving" || status === "pending") mask |= GRID_CELL_SAVING;
|
|
248
|
+
if (status === "error") mask |= GRID_CELL_SAVE_ERROR;
|
|
249
|
+
}
|
|
250
|
+
if (!state.activeCell && state.matrix.rowIds[0] === rowId && state.matrix.columnIds[0] === columnId) {
|
|
251
|
+
mask |= GRID_CELL_TABBABLE;
|
|
252
|
+
}
|
|
253
|
+
return mask;
|
|
254
|
+
};
|
|
255
|
+
export {
|
|
256
|
+
createGridStore,
|
|
257
|
+
selectGridCellState
|
|
258
|
+
};
|
|
259
|
+
//# sourceMappingURL=gridStore.js.map
|