@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
|
@@ -1,7 +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 _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); }
|
|
3
|
-
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; }
|
|
4
|
-
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); }
|
|
5
1
|
/**
|
|
6
2
|
* favorites — Portnet UI v2 · personalization capability
|
|
7
3
|
*
|
|
@@ -31,10 +27,10 @@ import { usePersonalizationStore, useStoreSelector } from "../personalizationCon
|
|
|
31
27
|
|
|
32
28
|
/** The favorites capability payload: favorites arrays keyed by resourceKey. */
|
|
33
29
|
|
|
34
|
-
export
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
export const FAVORITES_CAPABILITY_ID = "favorites";
|
|
31
|
+
const SCHEMA_VERSION = 1;
|
|
32
|
+
const EMPTY_LIST = Object.freeze([]);
|
|
33
|
+
const EMPTY_MAP = Object.freeze({});
|
|
38
34
|
|
|
39
35
|
/* Register at import time — the foundation reads this at hydration. */
|
|
40
36
|
registerCapability({
|
|
@@ -44,50 +40,41 @@ registerCapability({
|
|
|
44
40
|
// { [resourceKey]: FavoriteRef[] }
|
|
45
41
|
migrate: function migrateFavorites(_fromVersion, payload) {
|
|
46
42
|
// v1 is the initial schema. Defensive normalisation only.
|
|
47
|
-
return payload &&
|
|
43
|
+
return payload && typeof payload === "object" ? payload : {};
|
|
48
44
|
}
|
|
49
45
|
});
|
|
50
46
|
|
|
51
47
|
/* ── pure, resourceKey-scoped state helpers (structural sharing) ────── */
|
|
52
48
|
|
|
53
49
|
function listFor(map, resourceKey) {
|
|
54
|
-
|
|
50
|
+
const list = map ? map[resourceKey] : undefined;
|
|
55
51
|
return Array.isArray(list) ? list : EMPTY_LIST;
|
|
56
52
|
}
|
|
57
53
|
function hasRef(map, resourceKey, id) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
try {
|
|
62
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
63
|
-
var ref = _step.value;
|
|
64
|
-
if (ref.id === id) return true;
|
|
65
|
-
}
|
|
66
|
-
} catch (err) {
|
|
67
|
-
_iterator.e(err);
|
|
68
|
-
} finally {
|
|
69
|
-
_iterator.f();
|
|
54
|
+
const list = listFor(map, resourceKey);
|
|
55
|
+
for (const ref of list) {
|
|
56
|
+
if (ref.id === id) return true;
|
|
70
57
|
}
|
|
71
58
|
return false;
|
|
72
59
|
}
|
|
73
60
|
function addRef(map, resourceKey, id) {
|
|
74
|
-
|
|
61
|
+
const base = map || EMPTY_MAP;
|
|
75
62
|
if (hasRef(base, resourceKey, id)) return base; // no-op → store short-circuits
|
|
76
|
-
|
|
63
|
+
const nextList = listFor(base, resourceKey).concat([{
|
|
77
64
|
id: id,
|
|
78
65
|
addedAt: new Date().toISOString()
|
|
79
66
|
}]);
|
|
80
|
-
|
|
67
|
+
const next = Object.assign({}, base);
|
|
81
68
|
next[resourceKey] = nextList;
|
|
82
69
|
return next;
|
|
83
70
|
}
|
|
84
71
|
function removeRef(map, resourceKey, id) {
|
|
85
|
-
|
|
72
|
+
const base = map || EMPTY_MAP;
|
|
86
73
|
if (!hasRef(base, resourceKey, id)) return base; // no-op
|
|
87
|
-
|
|
74
|
+
const nextList = listFor(base, resourceKey).filter(function keep(r) {
|
|
88
75
|
return r.id !== id;
|
|
89
76
|
});
|
|
90
|
-
|
|
77
|
+
const next = Object.assign({}, base);
|
|
91
78
|
if (nextList.length === 0) delete next[resourceKey]; // keep the map tidy
|
|
92
79
|
else next[resourceKey] = nextList;
|
|
93
80
|
return next;
|
|
@@ -96,9 +83,9 @@ function toggleRef(map, resourceKey, id) {
|
|
|
96
83
|
return hasRef(map, resourceKey, id) ? removeRef(map, resourceKey, id) : addRef(map, resourceKey, id);
|
|
97
84
|
}
|
|
98
85
|
function clearRefs(map, resourceKey) {
|
|
99
|
-
|
|
86
|
+
const base = map || EMPTY_MAP;
|
|
100
87
|
if (!base[resourceKey]) return base;
|
|
101
|
-
|
|
88
|
+
const next = Object.assign({}, base);
|
|
102
89
|
delete next[resourceKey];
|
|
103
90
|
return next;
|
|
104
91
|
}
|
|
@@ -114,52 +101,41 @@ function useEnsureFavorites(store) {
|
|
|
114
101
|
* useFavorites(resourceKey) — list, membership and actions for one resource.
|
|
115
102
|
*/
|
|
116
103
|
export function useFavorites(resourceKey) {
|
|
117
|
-
|
|
104
|
+
const store = usePersonalizationStore();
|
|
118
105
|
useEnsureFavorites(store);
|
|
119
|
-
|
|
120
|
-
|
|
106
|
+
const selectList = React.useCallback(function selectList(snapshot) {
|
|
107
|
+
const slice = snapshot[FAVORITES_CAPABILITY_ID];
|
|
121
108
|
return slice ? listFor(slice, resourceKey) : EMPTY_LIST;
|
|
122
109
|
}, [resourceKey]);
|
|
123
|
-
|
|
110
|
+
const items = useStoreSelector(selectList);
|
|
124
111
|
|
|
125
112
|
// Stable while `items` is stable (structural sharing) → O(1) membership.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
_step2;
|
|
130
|
-
try {
|
|
131
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
132
|
-
var ref = _step2.value;
|
|
133
|
-
set.add(ref.id);
|
|
134
|
-
}
|
|
135
|
-
} catch (err) {
|
|
136
|
-
_iterator2.e(err);
|
|
137
|
-
} finally {
|
|
138
|
-
_iterator2.f();
|
|
139
|
-
}
|
|
113
|
+
const ids = React.useMemo(function buildIdSet() {
|
|
114
|
+
const set = new Set();
|
|
115
|
+
for (const ref of items) set.add(ref.id);
|
|
140
116
|
return set;
|
|
141
117
|
}, [items]);
|
|
142
|
-
|
|
118
|
+
const add = React.useCallback(function add(id) {
|
|
143
119
|
store.write(FAVORITES_CAPABILITY_ID, function (prev) {
|
|
144
120
|
return addRef(prev, resourceKey, id);
|
|
145
121
|
});
|
|
146
122
|
}, [store, resourceKey]);
|
|
147
|
-
|
|
123
|
+
const remove = React.useCallback(function remove(id) {
|
|
148
124
|
store.write(FAVORITES_CAPABILITY_ID, function (prev) {
|
|
149
125
|
return removeRef(prev, resourceKey, id);
|
|
150
126
|
});
|
|
151
127
|
}, [store, resourceKey]);
|
|
152
|
-
|
|
128
|
+
const toggle = React.useCallback(function toggle(id) {
|
|
153
129
|
store.write(FAVORITES_CAPABILITY_ID, function (prev) {
|
|
154
130
|
return toggleRef(prev, resourceKey, id);
|
|
155
131
|
});
|
|
156
132
|
}, [store, resourceKey]);
|
|
157
|
-
|
|
133
|
+
const clear = React.useCallback(function clear() {
|
|
158
134
|
store.write(FAVORITES_CAPABILITY_ID, function (prev) {
|
|
159
135
|
return clearRefs(prev, resourceKey);
|
|
160
136
|
});
|
|
161
137
|
}, [store, resourceKey]);
|
|
162
|
-
|
|
138
|
+
const isFavorite = React.useCallback(function isFavorite(id) {
|
|
163
139
|
return ids.has(id);
|
|
164
140
|
}, [ids]);
|
|
165
141
|
return React.useMemo(function value() {
|
|
@@ -182,24 +158,24 @@ export function useFavorites(resourceKey) {
|
|
|
182
158
|
* favorite column consumes (Batch 5).
|
|
183
159
|
*/
|
|
184
160
|
export function useIsFavorite(resourceKey, id) {
|
|
185
|
-
|
|
161
|
+
const store = usePersonalizationStore();
|
|
186
162
|
useEnsureFavorites(store);
|
|
187
|
-
|
|
188
|
-
|
|
163
|
+
const selectIsFavorite = React.useCallback(function selectIsFavorite(snapshot) {
|
|
164
|
+
const slice = snapshot[FAVORITES_CAPABILITY_ID];
|
|
189
165
|
return slice ? hasRef(slice, resourceKey, id) : false;
|
|
190
166
|
}, [resourceKey, id]);
|
|
191
|
-
|
|
192
|
-
|
|
167
|
+
const isFavorite = useStoreSelector(selectIsFavorite);
|
|
168
|
+
const toggle = React.useCallback(function toggle() {
|
|
193
169
|
store.write(FAVORITES_CAPABILITY_ID, function (prev) {
|
|
194
170
|
return toggleRef(prev, resourceKey, id);
|
|
195
171
|
});
|
|
196
172
|
}, [store, resourceKey, id]);
|
|
197
|
-
|
|
173
|
+
const add = React.useCallback(function add() {
|
|
198
174
|
store.write(FAVORITES_CAPABILITY_ID, function (prev) {
|
|
199
175
|
return addRef(prev, resourceKey, id);
|
|
200
176
|
});
|
|
201
177
|
}, [store, resourceKey, id]);
|
|
202
|
-
|
|
178
|
+
const remove = React.useCallback(function remove() {
|
|
203
179
|
store.write(FAVORITES_CAPABILITY_ID, function (prev) {
|
|
204
180
|
return removeRef(prev, resourceKey, id);
|
|
205
181
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"favorites.js","names":["React","registerCapability","usePersonalizationStore","useStoreSelector","FAVORITES_CAPABILITY_ID","SCHEMA_VERSION","EMPTY_LIST","Object","freeze","EMPTY_MAP","id","schemaVersion","defaultState","migrate","migrateFavorites","_fromVersion","payload","_typeof","listFor","map","resourceKey","list","undefined","Array","isArray","hasRef","_iterator","_createForOfIteratorHelper","_step","s","n","done","ref","value","err","e","f","addRef","base","nextList","concat","addedAt","Date","toISOString","next","assign","removeRef","filter","keep","r","length","toggleRef","clearRefs","useEnsureFavorites","store","useEffect","ensure","ensureCapability","useFavorites","selectList","useCallback","snapshot","slice","items","ids","useMemo","buildIdSet","set","Set","_iterator2","_step2","add","write","prev","remove","toggle","clear","isFavorite","has","count","useIsFavorite","selectIsFavorite"],"sources":["../../../../../src/lib/v2/personalization/capabilities/favorites.ts"],"sourcesContent":["/**\r\n * favorites — Portnet UI v2 · personalization capability\r\n *\r\n * The Favorites framework. Self-registers the \"favorites\" capability with\r\n * the schema registry at import time, so the capability-agnostic\r\n * foundation discovers its schemaVersion / defaultState / migrate without\r\n * any hardcoding.\r\n *\r\n * State model (the capability payload):\r\n * { [resourceKey]: FavoriteRef[] } FavoriteRef = { id, addedAt }\r\n *\r\n * `resourceKey` namespaces favorites per list/entity type (e.g.\r\n * \"ti:list\", \"declarations:list\"), so one user's favorites across\r\n * different screens never collide. `id` is the business row id.\r\n *\r\n * Performance: the pure helpers below rebuild only the touched\r\n * resourceKey's array and shallow-copy the map, so the store's structural\r\n * sharing keeps every OTHER resource's list referentially stable —\r\n * toggling a favorite on screen B does not re-render screen A, and a\r\n * boolean per-row selector lets each grid cell re-render only when its own\r\n * membership flips.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { registerCapability } from \"../schema\";\r\nimport {\r\n usePersonalizationStore,\r\n useStoreSelector,\r\n} from \"../personalizationContext\";\r\nimport type {\r\n PersonalizationSnapshot,\r\n PersonalizationStore,\r\n} from \"../createPersonalizationStore\";\r\nimport type { FavoriteRef } from \"../types\";\r\nimport type { RowId } from \"../../types/common\";\r\n\r\n/** The favorites capability payload: favorites arrays keyed by resourceKey. */\r\ntype FavoritesState = Record<string, FavoriteRef[]>;\r\n\r\nexport const FAVORITES_CAPABILITY_ID = \"favorites\";\r\nconst SCHEMA_VERSION = 1;\r\n\r\nconst EMPTY_LIST: readonly FavoriteRef[] = Object.freeze([]);\r\nconst EMPTY_MAP: FavoritesState = Object.freeze({});\r\n\r\n/* Register at import time — the foundation reads this at hydration. */\r\nregisterCapability({\r\n id: FAVORITES_CAPABILITY_ID,\r\n schemaVersion: SCHEMA_VERSION,\r\n defaultState: EMPTY_MAP, // { [resourceKey]: FavoriteRef[] }\r\n migrate: function migrateFavorites(\r\n _fromVersion: number,\r\n payload: unknown\r\n ): unknown {\r\n // v1 is the initial schema. Defensive normalisation only.\r\n return payload && typeof payload === \"object\" ? payload : {};\r\n },\r\n});\r\n\r\n/* ── pure, resourceKey-scoped state helpers (structural sharing) ────── */\r\n\r\nfunction listFor(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string\r\n): readonly FavoriteRef[] {\r\n const list = map ? map[resourceKey] : undefined;\r\n return Array.isArray(list) ? list : EMPTY_LIST;\r\n}\r\n\r\nfunction hasRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): boolean {\r\n const list = listFor(map, resourceKey);\r\n for (const ref of list) {\r\n if (ref.id === id) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction addRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (hasRef(base, resourceKey, id)) return base; // no-op → store short-circuits\r\n const nextList = listFor(base, resourceKey).concat([\r\n { id: id, addedAt: new Date().toISOString() },\r\n ]);\r\n const next: FavoritesState = Object.assign({}, base);\r\n next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction removeRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (!hasRef(base, resourceKey, id)) return base; // no-op\r\n const nextList = listFor(base, resourceKey).filter(function keep(r) {\r\n return r.id !== id;\r\n });\r\n const next: FavoritesState = Object.assign({}, base);\r\n if (nextList.length === 0) delete next[resourceKey]; // keep the map tidy\r\n else next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction toggleRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n return hasRef(map, resourceKey, id)\r\n ? removeRef(map, resourceKey, id)\r\n : addRef(map, resourceKey, id);\r\n}\r\n\r\nfunction clearRefs(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (!base[resourceKey]) return base;\r\n const next: FavoritesState = Object.assign({}, base);\r\n delete next[resourceKey];\r\n return next;\r\n}\r\n\r\n/* ── hooks ──────────────────────────────────────────────────────────── */\r\n\r\nfunction useEnsureFavorites(store: PersonalizationStore): void {\r\n React.useEffect(\r\n function ensure() {\r\n store.ensureCapability(FAVORITES_CAPABILITY_ID);\r\n },\r\n [store]\r\n );\r\n}\r\n\r\nexport interface UseFavoritesResult {\r\n items: readonly FavoriteRef[];\r\n ids: Set<RowId>;\r\n count: number;\r\n isFavorite: (id: RowId) => boolean;\r\n add: (id: RowId) => void;\r\n remove: (id: RowId) => void;\r\n toggle: (id: RowId) => void;\r\n clear: () => void;\r\n}\r\n\r\n/**\r\n * useFavorites(resourceKey) — list, membership and actions for one resource.\r\n */\r\nexport function useFavorites(resourceKey: string): UseFavoritesResult {\r\n const store = usePersonalizationStore();\r\n useEnsureFavorites(store);\r\n\r\n const selectList = React.useCallback(\r\n function selectList(snapshot: PersonalizationSnapshot): readonly FavoriteRef[] {\r\n const slice = snapshot[FAVORITES_CAPABILITY_ID] as\r\n | FavoritesState\r\n | undefined;\r\n return slice ? listFor(slice, resourceKey) : EMPTY_LIST;\r\n },\r\n [resourceKey]\r\n );\r\n const items = useStoreSelector(selectList);\r\n\r\n // Stable while `items` is stable (structural sharing) → O(1) membership.\r\n const ids = React.useMemo(\r\n function buildIdSet(): Set<RowId> {\r\n const set = new Set<RowId>();\r\n for (const ref of items) set.add(ref.id);\r\n return set;\r\n },\r\n [items]\r\n );\r\n\r\n const add = React.useCallback(\r\n function add(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return addRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const remove = React.useCallback(\r\n function remove(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return removeRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const toggle = React.useCallback(\r\n function toggle(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return toggleRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const clear = React.useCallback(\r\n function clear(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return clearRefs(prev, resourceKey);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const isFavorite = React.useCallback(\r\n function isFavorite(id: RowId): boolean {\r\n return ids.has(id);\r\n },\r\n [ids]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseFavoritesResult {\r\n return {\r\n items: items,\r\n ids: ids,\r\n count: items.length,\r\n isFavorite: isFavorite,\r\n add: add,\r\n remove: remove,\r\n toggle: toggle,\r\n clear: clear,\r\n };\r\n },\r\n [items, ids, isFavorite, add, remove, toggle, clear]\r\n );\r\n}\r\n\r\nexport interface UseIsFavoriteResult {\r\n isFavorite: boolean;\r\n toggle: () => void;\r\n add: () => void;\r\n remove: () => void;\r\n}\r\n\r\n/**\r\n * useIsFavorite(resourceKey, id) — focused per-row hook. Returns a boolean\r\n * (Object.is bail-out: a row re-renders only when ITS membership flips)\r\n * plus a bound toggle/add/remove. This is the cell-level hook the DataGrid\r\n * favorite column consumes (Batch 5).\r\n */\r\nexport function useIsFavorite(\r\n resourceKey: string,\r\n id: RowId\r\n): UseIsFavoriteResult {\r\n const store = usePersonalizationStore();\r\n useEnsureFavorites(store);\r\n\r\n const selectIsFavorite = React.useCallback(\r\n function selectIsFavorite(snapshot: PersonalizationSnapshot): boolean {\r\n const slice = snapshot[FAVORITES_CAPABILITY_ID] as\r\n | FavoritesState\r\n | undefined;\r\n return slice ? hasRef(slice, resourceKey, id) : false;\r\n },\r\n [resourceKey, id]\r\n );\r\n const isFavorite = useStoreSelector(selectIsFavorite);\r\n\r\n const toggle = React.useCallback(\r\n function toggle(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return toggleRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n const add = React.useCallback(\r\n function add(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return addRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n const remove = React.useCallback(\r\n function remove(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return removeRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseIsFavoriteResult {\r\n return {\r\n isFavorite: isFavorite,\r\n toggle: toggle,\r\n add: add,\r\n remove: remove,\r\n };\r\n },\r\n [isFavorite, toggle, add, remove]\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"favorites.js","names":["React","registerCapability","usePersonalizationStore","useStoreSelector","FAVORITES_CAPABILITY_ID","SCHEMA_VERSION","EMPTY_LIST","Object","freeze","EMPTY_MAP","id","schemaVersion","defaultState","migrate","migrateFavorites","_fromVersion","payload","listFor","map","resourceKey","list","undefined","Array","isArray","hasRef","ref","addRef","base","nextList","concat","addedAt","Date","toISOString","next","assign","removeRef","filter","keep","r","length","toggleRef","clearRefs","useEnsureFavorites","store","useEffect","ensure","ensureCapability","useFavorites","selectList","useCallback","snapshot","slice","items","ids","useMemo","buildIdSet","set","Set","add","write","prev","remove","toggle","clear","isFavorite","has","value","count","useIsFavorite","selectIsFavorite"],"sources":["../../../../../src/lib/v2/personalization/capabilities/favorites.ts"],"sourcesContent":["/**\r\n * favorites — Portnet UI v2 · personalization capability\r\n *\r\n * The Favorites framework. Self-registers the \"favorites\" capability with\r\n * the schema registry at import time, so the capability-agnostic\r\n * foundation discovers its schemaVersion / defaultState / migrate without\r\n * any hardcoding.\r\n *\r\n * State model (the capability payload):\r\n * { [resourceKey]: FavoriteRef[] } FavoriteRef = { id, addedAt }\r\n *\r\n * `resourceKey` namespaces favorites per list/entity type (e.g.\r\n * \"ti:list\", \"declarations:list\"), so one user's favorites across\r\n * different screens never collide. `id` is the business row id.\r\n *\r\n * Performance: the pure helpers below rebuild only the touched\r\n * resourceKey's array and shallow-copy the map, so the store's structural\r\n * sharing keeps every OTHER resource's list referentially stable —\r\n * toggling a favorite on screen B does not re-render screen A, and a\r\n * boolean per-row selector lets each grid cell re-render only when its own\r\n * membership flips.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { registerCapability } from \"../schema\";\r\nimport {\r\n usePersonalizationStore,\r\n useStoreSelector,\r\n} from \"../personalizationContext\";\r\nimport type {\r\n PersonalizationSnapshot,\r\n PersonalizationStore,\r\n} from \"../createPersonalizationStore\";\r\nimport type { FavoriteRef } from \"../types\";\r\nimport type { RowId } from \"../../types/common\";\r\n\r\n/** The favorites capability payload: favorites arrays keyed by resourceKey. */\r\ntype FavoritesState = Record<string, FavoriteRef[]>;\r\n\r\nexport const FAVORITES_CAPABILITY_ID = \"favorites\";\r\nconst SCHEMA_VERSION = 1;\r\n\r\nconst EMPTY_LIST: readonly FavoriteRef[] = Object.freeze([]);\r\nconst EMPTY_MAP: FavoritesState = Object.freeze({});\r\n\r\n/* Register at import time — the foundation reads this at hydration. */\r\nregisterCapability({\r\n id: FAVORITES_CAPABILITY_ID,\r\n schemaVersion: SCHEMA_VERSION,\r\n defaultState: EMPTY_MAP, // { [resourceKey]: FavoriteRef[] }\r\n migrate: function migrateFavorites(\r\n _fromVersion: number,\r\n payload: unknown\r\n ): unknown {\r\n // v1 is the initial schema. Defensive normalisation only.\r\n return payload && typeof payload === \"object\" ? payload : {};\r\n },\r\n});\r\n\r\n/* ── pure, resourceKey-scoped state helpers (structural sharing) ────── */\r\n\r\nfunction listFor(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string\r\n): readonly FavoriteRef[] {\r\n const list = map ? map[resourceKey] : undefined;\r\n return Array.isArray(list) ? list : EMPTY_LIST;\r\n}\r\n\r\nfunction hasRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): boolean {\r\n const list = listFor(map, resourceKey);\r\n for (const ref of list) {\r\n if (ref.id === id) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction addRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (hasRef(base, resourceKey, id)) return base; // no-op → store short-circuits\r\n const nextList = listFor(base, resourceKey).concat([\r\n { id: id, addedAt: new Date().toISOString() },\r\n ]);\r\n const next: FavoritesState = Object.assign({}, base);\r\n next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction removeRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (!hasRef(base, resourceKey, id)) return base; // no-op\r\n const nextList = listFor(base, resourceKey).filter(function keep(r) {\r\n return r.id !== id;\r\n });\r\n const next: FavoritesState = Object.assign({}, base);\r\n if (nextList.length === 0) delete next[resourceKey]; // keep the map tidy\r\n else next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction toggleRef(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string,\r\n id: RowId\r\n): FavoritesState {\r\n return hasRef(map, resourceKey, id)\r\n ? removeRef(map, resourceKey, id)\r\n : addRef(map, resourceKey, id);\r\n}\r\n\r\nfunction clearRefs(\r\n map: FavoritesState | null | undefined,\r\n resourceKey: string\r\n): FavoritesState {\r\n const base = map || EMPTY_MAP;\r\n if (!base[resourceKey]) return base;\r\n const next: FavoritesState = Object.assign({}, base);\r\n delete next[resourceKey];\r\n return next;\r\n}\r\n\r\n/* ── hooks ──────────────────────────────────────────────────────────── */\r\n\r\nfunction useEnsureFavorites(store: PersonalizationStore): void {\r\n React.useEffect(\r\n function ensure() {\r\n store.ensureCapability(FAVORITES_CAPABILITY_ID);\r\n },\r\n [store]\r\n );\r\n}\r\n\r\nexport interface UseFavoritesResult {\r\n items: readonly FavoriteRef[];\r\n ids: Set<RowId>;\r\n count: number;\r\n isFavorite: (id: RowId) => boolean;\r\n add: (id: RowId) => void;\r\n remove: (id: RowId) => void;\r\n toggle: (id: RowId) => void;\r\n clear: () => void;\r\n}\r\n\r\n/**\r\n * useFavorites(resourceKey) — list, membership and actions for one resource.\r\n */\r\nexport function useFavorites(resourceKey: string): UseFavoritesResult {\r\n const store = usePersonalizationStore();\r\n useEnsureFavorites(store);\r\n\r\n const selectList = React.useCallback(\r\n function selectList(snapshot: PersonalizationSnapshot): readonly FavoriteRef[] {\r\n const slice = snapshot[FAVORITES_CAPABILITY_ID] as\r\n | FavoritesState\r\n | undefined;\r\n return slice ? listFor(slice, resourceKey) : EMPTY_LIST;\r\n },\r\n [resourceKey]\r\n );\r\n const items = useStoreSelector(selectList);\r\n\r\n // Stable while `items` is stable (structural sharing) → O(1) membership.\r\n const ids = React.useMemo(\r\n function buildIdSet(): Set<RowId> {\r\n const set = new Set<RowId>();\r\n for (const ref of items) set.add(ref.id);\r\n return set;\r\n },\r\n [items]\r\n );\r\n\r\n const add = React.useCallback(\r\n function add(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return addRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const remove = React.useCallback(\r\n function remove(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return removeRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const toggle = React.useCallback(\r\n function toggle(id: RowId): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return toggleRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const clear = React.useCallback(\r\n function clear(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return clearRefs(prev, resourceKey);\r\n });\r\n },\r\n [store, resourceKey]\r\n );\r\n const isFavorite = React.useCallback(\r\n function isFavorite(id: RowId): boolean {\r\n return ids.has(id);\r\n },\r\n [ids]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseFavoritesResult {\r\n return {\r\n items: items,\r\n ids: ids,\r\n count: items.length,\r\n isFavorite: isFavorite,\r\n add: add,\r\n remove: remove,\r\n toggle: toggle,\r\n clear: clear,\r\n };\r\n },\r\n [items, ids, isFavorite, add, remove, toggle, clear]\r\n );\r\n}\r\n\r\nexport interface UseIsFavoriteResult {\r\n isFavorite: boolean;\r\n toggle: () => void;\r\n add: () => void;\r\n remove: () => void;\r\n}\r\n\r\n/**\r\n * useIsFavorite(resourceKey, id) — focused per-row hook. Returns a boolean\r\n * (Object.is bail-out: a row re-renders only when ITS membership flips)\r\n * plus a bound toggle/add/remove. This is the cell-level hook the DataGrid\r\n * favorite column consumes (Batch 5).\r\n */\r\nexport function useIsFavorite(\r\n resourceKey: string,\r\n id: RowId\r\n): UseIsFavoriteResult {\r\n const store = usePersonalizationStore();\r\n useEnsureFavorites(store);\r\n\r\n const selectIsFavorite = React.useCallback(\r\n function selectIsFavorite(snapshot: PersonalizationSnapshot): boolean {\r\n const slice = snapshot[FAVORITES_CAPABILITY_ID] as\r\n | FavoritesState\r\n | undefined;\r\n return slice ? hasRef(slice, resourceKey, id) : false;\r\n },\r\n [resourceKey, id]\r\n );\r\n const isFavorite = useStoreSelector(selectIsFavorite);\r\n\r\n const toggle = React.useCallback(\r\n function toggle(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return toggleRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n const add = React.useCallback(\r\n function add(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return addRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n const remove = React.useCallback(\r\n function remove(): void {\r\n store.write<FavoritesState>(FAVORITES_CAPABILITY_ID, function (prev) {\r\n return removeRef(prev, resourceKey, id);\r\n });\r\n },\r\n [store, resourceKey, id]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseIsFavoriteResult {\r\n return {\r\n isFavorite: isFavorite,\r\n toggle: toggle,\r\n add: add,\r\n remove: remove,\r\n };\r\n },\r\n [isFavorite, toggle, add, remove]\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +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 _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); }
|
|
3
|
-
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; }
|
|
4
1
|
/**
|
|
5
2
|
* favoritesView — Portnet UI v2 · personalization
|
|
6
3
|
*
|
|
@@ -16,16 +13,16 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
|
|
|
16
13
|
|
|
17
14
|
import * as React from "react";
|
|
18
15
|
import { useFavorites } from "./favorites";
|
|
19
|
-
export
|
|
16
|
+
export const FAVORITES_FILTER = Object.freeze({
|
|
20
17
|
ALL: "all",
|
|
21
18
|
ONLY: "only"
|
|
22
19
|
});
|
|
23
|
-
export
|
|
20
|
+
export const FAVORITES_SORT = Object.freeze({
|
|
24
21
|
NONE: "none",
|
|
25
22
|
FIRST: "first",
|
|
26
23
|
LAST: "last"
|
|
27
24
|
});
|
|
28
|
-
|
|
25
|
+
const EMPTY_ROWS = Object.freeze([]);
|
|
29
26
|
function toIdSet(ids) {
|
|
30
27
|
return ids instanceof Set ? ids : new Set(ids || []);
|
|
31
28
|
}
|
|
@@ -42,9 +39,9 @@ function resolveGetRowId(getRowId) {
|
|
|
42
39
|
export function filterRowsByFavorites(rows, favoriteIds, getRowId, mode) {
|
|
43
40
|
if (mode !== FAVORITES_FILTER.ONLY || !Array.isArray(rows)) return rows;
|
|
44
41
|
// Array.isArray widened `rows` to any[]; re-establish the element type.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
const source = rows;
|
|
43
|
+
const ids = toIdSet(favoriteIds);
|
|
44
|
+
const getId = resolveGetRowId(getRowId);
|
|
48
45
|
return source.filter(function keepFavorite(r) {
|
|
49
46
|
return ids.has(getId(r));
|
|
50
47
|
});
|
|
@@ -60,22 +57,13 @@ export function sortRowsByFavorites(rows, favoriteIds, getRowId, placement) {
|
|
|
60
57
|
return rows;
|
|
61
58
|
}
|
|
62
59
|
// Array.isArray widened `rows` to any[]; re-establish the element type.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
try {
|
|
71
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
72
|
-
var row = _step.value;
|
|
73
|
-
if (ids.has(getId(row))) fav.push(row);else rest.push(row);
|
|
74
|
-
}
|
|
75
|
-
} catch (err) {
|
|
76
|
-
_iterator.e(err);
|
|
77
|
-
} finally {
|
|
78
|
-
_iterator.f();
|
|
60
|
+
const source = rows;
|
|
61
|
+
const ids = toIdSet(favoriteIds);
|
|
62
|
+
const getId = resolveGetRowId(getRowId);
|
|
63
|
+
const fav = [];
|
|
64
|
+
const rest = [];
|
|
65
|
+
for (const row of source) {
|
|
66
|
+
if (ids.has(getId(row))) fav.push(row);else rest.push(row);
|
|
79
67
|
}
|
|
80
68
|
if (fav.length === 0 || rest.length === 0) return source; // nothing to reorder
|
|
81
69
|
return placement === FAVORITES_SORT.FIRST ? fav.concat(rest) : rest.concat(fav);
|
|
@@ -88,15 +76,15 @@ export function sortRowsByFavorites(rows, favoriteIds, getRowId, placement) {
|
|
|
88
76
|
* reference is returned unchanged.
|
|
89
77
|
*/
|
|
90
78
|
export function useFavoritesView(resourceKey, rows, options) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
79
|
+
const opts = options || {};
|
|
80
|
+
const getRowId = opts.getRowId;
|
|
81
|
+
const filterMode = opts.filterMode || FAVORITES_FILTER.ALL;
|
|
82
|
+
const sortPlacement = opts.sortPlacement || FAVORITES_SORT.NONE;
|
|
83
|
+
const fav = useFavorites(resourceKey);
|
|
84
|
+
const ids = fav.ids;
|
|
85
|
+
const processed = React.useMemo(function compute() {
|
|
86
|
+
const base = Array.isArray(rows) ? rows : EMPTY_ROWS;
|
|
87
|
+
const filtered = filterRowsByFavorites(base, ids, getRowId, filterMode);
|
|
100
88
|
return sortRowsByFavorites(filtered, ids, getRowId, sortPlacement);
|
|
101
89
|
}, [rows, ids, getRowId, filterMode, sortPlacement]);
|
|
102
90
|
return React.useMemo(function value() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"favoritesView.js","names":["React","useFavorites","FAVORITES_FILTER","Object","freeze","ALL","ONLY","FAVORITES_SORT","NONE","FIRST","LAST","EMPTY_ROWS","toIdSet","ids","Set","resolveGetRowId","getRowId","defaultGetRowId","r","id","filterRowsByFavorites","rows","favoriteIds","mode","Array","isArray","source","getId","filter","keepFavorite","has","sortRowsByFavorites","placement","fav","rest","
|
|
1
|
+
{"version":3,"file":"favoritesView.js","names":["React","useFavorites","FAVORITES_FILTER","Object","freeze","ALL","ONLY","FAVORITES_SORT","NONE","FIRST","LAST","EMPTY_ROWS","toIdSet","ids","Set","resolveGetRowId","getRowId","defaultGetRowId","r","id","filterRowsByFavorites","rows","favoriteIds","mode","Array","isArray","source","getId","filter","keepFavorite","has","sortRowsByFavorites","placement","fav","rest","row","push","length","concat","useFavoritesView","resourceKey","options","opts","filterMode","sortPlacement","processed","useMemo","compute","base","filtered","value","favoriteCount","count","isFiltering"],"sources":["../../../../../src/lib/v2/personalization/capabilities/favoritesView.ts"],"sourcesContent":["/**\r\n * favoritesView — Portnet UI v2 · personalization\r\n *\r\n * Grid-agnostic favorites VIEW logic: filter (all / favorites-only) and\r\n * sort (favorites-first / favorites-last). Pure helpers usable anywhere,\r\n * plus a useFavoritesView hook that wires them to the favorites capability.\r\n *\r\n * The host owns its row id contract and the toggle UI (use FavoritesFilter\r\n * or any control bound to `filterMode` / `sortPlacement`). These helpers\r\n * only reorder/subset the rows array the host already has — they never\r\n * fetch or mutate.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { useFavorites } from \"./favorites\";\r\nimport type { RowId } from \"../../types/common\";\r\n\r\nexport const FAVORITES_FILTER = Object.freeze({\r\n ALL: \"all\",\r\n ONLY: \"only\",\r\n} as const);\r\nexport const FAVORITES_SORT = Object.freeze({\r\n NONE: \"none\",\r\n FIRST: \"first\",\r\n LAST: \"last\",\r\n} as const);\r\n\r\nexport type FavoritesFilterMode =\r\n (typeof FAVORITES_FILTER)[keyof typeof FAVORITES_FILTER];\r\nexport type FavoritesSortPlacement =\r\n (typeof FAVORITES_SORT)[keyof typeof FAVORITES_SORT];\r\n\r\nconst EMPTY_ROWS: readonly never[] = Object.freeze([]);\r\n\r\nfunction toIdSet(\r\n ids: Set<RowId> | readonly RowId[] | null | undefined\r\n): Set<RowId> {\r\n return ids instanceof Set ? ids : new Set(ids || []);\r\n}\r\n\r\nfunction resolveGetRowId<T>(getRowId?: (row: T) => RowId): (row: T) => RowId {\r\n return typeof getRowId === \"function\"\r\n ? getRowId\r\n : function defaultGetRowId(r: T): RowId {\r\n return (r as { id: RowId }).id;\r\n };\r\n}\r\n\r\n/**\r\n * Keep only favorited rows when mode === \"only\"; otherwise return `rows`\r\n * unchanged (same reference).\r\n */\r\nexport function filterRowsByFavorites<T>(\r\n rows: readonly T[],\r\n favoriteIds: Set<RowId> | readonly RowId[] | null | undefined,\r\n getRowId: ((row: T) => RowId) | undefined,\r\n mode: FavoritesFilterMode\r\n): readonly T[] {\r\n if (mode !== FAVORITES_FILTER.ONLY || !Array.isArray(rows)) return rows;\r\n // Array.isArray widened `rows` to any[]; re-establish the element type.\r\n const source: readonly T[] = rows;\r\n const ids = toIdSet(favoriteIds);\r\n const getId = resolveGetRowId(getRowId);\r\n return source.filter(function keepFavorite(r) {\r\n return ids.has(getId(r));\r\n });\r\n}\r\n\r\n/**\r\n * Move favorited rows to the front (\"first\") or back (\"last\"), preserving\r\n * the host's existing order WITHIN each group (stable partition). Returns\r\n * `rows` unchanged when placement is \"none\" or when reordering is a no-op.\r\n */\r\nexport function sortRowsByFavorites<T>(\r\n rows: readonly T[],\r\n favoriteIds: Set<RowId> | readonly RowId[] | null | undefined,\r\n getRowId: ((row: T) => RowId) | undefined,\r\n placement: FavoritesSortPlacement\r\n): readonly T[] {\r\n if (\r\n (placement !== FAVORITES_SORT.FIRST && placement !== FAVORITES_SORT.LAST) ||\r\n !Array.isArray(rows)\r\n ) {\r\n return rows;\r\n }\r\n // Array.isArray widened `rows` to any[]; re-establish the element type.\r\n const source: readonly T[] = rows;\r\n const ids = toIdSet(favoriteIds);\r\n const getId = resolveGetRowId(getRowId);\r\n const fav: T[] = [];\r\n const rest: T[] = [];\r\n for (const row of source) {\r\n if (ids.has(getId(row))) fav.push(row);\r\n else rest.push(row);\r\n }\r\n if (fav.length === 0 || rest.length === 0) return source; // nothing to reorder\r\n return placement === FAVORITES_SORT.FIRST\r\n ? fav.concat(rest)\r\n : rest.concat(fav);\r\n}\r\n\r\nexport interface UseFavoritesViewOptions<T> {\r\n /** Should be stable; MUST match the grid's getRowId. Defaults to (r) => r.id. */\r\n getRowId?: ((row: T) => RowId) | undefined;\r\n /** @default \"all\" */\r\n filterMode?: FavoritesFilterMode | undefined;\r\n /** @default \"none\" */\r\n sortPlacement?: FavoritesSortPlacement | undefined;\r\n}\r\n\r\nexport interface UseFavoritesViewResult<T> {\r\n rows: readonly T[];\r\n favoriteIds: Set<RowId>;\r\n favoriteCount: number;\r\n isFiltering: boolean;\r\n}\r\n\r\n/**\r\n * useFavoritesView(resourceKey, rows, options)\r\n *\r\n * Reads the favorites id Set for `resourceKey` and applies the favorites\r\n * filter + sort to `rows`. In the all/none case the original `rows`\r\n * reference is returned unchanged.\r\n */\r\nexport function useFavoritesView<T>(\r\n resourceKey: string,\r\n rows: readonly T[],\r\n options?: UseFavoritesViewOptions<T>\r\n): UseFavoritesViewResult<T> {\r\n const opts: UseFavoritesViewOptions<T> = options || {};\r\n const getRowId = opts.getRowId;\r\n const filterMode = opts.filterMode || FAVORITES_FILTER.ALL;\r\n const sortPlacement = opts.sortPlacement || FAVORITES_SORT.NONE;\r\n\r\n const fav = useFavorites(resourceKey);\r\n const ids = fav.ids;\r\n\r\n const processed = React.useMemo(\r\n function compute(): readonly T[] {\r\n const base: readonly T[] = Array.isArray(rows) ? rows : EMPTY_ROWS;\r\n const filtered = filterRowsByFavorites(base, ids, getRowId, filterMode);\r\n return sortRowsByFavorites(filtered, ids, getRowId, sortPlacement);\r\n },\r\n [rows, ids, getRowId, filterMode, sortPlacement]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseFavoritesViewResult<T> {\r\n return {\r\n rows: processed,\r\n favoriteIds: ids,\r\n favoriteCount: fav.count,\r\n isFiltering: filterMode === FAVORITES_FILTER.ONLY,\r\n };\r\n },\r\n [processed, ids, fav.count, filterMode]\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gridPreferences — Portnet UI v2 · personalization capability
|
|
3
|
+
*
|
|
4
|
+
* Per-user, per-resource DataGrid preferences. Self-registers the
|
|
5
|
+
* "gridPreferences" capability with the schema registry at import time, so the
|
|
6
|
+
* capability-agnostic foundation discovers its schemaVersion / defaultState /
|
|
7
|
+
* migrate without any hardcoding.
|
|
8
|
+
*
|
|
9
|
+
* State model (the capability payload):
|
|
10
|
+
* { [resourceKey]: { hiddenColumns: string[] } }
|
|
11
|
+
*
|
|
12
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
* WHY THIS BELONGS IN THE LIBRARY (capability gap G-35)
|
|
14
|
+
*
|
|
15
|
+
* `DataGridToolbar` owns the column-visibility UI (`hiddenColumns` +
|
|
16
|
+
* `onHiddenColumnsChange`) but deliberately holds no state, so PERSISTING the
|
|
17
|
+
* choice is left to the host. Every listing screen therefore reached for raw
|
|
18
|
+
* `localStorage` — observed in onssa-export-fe as
|
|
19
|
+
* `"onssaCertificates:listing:hiddenColumns"`, hand-written JSON.parse
|
|
20
|
+
* included.
|
|
21
|
+
*
|
|
22
|
+
* That is not merely duplication. A bare `localStorage` key is NOT USER-SCOPED,
|
|
23
|
+
* while this foundation's own key scheme is:
|
|
24
|
+
*
|
|
25
|
+
* portnet-ui:perso:v1:{tenantId?}:{userId}:{capabilityId}
|
|
26
|
+
*
|
|
27
|
+
* So on a shared workstation — the norm at a port — user B inherited user A's
|
|
28
|
+
* hidden columns, and a column A had hidden stayed invisible to B with no
|
|
29
|
+
* affordance explaining why. Favorites and saved filters were already immune
|
|
30
|
+
* because they route through this foundation; column visibility was the one
|
|
31
|
+
* grid preference that did not.
|
|
32
|
+
*
|
|
33
|
+
* It could not be fixed in a host, either. `registerCapability` is exported as
|
|
34
|
+
* a "capability registration seam — for custom/host-defined capabilities", but
|
|
35
|
+
* the two primitives every capability hook needs — `usePersonalizationStore`
|
|
36
|
+
* and `useStoreSelector` — are deliberately private ("architecture doc §2.8 —
|
|
37
|
+
* minimum API surface"). A host could register a descriptor and then had no way
|
|
38
|
+
* to read or write its payload. The seam was advertised but not complete, so
|
|
39
|
+
* the slice has to live here, exactly like favorites and savedFilters.
|
|
40
|
+
*
|
|
41
|
+
* DENSITY IS DELIBERATELY NOT PART OF THIS. `useDensity` (v2/hooks) owns the
|
|
42
|
+
* density preference as a GLOBAL, non-resource-scoped value on its own
|
|
43
|
+
* `portnet-ui-density` key, and it applies `data-density` to <html>. Folding it
|
|
44
|
+
* in here would give one preference two owners. Note however that it is
|
|
45
|
+
* unscoped for the same reason this capability exists — tracked separately,
|
|
46
|
+
* since moving it into the foundation changes its storage key and would make it
|
|
47
|
+
* require a provider (a breaking change for current callers).
|
|
48
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
49
|
+
*
|
|
50
|
+
* Usage:
|
|
51
|
+
*
|
|
52
|
+
* const { hiddenColumns, setHiddenColumns } = useGridPreferences("ti:list");
|
|
53
|
+
*
|
|
54
|
+
* <DataGridToolbar
|
|
55
|
+
* columns={columns}
|
|
56
|
+
* hiddenColumns={hiddenColumns}
|
|
57
|
+
* onHiddenColumnsChange={setHiddenColumns}
|
|
58
|
+
* … />
|
|
59
|
+
* <DataGrid columns={columns} hiddenColumns={hiddenColumns} … />
|
|
60
|
+
*
|
|
61
|
+
* `resourceKey` namespaces preferences per list (e.g. "ti:list",
|
|
62
|
+
* "declarations:list") so two grids in one app never collide. Requires a
|
|
63
|
+
* <UserPersonalizationProvider> ancestor.
|
|
64
|
+
*
|
|
65
|
+
* Performance: the pure helpers rebuild only the touched resourceKey's entry
|
|
66
|
+
* and shallow-copy the map, so the store's structural sharing keeps every OTHER
|
|
67
|
+
* resource's preferences referentially stable — and the exposed `Set` is
|
|
68
|
+
* memoised on the stored array, so its identity survives re-renders and does
|
|
69
|
+
* not defeat DataGrid's memoisation.
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
import * as React from "react";
|
|
73
|
+
import { registerCapability } from "../schema";
|
|
74
|
+
import { usePersonalizationStore, useStoreSelector } from "../personalizationContext";
|
|
75
|
+
|
|
76
|
+
/** One resource's grid preferences. Optional members so the shape can grow
|
|
77
|
+
* (column order, widths) without a schemaVersion bump. */
|
|
78
|
+
|
|
79
|
+
/** The gridPreferences capability payload: entries keyed by resourceKey. */
|
|
80
|
+
|
|
81
|
+
export const GRID_PREFERENCES_CAPABILITY_ID = "gridPreferences";
|
|
82
|
+
const SCHEMA_VERSION = 1;
|
|
83
|
+
const EMPTY_LIST = Object.freeze([]);
|
|
84
|
+
const EMPTY_MAP = Object.freeze({});
|
|
85
|
+
function isString(value) {
|
|
86
|
+
return typeof value === "string";
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Register at import time — the foundation reads this at hydration. */
|
|
90
|
+
registerCapability({
|
|
91
|
+
id: GRID_PREFERENCES_CAPABILITY_ID,
|
|
92
|
+
schemaVersion: SCHEMA_VERSION,
|
|
93
|
+
defaultState: EMPTY_MAP,
|
|
94
|
+
// { [resourceKey]: { hiddenColumns: string[] } }
|
|
95
|
+
migrate: function migrateGridPreferences(_fromVersion, payload) {
|
|
96
|
+
/* v1 is the initial schema, so there is no version to upgrade FROM — but
|
|
97
|
+
* this is the load-time trust boundary for a payload that came back from
|
|
98
|
+
* storage, and it is the right place to normalise it. A column key is used
|
|
99
|
+
* to hide grid columns; a number or an object arriving from an older build
|
|
100
|
+
* (or from hand-edited devtools storage) must not reach the DataGrid as if
|
|
101
|
+
* it were one. Anything unrecognised is dropped rather than repaired. */
|
|
102
|
+
if (!payload || typeof payload !== "object") return {};
|
|
103
|
+
const source = payload;
|
|
104
|
+
const next = {};
|
|
105
|
+
for (const resourceKey of Object.keys(source)) {
|
|
106
|
+
const entry = source[resourceKey];
|
|
107
|
+
if (!entry || typeof entry !== "object") continue;
|
|
108
|
+
const raw = entry["hiddenColumns"];
|
|
109
|
+
if (!Array.isArray(raw)) continue;
|
|
110
|
+
const keys = raw.filter(isString);
|
|
111
|
+
if (keys.length > 0) next[resourceKey] = {
|
|
112
|
+
hiddenColumns: keys
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return next;
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
/* ── pure, resourceKey-scoped state helpers (structural sharing) ────── */
|
|
120
|
+
|
|
121
|
+
function listFor(map, resourceKey) {
|
|
122
|
+
const entry = map ? map[resourceKey] : undefined;
|
|
123
|
+
const list = entry ? entry.hiddenColumns : undefined;
|
|
124
|
+
return Array.isArray(list) ? list : EMPTY_LIST;
|
|
125
|
+
}
|
|
126
|
+
function sameMembers(a, b) {
|
|
127
|
+
if (a.length !== b.length) return false;
|
|
128
|
+
for (let i = 0; i < a.length; i++) {
|
|
129
|
+
if (a[i] !== b[i]) return false;
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
function setList(map, resourceKey, keys) {
|
|
134
|
+
const base = map || EMPTY_MAP;
|
|
135
|
+
// No-op when unchanged → the store short-circuits and nothing re-renders.
|
|
136
|
+
if (sameMembers(listFor(base, resourceKey), keys)) return base;
|
|
137
|
+
const next = Object.assign({}, base);
|
|
138
|
+
if (keys.length === 0) {
|
|
139
|
+
// Nothing hidden is the default; drop the entry rather than persist an
|
|
140
|
+
// empty array, so the payload stays tidy and a reset leaves no residue.
|
|
141
|
+
delete next[resourceKey];
|
|
142
|
+
} else {
|
|
143
|
+
// Spread, not Object.assign: `base[resourceKey]` is
|
|
144
|
+
// `GridPreferencesEntry | undefined` under noUncheckedIndexedAccess, and
|
|
145
|
+
// passing undefined as an Object.assign source yields an intersection
|
|
146
|
+
// containing undefined. Spreading undefined is well-defined ({}), and it
|
|
147
|
+
// preserves any sibling preference a future schema adds alongside
|
|
148
|
+
// hiddenColumns.
|
|
149
|
+
next[resourceKey] = {
|
|
150
|
+
...base[resourceKey],
|
|
151
|
+
hiddenColumns: keys.slice()
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return next;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* ── hook ───────────────────────────────────────────────────────────── */
|
|
158
|
+
|
|
159
|
+
function useEnsureGridPreferences(store) {
|
|
160
|
+
React.useEffect(function ensure() {
|
|
161
|
+
store.ensureCapability(GRID_PREFERENCES_CAPABILITY_ID);
|
|
162
|
+
}, [store]);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* useGridPreferences(resourceKey) — persisted, per-user grid preferences for
|
|
166
|
+
* one resource.
|
|
167
|
+
*/
|
|
168
|
+
export function useGridPreferences(resourceKey) {
|
|
169
|
+
const store = usePersonalizationStore();
|
|
170
|
+
useEnsureGridPreferences(store);
|
|
171
|
+
const selectList = React.useCallback(function selectList(snapshot) {
|
|
172
|
+
const slice = snapshot[GRID_PREFERENCES_CAPABILITY_ID];
|
|
173
|
+
return slice ? listFor(slice, resourceKey) : EMPTY_LIST;
|
|
174
|
+
}, [resourceKey]);
|
|
175
|
+
const keys = useStoreSelector(selectList);
|
|
176
|
+
|
|
177
|
+
// Stable while `keys` is stable (structural sharing), so the Set identity
|
|
178
|
+
// does not churn on every render and DataGrid's memoisation still holds.
|
|
179
|
+
const hiddenColumns = React.useMemo(function buildSet() {
|
|
180
|
+
return new Set(keys);
|
|
181
|
+
}, [keys]);
|
|
182
|
+
const setHiddenColumns = React.useCallback(function setHiddenColumns(hidden) {
|
|
183
|
+
// Normalise at the write boundary too: the caller is UI code, but the
|
|
184
|
+
// value is about to be persisted and re-read by a later session.
|
|
185
|
+
const nextKeys = Array.from(hidden).filter(isString);
|
|
186
|
+
store.write(GRID_PREFERENCES_CAPABILITY_ID, function (prev) {
|
|
187
|
+
return setList(prev, resourceKey, nextKeys);
|
|
188
|
+
});
|
|
189
|
+
}, [store, resourceKey]);
|
|
190
|
+
const resetHiddenColumns = React.useCallback(function resetHiddenColumns() {
|
|
191
|
+
store.write(GRID_PREFERENCES_CAPABILITY_ID, function (prev) {
|
|
192
|
+
return setList(prev, resourceKey, EMPTY_LIST);
|
|
193
|
+
});
|
|
194
|
+
}, [store, resourceKey]);
|
|
195
|
+
return React.useMemo(function value() {
|
|
196
|
+
return {
|
|
197
|
+
hiddenColumns: hiddenColumns,
|
|
198
|
+
setHiddenColumns: setHiddenColumns,
|
|
199
|
+
resetHiddenColumns: resetHiddenColumns
|
|
200
|
+
};
|
|
201
|
+
}, [hiddenColumns, setHiddenColumns, resetHiddenColumns]);
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=gridPreferences.js.map
|