@portnet/ui 6.0.1 → 6.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +737 -0
- package/dist/esm/index.js +90 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
- package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldError.test.js +71 -39
- package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
- package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldWidth.test.js +146 -0
- package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FileCard.test.js +18 -18
- package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js +173 -0
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +236 -0
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +299 -0
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
- package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -43
- package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/esm/v2/__tests__/apiError.test.js +50 -69
- package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
- package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
- package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
- package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/esm/v2/__tests__/labels-merge.test.js +17 -22
- package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
- package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
- package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
- package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/esm/v2/components/Accordion.js +48 -70
- package/dist/esm/v2/components/Accordion.js.map +1 -1
- package/dist/esm/v2/components/ActionStrip.js +31 -43
- package/dist/esm/v2/components/ActionStrip.js.map +1 -1
- package/dist/esm/v2/components/Banner.js +25 -22
- package/dist/esm/v2/components/Banner.js.map +1 -1
- package/dist/esm/v2/components/Busy.js +14 -19
- package/dist/esm/v2/components/Busy.js.map +1 -1
- package/dist/esm/v2/components/Button.js +34 -45
- package/dist/esm/v2/components/Button.js.map +1 -1
- package/dist/esm/v2/components/CategoryTag.js +44 -27
- package/dist/esm/v2/components/CategoryTag.js.map +1 -1
- package/dist/esm/v2/components/Checkbox.js +32 -38
- package/dist/esm/v2/components/Checkbox.js.map +1 -1
- package/dist/esm/v2/components/Chip.js +23 -36
- package/dist/esm/v2/components/Chip.js.map +1 -1
- package/dist/esm/v2/components/Combobox.js +112 -136
- package/dist/esm/v2/components/Combobox.js.map +1 -1
- package/dist/esm/v2/components/CommandPalette.js +113 -198
- package/dist/esm/v2/components/CommandPalette.js.map +1 -1
- package/dist/esm/v2/components/ConfirmDialog.js +36 -45
- package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/esm/v2/components/DatePicker.js +78 -81
- package/dist/esm/v2/components/DatePicker.js.map +1 -1
- package/dist/esm/v2/components/DateRangePicker.js +63 -74
- package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
- package/dist/esm/v2/components/DateTimePicker.js +118 -90
- package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
- package/dist/esm/v2/components/Drawer.js +71 -65
- package/dist/esm/v2/components/Drawer.js.map +1 -1
- package/dist/esm/v2/components/Dropzone.js +130 -177
- package/dist/esm/v2/components/Dropzone.js.map +1 -1
- package/dist/esm/v2/components/EmptyState.js +9 -9
- package/dist/esm/v2/components/EmptyState.js.map +1 -1
- package/dist/esm/v2/components/FavoriteToggle.js +24 -33
- package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/esm/v2/components/Field.js +210 -52
- package/dist/esm/v2/components/Field.js.map +1 -1
- package/dist/esm/v2/components/FieldError.js +9 -13
- package/dist/esm/v2/components/FieldError.js.map +1 -1
- package/dist/esm/v2/components/FieldHelp.js +28 -49
- package/dist/esm/v2/components/FieldHelp.js.map +1 -1
- package/dist/esm/v2/components/FileCard.js +14 -19
- package/dist/esm/v2/components/FileCard.js.map +1 -1
- package/dist/esm/v2/components/FilterTab.js +22 -31
- package/dist/esm/v2/components/FilterTab.js.map +1 -1
- package/dist/esm/v2/components/ForbiddenPage.js +28 -8
- package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/esm/v2/components/FormGrid.js +48 -54
- package/dist/esm/v2/components/FormGrid.js.map +1 -1
- package/dist/esm/v2/components/FormikDisplay.js +98 -24
- package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
- package/dist/esm/v2/components/Input.js +75 -34
- package/dist/esm/v2/components/Input.js.map +1 -1
- package/dist/esm/v2/components/KPICard.js +42 -51
- package/dist/esm/v2/components/KPICard.js.map +1 -1
- package/dist/esm/v2/components/KPIStrip.js +9 -15
- package/dist/esm/v2/components/KPIStrip.js.map +1 -1
- package/dist/esm/v2/components/KV.js +16 -23
- package/dist/esm/v2/components/KV.js.map +1 -1
- package/dist/esm/v2/components/KVGrid.js +15 -23
- package/dist/esm/v2/components/KVGrid.js.map +1 -1
- package/dist/esm/v2/components/Layout.js +81 -117
- package/dist/esm/v2/components/Layout.js.map +1 -1
- package/dist/esm/v2/components/MobileRowCard.js +64 -75
- package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
- package/dist/esm/v2/components/Modal.js +44 -53
- package/dist/esm/v2/components/Modal.js.map +1 -1
- package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
- package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/esm/v2/components/NotFoundPage.js +28 -9
- package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
- package/dist/esm/v2/components/NumberInput.js +77 -107
- package/dist/esm/v2/components/NumberInput.js.map +1 -1
- package/dist/esm/v2/components/OverflowMenu.js +24 -42
- package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
- package/dist/esm/v2/components/PdfViewer.js +24 -33
- package/dist/esm/v2/components/PdfViewer.js.map +1 -1
- package/dist/esm/v2/components/ProgressBar.js +28 -36
- package/dist/esm/v2/components/ProgressBar.js.map +1 -1
- package/dist/esm/v2/components/Radio.js +49 -57
- package/dist/esm/v2/components/Radio.js.map +1 -1
- package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
- package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/esm/v2/components/SectionHeader.js +24 -31
- package/dist/esm/v2/components/SectionHeader.js.map +1 -1
- package/dist/esm/v2/components/Segmented.js +59 -84
- package/dist/esm/v2/components/Segmented.js.map +1 -1
- package/dist/esm/v2/components/Select.js +100 -138
- package/dist/esm/v2/components/Select.js.map +1 -1
- package/dist/esm/v2/components/ServerErrorPage.js +27 -10
- package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/esm/v2/components/Skeleton.js +81 -96
- package/dist/esm/v2/components/Skeleton.js.map +1 -1
- package/dist/esm/v2/components/SkipLink.js +6 -7
- package/dist/esm/v2/components/SkipLink.js.map +1 -1
- package/dist/esm/v2/components/Spinner.js +13 -22
- package/dist/esm/v2/components/Spinner.js.map +1 -1
- package/dist/esm/v2/components/Status.js +14 -25
- package/dist/esm/v2/components/Status.js.map +1 -1
- package/dist/esm/v2/components/Stepper.js +68 -71
- package/dist/esm/v2/components/Stepper.js.map +1 -1
- package/dist/esm/v2/components/Surface.js +25 -44
- package/dist/esm/v2/components/Surface.js.map +1 -1
- package/dist/esm/v2/components/Switch.js +21 -29
- package/dist/esm/v2/components/Switch.js.map +1 -1
- package/dist/esm/v2/components/TabPanel.js +84 -0
- package/dist/esm/v2/components/TabPanel.js.map +1 -0
- package/dist/esm/v2/components/Tabs.js +43 -19
- package/dist/esm/v2/components/Tabs.js.map +1 -1
- package/dist/esm/v2/components/TelInput.js +75 -108
- package/dist/esm/v2/components/TelInput.js.map +1 -1
- package/dist/esm/v2/components/Textarea.js +21 -30
- package/dist/esm/v2/components/Textarea.js.map +1 -1
- package/dist/esm/v2/components/TimePicker.js +59 -69
- package/dist/esm/v2/components/TimePicker.js.map +1 -1
- package/dist/esm/v2/components/Toast.js +109 -163
- package/dist/esm/v2/components/Toast.js.map +1 -1
- package/dist/esm/v2/components/Tooltip.js +18 -31
- package/dist/esm/v2/components/Tooltip.js.map +1 -1
- package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
- package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/esm/v2/components/_pickerShared.js +2 -2
- package/dist/esm/v2/components/_pickerShared.js.map +1 -1
- package/dist/esm/v2/components/index.js +64 -0
- package/dist/esm/v2/components/index.js.map +1 -1
- package/dist/esm/v2/hooks/index.js +62 -0
- package/dist/esm/v2/hooks/index.js.map +1 -1
- package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
- package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
- package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/esm/v2/hooks/useDensity.js +13 -17
- package/dist/esm/v2/hooks/useDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
- package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
- package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
- package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
- package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
- package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useSortedRows.js +3 -5
- package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/esm/v2/hooks/useTabLoading.js +6 -21
- package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/esm/v2/index.js +14 -4
- package/dist/esm/v2/index.js.map +1 -1
- package/dist/esm/v2/modalContext.js +2 -2
- package/dist/esm/v2/modalContext.js.map +1 -1
- package/dist/esm/v2/models/favorite.js.map +1 -1
- package/dist/esm/v2/models/personalization.js.map +1 -1
- package/dist/esm/v2/models/referentiel.js.map +1 -1
- package/dist/esm/v2/models/savedFilter.js.map +1 -1
- package/dist/esm/v2/patterns/ActionBar.js +115 -159
- package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/AppMain.js +108 -0
- package/dist/esm/v2/patterns/AppMain.js.map +1 -0
- package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
- package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/ChartFigure.js +151 -0
- package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
- package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/esm/v2/patterns/DataGrid.js +221 -255
- package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
- package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
- package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/esm/v2/patterns/DetailSplit.js +108 -0
- package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/esm/v2/patterns/FavoriteColumn.js +26 -75
- package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
- package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
- package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
- package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/esm/v2/patterns/FormPageShell.js +43 -41
- package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/FormSection.js +30 -38
- package/dist/esm/v2/patterns/FormSection.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCheckbox.js +130 -0
- package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -0
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCombobox.js +51 -66
- package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDatePicker.js +51 -99
- package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDateTimePicker.js +136 -0
- package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -0
- package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
- package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
- package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/esm/v2/patterns/FormikFile.js +94 -78
- package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
- package/dist/esm/v2/patterns/FormikInput.js +40 -50
- package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
- package/dist/esm/v2/patterns/FormikRadioGroup.js +129 -0
- package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -0
- package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
- package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/FormikSelect.js +64 -84
- package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/esm/v2/patterns/FormikTextarea.js +30 -43
- package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +64 -65
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
- package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/esm/v2/patterns/PageContent.js +10 -14
- package/dist/esm/v2/patterns/PageContent.js.map +1 -1
- package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
- package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/esm/v2/patterns/ReferentielField.js +327 -312
- package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/RowFavoriteToggle.js +127 -0
- package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -0
- package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
- package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
- package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
- package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/SortableHeader.js +22 -45
- package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/esm/v2/patterns/Tour.js +94 -120
- package/dist/esm/v2/patterns/Tour.js.map +1 -1
- package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
- package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/esm/v2/patterns/_pickerSerialisation.js +72 -0
- package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -0
- package/dist/esm/v2/patterns/_sort.js +17 -33
- package/dist/esm/v2/patterns/_sort.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
- package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
- package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/esm/v2/patterns/filterCriteria.js +102 -0
- package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/esm/v2/patterns/index.js +235 -0
- package/dist/esm/v2/patterns/index.js.map +1 -1
- package/dist/esm/v2/patterns/rowActions.js +223 -0
- package/dist/esm/v2/patterns/rowActions.js.map +1 -0
- package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
- package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
- package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
- package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js +203 -0
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/index.js +5 -0
- package/dist/esm/v2/personalization/capabilities/index.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
- package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
- package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/esm/v2/personalization/index.js +35 -0
- package/dist/esm/v2/personalization/index.js.map +1 -1
- package/dist/esm/v2/personalization/personalizationContext.js +9 -9
- package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/esm/v2/personalization/schema.js +8 -9
- package/dist/esm/v2/personalization/schema.js.map +1 -1
- package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
- package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/esm/v2/referentiel/types.js +2 -0
- package/dist/esm/v2/referentiel/types.js.map +1 -0
- package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
- package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
- package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
- package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/esm/v2/theme/_brand.js +8 -24
- package/dist/esm/v2/theme/_brand.js.map +1 -1
- package/dist/esm/v2/theme/_brandSecondary.js +8 -24
- package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
- package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/esm/v2/theme/cssVariables.js +62 -69
- package/dist/esm/v2/theme/cssVariables.js.map +1 -1
- package/dist/esm/v2/theme/index.js +5 -5
- package/dist/esm/v2/theme/index.js.map +1 -1
- package/dist/esm/v2/tokens/breakpoints.js +14 -14
- package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
- package/dist/esm/v2/tokens/chart.js +261 -0
- package/dist/esm/v2/tokens/chart.js.map +1 -0
- package/dist/esm/v2/tokens/colors.js +22 -22
- package/dist/esm/v2/tokens/colors.js.map +1 -1
- package/dist/esm/v2/tokens/density.js +62 -7
- package/dist/esm/v2/tokens/density.js.map +1 -1
- package/dist/esm/v2/tokens/index.js +49 -34
- package/dist/esm/v2/tokens/index.js.map +1 -1
- package/dist/esm/v2/tokens/motion.js +12 -20
- package/dist/esm/v2/tokens/motion.js.map +1 -1
- package/dist/esm/v2/tokens/radius.js +1 -1
- package/dist/esm/v2/tokens/radius.js.map +1 -1
- package/dist/esm/v2/tokens/shadows.js +6 -6
- package/dist/esm/v2/tokens/shadows.js.map +1 -1
- package/dist/esm/v2/tokens/spacing.js +2 -2
- package/dist/esm/v2/tokens/spacing.js.map +1 -1
- package/dist/esm/v2/tokens/state.js +1 -1
- package/dist/esm/v2/tokens/state.js.map +1 -1
- package/dist/esm/v2/tokens/statusPalette.js +17 -21
- package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
- package/dist/esm/v2/tokens/tokens.json +6 -1
- package/dist/esm/v2/tokens/typography.js +13 -13
- package/dist/esm/v2/tokens/typography.js.map +1 -1
- package/dist/esm/v2/tokens/zIndex.js +1 -1
- package/dist/esm/v2/tokens/zIndex.js.map +1 -1
- package/dist/esm/v2/types/datagrid.js.map +1 -1
- package/dist/esm/v2/utils/apiError.js +16 -37
- package/dist/esm/v2/utils/apiError.js.map +1 -1
- package/dist/esm/v2/utils/contrast.js +31 -32
- package/dist/esm/v2/utils/contrast.js.map +1 -1
- package/dist/esm/v2/utils/cx.js +5 -25
- package/dist/esm/v2/utils/cx.js.map +1 -1
- package/dist/esm/v2/utils/fileDownload.js +23 -26
- package/dist/esm/v2/utils/fileDownload.js.map +1 -1
- package/dist/esm/v2/utils/fileValidation.js +209 -0
- package/dist/esm/v2/utils/fileValidation.js.map +1 -0
- package/dist/esm/v2/utils/fmtDate.js +111 -0
- package/dist/esm/v2/utils/fmtDate.js.map +1 -0
- package/dist/esm/v2/utils/fmtMoney.js +8 -10
- package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
- package/dist/esm/v2/utils/formikErrors.js +78 -0
- package/dist/esm/v2/utils/formikErrors.js.map +1 -0
- package/dist/esm/v2/utils/index.js +35 -2
- package/dist/esm/v2/utils/index.js.map +1 -1
- package/dist/esm/v2/utils/mergeLabels.js +7 -12
- package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
- package/dist/esm/v2/utils/networkStatus.js +12 -12
- package/dist/esm/v2/utils/networkStatus.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +122 -47
- package/dist/index.js.map +1 -1
- package/dist/v2/__tests__/AppMain.test.js +133 -0
- package/dist/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/v2/__tests__/ChartFigure.test.js +183 -0
- package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/v2/__tests__/FieldError.test.js +98 -69
- package/dist/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/v2/__tests__/FieldNaming.test.js +161 -0
- package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/v2/__tests__/FieldWidth.test.js +148 -0
- package/dist/v2/__tests__/FieldWidth.test.js.map +1 -0
- package/dist/v2/__tests__/FileCard.test.js +45 -48
- package/dist/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/v2/__tests__/FormikCheckbox.test.js +175 -0
- package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -0
- package/dist/v2/__tests__/FormikDateTimePicker.test.js +237 -0
- package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
- package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
- package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/v2/__tests__/FormikRadioGroup.test.js +300 -0
- package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
- package/dist/v2/__tests__/MobileRowCard.test.js +100 -102
- package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
- package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
- package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/v2/__tests__/apiError.test.js +50 -69
- package/dist/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/v2/__tests__/banned-patterns.test.js +42 -123
- package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/v2/__tests__/chart-palette.test.js +205 -0
- package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/v2/__tests__/fileValidation.test.js +136 -0
- package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/v2/__tests__/filterCriteria.test.js +324 -0
- package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/fmtDate.test.js +69 -0
- package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/v2/__tests__/labels-merge.test.js +38 -46
- package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/v2/__tests__/locale-fallback.test.js +47 -52
- package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
- package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/rowActions.test.js +186 -0
- package/dist/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
- package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/v2/components/Accordion.js +60 -82
- package/dist/v2/components/Accordion.js.map +1 -1
- package/dist/v2/components/ActionStrip.js +40 -52
- package/dist/v2/components/ActionStrip.js.map +1 -1
- package/dist/v2/components/Banner.js +42 -41
- package/dist/v2/components/Banner.js.map +1 -1
- package/dist/v2/components/Busy.js +22 -27
- package/dist/v2/components/Busy.js.map +1 -1
- package/dist/v2/components/Button.js +39 -50
- package/dist/v2/components/Button.js.map +1 -1
- package/dist/v2/components/CategoryTag.d.ts.map +1 -1
- package/dist/v2/components/CategoryTag.js +49 -32
- package/dist/v2/components/CategoryTag.js.map +1 -1
- package/dist/v2/components/Checkbox.js +39 -45
- package/dist/v2/components/Checkbox.js.map +1 -1
- package/dist/v2/components/Chip.js +29 -42
- package/dist/v2/components/Chip.js.map +1 -1
- package/dist/v2/components/Combobox.js +122 -144
- package/dist/v2/components/Combobox.js.map +1 -1
- package/dist/v2/components/CommandPalette.js +138 -225
- package/dist/v2/components/CommandPalette.js.map +1 -1
- package/dist/v2/components/ConfirmDialog.js +46 -56
- package/dist/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/v2/components/DatePicker.js +81 -86
- package/dist/v2/components/DatePicker.js.map +1 -1
- package/dist/v2/components/DateRangePicker.js +77 -87
- package/dist/v2/components/DateRangePicker.js.map +1 -1
- package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
- package/dist/v2/components/DateTimePicker.js +121 -95
- package/dist/v2/components/DateTimePicker.js.map +1 -1
- package/dist/v2/components/Drawer.d.ts.map +1 -1
- package/dist/v2/components/Drawer.js +93 -88
- package/dist/v2/components/Drawer.js.map +1 -1
- package/dist/v2/components/Dropzone.js +150 -196
- package/dist/v2/components/Dropzone.js.map +1 -1
- package/dist/v2/components/EmptyState.js +18 -20
- package/dist/v2/components/EmptyState.js.map +1 -1
- package/dist/v2/components/FavoriteToggle.js +28 -39
- package/dist/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/v2/components/Field.d.ts +121 -5
- package/dist/v2/components/Field.d.ts.map +1 -1
- package/dist/v2/components/Field.js +221 -62
- package/dist/v2/components/Field.js.map +1 -1
- package/dist/v2/components/FieldError.js +18 -21
- package/dist/v2/components/FieldError.js.map +1 -1
- package/dist/v2/components/FieldHelp.js +40 -60
- package/dist/v2/components/FieldHelp.js.map +1 -1
- package/dist/v2/components/FileCard.js +27 -31
- package/dist/v2/components/FileCard.js.map +1 -1
- package/dist/v2/components/FilterTab.js +30 -38
- package/dist/v2/components/FilterTab.js.map +1 -1
- package/dist/v2/components/ForbiddenPage.d.ts +25 -1
- package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
- package/dist/v2/components/ForbiddenPage.js +37 -17
- package/dist/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/v2/components/FormGrid.js +53 -59
- package/dist/v2/components/FormGrid.js.map +1 -1
- package/dist/v2/components/FormikDisplay.d.ts +50 -1
- package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
- package/dist/v2/components/FormikDisplay.js +108 -33
- package/dist/v2/components/FormikDisplay.js.map +1 -1
- package/dist/v2/components/Input.d.ts +40 -0
- package/dist/v2/components/Input.d.ts.map +1 -1
- package/dist/v2/components/Input.js +81 -41
- package/dist/v2/components/Input.js.map +1 -1
- package/dist/v2/components/KPICard.js +57 -67
- package/dist/v2/components/KPICard.js.map +1 -1
- package/dist/v2/components/KPIStrip.js +16 -22
- package/dist/v2/components/KPIStrip.js.map +1 -1
- package/dist/v2/components/KV.js +25 -31
- package/dist/v2/components/KV.js.map +1 -1
- package/dist/v2/components/KVGrid.js +19 -26
- package/dist/v2/components/KVGrid.js.map +1 -1
- package/dist/v2/components/Layout.js +91 -120
- package/dist/v2/components/Layout.js.map +1 -1
- package/dist/v2/components/MobileRowCard.js +79 -91
- package/dist/v2/components/MobileRowCard.js.map +1 -1
- package/dist/v2/components/Modal.js +61 -69
- package/dist/v2/components/Modal.js.map +1 -1
- package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
- package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
- package/dist/v2/components/NetworkErrorPage.js +38 -21
- package/dist/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/v2/components/NotFoundPage.d.ts +17 -1
- package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
- package/dist/v2/components/NotFoundPage.js +37 -18
- package/dist/v2/components/NotFoundPage.js.map +1 -1
- package/dist/v2/components/NumberInput.js +88 -118
- package/dist/v2/components/NumberInput.js.map +1 -1
- package/dist/v2/components/OverflowMenu.js +38 -56
- package/dist/v2/components/OverflowMenu.js.map +1 -1
- package/dist/v2/components/PdfViewer.js +34 -45
- package/dist/v2/components/PdfViewer.js.map +1 -1
- package/dist/v2/components/ProgressBar.js +42 -49
- package/dist/v2/components/ProgressBar.js.map +1 -1
- package/dist/v2/components/Radio.js +59 -67
- package/dist/v2/components/Radio.js.map +1 -1
- package/dist/v2/components/SectionErrorBoundary.js +90 -135
- package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/v2/components/SectionHeader.js +34 -41
- package/dist/v2/components/SectionHeader.js.map +1 -1
- package/dist/v2/components/Segmented.js +69 -93
- package/dist/v2/components/Segmented.js.map +1 -1
- package/dist/v2/components/Select.d.ts +26 -2
- package/dist/v2/components/Select.d.ts.map +1 -1
- package/dist/v2/components/Select.js +120 -155
- package/dist/v2/components/Select.js.map +1 -1
- package/dist/v2/components/ServerErrorPage.d.ts +27 -1
- package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
- package/dist/v2/components/ServerErrorPage.js +37 -20
- package/dist/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/v2/components/Skeleton.js +86 -100
- package/dist/v2/components/Skeleton.js.map +1 -1
- package/dist/v2/components/SkipLink.js +9 -12
- package/dist/v2/components/SkipLink.js.map +1 -1
- package/dist/v2/components/Spinner.js +16 -25
- package/dist/v2/components/Spinner.js.map +1 -1
- package/dist/v2/components/Status.js +18 -29
- package/dist/v2/components/Status.js.map +1 -1
- package/dist/v2/components/Stepper.js +80 -82
- package/dist/v2/components/Stepper.js.map +1 -1
- package/dist/v2/components/Surface.js +34 -49
- package/dist/v2/components/Surface.js.map +1 -1
- package/dist/v2/components/Switch.js +29 -37
- package/dist/v2/components/Switch.js.map +1 -1
- package/dist/v2/components/TabPanel.d.ts +17 -0
- package/dist/v2/components/TabPanel.d.ts.map +1 -0
- package/dist/v2/components/TabPanel.js +90 -0
- package/dist/v2/components/TabPanel.js.map +1 -0
- package/dist/v2/components/Tabs.d.ts +25 -0
- package/dist/v2/components/Tabs.d.ts.map +1 -1
- package/dist/v2/components/Tabs.js +53 -29
- package/dist/v2/components/Tabs.js.map +1 -1
- package/dist/v2/components/TelInput.js +80 -115
- package/dist/v2/components/TelInput.js.map +1 -1
- package/dist/v2/components/Textarea.js +26 -35
- package/dist/v2/components/Textarea.js.map +1 -1
- package/dist/v2/components/TimePicker.js +62 -74
- package/dist/v2/components/TimePicker.js.map +1 -1
- package/dist/v2/components/Toast.js +119 -174
- package/dist/v2/components/Toast.js.map +1 -1
- package/dist/v2/components/Tooltip.js +23 -38
- package/dist/v2/components/Tooltip.js.map +1 -1
- package/dist/v2/components/_ErrorPageBody.js +15 -16
- package/dist/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/v2/components/_pickerShared.js +5 -5
- package/dist/v2/components/_pickerShared.js.map +1 -1
- package/dist/v2/components/index.d.ts +67 -1
- package/dist/v2/components/index.d.ts.map +1 -1
- package/dist/v2/components/index.js +153 -136
- package/dist/v2/components/index.js.map +1 -1
- package/dist/v2/hooks/index.d.ts +65 -0
- package/dist/v2/hooks/index.d.ts.map +1 -1
- package/dist/v2/hooks/index.js +63 -24
- package/dist/v2/hooks/index.js.map +1 -1
- package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
- package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
- package/dist/v2/hooks/useAppliedFilters.js +117 -0
- package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.js +87 -0
- package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/v2/hooks/useDelayedFlag.js +6 -20
- package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/v2/hooks/useDensity.d.ts.map +1 -1
- package/dist/v2/hooks/useDensity.js +14 -18
- package/dist/v2/hooks/useDensity.js.map +1 -1
- package/dist/v2/hooks/useFocusFirstError.js +26 -34
- package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/v2/hooks/useFocusTrap.js +20 -24
- package/dist/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
- package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.js +39 -54
- package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
- package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/v2/hooks/useResolvedDensity.js +5 -13
- package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/v2/hooks/useSortedRows.js +4 -6
- package/dist/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/v2/hooks/useTabLoading.js +7 -22
- package/dist/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/v2/index.d.ts.map +1 -1
- package/dist/v2/index.js +143 -145
- package/dist/v2/index.js.map +1 -1
- package/dist/v2/modalContext.js +2 -2
- package/dist/v2/modalContext.js.map +1 -1
- package/dist/v2/models/favorite.d.ts +8 -9
- package/dist/v2/models/favorite.d.ts.map +1 -1
- package/dist/v2/models/favorite.js.map +1 -1
- package/dist/v2/models/index.js +4 -4
- package/dist/v2/models/index.js.map +1 -1
- package/dist/v2/models/personalization.d.ts +44 -48
- package/dist/v2/models/personalization.d.ts.map +1 -1
- package/dist/v2/models/personalization.js.map +1 -1
- package/dist/v2/models/referentiel.d.ts +32 -50
- package/dist/v2/models/referentiel.d.ts.map +1 -1
- package/dist/v2/models/referentiel.js.map +1 -1
- package/dist/v2/models/savedFilter.d.ts +8 -17
- package/dist/v2/models/savedFilter.d.ts.map +1 -1
- package/dist/v2/models/savedFilter.js.map +1 -1
- package/dist/v2/patterns/ActionBar.js +152 -187
- package/dist/v2/patterns/ActionBar.js.map +1 -1
- package/dist/v2/patterns/AppMain.d.ts +109 -0
- package/dist/v2/patterns/AppMain.d.ts.map +1 -0
- package/dist/v2/patterns/AppMain.js +115 -0
- package/dist/v2/patterns/AppMain.js.map +1 -0
- package/dist/v2/patterns/BulkActionBar.js +40 -42
- package/dist/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/v2/patterns/ChartFigure.d.ts +124 -0
- package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
- package/dist/v2/patterns/ChartFigure.js +159 -0
- package/dist/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
- package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/v2/patterns/ColumnsToggle.js +60 -94
- package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
- package/dist/v2/patterns/DataGrid.js +262 -297
- package/dist/v2/patterns/DataGrid.js.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
- package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/v2/patterns/DataGridToolbar.js +103 -106
- package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/v2/patterns/DataGridVirtualized.js +179 -217
- package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/v2/patterns/DetailSplit.d.ts +87 -0
- package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
- package/dist/v2/patterns/DetailSplit.js +116 -0
- package/dist/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/v2/patterns/FavoriteColumn.d.ts +9 -9
- package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
- package/dist/v2/patterns/FavoriteColumn.js +32 -80
- package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/v2/patterns/FavoritesFilter.js +36 -44
- package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
- package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
- package/dist/v2/patterns/FilterTabBar.js +120 -0
- package/dist/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/v2/patterns/FormErrorSummary.js +20 -23
- package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/v2/patterns/FormPageShell.js +53 -50
- package/dist/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/v2/patterns/FormSection.d.ts +8 -3
- package/dist/v2/patterns/FormSection.d.ts.map +1 -1
- package/dist/v2/patterns/FormSection.js +44 -51
- package/dist/v2/patterns/FormSection.js.map +1 -1
- package/dist/v2/patterns/FormikCheckbox.d.ts +77 -0
- package/dist/v2/patterns/FormikCheckbox.d.ts.map +1 -0
- package/dist/v2/patterns/FormikCheckbox.js +138 -0
- package/dist/v2/patterns/FormikCheckbox.js.map +1 -0
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
- package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/v2/patterns/FormikCombobox.d.ts +7 -1
- package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCombobox.js +55 -69
- package/dist/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.d.ts +13 -1
- package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.js +59 -106
- package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/v2/patterns/FormikDateTimePicker.d.ts +111 -0
- package/dist/v2/patterns/FormikDateTimePicker.d.ts.map +1 -0
- package/dist/v2/patterns/FormikDateTimePicker.js +144 -0
- package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -0
- package/dist/v2/patterns/FormikErrorFocus.js +25 -26
- package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
- package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
- package/dist/v2/patterns/FormikErrorSummary.js +97 -0
- package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/v2/patterns/FormikFile.d.ts +14 -1
- package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
- package/dist/v2/patterns/FormikFile.js +99 -83
- package/dist/v2/patterns/FormikFile.js.map +1 -1
- package/dist/v2/patterns/FormikInput.d.ts +11 -1
- package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
- package/dist/v2/patterns/FormikInput.js +45 -55
- package/dist/v2/patterns/FormikInput.js.map +1 -1
- package/dist/v2/patterns/FormikRadioGroup.d.ts +80 -0
- package/dist/v2/patterns/FormikRadioGroup.d.ts.map +1 -0
- package/dist/v2/patterns/FormikRadioGroup.js +137 -0
- package/dist/v2/patterns/FormikRadioGroup.js.map +1 -0
- package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
- package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.js +54 -64
- package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/v2/patterns/FormikSelect.d.ts +9 -1
- package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
- package/dist/v2/patterns/FormikSelect.js +70 -89
- package/dist/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/v2/patterns/FormikTextarea.d.ts +9 -1
- package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
- package/dist/v2/patterns/FormikTextarea.js +35 -48
- package/dist/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +14 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.js +71 -74
- package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
- package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/v2/patterns/PageContent.js +17 -20
- package/dist/v2/patterns/PageContent.js.map +1 -1
- package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
- package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
- package/dist/v2/patterns/PreviewDrawer.js +159 -0
- package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/v2/patterns/ReferentielField.d.ts +86 -2
- package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/ReferentielField.js +347 -327
- package/dist/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/v2/patterns/RowFavoriteToggle.d.ts +98 -0
- package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -0
- package/dist/v2/patterns/RowFavoriteToggle.js +135 -0
- package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -0
- package/dist/v2/patterns/SaveFilterDialog.js +50 -77
- package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
- package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/v2/patterns/SkeletonPageShell.js +122 -143
- package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/v2/patterns/SortableHeader.js +35 -57
- package/dist/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/v2/patterns/Tour.js +121 -142
- package/dist/v2/patterns/Tour.js.map +1 -1
- package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
- package/dist/v2/patterns/_dataGridShared.js +131 -147
- package/dist/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/v2/patterns/_pickerSerialisation.d.ts +44 -0
- package/dist/v2/patterns/_pickerSerialisation.d.ts.map +1 -0
- package/dist/v2/patterns/_pickerSerialisation.js +80 -0
- package/dist/v2/patterns/_pickerSerialisation.js.map +1 -0
- package/dist/v2/patterns/_sort.js +17 -33
- package/dist/v2/patterns/_sort.js.map +1 -1
- package/dist/v2/patterns/_useColumnReorder.js +124 -163
- package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/v2/patterns/_useColumnResize.js +80 -99
- package/dist/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/v2/patterns/filterCriteria.d.ts +78 -0
- package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
- package/dist/v2/patterns/filterCriteria.js +110 -0
- package/dist/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/v2/patterns/index.d.ts +247 -0
- package/dist/v2/patterns/index.d.ts.map +1 -1
- package/dist/v2/patterns/index.js +182 -70
- package/dist/v2/patterns/index.js.map +1 -1
- package/dist/v2/patterns/rowActions.d.ts +150 -0
- package/dist/v2/patterns/rowActions.d.ts.map +1 -0
- package/dist/v2/patterns/rowActions.js +232 -0
- package/dist/v2/patterns/rowActions.js.map +1 -0
- package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
- package/dist/v2/personalization/PersonalizationProvider.js +57 -53
- package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
- package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/index.js +5 -5
- package/dist/v2/personalization/adapters/index.js.map +1 -1
- package/dist/v2/personalization/capabilities/favorites.js +39 -62
- package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
- package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/v2/personalization/capabilities/gridPreferences.d.ts +100 -0
- package/dist/v2/personalization/capabilities/gridPreferences.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/gridPreferences.js +210 -0
- package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -0
- package/dist/v2/personalization/capabilities/index.d.ts +6 -0
- package/dist/v2/personalization/capabilities/index.d.ts.map +1 -1
- package/dist/v2/personalization/capabilities/index.js +23 -10
- package/dist/v2/personalization/capabilities/index.js.map +1 -1
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
- package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.js +81 -182
- package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/v2/personalization/index.d.ts +34 -0
- package/dist/v2/personalization/index.d.ts.map +1 -1
- package/dist/v2/personalization/index.js +41 -21
- package/dist/v2/personalization/index.js.map +1 -1
- package/dist/v2/personalization/personalizationContext.js +10 -12
- package/dist/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/v2/personalization/schema.js +8 -9
- package/dist/v2/personalization/schema.js.map +1 -1
- package/dist/v2/referentiel/ReferentielProvider.js +31 -45
- package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/v2/referentiel/index.js +11 -13
- package/dist/v2/referentiel/index.js.map +1 -1
- package/dist/v2/referentiel/types.d.ts +105 -0
- package/dist/v2/referentiel/types.d.ts.map +1 -0
- package/dist/v2/referentiel/types.js +6 -0
- package/dist/v2/referentiel/types.js.map +1 -0
- package/dist/v2/referentiel/useReferentielClient.js +13 -16
- package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
- package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.js +63 -120
- package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
- package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.js +40 -95
- package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/v2/theme/_brand.js +12 -26
- package/dist/v2/theme/_brand.js.map +1 -1
- package/dist/v2/theme/_brandSecondary.js +12 -26
- package/dist/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/v2/theme/createPortnetTheme.js +41 -49
- package/dist/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/v2/theme/cssVariables.d.ts +3 -3
- package/dist/v2/theme/cssVariables.d.ts.map +1 -1
- package/dist/v2/theme/cssVariables.js +65 -70
- package/dist/v2/theme/cssVariables.js.map +1 -1
- package/dist/v2/theme/index.js +10 -10
- package/dist/v2/theme/index.js.map +1 -1
- package/dist/v2/tokens/breakpoints.js +16 -16
- package/dist/v2/tokens/breakpoints.js.map +1 -1
- package/dist/v2/tokens/chart.d.ts +103 -0
- package/dist/v2/tokens/chart.d.ts.map +1 -0
- package/dist/v2/tokens/chart.js +270 -0
- package/dist/v2/tokens/chart.js.map +1 -0
- package/dist/v2/tokens/colors.js +24 -24
- package/dist/v2/tokens/colors.js.map +1 -1
- package/dist/v2/tokens/density.d.ts +104 -0
- package/dist/v2/tokens/density.d.ts.map +1 -1
- package/dist/v2/tokens/density.js +67 -12
- package/dist/v2/tokens/density.js.map +1 -1
- package/dist/v2/tokens/index.d.ts +50 -1
- package/dist/v2/tokens/index.d.ts.map +1 -1
- package/dist/v2/tokens/index.js +116 -68
- package/dist/v2/tokens/index.js.map +1 -1
- package/dist/v2/tokens/motion.js +16 -22
- package/dist/v2/tokens/motion.js.map +1 -1
- package/dist/v2/tokens/radius.js +3 -3
- package/dist/v2/tokens/radius.js.map +1 -1
- package/dist/v2/tokens/shadows.js +8 -8
- package/dist/v2/tokens/shadows.js.map +1 -1
- package/dist/v2/tokens/spacing.js +4 -4
- package/dist/v2/tokens/spacing.js.map +1 -1
- package/dist/v2/tokens/state.js +3 -3
- package/dist/v2/tokens/state.js.map +1 -1
- package/dist/v2/tokens/statusPalette.js +21 -23
- package/dist/v2/tokens/statusPalette.js.map +1 -1
- package/dist/v2/tokens/tokens.json +6 -1
- package/dist/v2/tokens/typography.js +15 -15
- package/dist/v2/tokens/typography.js.map +1 -1
- package/dist/v2/tokens/zIndex.js +3 -3
- package/dist/v2/tokens/zIndex.js.map +1 -1
- package/dist/v2/types/datagrid.d.ts +9 -1
- package/dist/v2/types/datagrid.d.ts.map +1 -1
- package/dist/v2/types/datagrid.js.map +1 -1
- package/dist/v2/types/index.js +2 -2
- package/dist/v2/types/index.js.map +1 -1
- package/dist/v2/utils/apiError.js +16 -37
- package/dist/v2/utils/apiError.js.map +1 -1
- package/dist/v2/utils/contrast.js +31 -32
- package/dist/v2/utils/contrast.js.map +1 -1
- package/dist/v2/utils/cx.js +7 -27
- package/dist/v2/utils/cx.js.map +1 -1
- package/dist/v2/utils/fileDownload.js +25 -28
- package/dist/v2/utils/fileDownload.js.map +1 -1
- package/dist/v2/utils/fileValidation.d.ts +116 -0
- package/dist/v2/utils/fileValidation.d.ts.map +1 -0
- package/dist/v2/utils/fileValidation.js +220 -0
- package/dist/v2/utils/fileValidation.js.map +1 -0
- package/dist/v2/utils/fmtDate.d.ts +103 -0
- package/dist/v2/utils/fmtDate.d.ts.map +1 -0
- package/dist/v2/utils/fmtDate.js +119 -0
- package/dist/v2/utils/fmtDate.js.map +1 -0
- package/dist/v2/utils/fmtMoney.d.ts +3 -3
- package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
- package/dist/v2/utils/fmtMoney.js +9 -11
- package/dist/v2/utils/fmtMoney.js.map +1 -1
- package/dist/v2/utils/formikErrors.d.ts +67 -0
- package/dist/v2/utils/formikErrors.d.ts.map +1 -0
- package/dist/v2/utils/formikErrors.js +85 -0
- package/dist/v2/utils/formikErrors.js.map +1 -0
- package/dist/v2/utils/index.d.ts +5 -0
- package/dist/v2/utils/index.d.ts.map +1 -1
- package/dist/v2/utils/index.js +67 -18
- package/dist/v2/utils/index.js.map +1 -1
- package/dist/v2/utils/mergeLabels.js +9 -14
- package/dist/v2/utils/mergeLabels.js.map +1 -1
- package/dist/v2/utils/networkStatus.js +14 -14
- package/dist/v2/utils/networkStatus.js.map +1 -1
- package/package.json +26 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_pickerSerialisation.js","names":["moment","coerceToDate","raw","outputFormat","Date","toDate","d","isNaN","getTime","undefined","parsed","isValid","serialiseDate","date","toISOString","format"],"sources":["../../../../src/lib/v2/patterns/_pickerSerialisation.ts"],"sourcesContent":["import moment from \"moment\";\r\n\r\n/**\r\n * _pickerSerialisation — lecture / ecriture partagees des ponts Formik de date.\r\n *\r\n * ── POURQUOI CE MODULE EXISTE ────────────────────────────────────────\r\n *\r\n * `FormikDatePicker` portait ces deux fonctions en prive. L'arrivee d'un\r\n * SECOND pont (`FormikDateTimePicker`, gap G-E) posait le choix : les recopier,\r\n * ou les partager.\r\n *\r\n * Les recopier aurait reproduit exactement la situation que la note S-03 de\r\n * `FormikDatePicker` raconte. Rappel de ce qu'elle dit : ce pont serialisait\r\n * VERS moment mais relisait DEPUIS `new Date(raw)`, en ignorant\r\n * `outputFormat`. L'asymetrie corrompait silencieusement tout format non ISO —\r\n * `new Date(\"31-12-2026\")` donne Invalid Date, `new Date(\"05-03-2026\")` donne\r\n * le 3 mai au lieu du 5 mars. Le chemin d'ECRITURE fonctionnait, donc un\r\n * formulaire rempli puis soumis se comportait correctement : le degat\r\n * n'apparaissait qu'a la RELECTURE, c'est-a-dire en modification. Un module a\r\n * livre ce defaut pendant sept lots sous un typecheck strict.\r\n *\r\n * Une asymetrie de ce genre entre DEUX ponts serait encore moins visible : ils\r\n * se ressemblent, personne ne les compare, et chacun a l'air correct\r\n * isolement. La seule garantie est qu'il n'y ait qu'un exemplaire du couple\r\n * lecture / ecriture.\r\n *\r\n * Module INTERNE : non exporte par la surface publique (prefixe `_`).\r\n */\r\n\r\n/**\r\n * Relit une valeur stockee par Formik vers un `Date`.\r\n *\r\n * `outputFormat` est passe pour que la lecture soit SYMETRIQUE de\r\n * `serialiseDate` : on parse avec le format qui a servi a ecrire, en mode\r\n * STRICT. Une valeur stockee qui ne correspond pas rend `null` plutot que la\r\n * meilleure approximation de moment — une date absente est recuperable, une\r\n * date fausse de deux mois ne l'est pas.\r\n */\r\nexport const coerceToDate = (\r\n raw: unknown,\r\n outputFormat?: string\r\n): Date | null => {\r\n if (raw == null || raw === \"\") return null;\r\n if (raw instanceof Date) return raw;\r\n if (\r\n typeof raw === \"object\" &&\r\n typeof (raw as { toDate?: () => Date }).toDate === \"function\"\r\n ) {\r\n const d = (raw as { toDate: () => Date }).toDate();\r\n return isNaN(d?.getTime?.()) ? null : d;\r\n }\r\n /* Garde sur `typeof raw === \"string\"` : un horodatage numerique garde le\r\n * chemin `new Date(number)`, `moment(number, format)` n'ayant pas de sens.\r\n * \"iso\" est exclu : ce n'est pas un jeton moment, et `new Date(isoString)`\r\n * est deja correct. */\r\n if (\r\n typeof raw === \"string\" &&\r\n outputFormat !== undefined &&\r\n outputFormat !== \"iso\"\r\n ) {\r\n const parsed = moment(raw, outputFormat, true);\r\n return parsed.isValid() ? parsed.toDate() : null;\r\n }\r\n const d = new Date(raw as string | number);\r\n return isNaN(d.getTime()) ? null : d;\r\n};\r\n\r\n/**\r\n * Serialise un `Date` vers le format demande.\r\n * undefined -> rend le `Date` tel quel (defaut, compatible)\r\n * \"iso\" -> `Date.toISOString()`\r\n * toute autre chaine -> `moment(date).format(outputFormat)`\r\n */\r\nexport function serialiseDate(\r\n date: Date | null,\r\n outputFormat: string | undefined\r\n): Date | string | null {\r\n if (!date || !(date instanceof Date) || isNaN(date.getTime())) {\r\n return outputFormat ? \"\" : null;\r\n }\r\n if (!outputFormat) return date;\r\n if (outputFormat === \"iso\") return date.toISOString();\r\n return moment(date).format(outputFormat);\r\n}\r\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,QAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,YAAY,GAAGA,CAC1BC,GAAY,EACZC,YAAqB,KACL;EAChB,IAAID,GAAG,IAAI,IAAI,IAAIA,GAAG,KAAK,EAAE,EAAE,OAAO,IAAI;EAC1C,IAAIA,GAAG,YAAYE,IAAI,EAAE,OAAOF,GAAG;EACnC,IACE,OAAOA,GAAG,KAAK,QAAQ,IACvB,OAAQA,GAAG,CAA6BG,MAAM,KAAK,UAAU,EAC7D;IACA,MAAMC,CAAC,GAAIJ,GAAG,CAA4BG,MAAM,CAAC,CAAC;IAClD,OAAOE,KAAK,CAACD,CAAC,EAAEE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,GAAGF,CAAC;EACzC;EACA;AACF;AACA;AACA;EACE,IACE,OAAOJ,GAAG,KAAK,QAAQ,IACvBC,YAAY,KAAKM,SAAS,IAC1BN,YAAY,KAAK,KAAK,EACtB;IACA,MAAMO,MAAM,GAAGV,MAAM,CAACE,GAAG,EAAEC,YAAY,EAAE,IAAI,CAAC;IAC9C,OAAOO,MAAM,CAACC,OAAO,CAAC,CAAC,GAAGD,MAAM,CAACL,MAAM,CAAC,CAAC,GAAG,IAAI;EAClD;EACA,MAAMC,CAAC,GAAG,IAAIF,IAAI,CAACF,GAAsB,CAAC;EAC1C,OAAOK,KAAK,CAACD,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAGF,CAAC;AACtC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASM,aAAaA,CAC3BC,IAAiB,EACjBV,YAAgC,EACV;EACtB,IAAI,CAACU,IAAI,IAAI,EAAEA,IAAI,YAAYT,IAAI,CAAC,IAAIG,KAAK,CAACM,IAAI,CAACL,OAAO,CAAC,CAAC,CAAC,EAAE;IAC7D,OAAOL,YAAY,GAAG,EAAE,GAAG,IAAI;EACjC;EACA,IAAI,CAACA,YAAY,EAAE,OAAOU,IAAI;EAC9B,IAAIV,YAAY,KAAK,KAAK,EAAE,OAAOU,IAAI,CAACC,WAAW,CAAC,CAAC;EACrD,OAAOd,MAAM,CAACa,IAAI,CAAC,CAACE,MAAM,CAACZ,YAAY,CAAC;AAC1C","ignoreList":[]}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
2
|
-
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
3
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
5
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
6
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
7
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
8
1
|
/**
|
|
9
2
|
* Internal: locale-correct multi-sort for DataGrid / useSortedRows.
|
|
10
3
|
*
|
|
@@ -32,18 +25,18 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
|
|
|
32
25
|
* "numeric: true" makes "Item 10" sort AFTER "Item 2" (natural order),
|
|
33
26
|
* which the prior char-code comparison got backwards.
|
|
34
27
|
*/
|
|
35
|
-
|
|
28
|
+
const COLLATOR_CACHE = new Map();
|
|
36
29
|
function getCollator(locale) {
|
|
37
|
-
|
|
38
|
-
|
|
30
|
+
const key = locale || "fr-FR";
|
|
31
|
+
const cached = COLLATOR_CACHE.get(key);
|
|
39
32
|
if (cached) return cached;
|
|
40
|
-
|
|
33
|
+
let collator;
|
|
41
34
|
try {
|
|
42
35
|
collator = new Intl.Collator(key, {
|
|
43
36
|
sensitivity: "accent",
|
|
44
37
|
numeric: true
|
|
45
38
|
});
|
|
46
|
-
} catch
|
|
39
|
+
} catch {
|
|
47
40
|
// Invalid BCP-47 tag — fall back to fr-FR (matches the rest of v2's
|
|
48
41
|
// graceful-locale-fallback contract from Batch 2).
|
|
49
42
|
collator = new Intl.Collator("fr-FR", {
|
|
@@ -64,8 +57,8 @@ function getCollator(locale) {
|
|
|
64
57
|
* applySort empty-string behaviour: "" < any non-empty string).
|
|
65
58
|
*/
|
|
66
59
|
function compareValues(av, bv, collator) {
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
const aN = av == null || av === "";
|
|
61
|
+
const bN = bv == null || bv === "";
|
|
69
62
|
if (aN && bN) return 0;
|
|
70
63
|
if (aN) return -1;
|
|
71
64
|
if (bN) return 1;
|
|
@@ -86,25 +79,16 @@ function compareValues(av, bv, collator) {
|
|
|
86
79
|
* Returns a NEW sorted array (input is not mutated); the original array
|
|
87
80
|
* reference is returned untouched when there is nothing to sort.
|
|
88
81
|
*/
|
|
89
|
-
export function applySort(rows, sort) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
key = _step$value.key,
|
|
100
|
-
dir = _step$value.dir;
|
|
101
|
-
var cmp = compareValues(a[key], b[key], collator);
|
|
102
|
-
if (cmp !== 0) return dir === "asc" ? cmp : -cmp;
|
|
103
|
-
}
|
|
104
|
-
} catch (err) {
|
|
105
|
-
_iterator.e(err);
|
|
106
|
-
} finally {
|
|
107
|
-
_iterator.f();
|
|
82
|
+
export function applySort(rows, sort, options = {}) {
|
|
83
|
+
if (!sort?.length) return rows;
|
|
84
|
+
const collator = getCollator(options.locale);
|
|
85
|
+
return [...rows].sort((a, b) => {
|
|
86
|
+
for (const {
|
|
87
|
+
key,
|
|
88
|
+
dir
|
|
89
|
+
} of sort) {
|
|
90
|
+
const cmp = compareValues(a[key], b[key], collator);
|
|
91
|
+
if (cmp !== 0) return dir === "asc" ? cmp : -cmp;
|
|
108
92
|
}
|
|
109
93
|
return 0;
|
|
110
94
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_sort.js","names":["COLLATOR_CACHE","Map","getCollator","locale","key","cached","get","collator","Intl","Collator","sensitivity","numeric","
|
|
1
|
+
{"version":3,"file":"_sort.js","names":["COLLATOR_CACHE","Map","getCollator","locale","key","cached","get","collator","Intl","Collator","sensitivity","numeric","set","compareValues","av","bv","aN","bN","Date","getTime","compare","String","applySort","rows","sort","options","length","a","b","dir","cmp"],"sources":["../../../../src/lib/v2/patterns/_sort.ts"],"sourcesContent":["/**\r\n * Internal: locale-correct multi-sort for DataGrid / useSortedRows.\r\n *\r\n * Extracted verbatim from SortableHeader (Batch 12 / C1) so the sort logic can\r\n * be shared by the SortableHeader pattern (which re-exports `applySort`) and the\r\n * useSortedRows hook — without a hook → component import (a .ts hook importing a\r\n * still-.js component fails build:types under allowJs:false) and without\r\n * duplicating the collation logic. Behaviour is unchanged.\r\n *\r\n * NOT part of the public surface: `applySort` is re-exported from SortableHeader\r\n * (the public name / call site); getCollator + compareValues + the cache are\r\n * internal implementation details that were never exported.\r\n */\r\nimport type { SortDescriptor } from \"../types/common\";\r\nimport type { ApplySortOptions } from \"../types/datagrid\";\r\n\r\n/**\r\n * Module-level cache of Intl.Collator instances keyed by locale tag.\r\n * Collator construction allocates internal locale data (≈100 µs cold)\r\n * — caching matters for hosts that re-sort on every render.\r\n *\r\n * Using \"accent\" sensitivity preserves the prior toLowerCase-based\r\n * behaviour (case-insensitive) while honouring proper locale collation:\r\n * - FR: É sorts as if E (between Élise and Étienne, not after Z).\r\n * - AR: combining marks fold correctly.\r\n * - DE: Umlauts (ä) sort with their base letter.\r\n * \"numeric: true\" makes \"Item 10\" sort AFTER \"Item 2\" (natural order),\r\n * which the prior char-code comparison got backwards.\r\n */\r\nconst COLLATOR_CACHE = new Map<string, Intl.Collator>();\r\n\r\nfunction getCollator(locale?: string): Intl.Collator {\r\n const key = locale || \"fr-FR\";\r\n const cached = COLLATOR_CACHE.get(key);\r\n if (cached) return cached;\r\n let collator: Intl.Collator;\r\n try {\r\n collator = new Intl.Collator(key, { sensitivity: \"accent\", numeric: true });\r\n } catch {\r\n // Invalid BCP-47 tag — fall back to fr-FR (matches the rest of v2's\r\n // graceful-locale-fallback contract from Batch 2).\r\n collator = new Intl.Collator(\"fr-FR\", { sensitivity: \"accent\", numeric: true });\r\n }\r\n COLLATOR_CACHE.set(key, collator);\r\n return collator;\r\n}\r\n\r\n/**\r\n * Compare two cell values with locale-aware semantics. Routes through\r\n * the Collator only for strings or mixed types; numeric / Date pairs\r\n * use native operators (faster + exact).\r\n *\r\n * Null / undefined / empty-string sort FIRST (preserves the prior\r\n * applySort empty-string behaviour: \"\" < any non-empty string).\r\n */\r\nfunction compareValues(av: unknown, bv: unknown, collator: Intl.Collator): number {\r\n const aN = av == null || av === \"\";\r\n const bN = bv == null || bv === \"\";\r\n if (aN && bN) return 0;\r\n if (aN) return -1;\r\n if (bN) return 1;\r\n\r\n if (typeof av === \"number\" && typeof bv === \"number\") {\r\n return av - bv;\r\n }\r\n if (av instanceof Date && bv instanceof Date) {\r\n return av.getTime() - bv.getTime();\r\n }\r\n // String pair — or mixed types coerced to strings. The Collator handles\r\n // both cases identically and respects `numeric: true` so digit runs\r\n // inside a label compare numerically.\r\n return collator.compare(String(av), String(bv));\r\n}\r\n\r\n/**\r\n * Pure helper — applies a multi-sort state to an array of rows.\r\n * Returns a NEW sorted array (input is not mutated); the original array\r\n * reference is returned untouched when there is nothing to sort.\r\n */\r\nexport function applySort<T extends object>(\r\n rows: T[],\r\n sort: readonly SortDescriptor[] | null | undefined,\r\n options: ApplySortOptions = {},\r\n): T[] {\r\n if (!sort?.length) return rows;\r\n const collator = getCollator(options.locale);\r\n return [...rows].sort((a, b) => {\r\n for (const { key, dir } of sort) {\r\n const cmp = compareValues(\r\n (a as Record<string, unknown>)[key],\r\n (b as Record<string, unknown>)[key],\r\n collator,\r\n );\r\n if (cmp !== 0) return dir === \"asc\" ? cmp : -cmp;\r\n }\r\n return 0;\r\n });\r\n}\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,cAAc,GAAG,IAAIC,GAAG,CAAwB,CAAC;AAEvD,SAASC,WAAWA,CAACC,MAAe,EAAiB;EACnD,MAAMC,GAAG,GAAGD,MAAM,IAAI,OAAO;EAC7B,MAAME,MAAM,GAAGL,cAAc,CAACM,GAAG,CAACF,GAAG,CAAC;EACtC,IAAIC,MAAM,EAAE,OAAOA,MAAM;EACzB,IAAIE,QAAuB;EAC3B,IAAI;IACFA,QAAQ,GAAG,IAAIC,IAAI,CAACC,QAAQ,CAACL,GAAG,EAAE;MAAEM,WAAW,EAAE,QAAQ;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC;EAC7E,CAAC,CAAC,MAAM;IACN;IACA;IACAJ,QAAQ,GAAG,IAAIC,IAAI,CAACC,QAAQ,CAAC,OAAO,EAAE;MAAEC,WAAW,EAAE,QAAQ;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC;EACjF;EACAX,cAAc,CAACY,GAAG,CAACR,GAAG,EAAEG,QAAQ,CAAC;EACjC,OAAOA,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASM,aAAaA,CAACC,EAAW,EAAEC,EAAW,EAAER,QAAuB,EAAU;EAChF,MAAMS,EAAE,GAAGF,EAAE,IAAI,IAAI,IAAIA,EAAE,KAAK,EAAE;EAClC,MAAMG,EAAE,GAAGF,EAAE,IAAI,IAAI,IAAIA,EAAE,KAAK,EAAE;EAClC,IAAIC,EAAE,IAAIC,EAAE,EAAE,OAAO,CAAC;EACtB,IAAID,EAAE,EAAE,OAAO,CAAC,CAAC;EACjB,IAAIC,EAAE,EAAE,OAAO,CAAC;EAEhB,IAAI,OAAOH,EAAE,KAAK,QAAQ,IAAI,OAAOC,EAAE,KAAK,QAAQ,EAAE;IACpD,OAAOD,EAAE,GAAGC,EAAE;EAChB;EACA,IAAID,EAAE,YAAYI,IAAI,IAAIH,EAAE,YAAYG,IAAI,EAAE;IAC5C,OAAOJ,EAAE,CAACK,OAAO,CAAC,CAAC,GAAGJ,EAAE,CAACI,OAAO,CAAC,CAAC;EACpC;EACA;EACA;EACA;EACA,OAAOZ,QAAQ,CAACa,OAAO,CAACC,MAAM,CAACP,EAAE,CAAC,EAAEO,MAAM,CAACN,EAAE,CAAC,CAAC;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,SAASA,CACvBC,IAAS,EACTC,IAAkD,EAClDC,OAAyB,GAAG,CAAC,CAAC,EACzB;EACL,IAAI,CAACD,IAAI,EAAEE,MAAM,EAAE,OAAOH,IAAI;EAC9B,MAAMhB,QAAQ,GAAGL,WAAW,CAACuB,OAAO,CAACtB,MAAM,CAAC;EAC5C,OAAO,CAAC,GAAGoB,IAAI,CAAC,CAACC,IAAI,CAAC,CAACG,CAAC,EAAEC,CAAC,KAAK;IAC9B,KAAK,MAAM;MAAExB,GAAG;MAAEyB;IAAI,CAAC,IAAIL,IAAI,EAAE;MAC/B,MAAMM,GAAG,GAAGjB,aAAa,CACtBc,CAAC,CAA6BvB,GAAG,CAAC,EAClCwB,CAAC,CAA6BxB,GAAG,CAAC,EACnCG,QACF,CAAC;MACD,IAAIuB,GAAG,KAAK,CAAC,EAAE,OAAOD,GAAG,KAAK,KAAK,GAAGC,GAAG,GAAG,CAACA,GAAG;IAClD;IACA,OAAO,CAAC;EACV,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
|
-
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
8
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
10
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
11
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
12
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
13
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
14
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
15
|
-
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
16
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
17
1
|
import * as React from "react";
|
|
18
2
|
|
|
19
3
|
/**
|
|
@@ -58,200 +42,178 @@ import * as React from "react";
|
|
|
58
42
|
* onDrop never fires.
|
|
59
43
|
*/
|
|
60
44
|
|
|
61
|
-
export default function useColumnReorder(columns, columnOrder, onColumnOrderChange) {
|
|
62
|
-
|
|
63
|
-
|
|
45
|
+
export default function useColumnReorder(columns, columnOrder, onColumnOrderChange, options = {}) {
|
|
46
|
+
const {
|
|
47
|
+
resizeIsActive
|
|
48
|
+
} = options;
|
|
64
49
|
|
|
65
50
|
// Effective order = host order, or fallback to the natural columns
|
|
66
51
|
// sequence. Memoised on the input shapes; no allocation when both
|
|
67
52
|
// refs are stable.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
});
|
|
72
|
-
}, [columnOrder, columns]);
|
|
73
|
-
var _React$useState = React.useState(null),
|
|
74
|
-
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
75
|
-
dragKey = _React$useState2[0],
|
|
76
|
-
setDragKey = _React$useState2[1];
|
|
77
|
-
var _React$useState3 = React.useState(null),
|
|
78
|
-
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
79
|
-
overKey = _React$useState4[0],
|
|
80
|
-
setOverKey = _React$useState4[1];
|
|
53
|
+
const effectiveOrder = React.useMemo(() => columnOrder || columns.map(c => c.key), [columnOrder, columns]);
|
|
54
|
+
const [dragKey, setDragKey] = React.useState(null);
|
|
55
|
+
const [overKey, setOverKey] = React.useState(null);
|
|
81
56
|
|
|
82
57
|
// Refs mirror state for use inside fresh-closure handlers
|
|
83
58
|
// (the onDragEnd inside cellHandlers needs the latest dragKey
|
|
84
59
|
// even if React hasn't yet re-rendered).
|
|
85
|
-
|
|
86
|
-
|
|
60
|
+
const dragKeyRef = React.useRef(null);
|
|
61
|
+
const reset = React.useCallback(() => {
|
|
87
62
|
dragKeyRef.current = null;
|
|
88
63
|
setDragKey(null);
|
|
89
64
|
setOverKey(null);
|
|
90
65
|
}, []);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (resizeIsActive) {
|
|
96
|
-
e.preventDefault();
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
dragKeyRef.current = key;
|
|
100
|
-
setDragKey(key);
|
|
101
|
-
// Mark the data transfer with the source key. Some browsers
|
|
102
|
-
// require a non-empty payload to allow drop (Firefox).
|
|
103
|
-
try {
|
|
104
|
-
e.dataTransfer.effectAllowed = "move";
|
|
105
|
-
e.dataTransfer.setData("text/plain", key);
|
|
106
|
-
} catch (_unused) {
|
|
107
|
-
// Older Safari throws on certain MIME types; ignored.
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
}, [resizeIsActive]);
|
|
111
|
-
var onDragOver = React.useCallback(function (key) {
|
|
112
|
-
return function (e) {
|
|
113
|
-
// CRITICAL — without preventDefault, the browser refuses the
|
|
114
|
-
// drop and onDrop never fires.
|
|
66
|
+
const onDragStart = React.useCallback(key => e => {
|
|
67
|
+
// Cross-hook: if resize is active, abort the drag. Resize fires
|
|
68
|
+
// first via mousedown; this handler runs later via dragstart.
|
|
69
|
+
if (resizeIsActive) {
|
|
115
70
|
e.preventDefault();
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
dragKeyRef.current = key;
|
|
74
|
+
setDragKey(key);
|
|
75
|
+
// Mark the data transfer with the source key. Some browsers
|
|
76
|
+
// require a non-empty payload to allow drop (Firefox).
|
|
77
|
+
try {
|
|
78
|
+
e.dataTransfer.effectAllowed = "move";
|
|
79
|
+
e.dataTransfer.setData("text/plain", key);
|
|
80
|
+
} catch {
|
|
81
|
+
// Older Safari throws on certain MIME types; ignored.
|
|
82
|
+
}
|
|
83
|
+
}, [resizeIsActive]);
|
|
84
|
+
const onDragOver = React.useCallback(key => e => {
|
|
85
|
+
// CRITICAL — without preventDefault, the browser refuses the
|
|
86
|
+
// drop and onDrop never fires.
|
|
87
|
+
e.preventDefault();
|
|
88
|
+
try {
|
|
89
|
+
e.dataTransfer.dropEffect = "move";
|
|
90
|
+
} catch {
|
|
91
|
+
// Some browsers throw outside a trusted dragstart→drop chain.
|
|
92
|
+
}
|
|
93
|
+
if (overKey !== key) setOverKey(key);
|
|
123
94
|
}, [overKey]);
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (overKey === key) setOverKey(null);
|
|
129
|
-
};
|
|
95
|
+
const onDragLeave = React.useCallback(key => () => {
|
|
96
|
+
// Only clear when leaving the same key we'd entered. Without
|
|
97
|
+
// this guard, fast moves between cells flicker the highlight.
|
|
98
|
+
if (overKey === key) setOverKey(null);
|
|
130
99
|
}, [overKey]);
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (!sourceKey || sourceKey === targetKey) {
|
|
136
|
-
reset();
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
var sourceIdx = effectiveOrder.indexOf(sourceKey);
|
|
140
|
-
var targetIdx = effectiveOrder.indexOf(targetKey);
|
|
141
|
-
if (sourceIdx < 0 || targetIdx < 0) {
|
|
142
|
-
reset();
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
var newOrder = _toConsumableArray(effectiveOrder);
|
|
146
|
-
newOrder.splice(sourceIdx, 1);
|
|
147
|
-
// After splice the target index may shift by 1 if source was
|
|
148
|
-
// before target. Recompute against the post-splice array.
|
|
149
|
-
var insertIdx = newOrder.indexOf(targetKey);
|
|
150
|
-
newOrder.splice(insertIdx, 0, sourceKey);
|
|
151
|
-
if (onColumnOrderChange) onColumnOrderChange(newOrder);
|
|
100
|
+
const onDrop = React.useCallback(targetKey => e => {
|
|
101
|
+
e.preventDefault();
|
|
102
|
+
const sourceKey = e.dataTransfer && e.dataTransfer.getData("text/plain") || dragKeyRef.current;
|
|
103
|
+
if (!sourceKey || sourceKey === targetKey) {
|
|
152
104
|
reset();
|
|
153
|
-
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const sourceIdx = effectiveOrder.indexOf(sourceKey);
|
|
108
|
+
const targetIdx = effectiveOrder.indexOf(targetKey);
|
|
109
|
+
if (sourceIdx < 0 || targetIdx < 0) {
|
|
110
|
+
reset();
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const newOrder = [...effectiveOrder];
|
|
114
|
+
newOrder.splice(sourceIdx, 1);
|
|
115
|
+
// After splice the target index may shift by 1 if source was
|
|
116
|
+
// before target. Recompute against the post-splice array.
|
|
117
|
+
const insertIdx = newOrder.indexOf(targetKey);
|
|
118
|
+
newOrder.splice(insertIdx, 0, sourceKey);
|
|
119
|
+
if (onColumnOrderChange) onColumnOrderChange(newOrder);
|
|
120
|
+
reset();
|
|
154
121
|
}, [effectiveOrder, onColumnOrderChange, reset]);
|
|
155
|
-
|
|
122
|
+
const onDragEnd = React.useCallback(() => {
|
|
156
123
|
// Fires whether the drop succeeded or the user cancelled (Esc /
|
|
157
124
|
// drop on a non-target). Belt-and-suspenders cleanup.
|
|
158
125
|
reset();
|
|
159
126
|
}, [reset]);
|
|
160
|
-
|
|
127
|
+
const cellHandlers = React.useCallback(key => ({
|
|
128
|
+
draggable: true,
|
|
129
|
+
onDragStart: onDragStart(key),
|
|
130
|
+
onDragOver: onDragOver(key),
|
|
131
|
+
onDragLeave: onDragLeave(key),
|
|
132
|
+
onDrop: onDrop(key),
|
|
133
|
+
onDragEnd
|
|
134
|
+
}), [onDragStart, onDragOver, onDragLeave, onDrop, onDragEnd]);
|
|
135
|
+
const cellSx = React.useCallback(key => {
|
|
136
|
+
const isDragSource = dragKey === key;
|
|
137
|
+
const isDropTarget = overKey === key && dragKey !== key;
|
|
138
|
+
if (!isDragSource && !isDropTarget) return undefined;
|
|
161
139
|
return {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
140
|
+
...(isDragSource && {
|
|
141
|
+
opacity: 0.5
|
|
142
|
+
}),
|
|
143
|
+
...(isDropTarget && {
|
|
144
|
+
// Inset accent outline = "drop here" visual. boxShadow not
|
|
145
|
+
// outline so it doesn't extend beyond the cell border.
|
|
146
|
+
boxShadow: "inset 0 0 0 2px var(--accent)"
|
|
147
|
+
})
|
|
168
148
|
};
|
|
169
|
-
}, [onDragStart, onDragOver, onDragLeave, onDrop, onDragEnd]);
|
|
170
|
-
var cellSx = React.useCallback(function (key) {
|
|
171
|
-
var isDragSource = dragKey === key;
|
|
172
|
-
var isDropTarget = overKey === key && dragKey !== key;
|
|
173
|
-
if (!isDragSource && !isDropTarget) return undefined;
|
|
174
|
-
return _objectSpread(_objectSpread({}, isDragSource && {
|
|
175
|
-
opacity: 0.5
|
|
176
|
-
}), isDropTarget && {
|
|
177
|
-
// Inset accent outline = "drop here" visual. boxShadow not
|
|
178
|
-
// outline so it doesn't extend beyond the cell border.
|
|
179
|
-
boxShadow: "inset 0 0 0 2px var(--accent)"
|
|
180
|
-
});
|
|
181
149
|
}, [dragKey, overKey]);
|
|
182
150
|
|
|
183
151
|
// ── Keyboard reorder (DG-R1) ───────────────────────────────────
|
|
184
152
|
// Commit a reordered copy of effectiveOrder. All keyboard moves route
|
|
185
153
|
// through here; edge/no-op cases are filtered by the callers.
|
|
186
|
-
|
|
154
|
+
const commitOrder = React.useCallback(newOrder => {
|
|
187
155
|
if (onColumnOrderChange) onColumnOrderChange(newOrder);
|
|
188
156
|
}, [onColumnOrderChange]);
|
|
189
157
|
|
|
190
158
|
// Adjacent swap toward the start (dir=-1) / end (dir=+1) of the order.
|
|
191
|
-
|
|
192
|
-
|
|
159
|
+
const swap = React.useCallback((key, dir) => {
|
|
160
|
+
const idx = effectiveOrder.indexOf(key);
|
|
193
161
|
if (idx < 0) return;
|
|
194
|
-
|
|
162
|
+
const target = idx + dir;
|
|
195
163
|
if (target < 0 || target >= effectiveOrder.length) return; // at edge
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
164
|
+
const newOrder = [...effectiveOrder];
|
|
165
|
+
const a = newOrder[idx];
|
|
166
|
+
const b = newOrder[target];
|
|
199
167
|
newOrder[idx] = b;
|
|
200
168
|
newOrder[target] = a;
|
|
201
169
|
commitOrder(newOrder);
|
|
202
170
|
}, [effectiveOrder, commitOrder]);
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}, [swap]);
|
|
206
|
-
var moveLater = React.useCallback(function (key) {
|
|
207
|
-
return swap(key, 1);
|
|
208
|
-
}, [swap]);
|
|
171
|
+
const moveEarlier = React.useCallback(key => swap(key, -1), [swap]);
|
|
172
|
+
const moveLater = React.useCallback(key => swap(key, 1), [swap]);
|
|
209
173
|
|
|
210
174
|
// Send the column to the first / last slot (Home / End).
|
|
211
|
-
|
|
212
|
-
|
|
175
|
+
const moveToEdge = React.useCallback((key, edge) => {
|
|
176
|
+
const idx = effectiveOrder.indexOf(key);
|
|
213
177
|
if (idx < 0) return;
|
|
214
178
|
if (edge === "start" && idx === 0) return;
|
|
215
179
|
if (edge === "end" && idx === effectiveOrder.length - 1) return;
|
|
216
|
-
|
|
217
|
-
|
|
180
|
+
const newOrder = [...effectiveOrder];
|
|
181
|
+
const moved = newOrder.splice(idx, 1)[0];
|
|
218
182
|
if (edge === "start") newOrder.unshift(moved);else newOrder.push(moved);
|
|
219
183
|
commitOrder(newOrder);
|
|
220
184
|
}, [effectiveOrder, commitOrder]);
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}
|
|
185
|
+
const handleKeyDown = React.useCallback(key => e => {
|
|
186
|
+
if (resizeIsActive) return;
|
|
187
|
+
const isLeft = e.key === "ArrowLeft";
|
|
188
|
+
const isRight = e.key === "ArrowRight";
|
|
189
|
+
const isHome = e.key === "Home";
|
|
190
|
+
const isEnd = e.key === "End";
|
|
191
|
+
if (!isLeft && !isRight && !isHome && !isEnd) return;
|
|
192
|
+
e.preventDefault();
|
|
193
|
+
e.stopPropagation();
|
|
194
|
+
if (isHome) {
|
|
195
|
+
moveToEdge(key, "start");
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (isEnd) {
|
|
199
|
+
moveToEdge(key, "end");
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
239
202
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
};
|
|
203
|
+
// RTL-aware physical-arrow mapping: in RTL the visual order is
|
|
204
|
+
// reversed, so ArrowLeft advances toward the end of the order.
|
|
205
|
+
const cell = e.currentTarget.closest("th");
|
|
206
|
+
const isRtl = !!cell && typeof window !== "undefined" && typeof window.getComputedStyle === "function" && window.getComputedStyle(cell).direction === "rtl";
|
|
207
|
+
const goLater = isRtl ? isLeft : isRight;
|
|
208
|
+
if (goLater) moveLater(key);else moveEarlier(key);
|
|
247
209
|
}, [resizeIsActive, moveToEdge, moveEarlier, moveLater]);
|
|
248
210
|
return {
|
|
249
|
-
cellHandlers
|
|
250
|
-
cellSx
|
|
211
|
+
cellHandlers,
|
|
212
|
+
cellSx,
|
|
251
213
|
isReordering: dragKey != null,
|
|
252
|
-
moveEarlier
|
|
253
|
-
moveLater
|
|
254
|
-
handleKeyDown
|
|
214
|
+
moveEarlier,
|
|
215
|
+
moveLater,
|
|
216
|
+
handleKeyDown
|
|
255
217
|
};
|
|
256
218
|
}
|
|
257
219
|
//# sourceMappingURL=_useColumnReorder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_useColumnReorder.js","names":["React","useColumnReorder","columns","columnOrder","onColumnOrderChange","options","arguments","length","undefined","resizeIsActive","effectiveOrder","useMemo","map","c","key","_React$useState","useState","_React$useState2","_slicedToArray","dragKey","setDragKey","_React$useState3","_React$useState4","overKey","setOverKey","dragKeyRef","useRef","reset","useCallback","current","onDragStart","e","preventDefault","dataTransfer","effectAllowed","setData","_unused","onDragOver","dropEffect","_unused2","onDragLeave","onDrop","targetKey","sourceKey","getData","sourceIdx","indexOf","targetIdx","newOrder","_toConsumableArray","splice","insertIdx","onDragEnd","cellHandlers","draggable","cellSx","isDragSource","isDropTarget","_objectSpread","opacity","boxShadow","commitOrder","swap","dir","idx","target","a","b","moveEarlier","moveLater","moveToEdge","edge","moved","unshift","push","handleKeyDown","isLeft","isRight","isHome","isEnd","stopPropagation","cell","currentTarget","closest","isRtl","window","getComputedStyle","direction","goLater","isReordering"],"sources":["../../../../src/lib/v2/patterns/_useColumnReorder.ts"],"sourcesContent":["import * as React from \"react\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\n/**\r\n * useColumnReorder — Portnet UI v2 (private)\r\n *\r\n * Internal hook for the DataGrid + DataGridVirtualized reorder\r\n * feature. NOT exported from the patterns barrel.\r\n *\r\n * const { cellHandlers, cellSx, isReordering, moveEarlier, moveLater, handleKeyDown } =\r\n * useColumnReorder(\r\n * columns, // for fallback order resolution\r\n * columnOrder, // host-controlled Array<key> | undefined\r\n * onColumnOrderChange, // host-controlled setter\r\n * { resizeIsActive } // cross-hook signal from useColumnResize\r\n * );\r\n *\r\n * Drop semantics (pointer):\r\n * The dragged column is INSERTED AT the target column's position.\r\n * The remaining columns shift to accommodate. This is the standard\r\n * Linear / Asana / GitHub Projects UX — the user thinks \"move\r\n * column X to where Y is\", not \"swap X and Y\".\r\n *\r\n * Keyboard (DG-R1 / WCAG 2.1.1):\r\n * moveEarlier(key) / moveLater(key) swap the column with its neighbour\r\n * toward the start / end of the order (edge-safe, no-op at the ends).\r\n * handleKeyDown(key) is meant for a focusable reorder control in the\r\n * header: ArrowLeft/ArrowRight move the column (RTL-aware, so the motion\r\n * matches the physical arrow), Home/End send it to the first/last slot.\r\n * Every move commits immediately via onColumnOrderChange (no grab/drop\r\n * mode). Direction-neutral names (earlier/later = toward index 0 / end)\r\n * keep the API unambiguous under RTL; the physical-arrow mapping lives in\r\n * handleKeyDown.\r\n *\r\n * Visual feedback during drag:\r\n * - Dragged column header: opacity 0.5\r\n * - Drop target column header: 2px inset accent outline\r\n * These are returned via cellSx; the host applies them as sx\r\n * fragments on each `<th>`.\r\n *\r\n * onDragOver MUST e.preventDefault() to allow drop. This is the\r\n * single most-forgotten step of HTML5 native drag — without it,\r\n * onDrop never fires.\r\n */\r\n\r\nexport interface UseColumnReorderOptions {\r\n resizeIsActive?: boolean | undefined;\r\n}\r\n\r\nexport interface ColumnReorderCellHandlers {\r\n draggable: boolean;\r\n onDragStart: (e: React.DragEvent) => void;\r\n onDragOver: (e: React.DragEvent) => void;\r\n onDragLeave: () => void;\r\n onDrop: (e: React.DragEvent) => void;\r\n onDragEnd: () => void;\r\n}\r\n\r\nexport interface UseColumnReorderResult {\r\n cellHandlers: (key: string) => ColumnReorderCellHandlers;\r\n cellSx: (key: string) => SxProps<Theme> | undefined;\r\n isReordering: boolean;\r\n /** Move the column one slot toward the start of the order (edge-safe). */\r\n moveEarlier: (key: string) => void;\r\n /** Move the column one slot toward the end of the order (edge-safe). */\r\n moveLater: (key: string) => void;\r\n /** onKeyDown for a focusable reorder control: Arrow (RTL-aware) / Home / End. */\r\n handleKeyDown: (key: string) => (e: React.KeyboardEvent) => void;\r\n}\r\n\r\nexport default function useColumnReorder(\r\n columns: ReadonlyArray<{ key: string }>,\r\n columnOrder: string[] | undefined,\r\n onColumnOrderChange: ((order: string[]) => void) | undefined,\r\n options: UseColumnReorderOptions = {}\r\n): UseColumnReorderResult {\r\n const { resizeIsActive } = options;\r\n\r\n // Effective order = host order, or fallback to the natural columns\r\n // sequence. Memoised on the input shapes; no allocation when both\r\n // refs are stable.\r\n const effectiveOrder = React.useMemo(\r\n () => columnOrder || columns.map((c) => c.key),\r\n [columnOrder, columns]\r\n );\r\n\r\n const [dragKey, setDragKey] = React.useState<string | null>(null);\r\n const [overKey, setOverKey] = React.useState<string | null>(null);\r\n\r\n // Refs mirror state for use inside fresh-closure handlers\r\n // (the onDragEnd inside cellHandlers needs the latest dragKey\r\n // even if React hasn't yet re-rendered).\r\n const dragKeyRef = React.useRef<string | null>(null);\r\n\r\n const reset = React.useCallback(() => {\r\n dragKeyRef.current = null;\r\n setDragKey(null);\r\n setOverKey(null);\r\n }, []);\r\n\r\n const onDragStart = React.useCallback(\r\n (key: string) => (e: React.DragEvent) => {\r\n // Cross-hook: if resize is active, abort the drag. Resize fires\r\n // first via mousedown; this handler runs later via dragstart.\r\n if (resizeIsActive) {\r\n e.preventDefault();\r\n return;\r\n }\r\n dragKeyRef.current = key;\r\n setDragKey(key);\r\n // Mark the data transfer with the source key. Some browsers\r\n // require a non-empty payload to allow drop (Firefox).\r\n try {\r\n e.dataTransfer.effectAllowed = \"move\";\r\n e.dataTransfer.setData(\"text/plain\", key);\r\n } catch {\r\n // Older Safari throws on certain MIME types; ignored.\r\n }\r\n },\r\n [resizeIsActive]\r\n );\r\n\r\n const onDragOver = React.useCallback(\r\n (key: string) => (e: React.DragEvent) => {\r\n // CRITICAL — without preventDefault, the browser refuses the\r\n // drop and onDrop never fires.\r\n e.preventDefault();\r\n try {\r\n e.dataTransfer.dropEffect = \"move\";\r\n } catch {\r\n // Some browsers throw outside a trusted dragstart→drop chain.\r\n }\r\n if (overKey !== key) setOverKey(key);\r\n },\r\n [overKey]\r\n );\r\n\r\n const onDragLeave = React.useCallback(\r\n (key: string) => () => {\r\n // Only clear when leaving the same key we'd entered. Without\r\n // this guard, fast moves between cells flicker the highlight.\r\n if (overKey === key) setOverKey(null);\r\n },\r\n [overKey]\r\n );\r\n\r\n const onDrop = React.useCallback(\r\n (targetKey: string) => (e: React.DragEvent) => {\r\n e.preventDefault();\r\n const sourceKey =\r\n (e.dataTransfer && e.dataTransfer.getData(\"text/plain\")) ||\r\n dragKeyRef.current;\r\n\r\n if (!sourceKey || sourceKey === targetKey) {\r\n reset();\r\n return;\r\n }\r\n\r\n const sourceIdx = effectiveOrder.indexOf(sourceKey);\r\n const targetIdx = effectiveOrder.indexOf(targetKey);\r\n if (sourceIdx < 0 || targetIdx < 0) {\r\n reset();\r\n return;\r\n }\r\n\r\n const newOrder = [...effectiveOrder];\r\n newOrder.splice(sourceIdx, 1);\r\n // After splice the target index may shift by 1 if source was\r\n // before target. Recompute against the post-splice array.\r\n const insertIdx = newOrder.indexOf(targetKey);\r\n newOrder.splice(insertIdx, 0, sourceKey);\r\n\r\n if (onColumnOrderChange) onColumnOrderChange(newOrder);\r\n reset();\r\n },\r\n [effectiveOrder, onColumnOrderChange, reset]\r\n );\r\n\r\n const onDragEnd = React.useCallback(() => {\r\n // Fires whether the drop succeeded or the user cancelled (Esc /\r\n // drop on a non-target). Belt-and-suspenders cleanup.\r\n reset();\r\n }, [reset]);\r\n\r\n const cellHandlers = React.useCallback(\r\n (key: string): ColumnReorderCellHandlers => ({\r\n draggable: true,\r\n onDragStart: onDragStart(key),\r\n onDragOver: onDragOver(key),\r\n onDragLeave: onDragLeave(key),\r\n onDrop: onDrop(key),\r\n onDragEnd,\r\n }),\r\n [onDragStart, onDragOver, onDragLeave, onDrop, onDragEnd]\r\n );\r\n\r\n const cellSx = React.useCallback(\r\n (key: string): SxProps<Theme> | undefined => {\r\n const isDragSource = dragKey === key;\r\n const isDropTarget = overKey === key && dragKey !== key;\r\n if (!isDragSource && !isDropTarget) return undefined;\r\n return {\r\n ...(isDragSource && { opacity: 0.5 }),\r\n ...(isDropTarget && {\r\n // Inset accent outline = \"drop here\" visual. boxShadow not\r\n // outline so it doesn't extend beyond the cell border.\r\n boxShadow: \"inset 0 0 0 2px var(--accent)\",\r\n }),\r\n };\r\n },\r\n [dragKey, overKey]\r\n );\r\n\r\n // ── Keyboard reorder (DG-R1) ───────────────────────────────────\r\n // Commit a reordered copy of effectiveOrder. All keyboard moves route\r\n // through here; edge/no-op cases are filtered by the callers.\r\n const commitOrder = React.useCallback(\r\n (newOrder: string[]) => {\r\n if (onColumnOrderChange) onColumnOrderChange(newOrder);\r\n },\r\n [onColumnOrderChange]\r\n );\r\n\r\n // Adjacent swap toward the start (dir=-1) / end (dir=+1) of the order.\r\n const swap = React.useCallback(\r\n (key: string, dir: -1 | 1) => {\r\n const idx = effectiveOrder.indexOf(key);\r\n if (idx < 0) return;\r\n const target = idx + dir;\r\n if (target < 0 || target >= effectiveOrder.length) return; // at edge\r\n const newOrder = [...effectiveOrder];\r\n const a = newOrder[idx] as string;\r\n const b = newOrder[target] as string;\r\n newOrder[idx] = b;\r\n newOrder[target] = a;\r\n commitOrder(newOrder);\r\n },\r\n [effectiveOrder, commitOrder]\r\n );\r\n\r\n const moveEarlier = React.useCallback((key: string) => swap(key, -1), [swap]);\r\n const moveLater = React.useCallback((key: string) => swap(key, 1), [swap]);\r\n\r\n // Send the column to the first / last slot (Home / End).\r\n const moveToEdge = React.useCallback(\r\n (key: string, edge: \"start\" | \"end\") => {\r\n const idx = effectiveOrder.indexOf(key);\r\n if (idx < 0) return;\r\n if (edge === \"start\" && idx === 0) return;\r\n if (edge === \"end\" && idx === effectiveOrder.length - 1) return;\r\n const newOrder = [...effectiveOrder];\r\n const moved = newOrder.splice(idx, 1)[0] as string;\r\n if (edge === \"start\") newOrder.unshift(moved);\r\n else newOrder.push(moved);\r\n commitOrder(newOrder);\r\n },\r\n [effectiveOrder, commitOrder]\r\n );\r\n\r\n const handleKeyDown = React.useCallback(\r\n (key: string) => (e: React.KeyboardEvent) => {\r\n if (resizeIsActive) return;\r\n const isLeft = e.key === \"ArrowLeft\";\r\n const isRight = e.key === \"ArrowRight\";\r\n const isHome = e.key === \"Home\";\r\n const isEnd = e.key === \"End\";\r\n if (!isLeft && !isRight && !isHome && !isEnd) return;\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (isHome) {\r\n moveToEdge(key, \"start\");\r\n return;\r\n }\r\n if (isEnd) {\r\n moveToEdge(key, \"end\");\r\n return;\r\n }\r\n\r\n // RTL-aware physical-arrow mapping: in RTL the visual order is\r\n // reversed, so ArrowLeft advances toward the end of the order.\r\n const cell = (e.currentTarget as HTMLElement).closest(\"th\");\r\n const isRtl =\r\n !!cell &&\r\n typeof window !== \"undefined\" &&\r\n typeof window.getComputedStyle === \"function\" &&\r\n window.getComputedStyle(cell).direction === \"rtl\";\r\n\r\n const goLater = isRtl ? isLeft : isRight;\r\n if (goLater) moveLater(key);\r\n else moveEarlier(key);\r\n },\r\n [resizeIsActive, moveToEdge, moveEarlier, moveLater]\r\n );\r\n\r\n return {\r\n cellHandlers,\r\n cellSx,\r\n isReordering: dragKey != null,\r\n moveEarlier,\r\n moveLater,\r\n handleKeyDown,\r\n };\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"_useColumnReorder.js","names":["React","useColumnReorder","columns","columnOrder","onColumnOrderChange","options","resizeIsActive","effectiveOrder","useMemo","map","c","key","dragKey","setDragKey","useState","overKey","setOverKey","dragKeyRef","useRef","reset","useCallback","current","onDragStart","e","preventDefault","dataTransfer","effectAllowed","setData","onDragOver","dropEffect","onDragLeave","onDrop","targetKey","sourceKey","getData","sourceIdx","indexOf","targetIdx","newOrder","splice","insertIdx","onDragEnd","cellHandlers","draggable","cellSx","isDragSource","isDropTarget","undefined","opacity","boxShadow","commitOrder","swap","dir","idx","target","length","a","b","moveEarlier","moveLater","moveToEdge","edge","moved","unshift","push","handleKeyDown","isLeft","isRight","isHome","isEnd","stopPropagation","cell","currentTarget","closest","isRtl","window","getComputedStyle","direction","goLater","isReordering"],"sources":["../../../../src/lib/v2/patterns/_useColumnReorder.ts"],"sourcesContent":["import * as React from \"react\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\n/**\r\n * useColumnReorder — Portnet UI v2 (private)\r\n *\r\n * Internal hook for the DataGrid + DataGridVirtualized reorder\r\n * feature. NOT exported from the patterns barrel.\r\n *\r\n * const { cellHandlers, cellSx, isReordering, moveEarlier, moveLater, handleKeyDown } =\r\n * useColumnReorder(\r\n * columns, // for fallback order resolution\r\n * columnOrder, // host-controlled Array<key> | undefined\r\n * onColumnOrderChange, // host-controlled setter\r\n * { resizeIsActive } // cross-hook signal from useColumnResize\r\n * );\r\n *\r\n * Drop semantics (pointer):\r\n * The dragged column is INSERTED AT the target column's position.\r\n * The remaining columns shift to accommodate. This is the standard\r\n * Linear / Asana / GitHub Projects UX — the user thinks \"move\r\n * column X to where Y is\", not \"swap X and Y\".\r\n *\r\n * Keyboard (DG-R1 / WCAG 2.1.1):\r\n * moveEarlier(key) / moveLater(key) swap the column with its neighbour\r\n * toward the start / end of the order (edge-safe, no-op at the ends).\r\n * handleKeyDown(key) is meant for a focusable reorder control in the\r\n * header: ArrowLeft/ArrowRight move the column (RTL-aware, so the motion\r\n * matches the physical arrow), Home/End send it to the first/last slot.\r\n * Every move commits immediately via onColumnOrderChange (no grab/drop\r\n * mode). Direction-neutral names (earlier/later = toward index 0 / end)\r\n * keep the API unambiguous under RTL; the physical-arrow mapping lives in\r\n * handleKeyDown.\r\n *\r\n * Visual feedback during drag:\r\n * - Dragged column header: opacity 0.5\r\n * - Drop target column header: 2px inset accent outline\r\n * These are returned via cellSx; the host applies them as sx\r\n * fragments on each `<th>`.\r\n *\r\n * onDragOver MUST e.preventDefault() to allow drop. This is the\r\n * single most-forgotten step of HTML5 native drag — without it,\r\n * onDrop never fires.\r\n */\r\n\r\nexport interface UseColumnReorderOptions {\r\n resizeIsActive?: boolean | undefined;\r\n}\r\n\r\nexport interface ColumnReorderCellHandlers {\r\n draggable: boolean;\r\n onDragStart: (e: React.DragEvent) => void;\r\n onDragOver: (e: React.DragEvent) => void;\r\n onDragLeave: () => void;\r\n onDrop: (e: React.DragEvent) => void;\r\n onDragEnd: () => void;\r\n}\r\n\r\nexport interface UseColumnReorderResult {\r\n cellHandlers: (key: string) => ColumnReorderCellHandlers;\r\n cellSx: (key: string) => SxProps<Theme> | undefined;\r\n isReordering: boolean;\r\n /** Move the column one slot toward the start of the order (edge-safe). */\r\n moveEarlier: (key: string) => void;\r\n /** Move the column one slot toward the end of the order (edge-safe). */\r\n moveLater: (key: string) => void;\r\n /** onKeyDown for a focusable reorder control: Arrow (RTL-aware) / Home / End. */\r\n handleKeyDown: (key: string) => (e: React.KeyboardEvent) => void;\r\n}\r\n\r\nexport default function useColumnReorder(\r\n columns: ReadonlyArray<{ key: string }>,\r\n columnOrder: string[] | undefined,\r\n onColumnOrderChange: ((order: string[]) => void) | undefined,\r\n options: UseColumnReorderOptions = {}\r\n): UseColumnReorderResult {\r\n const { resizeIsActive } = options;\r\n\r\n // Effective order = host order, or fallback to the natural columns\r\n // sequence. Memoised on the input shapes; no allocation when both\r\n // refs are stable.\r\n const effectiveOrder = React.useMemo(\r\n () => columnOrder || columns.map((c) => c.key),\r\n [columnOrder, columns]\r\n );\r\n\r\n const [dragKey, setDragKey] = React.useState<string | null>(null);\r\n const [overKey, setOverKey] = React.useState<string | null>(null);\r\n\r\n // Refs mirror state for use inside fresh-closure handlers\r\n // (the onDragEnd inside cellHandlers needs the latest dragKey\r\n // even if React hasn't yet re-rendered).\r\n const dragKeyRef = React.useRef<string | null>(null);\r\n\r\n const reset = React.useCallback(() => {\r\n dragKeyRef.current = null;\r\n setDragKey(null);\r\n setOverKey(null);\r\n }, []);\r\n\r\n const onDragStart = React.useCallback(\r\n (key: string) => (e: React.DragEvent) => {\r\n // Cross-hook: if resize is active, abort the drag. Resize fires\r\n // first via mousedown; this handler runs later via dragstart.\r\n if (resizeIsActive) {\r\n e.preventDefault();\r\n return;\r\n }\r\n dragKeyRef.current = key;\r\n setDragKey(key);\r\n // Mark the data transfer with the source key. Some browsers\r\n // require a non-empty payload to allow drop (Firefox).\r\n try {\r\n e.dataTransfer.effectAllowed = \"move\";\r\n e.dataTransfer.setData(\"text/plain\", key);\r\n } catch {\r\n // Older Safari throws on certain MIME types; ignored.\r\n }\r\n },\r\n [resizeIsActive]\r\n );\r\n\r\n const onDragOver = React.useCallback(\r\n (key: string) => (e: React.DragEvent) => {\r\n // CRITICAL — without preventDefault, the browser refuses the\r\n // drop and onDrop never fires.\r\n e.preventDefault();\r\n try {\r\n e.dataTransfer.dropEffect = \"move\";\r\n } catch {\r\n // Some browsers throw outside a trusted dragstart→drop chain.\r\n }\r\n if (overKey !== key) setOverKey(key);\r\n },\r\n [overKey]\r\n );\r\n\r\n const onDragLeave = React.useCallback(\r\n (key: string) => () => {\r\n // Only clear when leaving the same key we'd entered. Without\r\n // this guard, fast moves between cells flicker the highlight.\r\n if (overKey === key) setOverKey(null);\r\n },\r\n [overKey]\r\n );\r\n\r\n const onDrop = React.useCallback(\r\n (targetKey: string) => (e: React.DragEvent) => {\r\n e.preventDefault();\r\n const sourceKey =\r\n (e.dataTransfer && e.dataTransfer.getData(\"text/plain\")) ||\r\n dragKeyRef.current;\r\n\r\n if (!sourceKey || sourceKey === targetKey) {\r\n reset();\r\n return;\r\n }\r\n\r\n const sourceIdx = effectiveOrder.indexOf(sourceKey);\r\n const targetIdx = effectiveOrder.indexOf(targetKey);\r\n if (sourceIdx < 0 || targetIdx < 0) {\r\n reset();\r\n return;\r\n }\r\n\r\n const newOrder = [...effectiveOrder];\r\n newOrder.splice(sourceIdx, 1);\r\n // After splice the target index may shift by 1 if source was\r\n // before target. Recompute against the post-splice array.\r\n const insertIdx = newOrder.indexOf(targetKey);\r\n newOrder.splice(insertIdx, 0, sourceKey);\r\n\r\n if (onColumnOrderChange) onColumnOrderChange(newOrder);\r\n reset();\r\n },\r\n [effectiveOrder, onColumnOrderChange, reset]\r\n );\r\n\r\n const onDragEnd = React.useCallback(() => {\r\n // Fires whether the drop succeeded or the user cancelled (Esc /\r\n // drop on a non-target). Belt-and-suspenders cleanup.\r\n reset();\r\n }, [reset]);\r\n\r\n const cellHandlers = React.useCallback(\r\n (key: string): ColumnReorderCellHandlers => ({\r\n draggable: true,\r\n onDragStart: onDragStart(key),\r\n onDragOver: onDragOver(key),\r\n onDragLeave: onDragLeave(key),\r\n onDrop: onDrop(key),\r\n onDragEnd,\r\n }),\r\n [onDragStart, onDragOver, onDragLeave, onDrop, onDragEnd]\r\n );\r\n\r\n const cellSx = React.useCallback(\r\n (key: string): SxProps<Theme> | undefined => {\r\n const isDragSource = dragKey === key;\r\n const isDropTarget = overKey === key && dragKey !== key;\r\n if (!isDragSource && !isDropTarget) return undefined;\r\n return {\r\n ...(isDragSource && { opacity: 0.5 }),\r\n ...(isDropTarget && {\r\n // Inset accent outline = \"drop here\" visual. boxShadow not\r\n // outline so it doesn't extend beyond the cell border.\r\n boxShadow: \"inset 0 0 0 2px var(--accent)\",\r\n }),\r\n };\r\n },\r\n [dragKey, overKey]\r\n );\r\n\r\n // ── Keyboard reorder (DG-R1) ───────────────────────────────────\r\n // Commit a reordered copy of effectiveOrder. All keyboard moves route\r\n // through here; edge/no-op cases are filtered by the callers.\r\n const commitOrder = React.useCallback(\r\n (newOrder: string[]) => {\r\n if (onColumnOrderChange) onColumnOrderChange(newOrder);\r\n },\r\n [onColumnOrderChange]\r\n );\r\n\r\n // Adjacent swap toward the start (dir=-1) / end (dir=+1) of the order.\r\n const swap = React.useCallback(\r\n (key: string, dir: -1 | 1) => {\r\n const idx = effectiveOrder.indexOf(key);\r\n if (idx < 0) return;\r\n const target = idx + dir;\r\n if (target < 0 || target >= effectiveOrder.length) return; // at edge\r\n const newOrder = [...effectiveOrder];\r\n const a = newOrder[idx] as string;\r\n const b = newOrder[target] as string;\r\n newOrder[idx] = b;\r\n newOrder[target] = a;\r\n commitOrder(newOrder);\r\n },\r\n [effectiveOrder, commitOrder]\r\n );\r\n\r\n const moveEarlier = React.useCallback((key: string) => swap(key, -1), [swap]);\r\n const moveLater = React.useCallback((key: string) => swap(key, 1), [swap]);\r\n\r\n // Send the column to the first / last slot (Home / End).\r\n const moveToEdge = React.useCallback(\r\n (key: string, edge: \"start\" | \"end\") => {\r\n const idx = effectiveOrder.indexOf(key);\r\n if (idx < 0) return;\r\n if (edge === \"start\" && idx === 0) return;\r\n if (edge === \"end\" && idx === effectiveOrder.length - 1) return;\r\n const newOrder = [...effectiveOrder];\r\n const moved = newOrder.splice(idx, 1)[0] as string;\r\n if (edge === \"start\") newOrder.unshift(moved);\r\n else newOrder.push(moved);\r\n commitOrder(newOrder);\r\n },\r\n [effectiveOrder, commitOrder]\r\n );\r\n\r\n const handleKeyDown = React.useCallback(\r\n (key: string) => (e: React.KeyboardEvent) => {\r\n if (resizeIsActive) return;\r\n const isLeft = e.key === \"ArrowLeft\";\r\n const isRight = e.key === \"ArrowRight\";\r\n const isHome = e.key === \"Home\";\r\n const isEnd = e.key === \"End\";\r\n if (!isLeft && !isRight && !isHome && !isEnd) return;\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (isHome) {\r\n moveToEdge(key, \"start\");\r\n return;\r\n }\r\n if (isEnd) {\r\n moveToEdge(key, \"end\");\r\n return;\r\n }\r\n\r\n // RTL-aware physical-arrow mapping: in RTL the visual order is\r\n // reversed, so ArrowLeft advances toward the end of the order.\r\n const cell = (e.currentTarget as HTMLElement).closest(\"th\");\r\n const isRtl =\r\n !!cell &&\r\n typeof window !== \"undefined\" &&\r\n typeof window.getComputedStyle === \"function\" &&\r\n window.getComputedStyle(cell).direction === \"rtl\";\r\n\r\n const goLater = isRtl ? isLeft : isRight;\r\n if (goLater) moveLater(key);\r\n else moveEarlier(key);\r\n },\r\n [resizeIsActive, moveToEdge, moveEarlier, moveLater]\r\n );\r\n\r\n return {\r\n cellHandlers,\r\n cellSx,\r\n isReordering: dragKey != null,\r\n moveEarlier,\r\n moveLater,\r\n handleKeyDown,\r\n };\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|