@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPersonalizationStore.js","names":["_regeneratorRuntime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","defineProperty","obj","key","desc","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","_typeof","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","undefined","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","getCapability","getRegisteredCapabilities","makeEnvelope","EMPTY_OBJECT","freeze","isDev","process","env","createPersonalizationStore","config","cfg","scope","userId","adapter","defaults","rawEnvelopes","hydrated","disposed","disconnect","runtime","onError","hydrateStrategy","listeners","Set","statuses","errors","preHydrationWrites","notify","current","Array","from","_i","_current","listener","subscribe","add","unsubscribe","getSnapshot","getServerSnapshot","seedFor","capId","defaultState","reportError","e","String","capabilityId","_unused","console","computePayload","raw","migrate","schemaVersion","payload","setSlice","_i2","_Object$keys","materialiseIfMissing","read","ensureCapability","write","updater","options","persist","is","save","activeAdapter","envelope","persistSlice","onSaved","onSaveFailed","clearCapability","remove","removeSlice","onRemoveFailed","rematerialiseAfterLoad","ids","addRawId","id","addRegisteredId","d","_i3","_Object$keys2","materialise","has","trySyncSeed","window","loadSync","loaded","warn","hydrate","_hydrate","_callee","_callee$","_context","capabilities","remote","load","t0","t1","clear","reloadCapability","_x","_reloadCapability","_callee2","_callee2$","_context2","connect","noop","onExternalChange","dispose","_unused2","setRuntime","opts","status","isHydrated","getScope"],"sources":["../../../../src/lib/v2/personalization/createPersonalizationStore.ts"],"sourcesContent":["/**\r\n * createPersonalizationStore — Portnet UI v2 · personalization\r\n *\r\n * Scoped, multi-capability, adapter-backed store. Generalises the\r\n * useSyncExternalStore + cross-tab + SSR-safe pattern proven by\r\n * useDensity (architecture doc §2.3 / §2.4).\r\n *\r\n * Core idea — sync snapshot, async adapter:\r\n * - The store holds a SYNCHRONOUS in-memory snapshot. `read()` is pure\r\n * (no mutation) so it is safe to call inside a useSyncExternalStore\r\n * selector. Components never await to render.\r\n * - Mutations are OPTIMISTIC: the snapshot updates synchronously and\r\n * subscribers are notified; the adapter persists asynchronously; on\r\n * failure the optimistic value is kept for the session and onError\r\n * fires. Swapping a remote adapter changes only *when* bytes hit the\r\n * wire, never how components read.\r\n * - STRUCTURAL SHARING: a write replaces only its capability slice; all\r\n * sibling slices keep their reference. This is what makes selectors\r\n * referentially stable and prevents cross-capability re-renders.\r\n *\r\n * The store is capability-AGNOSTIC: payloads are `unknown` and it learns\r\n * defaults, schema versions and migrations from the schema registry (slices\r\n * self-register at import time). Adding a capability requires no change here;\r\n * the typed capability slices impose the concrete payload types on top via\r\n * the generic read<T>/write<T> facades.\r\n */\r\n\r\nimport {\r\n getCapability,\r\n getRegisteredCapabilities,\r\n makeEnvelope,\r\n} from \"./schema\";\r\nimport type { Adapter, Envelope, HydrateStrategy, Scope } from \"./types\";\r\n\r\nexport type PersonalizationStatus = \"idle\" | \"hydrating\" | \"saving\" | \"error\";\r\n\r\n/** The store's in-memory snapshot: { [capabilityId]: payload }. */\r\nexport type PersonalizationSnapshot = Record<string, unknown>;\r\n\r\n/** A write value, or a functional updater `(previous) => next`. */\r\nexport type PersonalizationUpdater<T = unknown> = T | ((previous: T) => T);\r\n\r\nexport interface WriteOptions {\r\n /** Set false for an in-memory-only write (no adapter persist). */\r\n persist?: boolean | undefined;\r\n}\r\n\r\nexport interface PersonalizationErrorContext {\r\n scope: Scope;\r\n capabilityId: string;\r\n}\r\n\r\nexport type PersonalizationErrorHandler = (\r\n error: Error,\r\n context: PersonalizationErrorContext\r\n) => void;\r\n\r\nexport interface PersonalizationRuntimeOptions {\r\n onError?: PersonalizationErrorHandler | undefined;\r\n hydrateStrategy?: HydrateStrategy | undefined;\r\n}\r\n\r\nexport interface PersonalizationStoreConfig {\r\n /** Identity the store persists against. Defaults to { userId: \"anonymous\" }. */\r\n scope?: Scope | undefined;\r\n /** Storage adapter. When null the store is a pure in-memory session. */\r\n adapter?: Adapter | null | undefined;\r\n /** Per-capability seed overrides, read at creation/hydration. */\r\n defaults?: Record<string, unknown> | null | undefined;\r\n onError?: PersonalizationErrorHandler | undefined;\r\n /** @default \"remote-wins\" */\r\n hydrateStrategy?: HydrateStrategy | undefined;\r\n}\r\n\r\n/** The store handle returned by createPersonalizationStore. */\r\nexport interface PersonalizationStore {\r\n // useSyncExternalStore contract\r\n subscribe: (listener: () => void) => () => void;\r\n getSnapshot: () => PersonalizationSnapshot;\r\n getServerSnapshot: () => PersonalizationSnapshot;\r\n // reads / writes (T is caller-asserted; defaults to unknown)\r\n read: <T = unknown>(capabilityId: string) => T;\r\n write: <T = unknown>(\r\n capabilityId: string,\r\n updater: PersonalizationUpdater<T>,\r\n options?: WriteOptions\r\n ) => T | undefined;\r\n ensureCapability: (capabilityId: string) => void;\r\n clearCapability: (capabilityId: string) => void;\r\n // lifecycle\r\n hydrate: () => Promise<void>;\r\n connect: () => () => void;\r\n dispose: () => void;\r\n setRuntime: (opts?: PersonalizationRuntimeOptions) => void;\r\n // introspection\r\n status: (capabilityId: string) => PersonalizationStatus;\r\n error: (capabilityId: string) => Error | null;\r\n isHydrated: () => boolean;\r\n getScope: () => Scope;\r\n}\r\n\r\ninterface StoreRuntime {\r\n onError: PersonalizationErrorHandler | null;\r\n hydrateStrategy: HydrateStrategy;\r\n}\r\n\r\nconst EMPTY_OBJECT: PersonalizationSnapshot = Object.freeze({});\r\n\r\nconst isDev =\r\n typeof process !== \"undefined\" &&\r\n process.env &&\r\n process.env[\"NODE_ENV\"] !== \"production\";\r\n\r\nexport default function createPersonalizationStore(\r\n config?: PersonalizationStoreConfig\r\n): PersonalizationStore {\r\n const cfg: PersonalizationStoreConfig = config || {};\r\n const scope: Scope = cfg.scope || { userId: \"anonymous\" };\r\n const adapter: Adapter | null = cfg.adapter || null;\r\n const defaults: Record<string, unknown> | null = cfg.defaults || null;\r\n\r\n /** Live snapshot: { [capabilityId]: payload }. New top-level ref on every change. */\r\n let state: PersonalizationSnapshot = {};\r\n /** Raw persisted envelopes from the adapter: { [capabilityId]: envelope }. */\r\n let rawEnvelopes: Record<string, Envelope> = {};\r\n let hydrated = false;\r\n let disposed = false;\r\n let disconnect: (() => void) | null = null;\r\n let runtime: StoreRuntime = {\r\n onError: typeof cfg.onError === \"function\" ? cfg.onError : null,\r\n hydrateStrategy: cfg.hydrateStrategy || \"remote-wins\",\r\n };\r\n\r\n const listeners = new Set<() => void>();\r\n const statuses: Record<string, PersonalizationStatus> = {};\r\n const errors: Record<string, Error | null> = {};\r\n /** Capabilities written before hydration finished — protected from the initial load. */\r\n const preHydrationWrites = new Set<string>();\r\n\r\n /* ── subscription / snapshot (useSyncExternalStore contract) ─────── */\r\n\r\n function notify(): void {\r\n // Iterate a snapshot so a listener unmounting during notify doesn't\r\n // mutate the Set under iteration (same guard as useDensity).\r\n const current = Array.from(listeners);\r\n for (const listener of current) listener();\r\n }\r\n\r\n function subscribe(listener: () => void): () => void {\r\n listeners.add(listener);\r\n return function unsubscribe() {\r\n listeners.delete(listener);\r\n };\r\n }\r\n\r\n function getSnapshot(): PersonalizationSnapshot {\r\n return state;\r\n }\r\n\r\n function getServerSnapshot(): PersonalizationSnapshot {\r\n return EMPTY_OBJECT;\r\n }\r\n\r\n /* ── seeds / materialisation ─────────────────────────────────────── */\r\n\r\n function seedFor(capId: string): unknown {\r\n if (defaults && Object.prototype.hasOwnProperty.call(defaults, capId)) {\r\n return defaults[capId];\r\n }\r\n const desc = getCapability(capId);\r\n if (desc && desc.defaultState !== undefined) return desc.defaultState;\r\n return EMPTY_OBJECT;\r\n }\r\n\r\n function reportError(capId: string, e: unknown): void {\r\n const err =\r\n e instanceof Error ? e : new Error(String(e || \"personalization error\"));\r\n errors[capId] = err;\r\n statuses[capId] = \"error\";\r\n if (runtime.onError) {\r\n try {\r\n runtime.onError(err, { scope: scope, capabilityId: capId });\r\n } catch {\r\n /* host onError must not break the store */\r\n }\r\n }\r\n if (isDev && typeof console !== \"undefined\" && console.error) {\r\n // eslint-disable-next-line no-console\r\n console.error('[@portnet/ui v2] personalization \"' + capId + '\":', err);\r\n }\r\n }\r\n\r\n /** Pure: derive a capability payload from raw envelope (+migrate) or seed. */\r\n function computePayload(capId: string): unknown {\r\n const raw = rawEnvelopes[capId];\r\n if (\r\n raw &&\r\n typeof raw === \"object\" &&\r\n Object.prototype.hasOwnProperty.call(raw, \"payload\")\r\n ) {\r\n const desc = getCapability(capId);\r\n if (desc && typeof desc.migrate === \"function\") {\r\n try {\r\n return desc.migrate(\r\n typeof raw.schemaVersion === \"number\" ? raw.schemaVersion : 0,\r\n raw.payload\r\n );\r\n } catch (e) {\r\n reportError(capId, e);\r\n return seedFor(capId);\r\n }\r\n }\r\n return raw.payload;\r\n }\r\n return seedFor(capId);\r\n }\r\n\r\n /** Replace one slice immutably (structural sharing; new top-level ref). */\r\n function setSlice(capId: string, payload: unknown): void {\r\n const next: Record<string, unknown> = {};\r\n for (const key of Object.keys(state)) next[key] = state[key];\r\n next[capId] = payload;\r\n state = next;\r\n }\r\n\r\n function materialiseIfMissing(capId: string): void {\r\n if (state[capId] === undefined) setSlice(capId, computePayload(capId));\r\n }\r\n\r\n /* ── public reads ────────────────────────────────────────────────── */\r\n\r\n /**\r\n * Pure read for render. Never mutates state, so it is safe inside a\r\n * useSyncExternalStore selector. Returns the materialised slice if\r\n * present, else the (referentially stable) seed. `T` is caller-asserted.\r\n */\r\n function read<T = unknown>(capId: string): T {\r\n return (state[capId] !== undefined ? state[capId] : seedFor(capId)) as T;\r\n }\r\n\r\n /**\r\n * Effectful: ensure a capability slice exists in the snapshot. Capability\r\n * hooks call this from a useEffect (NEVER during render) so a capability\r\n * that registered after the store hydrated still materialises from any\r\n * persisted data.\r\n */\r\n function ensureCapability(capId: string): void {\r\n if (disposed) return;\r\n if (state[capId] !== undefined) return;\r\n setSlice(capId, computePayload(capId));\r\n notify();\r\n }\r\n\r\n /* ── writes (optimistic + async persist) ─────────────────────────── */\r\n\r\n function write<T = unknown>(\r\n capId: string,\r\n updater: PersonalizationUpdater<T>,\r\n options?: WriteOptions\r\n ): T | undefined {\r\n if (disposed) return undefined;\r\n const persist = !options || options.persist !== false;\r\n\r\n materialiseIfMissing(capId);\r\n const prev = state[capId] as T;\r\n const next: T =\r\n typeof updater === \"function\"\r\n ? (updater as (previous: T) => T)(prev)\r\n : updater;\r\n if (Object.is(next, prev)) return prev; // no-op short-circuit\r\n\r\n setSlice(capId, next);\r\n if (!hydrated) preHydrationWrites.add(capId);\r\n notify();\r\n\r\n if (persist && adapter && typeof adapter.save === \"function\") {\r\n // Capture the narrowed adapter: the `if` narrowing does not reach into\r\n // the async closures below, and `save` is required on Adapter.\r\n const activeAdapter = adapter;\r\n const desc = getCapability(capId);\r\n const envelope = makeEnvelope(desc ? desc.schemaVersion : 1, next);\r\n statuses[capId] = \"saving\";\r\n Promise.resolve()\r\n .then(function persistSlice() {\r\n return activeAdapter.save(scope, capId, envelope);\r\n })\r\n .then(function onSaved() {\r\n if (disposed) return;\r\n statuses[capId] = \"idle\";\r\n errors[capId] = null;\r\n })\r\n .catch(function onSaveFailed(e: unknown) {\r\n if (disposed) return;\r\n // Keep the optimistic value for the session; surface the error.\r\n reportError(capId, e);\r\n });\r\n }\r\n return next;\r\n }\r\n\r\n /** Reset a capability to its seed and drop it from storage. */\r\n function clearCapability(capId: string): void {\r\n if (disposed) return;\r\n setSlice(capId, seedFor(capId));\r\n notify();\r\n if (adapter && typeof adapter.remove === \"function\") {\r\n const activeAdapter = adapter;\r\n Promise.resolve()\r\n .then(function removeSlice() {\r\n return activeAdapter.remove\r\n ? activeAdapter.remove(scope, capId)\r\n : undefined;\r\n })\r\n .catch(function onRemoveFailed(e: unknown) {\r\n reportError(capId, e);\r\n });\r\n }\r\n }\r\n\r\n /* ── hydration ───────────────────────────────────────────────────── */\r\n\r\n function rematerialiseAfterLoad(): void {\r\n const ids = new Set<string>();\r\n Object.keys(rawEnvelopes).forEach(function addRawId(id) {\r\n ids.add(id);\r\n });\r\n getRegisteredCapabilities().forEach(function addRegisteredId(d) {\r\n ids.add(d.id);\r\n });\r\n\r\n const next: Record<string, unknown> = {};\r\n for (const key of Object.keys(state)) next[key] = state[key];\r\n\r\n ids.forEach(function materialise(capId) {\r\n // Persisted truth wins over a pre-hydration seed, but never clobbers\r\n // an optimistic write the user made during the hydrating window.\r\n if (preHydrationWrites.has(capId)) return;\r\n next[capId] = computePayload(capId);\r\n });\r\n state = next;\r\n }\r\n\r\n /** Synchronous seed at creation (flash-free for adapters exposing loadSync). */\r\n function trySyncSeed(): void {\r\n if (typeof window === \"undefined\") return;\r\n if (!adapter || typeof adapter.loadSync !== \"function\") return;\r\n try {\r\n const loaded = adapter.loadSync(scope);\r\n if (loaded && typeof loaded === \"object\") {\r\n rawEnvelopes = loaded;\r\n rematerialiseAfterLoad();\r\n hydrated = true;\r\n }\r\n } catch (e) {\r\n // Fall back to async hydrate().\r\n if (isDev && typeof console !== \"undefined\" && console.warn) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] personalization loadSync failed; deferring to async hydrate.\",\r\n e\r\n );\r\n }\r\n }\r\n }\r\n\r\n async function hydrate(): Promise<void> {\r\n if (disposed) return;\r\n if (typeof window === \"undefined\") return; // SSR: no hydration\r\n // Already seeded synchronously and the adapter has no remote source to\r\n // reconcile against → skip the redundant reload.\r\n if (\r\n hydrated &&\r\n adapter &&\r\n adapter.capabilities &&\r\n adapter.capabilities.remote === false\r\n ) {\r\n return;\r\n }\r\n try {\r\n const loaded =\r\n adapter && typeof adapter.load === \"function\"\r\n ? await adapter.load(scope)\r\n : {};\r\n if (disposed) return;\r\n rawEnvelopes = loaded && typeof loaded === \"object\" ? loaded : {};\r\n } catch (e) {\r\n rawEnvelopes = {};\r\n reportError(\"*\", e);\r\n }\r\n rematerialiseAfterLoad();\r\n hydrated = true;\r\n preHydrationWrites.clear();\r\n notify();\r\n }\r\n\r\n async function reloadCapability(capId: string): Promise<void> {\r\n if (disposed) return;\r\n try {\r\n const loaded =\r\n adapter && typeof adapter.load === \"function\"\r\n ? await adapter.load(scope)\r\n : {};\r\n if (disposed) return;\r\n rawEnvelopes = loaded && typeof loaded === \"object\" ? loaded : {};\r\n } catch (e) {\r\n reportError(capId, e);\r\n return;\r\n }\r\n setSlice(capId, computePayload(capId));\r\n notify();\r\n }\r\n\r\n /* ── cross-tab / external changes ────────────────────────────────── */\r\n\r\n function connect(): () => void {\r\n if (disposed) return function noop() {};\r\n if (!adapter || typeof adapter.subscribe !== \"function\") {\r\n return function noop() {};\r\n }\r\n disconnect = adapter.subscribe(scope, function onExternalChange(capId) {\r\n if (disposed) return;\r\n if (runtime.hydrateStrategy === \"local-wins\") return; // ignore external changes\r\n // remote-wins / merge → adopt the external change.\r\n // NOTE: \"merge\" currently behaves as remote-wins at the store level;\r\n // true merge is slice-specific and deferred to a slice opt-in.\r\n reloadCapability(capId);\r\n });\r\n return typeof disconnect === \"function\" ? disconnect : function noop() {};\r\n }\r\n\r\n function dispose(): void {\r\n disposed = true;\r\n if (typeof disconnect === \"function\") {\r\n try {\r\n disconnect();\r\n } catch {\r\n /* ignore */\r\n }\r\n disconnect = null;\r\n }\r\n listeners.clear();\r\n }\r\n\r\n /* ── runtime options / introspection ─────────────────────────────── */\r\n\r\n function setRuntime(opts?: PersonalizationRuntimeOptions): void {\r\n runtime = {\r\n onError: opts && typeof opts.onError === \"function\" ? opts.onError : null,\r\n hydrateStrategy: (opts && opts.hydrateStrategy) || \"remote-wins\",\r\n };\r\n }\r\n\r\n function status(capId: string): PersonalizationStatus {\r\n return statuses[capId] || (hydrated ? \"idle\" : \"hydrating\");\r\n }\r\n\r\n function error(capId: string): Error | null {\r\n return errors[capId] || null;\r\n }\r\n\r\n function isHydrated(): boolean {\r\n return hydrated;\r\n }\r\n\r\n function getScope(): Scope {\r\n return scope;\r\n }\r\n\r\n // Seed synchronously once everything above is initialised.\r\n trySyncSeed();\r\n\r\n return {\r\n // useSyncExternalStore contract\r\n subscribe: subscribe,\r\n getSnapshot: getSnapshot,\r\n getServerSnapshot: getServerSnapshot,\r\n // reads / writes\r\n read: read,\r\n write: write,\r\n ensureCapability: ensureCapability,\r\n clearCapability: clearCapability,\r\n // lifecycle\r\n hydrate: hydrate,\r\n connect: connect,\r\n dispose: dispose,\r\n setRuntime: setRuntime,\r\n // introspection\r\n status: status,\r\n error: error,\r\n isHydrated: isHydrated,\r\n getScope: getScope,\r\n };\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"createPersonalizationStore.js","names":["getCapability","getRegisteredCapabilities","makeEnvelope","EMPTY_OBJECT","Object","freeze","isDev","process","env","createPersonalizationStore","config","cfg","scope","userId","adapter","defaults","state","rawEnvelopes","hydrated","disposed","disconnect","runtime","onError","hydrateStrategy","listeners","Set","statuses","errors","preHydrationWrites","notify","current","Array","from","listener","subscribe","add","unsubscribe","delete","getSnapshot","getServerSnapshot","seedFor","capId","prototype","hasOwnProperty","call","desc","defaultState","undefined","reportError","e","err","Error","String","capabilityId","console","error","computePayload","raw","migrate","schemaVersion","payload","setSlice","next","key","keys","materialiseIfMissing","read","ensureCapability","write","updater","options","persist","prev","is","save","activeAdapter","envelope","Promise","resolve","then","persistSlice","onSaved","catch","onSaveFailed","clearCapability","remove","removeSlice","onRemoveFailed","rematerialiseAfterLoad","ids","forEach","addRawId","id","addRegisteredId","d","materialise","has","trySyncSeed","window","loadSync","loaded","warn","hydrate","capabilities","remote","load","clear","reloadCapability","connect","noop","onExternalChange","dispose","setRuntime","opts","status","isHydrated","getScope"],"sources":["../../../../src/lib/v2/personalization/createPersonalizationStore.ts"],"sourcesContent":["/**\r\n * createPersonalizationStore — Portnet UI v2 · personalization\r\n *\r\n * Scoped, multi-capability, adapter-backed store. Generalises the\r\n * useSyncExternalStore + cross-tab + SSR-safe pattern proven by\r\n * useDensity (architecture doc §2.3 / §2.4).\r\n *\r\n * Core idea — sync snapshot, async adapter:\r\n * - The store holds a SYNCHRONOUS in-memory snapshot. `read()` is pure\r\n * (no mutation) so it is safe to call inside a useSyncExternalStore\r\n * selector. Components never await to render.\r\n * - Mutations are OPTIMISTIC: the snapshot updates synchronously and\r\n * subscribers are notified; the adapter persists asynchronously; on\r\n * failure the optimistic value is kept for the session and onError\r\n * fires. Swapping a remote adapter changes only *when* bytes hit the\r\n * wire, never how components read.\r\n * - STRUCTURAL SHARING: a write replaces only its capability slice; all\r\n * sibling slices keep their reference. This is what makes selectors\r\n * referentially stable and prevents cross-capability re-renders.\r\n *\r\n * The store is capability-AGNOSTIC: payloads are `unknown` and it learns\r\n * defaults, schema versions and migrations from the schema registry (slices\r\n * self-register at import time). Adding a capability requires no change here;\r\n * the typed capability slices impose the concrete payload types on top via\r\n * the generic read<T>/write<T> facades.\r\n */\r\n\r\nimport {\r\n getCapability,\r\n getRegisteredCapabilities,\r\n makeEnvelope,\r\n} from \"./schema\";\r\nimport type { Adapter, Envelope, HydrateStrategy, Scope } from \"./types\";\r\n\r\nexport type PersonalizationStatus = \"idle\" | \"hydrating\" | \"saving\" | \"error\";\r\n\r\n/** The store's in-memory snapshot: { [capabilityId]: payload }. */\r\nexport type PersonalizationSnapshot = Record<string, unknown>;\r\n\r\n/** A write value, or a functional updater `(previous) => next`. */\r\nexport type PersonalizationUpdater<T = unknown> = T | ((previous: T) => T);\r\n\r\nexport interface WriteOptions {\r\n /** Set false for an in-memory-only write (no adapter persist). */\r\n persist?: boolean | undefined;\r\n}\r\n\r\nexport interface PersonalizationErrorContext {\r\n scope: Scope;\r\n capabilityId: string;\r\n}\r\n\r\nexport type PersonalizationErrorHandler = (\r\n error: Error,\r\n context: PersonalizationErrorContext\r\n) => void;\r\n\r\nexport interface PersonalizationRuntimeOptions {\r\n onError?: PersonalizationErrorHandler | undefined;\r\n hydrateStrategy?: HydrateStrategy | undefined;\r\n}\r\n\r\nexport interface PersonalizationStoreConfig {\r\n /** Identity the store persists against. Defaults to { userId: \"anonymous\" }. */\r\n scope?: Scope | undefined;\r\n /** Storage adapter. When null the store is a pure in-memory session. */\r\n adapter?: Adapter | null | undefined;\r\n /** Per-capability seed overrides, read at creation/hydration. */\r\n defaults?: Record<string, unknown> | null | undefined;\r\n onError?: PersonalizationErrorHandler | undefined;\r\n /** @default \"remote-wins\" */\r\n hydrateStrategy?: HydrateStrategy | undefined;\r\n}\r\n\r\n/** The store handle returned by createPersonalizationStore. */\r\nexport interface PersonalizationStore {\r\n // useSyncExternalStore contract\r\n subscribe: (listener: () => void) => () => void;\r\n getSnapshot: () => PersonalizationSnapshot;\r\n getServerSnapshot: () => PersonalizationSnapshot;\r\n // reads / writes (T is caller-asserted; defaults to unknown)\r\n read: <T = unknown>(capabilityId: string) => T;\r\n write: <T = unknown>(\r\n capabilityId: string,\r\n updater: PersonalizationUpdater<T>,\r\n options?: WriteOptions\r\n ) => T | undefined;\r\n ensureCapability: (capabilityId: string) => void;\r\n clearCapability: (capabilityId: string) => void;\r\n // lifecycle\r\n hydrate: () => Promise<void>;\r\n connect: () => () => void;\r\n dispose: () => void;\r\n setRuntime: (opts?: PersonalizationRuntimeOptions) => void;\r\n // introspection\r\n status: (capabilityId: string) => PersonalizationStatus;\r\n error: (capabilityId: string) => Error | null;\r\n isHydrated: () => boolean;\r\n getScope: () => Scope;\r\n}\r\n\r\ninterface StoreRuntime {\r\n onError: PersonalizationErrorHandler | null;\r\n hydrateStrategy: HydrateStrategy;\r\n}\r\n\r\nconst EMPTY_OBJECT: PersonalizationSnapshot = Object.freeze({});\r\n\r\nconst isDev =\r\n typeof process !== \"undefined\" &&\r\n process.env &&\r\n process.env[\"NODE_ENV\"] !== \"production\";\r\n\r\nexport default function createPersonalizationStore(\r\n config?: PersonalizationStoreConfig\r\n): PersonalizationStore {\r\n const cfg: PersonalizationStoreConfig = config || {};\r\n const scope: Scope = cfg.scope || { userId: \"anonymous\" };\r\n const adapter: Adapter | null = cfg.adapter || null;\r\n const defaults: Record<string, unknown> | null = cfg.defaults || null;\r\n\r\n /** Live snapshot: { [capabilityId]: payload }. New top-level ref on every change. */\r\n let state: PersonalizationSnapshot = {};\r\n /** Raw persisted envelopes from the adapter: { [capabilityId]: envelope }. */\r\n let rawEnvelopes: Record<string, Envelope> = {};\r\n let hydrated = false;\r\n let disposed = false;\r\n let disconnect: (() => void) | null = null;\r\n let runtime: StoreRuntime = {\r\n onError: typeof cfg.onError === \"function\" ? cfg.onError : null,\r\n hydrateStrategy: cfg.hydrateStrategy || \"remote-wins\",\r\n };\r\n\r\n const listeners = new Set<() => void>();\r\n const statuses: Record<string, PersonalizationStatus> = {};\r\n const errors: Record<string, Error | null> = {};\r\n /** Capabilities written before hydration finished — protected from the initial load. */\r\n const preHydrationWrites = new Set<string>();\r\n\r\n /* ── subscription / snapshot (useSyncExternalStore contract) ─────── */\r\n\r\n function notify(): void {\r\n // Iterate a snapshot so a listener unmounting during notify doesn't\r\n // mutate the Set under iteration (same guard as useDensity).\r\n const current = Array.from(listeners);\r\n for (const listener of current) listener();\r\n }\r\n\r\n function subscribe(listener: () => void): () => void {\r\n listeners.add(listener);\r\n return function unsubscribe() {\r\n listeners.delete(listener);\r\n };\r\n }\r\n\r\n function getSnapshot(): PersonalizationSnapshot {\r\n return state;\r\n }\r\n\r\n function getServerSnapshot(): PersonalizationSnapshot {\r\n return EMPTY_OBJECT;\r\n }\r\n\r\n /* ── seeds / materialisation ─────────────────────────────────────── */\r\n\r\n function seedFor(capId: string): unknown {\r\n if (defaults && Object.prototype.hasOwnProperty.call(defaults, capId)) {\r\n return defaults[capId];\r\n }\r\n const desc = getCapability(capId);\r\n if (desc && desc.defaultState !== undefined) return desc.defaultState;\r\n return EMPTY_OBJECT;\r\n }\r\n\r\n function reportError(capId: string, e: unknown): void {\r\n const err =\r\n e instanceof Error ? e : new Error(String(e || \"personalization error\"));\r\n errors[capId] = err;\r\n statuses[capId] = \"error\";\r\n if (runtime.onError) {\r\n try {\r\n runtime.onError(err, { scope: scope, capabilityId: capId });\r\n } catch {\r\n /* host onError must not break the store */\r\n }\r\n }\r\n // eslint-disable-next-line no-console\r\n if (isDev && typeof console !== \"undefined\" && console.error) {\r\n // eslint-disable-next-line no-console\r\n console.error('[@portnet/ui v2] personalization \"' + capId + '\":', err);\r\n }\r\n }\r\n\r\n /** Pure: derive a capability payload from raw envelope (+migrate) or seed. */\r\n function computePayload(capId: string): unknown {\r\n const raw = rawEnvelopes[capId];\r\n if (\r\n raw &&\r\n typeof raw === \"object\" &&\r\n Object.prototype.hasOwnProperty.call(raw, \"payload\")\r\n ) {\r\n const desc = getCapability(capId);\r\n if (desc && typeof desc.migrate === \"function\") {\r\n try {\r\n return desc.migrate(\r\n typeof raw.schemaVersion === \"number\" ? raw.schemaVersion : 0,\r\n raw.payload\r\n );\r\n } catch (e) {\r\n reportError(capId, e);\r\n return seedFor(capId);\r\n }\r\n }\r\n return raw.payload;\r\n }\r\n return seedFor(capId);\r\n }\r\n\r\n /** Replace one slice immutably (structural sharing; new top-level ref). */\r\n function setSlice(capId: string, payload: unknown): void {\r\n const next: Record<string, unknown> = {};\r\n for (const key of Object.keys(state)) next[key] = state[key];\r\n next[capId] = payload;\r\n state = next;\r\n }\r\n\r\n function materialiseIfMissing(capId: string): void {\r\n if (state[capId] === undefined) setSlice(capId, computePayload(capId));\r\n }\r\n\r\n /* ── public reads ────────────────────────────────────────────────── */\r\n\r\n /**\r\n * Pure read for render. Never mutates state, so it is safe inside a\r\n * useSyncExternalStore selector. Returns the materialised slice if\r\n * present, else the (referentially stable) seed. `T` is caller-asserted.\r\n */\r\n function read<T = unknown>(capId: string): T {\r\n return (state[capId] !== undefined ? state[capId] : seedFor(capId)) as T;\r\n }\r\n\r\n /**\r\n * Effectful: ensure a capability slice exists in the snapshot. Capability\r\n * hooks call this from a useEffect (NEVER during render) so a capability\r\n * that registered after the store hydrated still materialises from any\r\n * persisted data.\r\n */\r\n function ensureCapability(capId: string): void {\r\n if (disposed) return;\r\n if (state[capId] !== undefined) return;\r\n setSlice(capId, computePayload(capId));\r\n notify();\r\n }\r\n\r\n /* ── writes (optimistic + async persist) ─────────────────────────── */\r\n\r\n function write<T = unknown>(\r\n capId: string,\r\n updater: PersonalizationUpdater<T>,\r\n options?: WriteOptions\r\n ): T | undefined {\r\n if (disposed) return undefined;\r\n const persist = !options || options.persist !== false;\r\n\r\n materialiseIfMissing(capId);\r\n const prev = state[capId] as T;\r\n const next: T =\r\n typeof updater === \"function\"\r\n ? (updater as (previous: T) => T)(prev)\r\n : updater;\r\n if (Object.is(next, prev)) return prev; // no-op short-circuit\r\n\r\n setSlice(capId, next);\r\n if (!hydrated) preHydrationWrites.add(capId);\r\n notify();\r\n\r\n if (persist && adapter && typeof adapter.save === \"function\") {\r\n // Capture the narrowed adapter: the `if` narrowing does not reach into\r\n // the async closures below, and `save` is required on Adapter.\r\n const activeAdapter = adapter;\r\n const desc = getCapability(capId);\r\n const envelope = makeEnvelope(desc ? desc.schemaVersion : 1, next);\r\n statuses[capId] = \"saving\";\r\n Promise.resolve()\r\n .then(function persistSlice() {\r\n return activeAdapter.save(scope, capId, envelope);\r\n })\r\n .then(function onSaved() {\r\n if (disposed) return;\r\n statuses[capId] = \"idle\";\r\n errors[capId] = null;\r\n })\r\n .catch(function onSaveFailed(e: unknown) {\r\n if (disposed) return;\r\n // Keep the optimistic value for the session; surface the error.\r\n reportError(capId, e);\r\n });\r\n }\r\n return next;\r\n }\r\n\r\n /** Reset a capability to its seed and drop it from storage. */\r\n function clearCapability(capId: string): void {\r\n if (disposed) return;\r\n setSlice(capId, seedFor(capId));\r\n notify();\r\n if (adapter && typeof adapter.remove === \"function\") {\r\n const activeAdapter = adapter;\r\n Promise.resolve()\r\n .then(function removeSlice() {\r\n return activeAdapter.remove\r\n ? activeAdapter.remove(scope, capId)\r\n : undefined;\r\n })\r\n .catch(function onRemoveFailed(e: unknown) {\r\n reportError(capId, e);\r\n });\r\n }\r\n }\r\n\r\n /* ── hydration ───────────────────────────────────────────────────── */\r\n\r\n function rematerialiseAfterLoad(): void {\r\n const ids = new Set<string>();\r\n Object.keys(rawEnvelopes).forEach(function addRawId(id) {\r\n ids.add(id);\r\n });\r\n getRegisteredCapabilities().forEach(function addRegisteredId(d) {\r\n ids.add(d.id);\r\n });\r\n\r\n const next: Record<string, unknown> = {};\r\n for (const key of Object.keys(state)) next[key] = state[key];\r\n\r\n ids.forEach(function materialise(capId) {\r\n // Persisted truth wins over a pre-hydration seed, but never clobbers\r\n // an optimistic write the user made during the hydrating window.\r\n if (preHydrationWrites.has(capId)) return;\r\n next[capId] = computePayload(capId);\r\n });\r\n state = next;\r\n }\r\n\r\n /** Synchronous seed at creation (flash-free for adapters exposing loadSync). */\r\n function trySyncSeed(): void {\r\n if (typeof window === \"undefined\") return;\r\n if (!adapter || typeof adapter.loadSync !== \"function\") return;\r\n try {\r\n const loaded = adapter.loadSync(scope);\r\n if (loaded && typeof loaded === \"object\") {\r\n rawEnvelopes = loaded;\r\n rematerialiseAfterLoad();\r\n hydrated = true;\r\n }\r\n } catch (e) {\r\n // Fall back to async hydrate().\r\n // eslint-disable-next-line no-console\r\n if (isDev && typeof console !== \"undefined\" && console.warn) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] personalization loadSync failed; deferring to async hydrate.\",\r\n e\r\n );\r\n }\r\n }\r\n }\r\n\r\n async function hydrate(): Promise<void> {\r\n if (disposed) return;\r\n if (typeof window === \"undefined\") return; // SSR: no hydration\r\n // Already seeded synchronously and the adapter has no remote source to\r\n // reconcile against → skip the redundant reload.\r\n if (\r\n hydrated &&\r\n adapter &&\r\n adapter.capabilities &&\r\n adapter.capabilities.remote === false\r\n ) {\r\n return;\r\n }\r\n try {\r\n const loaded =\r\n adapter && typeof adapter.load === \"function\"\r\n ? await adapter.load(scope)\r\n : {};\r\n if (disposed) return;\r\n rawEnvelopes = loaded && typeof loaded === \"object\" ? loaded : {};\r\n } catch (e) {\r\n rawEnvelopes = {};\r\n reportError(\"*\", e);\r\n }\r\n rematerialiseAfterLoad();\r\n hydrated = true;\r\n preHydrationWrites.clear();\r\n notify();\r\n }\r\n\r\n async function reloadCapability(capId: string): Promise<void> {\r\n if (disposed) return;\r\n try {\r\n const loaded =\r\n adapter && typeof adapter.load === \"function\"\r\n ? await adapter.load(scope)\r\n : {};\r\n if (disposed) return;\r\n rawEnvelopes = loaded && typeof loaded === \"object\" ? loaded : {};\r\n } catch (e) {\r\n reportError(capId, e);\r\n return;\r\n }\r\n setSlice(capId, computePayload(capId));\r\n notify();\r\n }\r\n\r\n /* ── cross-tab / external changes ────────────────────────────────── */\r\n\r\n function connect(): () => void {\r\n if (disposed) return function noop() {};\r\n if (!adapter || typeof adapter.subscribe !== \"function\") {\r\n return function noop() {};\r\n }\r\n disconnect = adapter.subscribe(scope, function onExternalChange(capId) {\r\n if (disposed) return;\r\n if (runtime.hydrateStrategy === \"local-wins\") return; // ignore external changes\r\n // remote-wins / merge → adopt the external change.\r\n // NOTE: \"merge\" currently behaves as remote-wins at the store level;\r\n // true merge is slice-specific and deferred to a slice opt-in.\r\n reloadCapability(capId);\r\n });\r\n return typeof disconnect === \"function\" ? disconnect : function noop() {};\r\n }\r\n\r\n function dispose(): void {\r\n disposed = true;\r\n if (typeof disconnect === \"function\") {\r\n try {\r\n disconnect();\r\n } catch {\r\n /* ignore */\r\n }\r\n disconnect = null;\r\n }\r\n listeners.clear();\r\n }\r\n\r\n /* ── runtime options / introspection ─────────────────────────────── */\r\n\r\n function setRuntime(opts?: PersonalizationRuntimeOptions): void {\r\n runtime = {\r\n onError: opts && typeof opts.onError === \"function\" ? opts.onError : null,\r\n hydrateStrategy: (opts && opts.hydrateStrategy) || \"remote-wins\",\r\n };\r\n }\r\n\r\n function status(capId: string): PersonalizationStatus {\r\n return statuses[capId] || (hydrated ? \"idle\" : \"hydrating\");\r\n }\r\n\r\n function error(capId: string): Error | null {\r\n return errors[capId] || null;\r\n }\r\n\r\n function isHydrated(): boolean {\r\n return hydrated;\r\n }\r\n\r\n function getScope(): Scope {\r\n return scope;\r\n }\r\n\r\n // Seed synchronously once everything above is initialised.\r\n trySyncSeed();\r\n\r\n return {\r\n // useSyncExternalStore contract\r\n subscribe: subscribe,\r\n getSnapshot: getSnapshot,\r\n getServerSnapshot: getServerSnapshot,\r\n // reads / writes\r\n read: read,\r\n write: write,\r\n ensureCapability: ensureCapability,\r\n clearCapability: clearCapability,\r\n // lifecycle\r\n hydrate: hydrate,\r\n connect: connect,\r\n dispose: dispose,\r\n setRuntime: setRuntime,\r\n // introspection\r\n status: status,\r\n error: error,\r\n isHydrated: isHydrated,\r\n getScope: getScope,\r\n };\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -43,4 +43,39 @@ export { default as FavoriteToggle } from "../components/FavoriteToggle";
|
|
|
43
43
|
|
|
44
44
|
/* Saved filters capability (Batch 4). Composites in v2 patterns/. */
|
|
45
45
|
export { useSavedFilters, SAVED_FILTERS_CAPABILITY_ID } from "./capabilities/savedFilters";
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Reading a saved filter BACK (gap G-50).
|
|
49
|
+
*
|
|
50
|
+
* `criteria` is opaque here on purpose, but the round trip is not symmetrical:
|
|
51
|
+
* `createLocalStorageAdapter` writes with `JSON.stringify` (so a `Date` becomes
|
|
52
|
+
* an ISO string) and reads with a bare `JSON.parse`, with NO reviver. Every host
|
|
53
|
+
* that persists a date therefore got a string back, in a field its own types
|
|
54
|
+
* declare as a `Date` — straight into `<DatePicker value>` and into the search
|
|
55
|
+
* payload, silently, since the only way to assign the parsed payload into typed
|
|
56
|
+
* form state is an assertion.
|
|
57
|
+
*
|
|
58
|
+
* Nine list screens of one module carried a DOUBLE conversion per `onApply` to
|
|
59
|
+
* get around it. See the file header for why the fix belongs here and not in the
|
|
60
|
+
* adapter.
|
|
61
|
+
*/
|
|
62
|
+
export { reviveSavedCriteria } from "./capabilities/reviveSavedCriteria";
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Grid preferences capability (gap G-35) — per-user, per-resource hidden
|
|
66
|
+
* columns.
|
|
67
|
+
*
|
|
68
|
+
* `DataGridToolbar` owns the column-visibility UI but holds no state, so every
|
|
69
|
+
* host persisted the choice itself in a bare `localStorage` key, which is NOT
|
|
70
|
+
* user-scoped — unlike this foundation's `…:{userId}:{capabilityId}` scheme.
|
|
71
|
+
* On a shared workstation one user inherited another's hidden columns.
|
|
72
|
+
*
|
|
73
|
+
* A host could not fix it: `registerCapability` is exported below as a seam
|
|
74
|
+
* "for custom/host-defined capabilities", but `usePersonalizationStore` and
|
|
75
|
+
* `useStoreSelector` are deliberately private (§2.8, minimum API surface), so
|
|
76
|
+
* a registered capability had no way to be read or written. The seam is
|
|
77
|
+
* advertised without being complete; until that is resolved, a new capability
|
|
78
|
+
* has to ship here.
|
|
79
|
+
*/
|
|
80
|
+
export { useGridPreferences, GRID_PREFERENCES_CAPABILITY_ID } from "./capabilities/gridPreferences";
|
|
46
81
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","UserPersonalizationProvider","createLocalStorageAdapter","createMemoryAdapter","registerCapability","makeEnvelope","useFavorites","useIsFavorite","FAVORITES_CAPABILITY_ID","useFavoritesView","filterRowsByFavorites","sortRowsByFavorites","FAVORITES_FILTER","FAVORITES_SORT","FavoriteToggle","useSavedFilters","SAVED_FILTERS_CAPABILITY_ID"],"sources":["../../../../src/lib/v2/personalization/index.ts"],"sourcesContent":["/**\r\n * @portnet/ui · v2 · User Personalization Foundation\r\n * Public surface.\r\n *\r\n * Import via the dedicated subpath:\r\n * import {\r\n * UserPersonalizationProvider,\r\n * useFavorites,\r\n * useFavoritesView,\r\n * useSavedFilters,\r\n * FavoriteToggle,\r\n * } from \"@portnet/ui/v2/personalization\";\r\n *\r\n * Surface is intentionally minimal (architecture doc §2.8 — minimum API\r\n * surface). The store handle and the internal selector primitive are NOT\r\n * exported; hosts interact through the provider, the capability hooks,\r\n * and the capability components.\r\n *\r\n * The grid-bound composites — SaveFilterDialog / SavedFiltersMenu (saved\r\n * filters) and makeFavoriteColumn / FavoritesFilter (favorites) — are\r\n * exposed via @portnet/ui/v2 (patterns/), not re-exported here, so the\r\n * personalization barrel never imports from patterns/.\r\n */\r\n\r\n/* Provider — the single configuration point. */\r\nexport { default as UserPersonalizationProvider } from \"./PersonalizationProvider\";\r\n\r\n/* Built-in storage adapters (a remote adapter will join them, swap-in). */\r\nexport { default as createLocalStorageAdapter } from \"./adapters/createLocalStorageAdapter\";\r\nexport { default as createMemoryAdapter } from \"./adapters/createMemoryAdapter\";\r\n\r\n/* Capability registration seam — for custom/host-defined capabilities. */\r\nexport { registerCapability, makeEnvelope } from \"./schema\";\r\n\r\n/* Canonical domain types — the TS contract that replaced the runtime\r\n * PropTypes shapes (Scope / Adapter / FavoriteRef / SavedFilter). Type-only:\r\n * erased from the runtime bundle. */\r\nexport type { Scope, Adapter, FavoriteRef, SavedFilter } from \"./types\";\r\n\r\n/* Favorites capability (Batch 3) + view logic (Batch 5). */\r\nexport { useFavorites, useIsFavorite, FAVORITES_CAPABILITY_ID } from \"./capabilities/favorites\";\r\nexport {\r\n useFavoritesView,\r\n filterRowsByFavorites,\r\n sortRowsByFavorites,\r\n FAVORITES_FILTER,\r\n FAVORITES_SORT,\r\n} from \"./capabilities/favoritesView\";\r\nexport { default as FavoriteToggle } from \"../components/FavoriteToggle\";\r\n\r\n/* Saved filters capability (Batch 4). Composites in v2 patterns/. */\r\nexport { useSavedFilters, SAVED_FILTERS_CAPABILITY_ID } from \"./capabilities/savedFilters\";\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAASA,OAAO,IAAIC,2BAA2B,QAAQ,2BAA2B;;AAElF;AACA,SAASD,OAAO,IAAIE,yBAAyB,QAAQ,sCAAsC;AAC3F,SAASF,OAAO,IAAIG,mBAAmB,QAAQ,gCAAgC;;AAE/E;AACA,SAASC,kBAAkB,EAAEC,YAAY,QAAQ,UAAU;;AAE3D;AACA;AACA;;AAGA;AACA,SAASC,YAAY,EAAEC,aAAa,EAAEC,uBAAuB,QAAQ,0BAA0B;AAC/F,SACEC,gBAAgB,EAChBC,qBAAqB,EACrBC,mBAAmB,EACnBC,gBAAgB,EAChBC,cAAc,QACT,8BAA8B;AACrC,SAASb,OAAO,IAAIc,cAAc,QAAQ,8BAA8B;;AAExE;AACA,SAASC,eAAe,EAAEC,2BAA2B,QAAQ,6BAA6B","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","UserPersonalizationProvider","createLocalStorageAdapter","createMemoryAdapter","registerCapability","makeEnvelope","useFavorites","useIsFavorite","FAVORITES_CAPABILITY_ID","useFavoritesView","filterRowsByFavorites","sortRowsByFavorites","FAVORITES_FILTER","FAVORITES_SORT","FavoriteToggle","useSavedFilters","SAVED_FILTERS_CAPABILITY_ID","reviveSavedCriteria","useGridPreferences","GRID_PREFERENCES_CAPABILITY_ID"],"sources":["../../../../src/lib/v2/personalization/index.ts"],"sourcesContent":["/**\r\n * @portnet/ui · v2 · User Personalization Foundation\r\n * Public surface.\r\n *\r\n * Import via the dedicated subpath:\r\n * import {\r\n * UserPersonalizationProvider,\r\n * useFavorites,\r\n * useFavoritesView,\r\n * useSavedFilters,\r\n * FavoriteToggle,\r\n * } from \"@portnet/ui/v2/personalization\";\r\n *\r\n * Surface is intentionally minimal (architecture doc §2.8 — minimum API\r\n * surface). The store handle and the internal selector primitive are NOT\r\n * exported; hosts interact through the provider, the capability hooks,\r\n * and the capability components.\r\n *\r\n * The grid-bound composites — SaveFilterDialog / SavedFiltersMenu (saved\r\n * filters) and makeFavoriteColumn / FavoritesFilter (favorites) — are\r\n * exposed via @portnet/ui/v2 (patterns/), not re-exported here, so the\r\n * personalization barrel never imports from patterns/.\r\n */\r\n\r\n/* Provider — the single configuration point. */\r\nexport { default as UserPersonalizationProvider } from \"./PersonalizationProvider\";\r\n\r\n/* Built-in storage adapters (a remote adapter will join them, swap-in). */\r\nexport { default as createLocalStorageAdapter } from \"./adapters/createLocalStorageAdapter\";\r\nexport { default as createMemoryAdapter } from \"./adapters/createMemoryAdapter\";\r\n\r\n/* Capability registration seam — for custom/host-defined capabilities. */\r\nexport { registerCapability, makeEnvelope } from \"./schema\";\r\n\r\n/* Canonical domain types — the TS contract that replaced the runtime\r\n * PropTypes shapes (Scope / Adapter / FavoriteRef / SavedFilter). Type-only:\r\n * erased from the runtime bundle. */\r\nexport type { Scope, Adapter, FavoriteRef, SavedFilter } from \"./types\";\r\n\r\n/* Favorites capability (Batch 3) + view logic (Batch 5). */\r\nexport { useFavorites, useIsFavorite, FAVORITES_CAPABILITY_ID } from \"./capabilities/favorites\";\r\nexport {\r\n useFavoritesView,\r\n filterRowsByFavorites,\r\n sortRowsByFavorites,\r\n FAVORITES_FILTER,\r\n FAVORITES_SORT,\r\n} from \"./capabilities/favoritesView\";\r\nexport { default as FavoriteToggle } from \"../components/FavoriteToggle\";\r\n\r\n/* Saved filters capability (Batch 4). Composites in v2 patterns/. */\r\nexport { useSavedFilters, SAVED_FILTERS_CAPABILITY_ID } from \"./capabilities/savedFilters\";\r\n\r\n/**\r\n * Reading a saved filter BACK (gap G-50).\r\n *\r\n * `criteria` is opaque here on purpose, but the round trip is not symmetrical:\r\n * `createLocalStorageAdapter` writes with `JSON.stringify` (so a `Date` becomes\r\n * an ISO string) and reads with a bare `JSON.parse`, with NO reviver. Every host\r\n * that persists a date therefore got a string back, in a field its own types\r\n * declare as a `Date` — straight into `<DatePicker value>` and into the search\r\n * payload, silently, since the only way to assign the parsed payload into typed\r\n * form state is an assertion.\r\n *\r\n * Nine list screens of one module carried a DOUBLE conversion per `onApply` to\r\n * get around it. See the file header for why the fix belongs here and not in the\r\n * adapter.\r\n */\r\nexport { reviveSavedCriteria } from \"./capabilities/reviveSavedCriteria\";\r\n\r\n/**\r\n * Grid preferences capability (gap G-35) — per-user, per-resource hidden\r\n * columns.\r\n *\r\n * `DataGridToolbar` owns the column-visibility UI but holds no state, so every\r\n * host persisted the choice itself in a bare `localStorage` key, which is NOT\r\n * user-scoped — unlike this foundation's `…:{userId}:{capabilityId}` scheme.\r\n * On a shared workstation one user inherited another's hidden columns.\r\n *\r\n * A host could not fix it: `registerCapability` is exported below as a seam\r\n * \"for custom/host-defined capabilities\", but `usePersonalizationStore` and\r\n * `useStoreSelector` are deliberately private (§2.8, minimum API surface), so\r\n * a registered capability had no way to be read or written. The seam is\r\n * advertised without being complete; until that is resolved, a new capability\r\n * has to ship here.\r\n */\r\nexport {\r\n useGridPreferences,\r\n GRID_PREFERENCES_CAPABILITY_ID,\r\n} from \"./capabilities/gridPreferences\";\r\nexport type {\r\n UseGridPreferencesResult,\r\n GridPreferencesEntry,\r\n} from \"./capabilities/gridPreferences\";\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAASA,OAAO,IAAIC,2BAA2B,QAAQ,2BAA2B;;AAElF;AACA,SAASD,OAAO,IAAIE,yBAAyB,QAAQ,sCAAsC;AAC3F,SAASF,OAAO,IAAIG,mBAAmB,QAAQ,gCAAgC;;AAE/E;AACA,SAASC,kBAAkB,EAAEC,YAAY,QAAQ,UAAU;;AAE3D;AACA;AACA;;AAGA;AACA,SAASC,YAAY,EAAEC,aAAa,EAAEC,uBAAuB,QAAQ,0BAA0B;AAC/F,SACEC,gBAAgB,EAChBC,qBAAqB,EACrBC,mBAAmB,EACnBC,gBAAgB,EAChBC,cAAc,QACT,8BAA8B;AACrC,SAASb,OAAO,IAAIc,cAAc,QAAQ,8BAA8B;;AAExE;AACA,SAASC,eAAe,EAAEC,2BAA2B,QAAQ,6BAA6B;;AAE1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,mBAAmB,QAAQ,oCAAoC;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SACEC,kBAAkB,EAClBC,8BAA8B,QACzB,gCAAgC","ignoreList":[]}
|
|
@@ -27,10 +27,10 @@ import * as React from "react";
|
|
|
27
27
|
|
|
28
28
|
/** Stable configuration carried by PersonalizationConfigContext. */
|
|
29
29
|
|
|
30
|
-
export
|
|
31
|
-
export
|
|
30
|
+
export const PersonalizationConfigContext = /*#__PURE__*/React.createContext(null);
|
|
31
|
+
export const PersonalizationStoreContext = /*#__PURE__*/React.createContext(null);
|
|
32
32
|
export function usePersonalizationConfig() {
|
|
33
|
-
|
|
33
|
+
const ctx = React.useContext(PersonalizationConfigContext);
|
|
34
34
|
if (!ctx) {
|
|
35
35
|
throw new Error("[@portnet/ui v2] usePersonalizationConfig() must be used inside <UserPersonalizationProvider>.");
|
|
36
36
|
}
|
|
@@ -39,7 +39,7 @@ export function usePersonalizationConfig() {
|
|
|
39
39
|
|
|
40
40
|
/** The store handle. */
|
|
41
41
|
export function usePersonalizationStore() {
|
|
42
|
-
|
|
42
|
+
const store = React.useContext(PersonalizationStoreContext);
|
|
43
43
|
if (!store) {
|
|
44
44
|
throw new Error("[@portnet/ui v2] personalization hooks must be used inside <UserPersonalizationProvider>.");
|
|
45
45
|
}
|
|
@@ -72,15 +72,15 @@ export function usePersonalizationLabels() {
|
|
|
72
72
|
* loop-free.
|
|
73
73
|
*/
|
|
74
74
|
export function useStoreSelector(selector, isEqual) {
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
const store = usePersonalizationStore();
|
|
76
|
+
const cacheRef = React.useRef(null);
|
|
77
77
|
function getSelection() {
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
const snapshot = store.getSnapshot();
|
|
79
|
+
const cache = cacheRef.current;
|
|
80
80
|
if (cache && Object.is(cache.snapshot, snapshot) && cache.selector === selector && cache.isEqual === isEqual) {
|
|
81
81
|
return cache.selection;
|
|
82
82
|
}
|
|
83
|
-
|
|
83
|
+
const nextSelection = selector(snapshot);
|
|
84
84
|
if (cache && cache.hasValue && typeof isEqual === "function" && isEqual(cache.selection, nextSelection)) {
|
|
85
85
|
cacheRef.current = {
|
|
86
86
|
snapshot: snapshot,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personalizationContext.js","names":["React","PersonalizationConfigContext","createContext","PersonalizationStoreContext","usePersonalizationConfig","ctx","useContext","Error","usePersonalizationStore","store","useScope","scope","usePersonalizationLabels","labels","useStoreSelector","selector","isEqual","cacheRef","useRef","getSelection","snapshot","getSnapshot","cache","current","Object","is","selection","nextSelection","hasValue","getServerSelection","getServerSnapshot","useSyncExternalStore","subscribe"],"sources":["../../../../src/lib/v2/personalization/personalizationContext.ts"],"sourcesContent":["/**\r\n * personalizationContext — Portnet UI v2 · personalization\r\n *\r\n * Two contexts, by design (architecture doc §2.5):\r\n * - PersonalizationConfigContext : STABLE config { scope, labels }, set\r\n * once by the provider. Low churn.\r\n * - PersonalizationStoreContext : the store handle. Mutable preference\r\n * state NEVER travels through context — it is read via\r\n * useSyncExternalStore selectors. A component toggling a favorite\r\n * cannot re-render a component reading saved filters.\r\n *\r\n * `useStoreSelector` is the internal subscription primitive: a\r\n * useSyncExternalStore wrapper that caches by (snapshot, selector) and\r\n * supports an optional equality function so derived/object selections stay\r\n * referentially stable. It is NOT exported from the public surface — the\r\n * capability slices (Batch 3/4) consume it; hosts use the capability hooks.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport type {\r\n PersonalizationSnapshot,\r\n PersonalizationStore,\r\n} from \"./createPersonalizationStore\";\r\nimport type { Scope } from \"./types\";\r\n\r\n/**\r\n * Merged label bag (provider defaults + host overrides). The concrete\r\n * default values live in DEFAULT_PERSONALIZATION_LABELS in the provider;\r\n * this is the canonical type both the provider and the capability slices\r\n * import.\r\n */\r\nexport interface PersonalizationLabels {\r\n // Follow / \"suivis\" (Batch 3)\r\n addFavorite: string;\r\n removeFavorite: string;\r\n favoritesOnly: string;\r\n showAll: string;\r\n favoriteColumnHeader: string;\r\n // Saved filters (Batch 4)\r\n savedFilters: string;\r\n saveCurrentFilter: string;\r\n filterNameLabel: string;\r\n filterNamePlaceholder: string;\r\n saveFilter: string;\r\n updateFilter: string;\r\n deleteFilter: string;\r\n deleteFilterConfirm: string;\r\n setAsDefault: string;\r\n defaultBadge: string;\r\n manageFilters: string;\r\n noSavedFilters: string;\r\n cancel: string;\r\n}\r\n\r\n/** Stable configuration carried by PersonalizationConfigContext. */\r\nexport interface PersonalizationConfig {\r\n scope: Scope;\r\n labels: PersonalizationLabels;\r\n}\r\n\r\nexport const PersonalizationConfigContext =\r\n React.createContext<PersonalizationConfig | null>(null);\r\nexport const PersonalizationStoreContext =\r\n React.createContext<PersonalizationStore | null>(null);\r\n\r\nexport function usePersonalizationConfig(): PersonalizationConfig {\r\n const ctx = React.useContext(PersonalizationConfigContext);\r\n if (!ctx) {\r\n throw new Error(\r\n \"[@portnet/ui v2] usePersonalizationConfig() must be used inside <UserPersonalizationProvider>.\"\r\n );\r\n }\r\n return ctx;\r\n}\r\n\r\n/** The store handle. */\r\nexport function usePersonalizationStore(): PersonalizationStore {\r\n const store = React.useContext(PersonalizationStoreContext);\r\n if (!store) {\r\n throw new Error(\r\n \"[@portnet/ui v2] personalization hooks must be used inside <UserPersonalizationProvider>.\"\r\n );\r\n }\r\n return store;\r\n}\r\n\r\n/** Convenience: the current scope. */\r\nexport function useScope(): Scope {\r\n return usePersonalizationConfig().scope;\r\n}\r\n\r\n/** Convenience: merged labels (provider defaults + host overrides). */\r\nexport function usePersonalizationLabels(): PersonalizationLabels {\r\n return usePersonalizationConfig().labels;\r\n}\r\n\r\ninterface SelectorCache<T> {\r\n snapshot: PersonalizationSnapshot;\r\n selector: (snapshot: PersonalizationSnapshot) => T;\r\n isEqual: ((a: T, b: T) => boolean) | undefined;\r\n selection: T;\r\n hasValue: boolean;\r\n}\r\n\r\n/**\r\n * Subscribe to the store with a selector. Returns a referentially stable\r\n * value when the selected slice is unchanged — required by\r\n * useSyncExternalStore and the basis of the no-cross-capability-re-render\r\n * guarantee.\r\n *\r\n * The cache is keyed on (snapshot identity, selector identity, isEqual\r\n * identity). When the snapshot is unchanged for the same selector, the\r\n * memoised selection is returned without re-running the selector. When the\r\n * snapshot changes, the selector re-runs; if `isEqual` is supplied and the\r\n * new value is equal to the previous one, the previous reference is kept.\r\n *\r\n * Selectors should be stable (e.g. useCallback) OR rely on the store's\r\n * structural sharing returning stable slice references — both keep this\r\n * loop-free.\r\n */\r\nexport function useStoreSelector<T>(\r\n selector: (snapshot: PersonalizationSnapshot) => T,\r\n isEqual?: (a: T, b: T) => boolean\r\n): T {\r\n const store = usePersonalizationStore();\r\n const cacheRef = React.useRef<SelectorCache<T> | null>(null);\r\n\r\n function getSelection(): T {\r\n const snapshot = store.getSnapshot();\r\n const cache = cacheRef.current;\r\n if (\r\n cache &&\r\n Object.is(cache.snapshot, snapshot) &&\r\n cache.selector === selector &&\r\n cache.isEqual === isEqual\r\n ) {\r\n return cache.selection;\r\n }\r\n const nextSelection = selector(snapshot);\r\n if (\r\n cache &&\r\n cache.hasValue &&\r\n typeof isEqual === \"function\" &&\r\n isEqual(cache.selection, nextSelection)\r\n ) {\r\n cacheRef.current = {\r\n snapshot: snapshot,\r\n selector: selector,\r\n isEqual: isEqual,\r\n selection: cache.selection,\r\n hasValue: true,\r\n };\r\n return cache.selection;\r\n }\r\n cacheRef.current = {\r\n snapshot: snapshot,\r\n selector: selector,\r\n isEqual: isEqual,\r\n selection: nextSelection,\r\n hasValue: true,\r\n };\r\n return nextSelection;\r\n }\r\n\r\n function getServerSelection(): T {\r\n return selector(store.getServerSnapshot());\r\n }\r\n\r\n return React.useSyncExternalStore(\r\n store.subscribe,\r\n getSelection,\r\n getServerSelection\r\n );\r\n}\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;;AAQ9B;AACA;AACA;AACA;AACA;AACA;;AAwBA;;AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"personalizationContext.js","names":["React","PersonalizationConfigContext","createContext","PersonalizationStoreContext","usePersonalizationConfig","ctx","useContext","Error","usePersonalizationStore","store","useScope","scope","usePersonalizationLabels","labels","useStoreSelector","selector","isEqual","cacheRef","useRef","getSelection","snapshot","getSnapshot","cache","current","Object","is","selection","nextSelection","hasValue","getServerSelection","getServerSnapshot","useSyncExternalStore","subscribe"],"sources":["../../../../src/lib/v2/personalization/personalizationContext.ts"],"sourcesContent":["/**\r\n * personalizationContext — Portnet UI v2 · personalization\r\n *\r\n * Two contexts, by design (architecture doc §2.5):\r\n * - PersonalizationConfigContext : STABLE config { scope, labels }, set\r\n * once by the provider. Low churn.\r\n * - PersonalizationStoreContext : the store handle. Mutable preference\r\n * state NEVER travels through context — it is read via\r\n * useSyncExternalStore selectors. A component toggling a favorite\r\n * cannot re-render a component reading saved filters.\r\n *\r\n * `useStoreSelector` is the internal subscription primitive: a\r\n * useSyncExternalStore wrapper that caches by (snapshot, selector) and\r\n * supports an optional equality function so derived/object selections stay\r\n * referentially stable. It is NOT exported from the public surface — the\r\n * capability slices (Batch 3/4) consume it; hosts use the capability hooks.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport type {\r\n PersonalizationSnapshot,\r\n PersonalizationStore,\r\n} from \"./createPersonalizationStore\";\r\nimport type { Scope } from \"./types\";\r\n\r\n/**\r\n * Merged label bag (provider defaults + host overrides). The concrete\r\n * default values live in DEFAULT_PERSONALIZATION_LABELS in the provider;\r\n * this is the canonical type both the provider and the capability slices\r\n * import.\r\n */\r\nexport interface PersonalizationLabels {\r\n // Follow / \"suivis\" (Batch 3)\r\n addFavorite: string;\r\n removeFavorite: string;\r\n favoritesOnly: string;\r\n showAll: string;\r\n favoriteColumnHeader: string;\r\n // Saved filters (Batch 4)\r\n savedFilters: string;\r\n saveCurrentFilter: string;\r\n filterNameLabel: string;\r\n filterNamePlaceholder: string;\r\n saveFilter: string;\r\n updateFilter: string;\r\n deleteFilter: string;\r\n deleteFilterConfirm: string;\r\n setAsDefault: string;\r\n defaultBadge: string;\r\n manageFilters: string;\r\n noSavedFilters: string;\r\n cancel: string;\r\n}\r\n\r\n/** Stable configuration carried by PersonalizationConfigContext. */\r\nexport interface PersonalizationConfig {\r\n scope: Scope;\r\n labels: PersonalizationLabels;\r\n}\r\n\r\nexport const PersonalizationConfigContext =\r\n React.createContext<PersonalizationConfig | null>(null);\r\nexport const PersonalizationStoreContext =\r\n React.createContext<PersonalizationStore | null>(null);\r\n\r\nexport function usePersonalizationConfig(): PersonalizationConfig {\r\n const ctx = React.useContext(PersonalizationConfigContext);\r\n if (!ctx) {\r\n throw new Error(\r\n \"[@portnet/ui v2] usePersonalizationConfig() must be used inside <UserPersonalizationProvider>.\"\r\n );\r\n }\r\n return ctx;\r\n}\r\n\r\n/** The store handle. */\r\nexport function usePersonalizationStore(): PersonalizationStore {\r\n const store = React.useContext(PersonalizationStoreContext);\r\n if (!store) {\r\n throw new Error(\r\n \"[@portnet/ui v2] personalization hooks must be used inside <UserPersonalizationProvider>.\"\r\n );\r\n }\r\n return store;\r\n}\r\n\r\n/** Convenience: the current scope. */\r\nexport function useScope(): Scope {\r\n return usePersonalizationConfig().scope;\r\n}\r\n\r\n/** Convenience: merged labels (provider defaults + host overrides). */\r\nexport function usePersonalizationLabels(): PersonalizationLabels {\r\n return usePersonalizationConfig().labels;\r\n}\r\n\r\ninterface SelectorCache<T> {\r\n snapshot: PersonalizationSnapshot;\r\n selector: (snapshot: PersonalizationSnapshot) => T;\r\n isEqual: ((a: T, b: T) => boolean) | undefined;\r\n selection: T;\r\n hasValue: boolean;\r\n}\r\n\r\n/**\r\n * Subscribe to the store with a selector. Returns a referentially stable\r\n * value when the selected slice is unchanged — required by\r\n * useSyncExternalStore and the basis of the no-cross-capability-re-render\r\n * guarantee.\r\n *\r\n * The cache is keyed on (snapshot identity, selector identity, isEqual\r\n * identity). When the snapshot is unchanged for the same selector, the\r\n * memoised selection is returned without re-running the selector. When the\r\n * snapshot changes, the selector re-runs; if `isEqual` is supplied and the\r\n * new value is equal to the previous one, the previous reference is kept.\r\n *\r\n * Selectors should be stable (e.g. useCallback) OR rely on the store's\r\n * structural sharing returning stable slice references — both keep this\r\n * loop-free.\r\n */\r\nexport function useStoreSelector<T>(\r\n selector: (snapshot: PersonalizationSnapshot) => T,\r\n isEqual?: (a: T, b: T) => boolean\r\n): T {\r\n const store = usePersonalizationStore();\r\n const cacheRef = React.useRef<SelectorCache<T> | null>(null);\r\n\r\n function getSelection(): T {\r\n const snapshot = store.getSnapshot();\r\n const cache = cacheRef.current;\r\n if (\r\n cache &&\r\n Object.is(cache.snapshot, snapshot) &&\r\n cache.selector === selector &&\r\n cache.isEqual === isEqual\r\n ) {\r\n return cache.selection;\r\n }\r\n const nextSelection = selector(snapshot);\r\n if (\r\n cache &&\r\n cache.hasValue &&\r\n typeof isEqual === \"function\" &&\r\n isEqual(cache.selection, nextSelection)\r\n ) {\r\n cacheRef.current = {\r\n snapshot: snapshot,\r\n selector: selector,\r\n isEqual: isEqual,\r\n selection: cache.selection,\r\n hasValue: true,\r\n };\r\n return cache.selection;\r\n }\r\n cacheRef.current = {\r\n snapshot: snapshot,\r\n selector: selector,\r\n isEqual: isEqual,\r\n selection: nextSelection,\r\n hasValue: true,\r\n };\r\n return nextSelection;\r\n }\r\n\r\n function getServerSelection(): T {\r\n return selector(store.getServerSnapshot());\r\n }\r\n\r\n return React.useSyncExternalStore(\r\n store.subscribe,\r\n getSelection,\r\n getServerSelection\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* the OPAQUE envelope; the `payload` shape is owned by the slice.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
const isDev = typeof process !== "undefined" && !!process.env && process.env["NODE_ENV"] !== "production";
|
|
22
22
|
|
|
23
23
|
/** A capability's migrate function: upgrade an old payload to the current version. */
|
|
24
24
|
|
|
@@ -27,7 +27,7 @@ var isDev = typeof process !== "undefined" && !!process.env && process.env["NODE
|
|
|
27
27
|
/** Frozen, normalised capability descriptor stored in the registry. */
|
|
28
28
|
|
|
29
29
|
/** id -> frozen descriptor. Module-level (same lifecycle model as useDensity's store). */
|
|
30
|
-
|
|
30
|
+
const registry = new Map();
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* Register a capability descriptor. Idempotent: the first registration for an
|
|
@@ -42,16 +42,15 @@ export function registerCapability(descriptor) {
|
|
|
42
42
|
}
|
|
43
43
|
return null;
|
|
44
44
|
}
|
|
45
|
-
|
|
45
|
+
const existing = registry.get(descriptor.id);
|
|
46
46
|
if (existing) {
|
|
47
|
-
|
|
48
|
-
if (isDev && existing.schemaVersion !== ((_descriptor$schemaVer = descriptor.schemaVersion) !== null && _descriptor$schemaVer !== void 0 ? _descriptor$schemaVer : 1)) {
|
|
47
|
+
if (isDev && existing.schemaVersion !== (descriptor.schemaVersion ?? 1)) {
|
|
49
48
|
// eslint-disable-next-line no-console
|
|
50
|
-
console.warn(
|
|
49
|
+
console.warn(`[@portnet/ui v2] registerCapability: "${descriptor.id}" re-registered with a different ` + `schemaVersion (${existing.schemaVersion} → ${descriptor.schemaVersion}). Keeping the first ` + `registration. This usually means two @portnet/ui copies are loaded.`);
|
|
51
50
|
}
|
|
52
51
|
return existing;
|
|
53
52
|
}
|
|
54
|
-
|
|
53
|
+
const frozen = Object.freeze({
|
|
55
54
|
id: descriptor.id,
|
|
56
55
|
schemaVersion: typeof descriptor.schemaVersion === "number" ? descriptor.schemaVersion : 1,
|
|
57
56
|
defaultState: descriptor.defaultState !== undefined ? descriptor.defaultState : Object.freeze({}),
|
|
@@ -79,7 +78,7 @@ export function makeEnvelope(schemaVersion, payload) {
|
|
|
79
78
|
return {
|
|
80
79
|
schemaVersion: typeof schemaVersion === "number" ? schemaVersion : 1,
|
|
81
80
|
updatedAt: new Date().toISOString(),
|
|
82
|
-
payload
|
|
81
|
+
payload
|
|
83
82
|
};
|
|
84
83
|
}
|
|
85
84
|
|
|
@@ -88,5 +87,5 @@ export function makeEnvelope(schemaVersion, payload) {
|
|
|
88
87
|
* capability's payload `schemaVersion`). Bumped only on a global re-partition.
|
|
89
88
|
* Mirrored by adapters/_storageKey.ts.
|
|
90
89
|
*/
|
|
91
|
-
export
|
|
90
|
+
export const KEY_SCHEME_VERSION = "v1";
|
|
92
91
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":["isDev","process","env","registry","Map","registerCapability","descriptor","id","console","warn","existing","get","
|
|
1
|
+
{"version":3,"file":"schema.js","names":["isDev","process","env","registry","Map","registerCapability","descriptor","id","console","warn","existing","get","schemaVersion","frozen","Object","freeze","defaultState","undefined","migrate","set","getCapability","getRegisteredCapabilities","Array","from","values","makeEnvelope","payload","updatedAt","Date","toISOString","KEY_SCHEME_VERSION"],"sources":["../../../../src/lib/v2/personalization/schema.ts"],"sourcesContent":["/**\r\n * schema — Portnet UI v2 · User Personalization Foundation\r\n *\r\n * Capability registry + persistence envelope. The foundation is deliberately\r\n * capability-AGNOSTIC: the store and provider know nothing about \"favorites\"\r\n * or \"savedFilters\". Each capability *slice* registers itself here at import\r\n * time:\r\n *\r\n * import { registerCapability } from \"../schema\";\r\n * registerCapability({\r\n * id: \"favorites\",\r\n * schemaVersion: 1,\r\n * defaultState: Object.freeze({}),\r\n * migrate: (fromVersion, payload) => payload,\r\n * });\r\n *\r\n * Adding a new capability is therefore purely additive. The adapter persists\r\n * the OPAQUE envelope; the `payload` shape is owned by the slice.\r\n */\r\n\r\nimport type { Envelope } from \"./types\";\r\n\r\nconst isDev =\r\n typeof process !== \"undefined\" &&\r\n !!process.env &&\r\n process.env[\"NODE_ENV\"] !== \"production\";\r\n\r\n/** A capability's migrate function: upgrade an old payload to the current version. */\r\nexport type CapabilityMigrate = (\r\n fromVersion: number,\r\n payload: unknown\r\n) => unknown;\r\n\r\n/** Registration input for a capability slice. */\r\nexport interface CapabilityDescriptorInput {\r\n /** Unique capability id (e.g. \"favorites\"). */\r\n id: string;\r\n schemaVersion?: number | undefined;\r\n /** Seed when nothing is persisted (should be a STABLE/frozen ref). */\r\n defaultState?: unknown;\r\n migrate?: CapabilityMigrate | undefined;\r\n}\r\n\r\n/** Frozen, normalised capability descriptor stored in the registry. */\r\nexport interface CapabilityDescriptor {\r\n id: string;\r\n schemaVersion: number;\r\n defaultState: unknown;\r\n migrate: CapabilityMigrate | null;\r\n}\r\n\r\n/** id -> frozen descriptor. Module-level (same lifecycle model as useDensity's store). */\r\nconst registry = new Map<string, CapabilityDescriptor>();\r\n\r\n/**\r\n * Register a capability descriptor. Idempotent: the first registration for an\r\n * id wins; a second registration with a *different* schemaVersion is reported\r\n * in development (usually two library copies or a mismatched host version).\r\n */\r\nexport function registerCapability(\r\n descriptor: CapabilityDescriptorInput\r\n): CapabilityDescriptor | null {\r\n if (!descriptor || typeof descriptor.id !== \"string\" || !descriptor.id) {\r\n if (isDev) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] registerCapability: a non-empty string `id` is required.\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n const existing = registry.get(descriptor.id);\r\n if (existing) {\r\n if (isDev && existing.schemaVersion !== (descriptor.schemaVersion ?? 1)) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n `[@portnet/ui v2] registerCapability: \"${descriptor.id}\" re-registered with a different ` +\r\n `schemaVersion (${existing.schemaVersion} → ${descriptor.schemaVersion}). Keeping the first ` +\r\n `registration. This usually means two @portnet/ui copies are loaded.`\r\n );\r\n }\r\n return existing;\r\n }\r\n\r\n const frozen: CapabilityDescriptor = Object.freeze({\r\n id: descriptor.id,\r\n schemaVersion:\r\n typeof descriptor.schemaVersion === \"number\"\r\n ? descriptor.schemaVersion\r\n : 1,\r\n defaultState:\r\n descriptor.defaultState !== undefined\r\n ? descriptor.defaultState\r\n : Object.freeze({}),\r\n migrate:\r\n typeof descriptor.migrate === \"function\" ? descriptor.migrate : null,\r\n });\r\n registry.set(frozen.id, frozen);\r\n return frozen;\r\n}\r\n\r\n/** @returns the descriptor registered for `id`, or null. */\r\nexport function getCapability(id: string): CapabilityDescriptor | null {\r\n return registry.get(id) || null;\r\n}\r\n\r\n/** @returns every registered descriptor (snapshot array). */\r\nexport function getRegisteredCapabilities(): CapabilityDescriptor[] {\r\n return Array.from(registry.values());\r\n}\r\n\r\n/**\r\n * Build the versioned persistence envelope. The adapter treats `payload` as\r\n * opaque; `schemaVersion` lets a slice's migrate() upgrade old payloads on load.\r\n */\r\nexport function makeEnvelope(schemaVersion: number, payload: unknown): Envelope {\r\n return {\r\n schemaVersion: typeof schemaVersion === \"number\" ? schemaVersion : 1,\r\n updatedAt: new Date().toISOString(),\r\n payload,\r\n };\r\n}\r\n\r\n/**\r\n * Key-scheme version (the layout of the *storage key*, distinct from a\r\n * capability's payload `schemaVersion`). Bumped only on a global re-partition.\r\n * Mirrored by adapters/_storageKey.ts.\r\n */\r\nexport const KEY_SCHEME_VERSION = \"v1\";\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,MAAMA,KAAK,GACT,OAAOC,OAAO,KAAK,WAAW,IAC9B,CAAC,CAACA,OAAO,CAACC,GAAG,IACbD,OAAO,CAACC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY;;AAE1C;;AAMA;;AAUA;;AAQA;AACA,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAA+B,CAAC;;AAExD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,UAAqC,EACR;EAC7B,IAAI,CAACA,UAAU,IAAI,OAAOA,UAAU,CAACC,EAAE,KAAK,QAAQ,IAAI,CAACD,UAAU,CAACC,EAAE,EAAE;IACtE,IAAIP,KAAK,EAAE;MACT;MACAQ,OAAO,CAACC,IAAI,CACV,2EACF,CAAC;IACH;IACA,OAAO,IAAI;EACb;EAEA,MAAMC,QAAQ,GAAGP,QAAQ,CAACQ,GAAG,CAACL,UAAU,CAACC,EAAE,CAAC;EAC5C,IAAIG,QAAQ,EAAE;IACZ,IAAIV,KAAK,IAAIU,QAAQ,CAACE,aAAa,MAAMN,UAAU,CAACM,aAAa,IAAI,CAAC,CAAC,EAAE;MACvE;MACAJ,OAAO,CAACC,IAAI,CACV,yCAAyCH,UAAU,CAACC,EAAE,mCAAmC,GACvF,kBAAkBG,QAAQ,CAACE,aAAa,MAAMN,UAAU,CAACM,aAAa,uBAAuB,GAC7F,qEACJ,CAAC;IACH;IACA,OAAOF,QAAQ;EACjB;EAEA,MAAMG,MAA4B,GAAGC,MAAM,CAACC,MAAM,CAAC;IACjDR,EAAE,EAAED,UAAU,CAACC,EAAE;IACjBK,aAAa,EACX,OAAON,UAAU,CAACM,aAAa,KAAK,QAAQ,GACxCN,UAAU,CAACM,aAAa,GACxB,CAAC;IACPI,YAAY,EACVV,UAAU,CAACU,YAAY,KAAKC,SAAS,GACjCX,UAAU,CAACU,YAAY,GACvBF,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvBG,OAAO,EACL,OAAOZ,UAAU,CAACY,OAAO,KAAK,UAAU,GAAGZ,UAAU,CAACY,OAAO,GAAG;EACpE,CAAC,CAAC;EACFf,QAAQ,CAACgB,GAAG,CAACN,MAAM,CAACN,EAAE,EAAEM,MAAM,CAAC;EAC/B,OAAOA,MAAM;AACf;;AAEA;AACA,OAAO,SAASO,aAAaA,CAACb,EAAU,EAA+B;EACrE,OAAOJ,QAAQ,CAACQ,GAAG,CAACJ,EAAE,CAAC,IAAI,IAAI;AACjC;;AAEA;AACA,OAAO,SAASc,yBAAyBA,CAAA,EAA2B;EAClE,OAAOC,KAAK,CAACC,IAAI,CAACpB,QAAQ,CAACqB,MAAM,CAAC,CAAC,CAAC;AACtC;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAACb,aAAqB,EAAEc,OAAgB,EAAY;EAC9E,OAAO;IACLd,aAAa,EAAE,OAAOA,aAAa,KAAK,QAAQ,GAAGA,aAAa,GAAG,CAAC;IACpEe,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IACnCH;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMI,kBAAkB,GAAG,IAAI","ignoreList":[]}
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
3
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
5
|
-
function _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; }
|
|
6
|
-
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
7
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
8
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
9
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
10
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
11
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
12
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
13
1
|
import * as React from "react";
|
|
14
2
|
|
|
15
3
|
/**
|
|
@@ -20,21 +8,25 @@ import * as React from "react";
|
|
|
20
8
|
* paginated search builder for ReferentielField.
|
|
21
9
|
*/
|
|
22
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
-
export
|
|
11
|
+
export const ReferentielContext = /*#__PURE__*/React.createContext({
|
|
24
12
|
baseURL: "",
|
|
25
13
|
token: "",
|
|
26
14
|
secret: false,
|
|
27
15
|
langue: "fr",
|
|
28
16
|
cache: {},
|
|
29
|
-
cacheDispatch:
|
|
17
|
+
cacheDispatch: () => {}
|
|
30
18
|
});
|
|
31
|
-
|
|
32
|
-
function cacheReducer(state,
|
|
33
|
-
|
|
34
|
-
|
|
19
|
+
const INITIAL_CACHE = {};
|
|
20
|
+
function cacheReducer(state, {
|
|
21
|
+
type,
|
|
22
|
+
payload
|
|
23
|
+
}) {
|
|
35
24
|
switch (type) {
|
|
36
25
|
case "SET":
|
|
37
|
-
return
|
|
26
|
+
return {
|
|
27
|
+
...state,
|
|
28
|
+
[payload.key]: payload.data
|
|
29
|
+
};
|
|
38
30
|
default:
|
|
39
31
|
return state;
|
|
40
32
|
}
|
|
@@ -56,29 +48,22 @@ function cacheReducer(state, _ref) {
|
|
|
56
48
|
* Auth contract (see useReferentielClient): secret => the raw token is sent
|
|
57
49
|
* in the Authorization header; otherwise a Bearer prefix is used.
|
|
58
50
|
*/
|
|
59
|
-
export default function ReferentielProvider(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
token: token,
|
|
76
|
-
secret: secret,
|
|
77
|
-
langue: langue,
|
|
78
|
-
cache: cache,
|
|
79
|
-
cacheDispatch: cacheDispatch
|
|
80
|
-
};
|
|
81
|
-
}, [baseURL, token, secret, langue, cache]);
|
|
51
|
+
export default function ReferentielProvider({
|
|
52
|
+
baseURL,
|
|
53
|
+
token = "",
|
|
54
|
+
secret = false,
|
|
55
|
+
langue = "fr",
|
|
56
|
+
children
|
|
57
|
+
}) {
|
|
58
|
+
const [cache, cacheDispatch] = React.useReducer(cacheReducer, INITIAL_CACHE);
|
|
59
|
+
const value = React.useMemo(() => ({
|
|
60
|
+
baseURL,
|
|
61
|
+
token,
|
|
62
|
+
secret,
|
|
63
|
+
langue,
|
|
64
|
+
cache,
|
|
65
|
+
cacheDispatch
|
|
66
|
+
}), [baseURL, token, secret, langue, cache]);
|
|
82
67
|
return /*#__PURE__*/_jsx(ReferentielContext.Provider, {
|
|
83
68
|
value: value,
|
|
84
69
|
children: children
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReferentielProvider.js","names":["React","jsx","_jsx","ReferentielContext","createContext","baseURL","token","secret","langue","cache","cacheDispatch","INITIAL_CACHE","cacheReducer","state","
|
|
1
|
+
{"version":3,"file":"ReferentielProvider.js","names":["React","jsx","_jsx","ReferentielContext","createContext","baseURL","token","secret","langue","cache","cacheDispatch","INITIAL_CACHE","cacheReducer","state","type","payload","key","data","ReferentielProvider","children","useReducer","value","useMemo","Provider"],"sources":["../../../../src/lib/v2/referentiel/ReferentielProvider.tsx"],"sourcesContent":["import * as React from \"react\";\r\n\r\n/**\r\n * ReferentielContext — Portnet UI v2\r\n *\r\n * Carries the referential API configuration + a per-searchKey option cache.\r\n * Consumed by useReferentielClient / useReferentielOptions and (later) the\r\n * paginated search builder for ReferentielField.\r\n */\r\n\r\nexport type ReferentielCache = Record<string, unknown>;\r\n\r\ninterface ReferentielCacheSetPayload {\r\n key: string;\r\n data: unknown;\r\n}\r\n\r\nexport type ReferentielCacheAction = {\r\n type: \"SET\";\r\n payload: ReferentielCacheSetPayload;\r\n};\r\n\r\nexport interface ReferentielContextValue {\r\n baseURL: string;\r\n token: string;\r\n secret: boolean;\r\n langue: string;\r\n cache: ReferentielCache;\r\n cacheDispatch: React.Dispatch<ReferentielCacheAction>;\r\n}\r\n\r\nexport const ReferentielContext = React.createContext<ReferentielContextValue>({\r\n baseURL: \"\",\r\n token: \"\",\r\n secret: false,\r\n langue: \"fr\",\r\n cache: {},\r\n cacheDispatch: () => {},\r\n});\r\n\r\nconst INITIAL_CACHE: ReferentielCache = {};\r\n\r\nfunction cacheReducer(\r\n state: ReferentielCache,\r\n { type, payload }: ReferentielCacheAction\r\n): ReferentielCache {\r\n switch (type) {\r\n case \"SET\":\r\n return { ...state, [payload.key]: payload.data };\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport interface ReferentielProviderProps {\r\n baseURL: string;\r\n token?: string | undefined;\r\n secret?: boolean | undefined;\r\n langue?: string | undefined;\r\n children?: React.ReactNode | undefined;\r\n}\r\n\r\n/**\r\n * ReferentielProvider\r\n *\r\n * Set once at the app root with the referential API configuration:\r\n *\r\n * <ReferentielProvider\r\n * baseURL={config.referentielBaseURL}\r\n * token={config.referentielToken}\r\n * secret={config.referentielTypeAuth === \"SECRET\"}\r\n * langue=\"fr\"\r\n * >\r\n * {app}\r\n * </ReferentielProvider>\r\n *\r\n * Auth contract (see useReferentielClient): secret => the raw token is sent\r\n * in the Authorization header; otherwise a Bearer prefix is used.\r\n */\r\nexport default function ReferentielProvider({\r\n baseURL,\r\n token = \"\",\r\n secret = false,\r\n langue = \"fr\",\r\n children,\r\n}: ReferentielProviderProps): React.JSX.Element {\r\n const [cache, cacheDispatch] = React.useReducer(cacheReducer, INITIAL_CACHE);\r\n\r\n const value = React.useMemo<ReferentielContextValue>(\r\n () => ({ baseURL, token, secret, langue, cache, cacheDispatch }),\r\n [baseURL, token, secret, langue, cache]\r\n );\r\n\r\n return (\r\n <ReferentielContext.Provider value={value}>\r\n {children}\r\n </ReferentielContext.Provider>\r\n );\r\n}\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AANA,SAAAC,GAAA,IAAAC,IAAA;AA6BA,OAAO,MAAMC,kBAAkB,gBAAGH,KAAK,CAACI,aAAa,CAA0B;EAC7EC,OAAO,EAAE,EAAE;EACXC,KAAK,EAAE,EAAE;EACTC,MAAM,EAAE,KAAK;EACbC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE,CAAC,CAAC;EACTC,aAAa,EAAEA,CAAA,KAAM,CAAC;AACxB,CAAC,CAAC;AAEF,MAAMC,aAA+B,GAAG,CAAC,CAAC;AAE1C,SAASC,YAAYA,CACnBC,KAAuB,EACvB;EAAEC,IAAI;EAAEC;AAAgC,CAAC,EACvB;EAClB,QAAQD,IAAI;IACV,KAAK,KAAK;MACR,OAAO;QAAE,GAAGD,KAAK;QAAE,CAACE,OAAO,CAACC,GAAG,GAAGD,OAAO,CAACE;MAAK,CAAC;IAClD;MACE,OAAOJ,KAAK;EAChB;AACF;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASK,mBAAmBA,CAAC;EAC1Cb,OAAO;EACPC,KAAK,GAAG,EAAE;EACVC,MAAM,GAAG,KAAK;EACdC,MAAM,GAAG,IAAI;EACbW;AACwB,CAAC,EAAqB;EAC9C,MAAM,CAACV,KAAK,EAAEC,aAAa,CAAC,GAAGV,KAAK,CAACoB,UAAU,CAACR,YAAY,EAAED,aAAa,CAAC;EAE5E,MAAMU,KAAK,GAAGrB,KAAK,CAACsB,OAAO,CACzB,OAAO;IAAEjB,OAAO;IAAEC,KAAK;IAAEC,MAAM;IAAEC,MAAM;IAAEC,KAAK;IAAEC;EAAc,CAAC,CAAC,EAChE,CAACL,OAAO,EAAEC,KAAK,EAAEC,MAAM,EAAEC,MAAM,EAAEC,KAAK,CACxC,CAAC;EAED,oBACEP,IAAA,CAACC,kBAAkB,CAACoB,QAAQ;IAACF,KAAK,EAAEA,KAAM;IAAAF,QAAA,EACvCA;EAAQ,CACkB,CAAC;AAElC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/lib/v2/referentiel/types.ts"],"sourcesContent":["/**\r\n * @portnet/ui v2 — Referentiel data-access types (canonical).\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────\r\n * WHY THIS FILE EXISTS (Area 2 audit — duplicate public models)\r\n *\r\n * `useReferentielSearch.ts` and `useReferentielOptions.ts` used to declare\r\n * their request/response contracts inline, and `models/referentiel.ts`\r\n * (the public catalog surfaced at `@portnet/ui/v2`) independently REDECLARED\r\n * the same concepts under the same or parallel names. The two had already\r\n * drifted: the public `ReferentielSearchArgs` (reachable via\r\n * `import type { ReferentielSearchArgs } from \"@portnet/ui/v2\"`) was missing\r\n * `sort`, a field the real search function built by `useReferentielSearch`\r\n * accepts and forwards — so a host typing a variable against the exported\r\n * type could not see a field the function actually uses.\r\n *\r\n * Centralising the contracts here and having both the hooks and\r\n * `models/referentiel.ts` alias them removes the possibility of that drift\r\n * recurring. This is the single source of truth; `useReferentielSearch.ts`\r\n * and `useReferentielOptions.ts` re-export from here for backward\r\n * compatibility with existing import sites (`referentiel/index.ts`,\r\n * direct deep imports), and `models/referentiel.ts` aliases the same names.\r\n * ─────────────────────────────────────────────────────────────────────────\r\n */\r\nimport type { SortDescriptor } from \"../types/common\";\r\n\r\n/** Response envelope for the paginated referential endpoint (getPage). */\r\nexport interface ReferentielGetPageResponse<TItem = unknown> {\r\n succes?: boolean | undefined;\r\n results: TItem[];\r\n totalElements: number;\r\n message?: string | undefined;\r\n}\r\n\r\n/** Response envelope for the \"simple\" referential endpoint (getAll). */\r\nexport interface ReferentielGetAllResponse<T = unknown> {\r\n succes?: boolean | undefined;\r\n results?: T[] | undefined;\r\n message?: string | undefined;\r\n}\r\n\r\n/**\r\n * Arguments accepted by the search function returned from\r\n * {@link useReferentielSearch}.\r\n *\r\n * Every member is `?: T | undefined` rather than plain `?: T`. This is\r\n * REQUIRED for the documented composition below to type-check under\r\n * `exactOptionalPropertyTypes: true` — which the Platform TypeScript\r\n * Guidelines make mandatory:\r\n *\r\n * const search = useReferentielSearch<Operateur>({ path: \"operateurImpExp\" });\r\n * <FormikReferentielField search={search} … />\r\n *\r\n * ReferentielField invokes `search` with `ReferentielSearchParams`, whose\r\n * `sort` is declared `SortDescriptor[] | undefined` (a REQUIRED property that\r\n * may hold undefined). Under exactOptionalPropertyTypes a target member typed\r\n * `sort?: SortDescriptor[]` means \"absent, or an array — never undefined\", so\r\n * that argument was not assignable and the socle's own documented pairing\r\n * failed to compile in every strict-mode host. Widening here fixes the\r\n * composition once for the whole fleet instead of pushing a local adapter\r\n * into each consuming module.\r\n *\r\n * Type-only and permissive-only: no runtime change, no caller broken.\r\n */\r\nexport interface ReferentielSearchArgs<TCriteria = Record<string, unknown>> {\r\n /** ReferentielField criteria (mapped to request-body fields). */\r\n criteria?: TCriteria | undefined;\r\n /** 1-based page (forwarded to the API as 0-based `pageNumber`). */\r\n page?: number | undefined;\r\n /** Page size (default 5). */\r\n pageSize?: number | undefined;\r\n /** Sort descriptors — accepted for API parity; forwarding is host-driven. */\r\n sort?: SortDescriptor[] | undefined;\r\n}\r\n\r\n/** One page of referential results. */\r\nexport interface ReferentielSearchResult<TItem = unknown> {\r\n items: TItem[];\r\n total: number;\r\n}\r\n\r\n/** The paginated search function powering ReferentielField / FormikReferentielField. */\r\nexport type ReferentielSearchFn<\r\n TItem = unknown,\r\n TCriteria = Record<string, unknown>,\r\n> = (\r\n args?: ReferentielSearchArgs<TCriteria>,\r\n) => Promise<ReferentielSearchResult<TItem>>;\r\n\r\n/** Arguments for {@link useReferentielSearch}. */\r\nexport interface UseReferentielSearchParams<\r\n TCriteria extends Record<string, unknown> = Record<string, unknown>,\r\n> {\r\n /** API segment, e.g. \"operateurImpExp\" -> POST /api/operateurImpExp/getPage. */\r\n path?: string | undefined;\r\n /** Extra request-body fields merged into every page request. */\r\n specifications?: Record<string, unknown> | undefined;\r\n /** Maps ReferentielField criteria -> request-body fields (default: spread as-is). */\r\n mapCriteria?: ((\r\n criteria: TCriteria | undefined,\r\n ) => Record<string, unknown> | undefined) | undefined;\r\n}\r\n\r\n/** Arguments for {@link useReferentielOptions}. */\r\nexport interface UseReferentielOptionsParams<T = unknown> {\r\n /** Referential key (cleReferentiel). When empty, nothing is fetched. */\r\n searchKey?: string | undefined;\r\n /** Overrides the provider `langue`. */\r\n langue?: string | undefined;\r\n /** Extra request-body fields merged into the getAll payload. */\r\n specifications?: Record<string, unknown> | undefined;\r\n /** Client-side option filter (defaults to pass-through). */\r\n filterFunc?: ((option: T) => boolean) | undefined;\r\n}\r\n\r\n/** Result of {@link useReferentielOptions}. */\r\nexport interface UseReferentielOptionsResult<T = unknown> {\r\n options: T[];\r\n loading: boolean;\r\n error: Error | null;\r\n}\r\n"],"mappings":"","ignoreList":[]}
|