@portnet/ui 6.0.0 → 6.0.1
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/dist/esm/index.js +196 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldError.test.js +160 -0
- package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FileCard.test.js +144 -0
- package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -0
- package/dist/esm/v2/__tests__/MobileRowCard.test.js +333 -0
- package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -0
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +235 -0
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -0
- package/dist/esm/v2/__tests__/apiError.test.js +181 -0
- package/dist/esm/v2/__tests__/apiError.test.js.map +1 -0
- package/dist/esm/v2/__tests__/banned-patterns.test.js +270 -0
- package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -0
- package/dist/esm/v2/__tests__/contrast-palette.test.js +224 -0
- package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -0
- package/dist/esm/v2/__tests__/cssVariables.test.js +157 -0
- package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -0
- package/dist/esm/v2/__tests__/labels-merge.test.js +147 -0
- package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -0
- package/dist/esm/v2/__tests__/locale-fallback.test.js +109 -0
- package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusTrap.test.js +514 -0
- package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -0
- package/dist/esm/v2/components/Accordion.js +230 -0
- package/dist/esm/v2/components/Accordion.js.map +1 -0
- package/dist/esm/v2/components/ActionStrip.js +146 -0
- package/dist/esm/v2/components/ActionStrip.js.map +1 -0
- package/dist/esm/v2/components/Banner.js +254 -0
- package/dist/esm/v2/components/Banner.js.map +1 -0
- package/dist/esm/v2/components/Busy.js +97 -0
- package/dist/esm/v2/components/Busy.js.map +1 -0
- package/dist/esm/v2/components/Button.js +114 -0
- package/dist/esm/v2/components/Button.js.map +1 -0
- package/dist/esm/v2/components/CategoryTag.js +81 -0
- package/dist/esm/v2/components/CategoryTag.js.map +1 -0
- package/dist/esm/v2/components/Checkbox.js +124 -0
- package/dist/esm/v2/components/Checkbox.js.map +1 -0
- package/dist/esm/v2/components/Chip.js +124 -0
- package/dist/esm/v2/components/Chip.js.map +1 -0
- package/dist/esm/v2/components/Combobox.js +394 -0
- package/dist/esm/v2/components/Combobox.js.map +1 -0
- package/dist/esm/v2/components/CommandPalette.js +660 -0
- package/dist/esm/v2/components/CommandPalette.js.map +1 -0
- package/dist/esm/v2/components/ConfirmDialog.js +144 -0
- package/dist/esm/v2/components/ConfirmDialog.js.map +1 -0
- package/dist/esm/v2/components/DatePicker.js +200 -0
- package/dist/esm/v2/components/DatePicker.js.map +1 -0
- package/dist/esm/v2/components/DateRangePicker.js +289 -0
- package/dist/esm/v2/components/DateRangePicker.js.map +1 -0
- package/dist/esm/v2/components/DateTimePicker.js +182 -0
- package/dist/esm/v2/components/DateTimePicker.js.map +1 -0
- package/dist/esm/v2/components/Drawer.js +333 -0
- package/dist/esm/v2/components/Drawer.js.map +1 -0
- package/dist/esm/v2/components/Dropzone.js +540 -0
- package/dist/esm/v2/components/Dropzone.js.map +1 -0
- package/dist/esm/v2/components/EmptyState.js +102 -0
- package/dist/esm/v2/components/EmptyState.js.map +1 -0
- package/dist/esm/v2/components/FavoriteToggle.js +127 -0
- package/dist/esm/v2/components/FavoriteToggle.js.map +1 -0
- package/dist/esm/v2/components/Field.js +197 -0
- package/dist/esm/v2/components/Field.js.map +1 -0
- package/dist/esm/v2/components/FieldError.js +124 -0
- package/dist/esm/v2/components/FieldError.js.map +1 -0
- package/dist/esm/v2/components/FieldHelp.js +202 -0
- package/dist/esm/v2/components/FieldHelp.js.map +1 -0
- package/dist/esm/v2/components/FileCard.js +162 -0
- package/dist/esm/v2/components/FileCard.js.map +1 -0
- package/dist/esm/v2/components/FilterTab.js +138 -0
- package/dist/esm/v2/components/FilterTab.js.map +1 -0
- package/dist/esm/v2/components/ForbiddenPage.js +74 -0
- package/dist/esm/v2/components/ForbiddenPage.js.map +1 -0
- package/dist/esm/v2/components/FormGrid.js +179 -0
- package/dist/esm/v2/components/FormGrid.js.map +1 -0
- package/dist/esm/v2/components/FormikDisplay.js +118 -0
- package/dist/esm/v2/components/FormikDisplay.js.map +1 -0
- package/dist/esm/v2/components/Input.js +107 -0
- package/dist/esm/v2/components/Input.js.map +1 -0
- package/dist/esm/v2/components/KPICard.js +237 -0
- package/dist/esm/v2/components/KPICard.js.map +1 -0
- package/dist/esm/v2/components/KPIStrip.js +84 -0
- package/dist/esm/v2/components/KPIStrip.js.map +1 -0
- package/dist/esm/v2/components/KV.js +75 -0
- package/dist/esm/v2/components/KV.js.map +1 -0
- package/dist/esm/v2/components/KVGrid.js +74 -0
- package/dist/esm/v2/components/KVGrid.js.map +1 -0
- package/dist/esm/v2/components/Layout.js +284 -0
- package/dist/esm/v2/components/Layout.js.map +1 -0
- package/dist/esm/v2/components/MobileRowCard.js +314 -0
- package/dist/esm/v2/components/MobileRowCard.js.map +1 -0
- package/dist/esm/v2/components/Modal.js +276 -0
- package/dist/esm/v2/components/Modal.js.map +1 -0
- package/dist/esm/v2/components/NetworkErrorPage.js +78 -0
- package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -0
- package/dist/esm/v2/components/NotFoundPage.js +58 -0
- package/dist/esm/v2/components/NotFoundPage.js.map +1 -0
- package/dist/esm/v2/components/NumberInput.js +309 -0
- package/dist/esm/v2/components/NumberInput.js.map +1 -0
- package/dist/esm/v2/components/OverflowMenu.js +184 -0
- package/dist/esm/v2/components/OverflowMenu.js.map +1 -0
- package/dist/esm/v2/components/PdfViewer.js +122 -0
- package/dist/esm/v2/components/PdfViewer.js.map +1 -0
- package/dist/esm/v2/components/ProgressBar.js +202 -0
- package/dist/esm/v2/components/ProgressBar.js.map +1 -0
- package/dist/esm/v2/components/Radio.js +228 -0
- package/dist/esm/v2/components/Radio.js.map +1 -0
- package/dist/esm/v2/components/SectionErrorBoundary.js +214 -0
- package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -0
- package/dist/esm/v2/components/SectionHeader.js +132 -0
- package/dist/esm/v2/components/SectionHeader.js.map +1 -0
- package/dist/esm/v2/components/Segmented.js +254 -0
- package/dist/esm/v2/components/Segmented.js.map +1 -0
- package/dist/esm/v2/components/Select.js +490 -0
- package/dist/esm/v2/components/Select.js.map +1 -0
- package/dist/esm/v2/components/ServerErrorPage.js +74 -0
- package/dist/esm/v2/components/ServerErrorPage.js.map +1 -0
- package/dist/esm/v2/components/Skeleton.js +269 -0
- package/dist/esm/v2/components/Skeleton.js.map +1 -0
- package/dist/esm/v2/components/SkipLink.js +49 -0
- package/dist/esm/v2/components/SkipLink.js.map +1 -0
- package/dist/esm/v2/components/Spinner.js +69 -0
- package/dist/esm/v2/components/Spinner.js.map +1 -0
- package/dist/esm/v2/components/Status.js +64 -0
- package/dist/esm/v2/components/Status.js.map +1 -0
- package/dist/esm/v2/components/Stepper.js +432 -0
- package/dist/esm/v2/components/Stepper.js.map +1 -0
- package/dist/esm/v2/components/Surface.js +159 -0
- package/dist/esm/v2/components/Surface.js.map +1 -0
- package/dist/esm/v2/components/Switch.js +128 -0
- package/dist/esm/v2/components/Switch.js.map +1 -0
- package/dist/esm/v2/components/Tabs.js +150 -0
- package/dist/esm/v2/components/Tabs.js.map +1 -0
- package/dist/esm/v2/components/TelInput.js +274 -0
- package/dist/esm/v2/components/TelInput.js.map +1 -0
- package/dist/esm/v2/components/Textarea.js +72 -0
- package/dist/esm/v2/components/Textarea.js.map +1 -0
- package/dist/esm/v2/components/TimePicker.js +134 -0
- package/dist/esm/v2/components/TimePicker.js.map +1 -0
- package/dist/esm/v2/components/Toast.js +376 -0
- package/dist/esm/v2/components/Toast.js.map +1 -0
- package/dist/esm/v2/components/Tooltip.js +161 -0
- package/dist/esm/v2/components/Tooltip.js.map +1 -0
- package/dist/esm/v2/components/_ErrorPageBody.js +85 -0
- package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -0
- package/dist/esm/v2/components/_pickerShared.js +60 -0
- package/dist/esm/v2/components/_pickerShared.js.map +1 -0
- package/dist/esm/v2/components/index.js +244 -0
- package/dist/esm/v2/components/index.js.map +1 -0
- package/dist/esm/v2/hooks/index.js +10 -0
- package/dist/esm/v2/hooks/index.js.map +1 -0
- package/dist/esm/v2/hooks/useDelayedFlag.js +55 -0
- package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -0
- package/dist/esm/v2/hooks/useDensity.js +119 -0
- package/dist/esm/v2/hooks/useDensity.js.map +1 -0
- package/dist/esm/v2/hooks/useFocusFirstError.js +197 -0
- package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -0
- package/dist/esm/v2/hooks/useFocusTrap.js +202 -0
- package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -0
- package/dist/esm/v2/hooks/useFormAutoSave.js +181 -0
- package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -0
- package/dist/esm/v2/hooks/useFormCompletionProgress.js +131 -0
- package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -0
- package/dist/esm/v2/hooks/useResolvedDensity.js +44 -0
- package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -0
- package/dist/esm/v2/hooks/useSortedRows.js +32 -0
- package/dist/esm/v2/hooks/useSortedRows.js.map +1 -0
- package/dist/esm/v2/hooks/useTabLoading.js +79 -0
- package/dist/esm/v2/hooks/useTabLoading.js.map +1 -0
- package/dist/esm/v2/index.js +121 -0
- package/dist/esm/v2/index.js.map +1 -0
- package/dist/esm/v2/modalContext.js +108 -0
- package/dist/esm/v2/modalContext.js.map +1 -0
- package/dist/esm/v2/models/favorite.js +2 -0
- package/dist/esm/v2/models/favorite.js.map +1 -0
- package/dist/esm/v2/models/index.js +12 -0
- package/dist/esm/v2/models/index.js.map +1 -0
- package/dist/esm/v2/models/personalization.js +2 -0
- package/dist/esm/v2/models/personalization.js.map +1 -0
- package/dist/esm/v2/models/referentiel.js +2 -0
- package/dist/esm/v2/models/referentiel.js.map +1 -0
- package/dist/esm/v2/models/savedFilter.js +2 -0
- package/dist/esm/v2/models/savedFilter.js.map +1 -0
- package/dist/esm/v2/patterns/ActionBar.js +603 -0
- package/dist/esm/v2/patterns/ActionBar.js.map +1 -0
- package/dist/esm/v2/patterns/BulkActionBar.js +147 -0
- package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -0
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js +303 -0
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -0
- package/dist/esm/v2/patterns/ColumnsToggle.js +301 -0
- package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -0
- package/dist/esm/v2/patterns/DataGrid.js +820 -0
- package/dist/esm/v2/patterns/DataGrid.js.map +1 -0
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js +375 -0
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -0
- package/dist/esm/v2/patterns/DataGridToolbar.js +249 -0
- package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -0
- package/dist/esm/v2/patterns/DataGridVirtualized.js +523 -0
- package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -0
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +70 -0
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -0
- package/dist/esm/v2/patterns/FavoriteColumn.js +164 -0
- package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -0
- package/dist/esm/v2/patterns/FavoritesFilter.js +91 -0
- package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -0
- package/dist/esm/v2/patterns/FormErrorSummary.js +101 -0
- package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -0
- package/dist/esm/v2/patterns/FormPageShell.js +126 -0
- package/dist/esm/v2/patterns/FormPageShell.js.map +1 -0
- package/dist/esm/v2/patterns/FormSection.js +190 -0
- package/dist/esm/v2/patterns/FormSection.js.map +1 -0
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js +110 -0
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -0
- package/dist/esm/v2/patterns/FormikCombobox.js +115 -0
- package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -0
- package/dist/esm/v2/patterns/FormikDatePicker.js +196 -0
- package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -0
- package/dist/esm/v2/patterns/FormikErrorFocus.js +77 -0
- package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -0
- package/dist/esm/v2/patterns/FormikFile.js +148 -0
- package/dist/esm/v2/patterns/FormikFile.js.map +1 -0
- package/dist/esm/v2/patterns/FormikInput.js +127 -0
- package/dist/esm/v2/patterns/FormikInput.js.map +1 -0
- package/dist/esm/v2/patterns/FormikReferentielField.js +116 -0
- package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -0
- package/dist/esm/v2/patterns/FormikSelect.js +159 -0
- package/dist/esm/v2/patterns/FormikSelect.js.map +1 -0
- package/dist/esm/v2/patterns/FormikTextarea.js +76 -0
- package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -0
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +195 -0
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -0
- package/dist/esm/v2/patterns/NetworkErrorBanner.js +72 -0
- package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -0
- package/dist/esm/v2/patterns/PageContent.js +62 -0
- package/dist/esm/v2/patterns/PageContent.js.map +1 -0
- package/dist/esm/v2/patterns/ReferentielField.js +615 -0
- package/dist/esm/v2/patterns/ReferentielField.js.map +1 -0
- package/dist/esm/v2/patterns/SaveFilterDialog.js +197 -0
- package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -0
- package/dist/esm/v2/patterns/SavedFiltersMenu.js +406 -0
- package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -0
- package/dist/esm/v2/patterns/SkeletonPageShell.js +342 -0
- package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -0
- package/dist/esm/v2/patterns/SortableHeader.js +179 -0
- package/dist/esm/v2/patterns/SortableHeader.js.map +1 -0
- package/dist/esm/v2/patterns/Tour.js +471 -0
- package/dist/esm/v2/patterns/Tour.js.map +1 -0
- package/dist/esm/v2/patterns/_dataGridShared.js +431 -0
- package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -0
- package/dist/esm/v2/patterns/_sort.js +112 -0
- package/dist/esm/v2/patterns/_sort.js.map +1 -0
- package/dist/esm/v2/patterns/_useColumnReorder.js +257 -0
- package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -0
- package/dist/esm/v2/patterns/_useColumnResize.js +191 -0
- package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -0
- package/dist/esm/v2/patterns/index.js +95 -0
- package/dist/esm/v2/patterns/index.js.map +1 -0
- package/dist/esm/v2/personalization/PersonalizationProvider.js +168 -0
- package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -0
- package/dist/esm/v2/personalization/adapters/_storageKey.js +60 -0
- package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -0
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +124 -0
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -0
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +70 -0
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -0
- package/dist/esm/v2/personalization/adapters/index.js +11 -0
- package/dist/esm/v2/personalization/adapters/index.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/favorites.js +216 -0
- package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/favoritesView.js +111 -0
- package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/index.js +17 -0
- package/dist/esm/v2/personalization/capabilities/index.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/savedFilters.js +291 -0
- package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -0
- package/dist/esm/v2/personalization/createPersonalizationStore.js +472 -0
- package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -0
- package/dist/esm/v2/personalization/index.js +46 -0
- package/dist/esm/v2/personalization/index.js.map +1 -0
- package/dist/esm/v2/personalization/personalizationContext.js +108 -0
- package/dist/esm/v2/personalization/personalizationContext.js.map +1 -0
- package/dist/esm/v2/personalization/schema.js +92 -0
- package/dist/esm/v2/personalization/schema.js.map +1 -0
- package/dist/esm/v2/personalization/types.js +2 -0
- package/dist/esm/v2/personalization/types.js.map +1 -0
- package/dist/esm/v2/referentiel/ReferentielProvider.js +87 -0
- package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -0
- package/dist/esm/v2/referentiel/index.js +15 -0
- package/dist/esm/v2/referentiel/index.js.map +1 -0
- package/dist/esm/v2/referentiel/useReferentielClient.js +37 -0
- package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -0
- package/dist/esm/v2/referentiel/useReferentielOptions.js +169 -0
- package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -0
- package/dist/esm/v2/referentiel/useReferentielSearch.js +132 -0
- package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -0
- package/dist/esm/v2/styles/base.css +425 -0
- package/dist/esm/v2/styles/css.d.ts +10 -0
- package/dist/esm/v2/styles/index.js +12 -0
- package/dist/esm/v2/styles/index.js.map +1 -0
- package/dist/esm/v2/theme/_brand.js +64 -0
- package/dist/esm/v2/theme/_brand.js.map +1 -0
- package/dist/esm/v2/theme/_brandSecondary.js +60 -0
- package/dist/esm/v2/theme/_brandSecondary.js.map +1 -0
- package/dist/esm/v2/theme/createPortnetTheme.js +548 -0
- package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -0
- package/dist/esm/v2/theme/cssVariables.js +198 -0
- package/dist/esm/v2/theme/cssVariables.js.map +1 -0
- package/dist/esm/v2/theme/index.js +32 -0
- package/dist/esm/v2/theme/index.js.map +1 -0
- package/dist/esm/v2/tokens/breakpoints.js +106 -0
- package/dist/esm/v2/tokens/breakpoints.js.map +1 -0
- package/dist/esm/v2/tokens/colors.js +219 -0
- package/dist/esm/v2/tokens/colors.js.map +1 -0
- package/dist/esm/v2/tokens/density.js +98 -0
- package/dist/esm/v2/tokens/density.js.map +1 -0
- package/dist/esm/v2/tokens/index.js +80 -0
- package/dist/esm/v2/tokens/index.js.map +1 -0
- package/dist/esm/v2/tokens/motion.js +88 -0
- package/dist/esm/v2/tokens/motion.js.map +1 -0
- package/dist/esm/v2/tokens/radius.js +22 -0
- package/dist/esm/v2/tokens/radius.js.map +1 -0
- package/dist/esm/v2/tokens/shadows.js +40 -0
- package/dist/esm/v2/tokens/shadows.js.map +1 -0
- package/dist/esm/v2/tokens/spacing.js +51 -0
- package/dist/esm/v2/tokens/spacing.js.map +1 -0
- package/dist/esm/v2/tokens/state.js +41 -0
- package/dist/esm/v2/tokens/state.js.map +1 -0
- package/dist/esm/v2/tokens/statusPalette.js +66 -0
- package/dist/esm/v2/tokens/statusPalette.js.map +1 -0
- package/dist/esm/v2/tokens/tokens.json +153 -0
- package/dist/esm/v2/tokens/typography.js +149 -0
- package/dist/esm/v2/tokens/typography.js.map +1 -0
- package/dist/esm/v2/tokens/zIndex.js +44 -0
- package/dist/esm/v2/tokens/zIndex.js.map +1 -0
- package/dist/esm/v2/types/common.js +2 -0
- package/dist/esm/v2/types/common.js.map +1 -0
- package/dist/esm/v2/types/datagrid.js +2 -0
- package/dist/esm/v2/types/datagrid.js.map +1 -0
- package/dist/esm/v2/types/index.js +12 -0
- package/dist/esm/v2/types/index.js.map +1 -0
- package/dist/esm/v2/utils/apiError.js +281 -0
- package/dist/esm/v2/utils/apiError.js.map +1 -0
- package/dist/esm/v2/utils/contrast.js +157 -0
- package/dist/esm/v2/utils/contrast.js.map +1 -0
- package/dist/esm/v2/utils/cx.js +38 -0
- package/dist/esm/v2/utils/cx.js.map +1 -0
- package/dist/esm/v2/utils/fileDownload.js +226 -0
- package/dist/esm/v2/utils/fileDownload.js.map +1 -0
- package/dist/esm/v2/utils/fmtMoney.js +78 -0
- package/dist/esm/v2/utils/fmtMoney.js.map +1 -0
- package/dist/esm/v2/utils/index.js +43 -0
- package/dist/esm/v2/utils/index.js.map +1 -0
- package/dist/esm/v2/utils/mergeLabels.js +86 -0
- package/dist/esm/v2/utils/mergeLabels.js.map +1 -0
- package/dist/esm/v2/utils/networkStatus.js +114 -0
- package/dist/esm/v2/utils/networkStatus.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -1
- package/dist/v2/__tests__/FieldError.test.js +164 -0
- package/dist/v2/__tests__/FieldError.test.js.map +1 -0
- package/dist/v2/__tests__/FileCard.test.js +148 -0
- package/dist/v2/__tests__/FileCard.test.js.map +1 -0
- package/dist/v2/__tests__/SectionErrorBoundary.test.js +237 -0
- package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -0
- package/dist/v2/components/Accordion.d.ts +6 -6
- package/dist/v2/components/Accordion.d.ts.map +1 -1
- package/dist/v2/components/Accordion.js.map +1 -1
- package/dist/v2/components/ActionStrip.d.ts +12 -12
- package/dist/v2/components/ActionStrip.d.ts.map +1 -1
- package/dist/v2/components/ActionStrip.js.map +1 -1
- package/dist/v2/components/Banner.d.ts +48 -9
- package/dist/v2/components/Banner.d.ts.map +1 -1
- package/dist/v2/components/Banner.js +116 -35
- package/dist/v2/components/Banner.js.map +1 -1
- package/dist/v2/components/Busy.d.ts +3 -3
- package/dist/v2/components/Busy.d.ts.map +1 -1
- package/dist/v2/components/Busy.js.map +1 -1
- package/dist/v2/components/Button.d.ts +6 -6
- package/dist/v2/components/Button.d.ts.map +1 -1
- package/dist/v2/components/Button.js.map +1 -1
- package/dist/v2/components/CategoryTag.d.ts +3 -3
- package/dist/v2/components/CategoryTag.d.ts.map +1 -1
- package/dist/v2/components/CategoryTag.js.map +1 -1
- package/dist/v2/components/Checkbox.d.ts +11 -11
- package/dist/v2/components/Checkbox.d.ts.map +1 -1
- package/dist/v2/components/Checkbox.js.map +1 -1
- package/dist/v2/components/Chip.d.ts +8 -8
- package/dist/v2/components/Chip.d.ts.map +1 -1
- package/dist/v2/components/Chip.js +2 -1
- package/dist/v2/components/Chip.js.map +1 -1
- package/dist/v2/components/Combobox.d.ts +27 -27
- package/dist/v2/components/Combobox.d.ts.map +1 -1
- package/dist/v2/components/Combobox.js +3 -2
- package/dist/v2/components/Combobox.js.map +1 -1
- package/dist/v2/components/CommandPalette.d.ts +20 -20
- package/dist/v2/components/CommandPalette.d.ts.map +1 -1
- package/dist/v2/components/CommandPalette.js +2 -6
- package/dist/v2/components/CommandPalette.js.map +1 -1
- package/dist/v2/components/ConfirmDialog.d.ts +13 -13
- package/dist/v2/components/ConfirmDialog.d.ts.map +1 -1
- package/dist/v2/components/ConfirmDialog.js +2 -1
- package/dist/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/v2/components/DatePicker.d.ts +11 -11
- package/dist/v2/components/DatePicker.d.ts.map +1 -1
- package/dist/v2/components/DatePicker.js.map +1 -1
- package/dist/v2/components/DateRangePicker.d.ts +16 -16
- package/dist/v2/components/DateRangePicker.d.ts.map +1 -1
- package/dist/v2/components/DateRangePicker.js +2 -1
- package/dist/v2/components/DateRangePicker.js.map +1 -1
- package/dist/v2/components/DateTimePicker.d.ts +11 -11
- package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
- package/dist/v2/components/DateTimePicker.js.map +1 -1
- package/dist/v2/components/Drawer.d.ts +18 -18
- package/dist/v2/components/Drawer.d.ts.map +1 -1
- package/dist/v2/components/Drawer.js +2 -1
- package/dist/v2/components/Drawer.js.map +1 -1
- package/dist/v2/components/Dropzone.d.ts +34 -34
- package/dist/v2/components/Dropzone.d.ts.map +1 -1
- package/dist/v2/components/Dropzone.js +11 -3
- package/dist/v2/components/Dropzone.js.map +1 -1
- package/dist/v2/components/EmptyState.d.ts +7 -7
- package/dist/v2/components/EmptyState.d.ts.map +1 -1
- package/dist/v2/components/EmptyState.js.map +1 -1
- package/dist/v2/components/FavoriteToggle.d.ts +7 -7
- package/dist/v2/components/FavoriteToggle.d.ts.map +1 -1
- package/dist/v2/components/FavoriteToggle.js +2 -1
- package/dist/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/v2/components/Field.d.ts +17 -12
- package/dist/v2/components/Field.d.ts.map +1 -1
- package/dist/v2/components/Field.js +25 -7
- package/dist/v2/components/Field.js.map +1 -1
- package/dist/v2/components/FieldError.d.ts +78 -0
- package/dist/v2/components/FieldError.d.ts.map +1 -0
- package/dist/v2/components/FieldError.js +131 -0
- package/dist/v2/components/FieldError.js.map +1 -0
- package/dist/v2/components/FieldHelp.d.ts +7 -7
- package/dist/v2/components/FieldHelp.d.ts.map +1 -1
- package/dist/v2/components/FieldHelp.js.map +1 -1
- package/dist/v2/components/FileCard.d.ts +75 -0
- package/dist/v2/components/FileCard.d.ts.map +1 -0
- package/dist/v2/components/FileCard.js +169 -0
- package/dist/v2/components/FileCard.js.map +1 -0
- package/dist/v2/components/FilterTab.d.ts +9 -9
- package/dist/v2/components/FilterTab.d.ts.map +1 -1
- package/dist/v2/components/FilterTab.js +2 -1
- package/dist/v2/components/FilterTab.js.map +1 -1
- package/dist/v2/components/FormGrid.d.ts +9 -4
- package/dist/v2/components/FormGrid.d.ts.map +1 -1
- package/dist/v2/components/FormGrid.js +11 -1
- package/dist/v2/components/FormGrid.js.map +1 -1
- package/dist/v2/components/FormikDisplay.d.ts +6 -6
- package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
- package/dist/v2/components/FormikDisplay.js.map +1 -1
- package/dist/v2/components/Input.d.ts +6 -6
- package/dist/v2/components/Input.d.ts.map +1 -1
- package/dist/v2/components/Input.js.map +1 -1
- package/dist/v2/components/KPICard.d.ts +43 -13
- package/dist/v2/components/KPICard.d.ts.map +1 -1
- package/dist/v2/components/KPICard.js +53 -14
- package/dist/v2/components/KPICard.js.map +1 -1
- package/dist/v2/components/KPIStrip.d.ts +68 -0
- package/dist/v2/components/KPIStrip.d.ts.map +1 -0
- package/dist/v2/components/KPIStrip.js +92 -0
- package/dist/v2/components/KPIStrip.js.map +1 -0
- package/dist/v2/components/KV.d.ts +3 -3
- package/dist/v2/components/KV.d.ts.map +1 -1
- package/dist/v2/components/KV.js.map +1 -1
- package/dist/v2/components/KVGrid.d.ts +2 -2
- package/dist/v2/components/KVGrid.d.ts.map +1 -1
- package/dist/v2/components/KVGrid.js +8 -1
- package/dist/v2/components/KVGrid.js.map +1 -1
- package/dist/v2/components/Layout.d.ts +7 -7
- package/dist/v2/components/Layout.d.ts.map +1 -1
- package/dist/v2/components/Layout.js.map +1 -1
- package/dist/v2/components/MobileRowCard.d.ts +13 -13
- package/dist/v2/components/MobileRowCard.d.ts.map +1 -1
- package/dist/v2/components/MobileRowCard.js.map +1 -1
- package/dist/v2/components/Modal.d.ts +12 -12
- package/dist/v2/components/Modal.d.ts.map +1 -1
- package/dist/v2/components/Modal.js.map +1 -1
- package/dist/v2/components/NetworkErrorPage.d.ts +1 -1
- package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
- package/dist/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/v2/components/NumberInput.d.ts +14 -14
- package/dist/v2/components/NumberInput.d.ts.map +1 -1
- package/dist/v2/components/NumberInput.js +7 -6
- package/dist/v2/components/NumberInput.js.map +1 -1
- package/dist/v2/components/OverflowMenu.d.ts +14 -14
- package/dist/v2/components/OverflowMenu.d.ts.map +1 -1
- package/dist/v2/components/OverflowMenu.js +4 -8
- package/dist/v2/components/OverflowMenu.js.map +1 -1
- package/dist/v2/components/PdfViewer.d.ts +9 -9
- package/dist/v2/components/PdfViewer.d.ts.map +1 -1
- package/dist/v2/components/PdfViewer.js.map +1 -1
- package/dist/v2/components/ProgressBar.d.ts +10 -10
- package/dist/v2/components/ProgressBar.d.ts.map +1 -1
- package/dist/v2/components/ProgressBar.js.map +1 -1
- package/dist/v2/components/Radio.d.ts +7 -7
- package/dist/v2/components/Radio.d.ts.map +1 -1
- package/dist/v2/components/Radio.js.map +1 -1
- package/dist/v2/components/SectionErrorBoundary.d.ts +89 -0
- package/dist/v2/components/SectionErrorBoundary.d.ts.map +1 -0
- package/dist/v2/components/SectionErrorBoundary.js +221 -0
- package/dist/v2/components/SectionErrorBoundary.js.map +1 -0
- package/dist/v2/components/SectionHeader.d.ts +5 -5
- package/dist/v2/components/SectionHeader.d.ts.map +1 -1
- package/dist/v2/components/SectionHeader.js.map +1 -1
- package/dist/v2/components/Segmented.d.ts +11 -11
- package/dist/v2/components/Segmented.d.ts.map +1 -1
- package/dist/v2/components/Segmented.js.map +1 -1
- package/dist/v2/components/Select.d.ts +33 -15
- package/dist/v2/components/Select.d.ts.map +1 -1
- package/dist/v2/components/Select.js +147 -30
- package/dist/v2/components/Select.js.map +1 -1
- package/dist/v2/components/ServerErrorPage.d.ts +1 -1
- package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
- package/dist/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/v2/components/Skeleton.d.ts +15 -15
- package/dist/v2/components/Skeleton.d.ts.map +1 -1
- package/dist/v2/components/Skeleton.js.map +1 -1
- package/dist/v2/components/SkipLink.d.ts +2 -2
- package/dist/v2/components/SkipLink.d.ts.map +1 -1
- package/dist/v2/components/SkipLink.js.map +1 -1
- package/dist/v2/components/Status.d.ts +3 -3
- package/dist/v2/components/Status.d.ts.map +1 -1
- package/dist/v2/components/Status.js.map +1 -1
- package/dist/v2/components/Stepper.d.ts +28 -22
- package/dist/v2/components/Stepper.d.ts.map +1 -1
- package/dist/v2/components/Stepper.js +31 -5
- package/dist/v2/components/Stepper.js.map +1 -1
- package/dist/v2/components/Surface.d.ts +94 -0
- package/dist/v2/components/Surface.d.ts.map +1 -0
- package/dist/v2/components/Surface.js +163 -0
- package/dist/v2/components/Surface.js.map +1 -0
- package/dist/v2/components/Switch.d.ts +4 -4
- package/dist/v2/components/Switch.d.ts.map +1 -1
- package/dist/v2/components/Switch.js.map +1 -1
- package/dist/v2/components/Tabs.d.ts +6 -6
- package/dist/v2/components/Tabs.d.ts.map +1 -1
- package/dist/v2/components/Tabs.js.map +1 -1
- package/dist/v2/components/TelInput.d.ts +8 -8
- package/dist/v2/components/TelInput.d.ts.map +1 -1
- package/dist/v2/components/TelInput.js +18 -18
- package/dist/v2/components/TelInput.js.map +1 -1
- package/dist/v2/components/Textarea.d.ts +1 -1
- package/dist/v2/components/Textarea.d.ts.map +1 -1
- package/dist/v2/components/Textarea.js.map +1 -1
- package/dist/v2/components/TimePicker.d.ts +11 -11
- package/dist/v2/components/TimePicker.d.ts.map +1 -1
- package/dist/v2/components/TimePicker.js.map +1 -1
- package/dist/v2/components/Toast.d.ts +6 -6
- package/dist/v2/components/Toast.d.ts.map +1 -1
- package/dist/v2/components/Toast.js +9 -8
- package/dist/v2/components/Toast.js.map +1 -1
- package/dist/v2/components/Tooltip.d.ts +1 -1
- package/dist/v2/components/Tooltip.d.ts.map +1 -1
- package/dist/v2/components/Tooltip.js.map +1 -1
- package/dist/v2/components/index.d.ts +143 -0
- package/dist/v2/components/index.d.ts.map +1 -1
- package/dist/v2/components/index.js +35 -0
- package/dist/v2/components/index.js.map +1 -1
- package/dist/v2/models/favorite.d.ts +1 -1
- package/dist/v2/models/favorite.d.ts.map +1 -1
- package/dist/v2/models/favorite.js.map +1 -1
- package/dist/v2/models/personalization.d.ts +13 -13
- 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 +11 -11
- 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 -8
- package/dist/v2/models/savedFilter.d.ts.map +1 -1
- package/dist/v2/models/savedFilter.js.map +1 -1
- package/dist/v2/patterns/ActionBar.d.ts +33 -33
- package/dist/v2/patterns/ActionBar.d.ts.map +1 -1
- package/dist/v2/patterns/ActionBar.js +2 -1
- package/dist/v2/patterns/ActionBar.js.map +1 -1
- package/dist/v2/patterns/BulkActionBar.d.ts +12 -12
- package/dist/v2/patterns/BulkActionBar.d.ts.map +1 -1
- package/dist/v2/patterns/BulkActionBar.js +2 -1
- package/dist/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/v2/patterns/CollapsibleDataGrid.d.ts +15 -15
- package/dist/v2/patterns/CollapsibleDataGrid.d.ts.map +1 -1
- package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/v2/patterns/ColumnsToggle.d.ts +7 -7
- package/dist/v2/patterns/ColumnsToggle.d.ts.map +1 -1
- package/dist/v2/patterns/ColumnsToggle.js +4 -8
- package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -12
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.js +9 -8
- package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/v2/patterns/DataGridToolbar.d.ts +40 -40
- package/dist/v2/patterns/DataGridToolbar.d.ts.map +1 -1
- package/dist/v2/patterns/DataGridToolbar.js +2 -1
- package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/v2/patterns/DataGridVirtualized.d.ts +27 -27
- package/dist/v2/patterns/DataGridVirtualized.d.ts.map +1 -1
- package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts +5 -5
- package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts.map +1 -1
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/v2/patterns/FavoriteColumn.d.ts +6 -6
- package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
- package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/v2/patterns/FavoritesFilter.d.ts +10 -10
- package/dist/v2/patterns/FavoritesFilter.d.ts.map +1 -1
- package/dist/v2/patterns/FavoritesFilter.js +2 -1
- package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/v2/patterns/FormErrorSummary.d.ts +4 -4
- package/dist/v2/patterns/FormErrorSummary.d.ts.map +1 -1
- package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/v2/patterns/FormPageShell.d.ts +4 -4
- package/dist/v2/patterns/FormPageShell.d.ts.map +1 -1
- package/dist/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/v2/patterns/FormSection.d.ts +19 -8
- package/dist/v2/patterns/FormSection.d.ts.map +1 -1
- package/dist/v2/patterns/FormSection.js +106 -71
- package/dist/v2/patterns/FormSection.js.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts +6 -6
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/v2/patterns/FormikCombobox.d.ts +11 -11
- package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.d.ts +36 -8
- package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.js +27 -1
- package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/v2/patterns/FormikErrorFocus.d.ts +3 -3
- package/dist/v2/patterns/FormikErrorFocus.d.ts.map +1 -1
- package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/v2/patterns/FormikFile.d.ts +8 -8
- package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
- package/dist/v2/patterns/FormikFile.js.map +1 -1
- package/dist/v2/patterns/FormikInput.d.ts +41 -6
- package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
- package/dist/v2/patterns/FormikInput.js +49 -1
- package/dist/v2/patterns/FormikInput.js.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.d.ts +8 -8
- package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/v2/patterns/FormikSelect.d.ts +33 -12
- package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
- package/dist/v2/patterns/FormikSelect.js +28 -2
- package/dist/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/v2/patterns/FormikTextarea.d.ts +5 -5
- package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
- package/dist/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +7 -7
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.js +2 -6
- package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/v2/patterns/NetworkErrorBanner.d.ts +4 -4
- package/dist/v2/patterns/NetworkErrorBanner.d.ts.map +1 -1
- package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/v2/patterns/PageContent.d.ts +3 -3
- package/dist/v2/patterns/PageContent.d.ts.map +1 -1
- package/dist/v2/patterns/PageContent.js.map +1 -1
- package/dist/v2/patterns/ReferentielField.d.ts +49 -49
- package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/ReferentielField.js +2 -1
- package/dist/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/v2/patterns/SaveFilterDialog.d.ts +10 -10
- package/dist/v2/patterns/SaveFilterDialog.d.ts.map +1 -1
- package/dist/v2/patterns/SaveFilterDialog.js +9 -8
- package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/v2/patterns/SavedFiltersMenu.d.ts +7 -7
- package/dist/v2/patterns/SavedFiltersMenu.d.ts.map +1 -1
- package/dist/v2/patterns/SavedFiltersMenu.js +9 -8
- package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/v2/patterns/SkeletonPageShell.d.ts +7 -7
- package/dist/v2/patterns/SkeletonPageShell.d.ts.map +1 -1
- package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/v2/patterns/SortableHeader.d.ts +1 -1
- package/dist/v2/patterns/SortableHeader.d.ts.map +1 -1
- package/dist/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/v2/patterns/Tour.d.ts +12 -12
- package/dist/v2/patterns/Tour.d.ts.map +1 -1
- package/dist/v2/patterns/Tour.js +9 -8
- package/dist/v2/patterns/Tour.js.map +1 -1
- package/dist/v2/patterns/_dataGridShared.d.ts +25 -6
- package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
- package/dist/v2/patterns/_dataGridShared.js +37 -3
- package/dist/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/v2/patterns/_useColumnReorder.d.ts +1 -1
- package/dist/v2/patterns/_useColumnReorder.d.ts.map +1 -1
- package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/v2/patterns/_useColumnResize.d.ts +1 -1
- package/dist/v2/patterns/_useColumnResize.d.ts.map +1 -1
- package/dist/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/v2/patterns/index.d.ts +27 -0
- package/dist/v2/patterns/index.d.ts.map +1 -1
- package/dist/v2/patterns/index.js.map +1 -1
- package/dist/v2/personalization/PersonalizationProvider.d.ts +9 -9
- package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
- package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts +1 -1
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts.map +1 -1
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts +1 -1
- package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts.map +1 -1
- package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/v2/personalization/capabilities/favoritesView.d.ts +3 -3
- package/dist/v2/personalization/capabilities/favoritesView.d.ts.map +1 -1
- package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/v2/personalization/capabilities/savedFilters.d.ts +3 -3
- package/dist/v2/personalization/capabilities/savedFilters.d.ts.map +1 -1
- package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.d.ts +8 -8
- package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/v2/personalization/schema.d.ts +2 -2
- package/dist/v2/personalization/schema.d.ts.map +1 -1
- package/dist/v2/personalization/schema.js.map +1 -1
- package/dist/v2/personalization/types.d.ts +19 -19
- package/dist/v2/personalization/types.d.ts.map +1 -1
- package/dist/v2/personalization/types.js.map +1 -1
- package/dist/v2/referentiel/ReferentielProvider.d.ts +4 -4
- package/dist/v2/referentiel/ReferentielProvider.d.ts.map +1 -1
- package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.d.ts +4 -4
- package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.d.ts +3 -3
- package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/v2/theme/createPortnetTheme.d.ts +32 -7
- package/dist/v2/theme/createPortnetTheme.d.ts.map +1 -1
- package/dist/v2/theme/createPortnetTheme.js +25 -1
- package/dist/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/v2/types/datagrid.d.ts +59 -59
- package/dist/v2/types/datagrid.d.ts.map +1 -1
- package/dist/v2/types/datagrid.js.map +1 -1
- package/dist/v2/utils/apiError.d.ts +65 -4
- package/dist/v2/utils/apiError.d.ts.map +1 -1
- package/dist/v2/utils/apiError.js +69 -6
- package/dist/v2/utils/apiError.js.map +1 -1
- package/dist/v2/utils/index.d.ts +1 -0
- package/dist/v2/utils/index.d.ts.map +1 -1
- package/dist/v2/utils/index.js +7 -0
- package/dist/v2/utils/index.js.map +1 -1
- package/dist/v2/utils/mergeLabels.d.ts +59 -0
- package/dist/v2/utils/mergeLabels.d.ts.map +1 -0
- package/dist/v2/utils/mergeLabels.js +93 -0
- package/dist/v2/utils/mergeLabels.js.map +1 -0
- package/package.json +23 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_ActionBar","_interopRequireDefault","require","_BulkActionBar","_ColumnsToggle","_FormSection","_FormPageShell","_FormErrorSummary","_FormikErrorFocus","_PageContent","_DataGrid","_interopRequireWildcard","_DataGridVirtualized","_DataGridSettingsMenu","_DataGridToolbar","_CollapsibleDataGrid","_SortableHeader","_NetworkErrorBanner","_ReferentielField","_Tour","_KeyboardShortcutsHelp","_DeleteResourceConfirmDialog","_SaveFilterDialog","_SavedFiltersMenu","_FavoriteColumn","_FavoritesFilter","_FormikInput","_FormikTextarea","_FormikSelect","_FormikCombobox","_FormikDatePicker","_FormikFile","_FormikCheckboxGroup","_FormikReferentielField","_FormikDisplay","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set"],"sources":["../../../src/lib/v2/patterns/index.ts"],"sourcesContent":["export { default as ActionBar } from \"./ActionBar\";\r\nexport type { ActionBarProps, ActionBarAction, ActionBarLabels, BreadcrumbItem, CrumbEntry } from \"./ActionBar\";\r\nexport { default as BulkActionBar } from \"./BulkActionBar\";\r\nexport { default as ColumnsToggle } from \"./ColumnsToggle\";\r\nexport { default as FormSection } from \"./FormSection\";\r\nexport { default as FormPageShell } from \"./FormPageShell\";\r\nexport { default as FormErrorSummary } from \"./FormErrorSummary\";\r\nexport type { FormErrorSummaryProps, FormErrorSummaryError } from \"./FormErrorSummary\";\r\n// R-FV.3 companion to FormErrorSummary (R-FV.2) — renders nothing, moves\r\n// focus to the first field in error after a failed submit. Adopt both.\r\nexport { default as FormikErrorFocus } from \"./FormikErrorFocus\";\r\nexport type { FormikErrorFocusProps } from \"./FormikErrorFocus\";\r\nexport { default as PageContent } from \"./PageContent\";\r\nexport { default as DataGrid, applySort } from \"./DataGrid\";\r\nexport { default as DataGridVirtualized } from \"./DataGridVirtualized\";\r\nexport { default as DataGridSettingsMenu } from \"./DataGridSettingsMenu\";\r\nexport { default as DataGridToolbar } from \"./DataGridToolbar\";\r\nexport { default as CollapsibleDataGrid } from \"./CollapsibleDataGrid\";\r\nexport { default as SortableHeader, getAriaSort } from \"./SortableHeader\";\r\nexport { default as NetworkErrorBanner } from \"./NetworkErrorBanner\";\r\nexport { default as ReferentielField } from \"./ReferentielField\";\r\n/**\r\n * ReferentielField configuration types — public typed surface.\r\n *\r\n * Same class of gap as Gap-TS-003 (component types), which was fixed for\r\n * `./components` but never extended to `./patterns`: the VALUE above was\r\n * exported while the types describing its own REQUIRED props were not.\r\n * `columns` and `criteria` are mandatory-to-configure, so a consumer had no\r\n * way to type them without either deep-importing\r\n * `@portnet/ui/dist/v2/patterns/…` (fragile, bypasses the `exports` map) or\r\n * declaring a local twin — which the Platform TypeScript Guidelines forbid\r\n * (\"Reusable types belong inside Shared UI Library … Never duplicate\").\r\n *\r\n * `ReferentielSearchResult` and `ReferentielSearchParams` are deliberately\r\n * NOT re-exported here: identically-named types are already surfaced from\r\n * `./referentiel` (useReferentielSearch) and `./v2/models` respectively, and\r\n * `src/lib/index.ts` star-exports all three barrels — a second named export of\r\n * either identifier is a hard TS2308 ambiguity at the library root.\r\n *\r\n * Additive and type-only: no runtime change, no existing export altered.\r\n */\r\nexport type {\r\n ReferentielFieldProps,\r\n ReferentielCriterion,\r\n ReferentielFieldLabels,\r\n} from \"./ReferentielField\";\r\nexport { default as Tour } from \"./Tour\";\r\nexport { default as KeyboardShortcutsHelp } from \"./KeyboardShortcutsHelp\";\r\nexport { default as DeleteResourceConfirmDialog } from \"./DeleteResourceConfirmDialog\";\r\n\r\n// ── Personalization · Saved Filters framework (v2/personalization) ────────────\r\n// SaveFilterDialog is presentational; SavedFiltersMenu is connected to the\r\n// savedFilters capability via useSavedFilters.\r\nexport { default as SaveFilterDialog } from \"./SaveFilterDialog\";\r\nexport { default as SavedFiltersMenu } from \"./SavedFiltersMenu\";\r\n\r\n// ── Personalization · Favorites DataGrid integration (v2/personalization) ─────\r\n// makeFavoriteColumn builds an always-visible favorites column for v2.DataGrid;\r\n// FavoritesFilter is the all/favorites-only segmented control.\r\nexport { default as makeFavoriteColumn } from \"./FavoriteColumn\";\r\nexport { default as FavoritesFilter } from \"./FavoritesFilter\";\r\nexport type { FavoritesFilterProps, FavoritesFilterLabels } from \"./FavoritesFilter\";\r\n\r\n// ── Formik bridges ────────────────────────────────────────────────────────────\r\nexport { default as FormikInput } from \"./FormikInput\";\r\nexport { default as FormikTextarea } from \"./FormikTextarea\";\r\nexport { default as FormikSelect } from \"./FormikSelect\";\r\nexport { default as FormikCombobox } from \"./FormikCombobox\";\r\nexport { default as FormikDatePicker } from \"./FormikDatePicker\";\r\nexport { default as FormikFile } from \"./FormikFile\";\r\nexport { default as FormikCheckboxGroup } from \"./FormikCheckboxGroup\";\r\nexport { default as FormikReferentielField } from \"./FormikReferentielField\";\r\nexport type { FormikReferentielFieldProps } from \"./FormikReferentielField\";\r\n\r\n/** Affichage valeur système — fond grisé, aucune interaction.\r\n * Utiliser à la place de FormikInput disabled pour les champs\r\n * auto-générés ou non modifiables par l'utilisateur. */\r\nexport { default as FormikDisplay } from \"../components/FormikDisplay\";\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_ActionBar","_interopRequireDefault","require","_BulkActionBar","_ColumnsToggle","_FormSection","_FormPageShell","_FormErrorSummary","_FormikErrorFocus","_PageContent","_DataGrid","_interopRequireWildcard","_DataGridVirtualized","_DataGridSettingsMenu","_DataGridToolbar","_CollapsibleDataGrid","_SortableHeader","_NetworkErrorBanner","_ReferentielField","_Tour","_KeyboardShortcutsHelp","_DeleteResourceConfirmDialog","_SaveFilterDialog","_SavedFiltersMenu","_FavoriteColumn","_FavoritesFilter","_FormikInput","_FormikTextarea","_FormikSelect","_FormikCombobox","_FormikDatePicker","_FormikFile","_FormikCheckboxGroup","_FormikReferentielField","_FormikDisplay","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set"],"sources":["../../../src/lib/v2/patterns/index.ts"],"sourcesContent":["export { default as ActionBar } from \"./ActionBar\";\r\nexport type { ActionBarProps, ActionBarAction, ActionBarLabels, BreadcrumbItem, CrumbEntry } from \"./ActionBar\";\r\nexport { default as BulkActionBar } from \"./BulkActionBar\";\r\nexport { default as ColumnsToggle } from \"./ColumnsToggle\";\r\nexport { default as FormSection } from \"./FormSection\";\r\nexport { default as FormPageShell } from \"./FormPageShell\";\r\nexport { default as FormErrorSummary } from \"./FormErrorSummary\";\r\nexport type { FormErrorSummaryProps, FormErrorSummaryError } from \"./FormErrorSummary\";\r\n// R-FV.3 companion to FormErrorSummary (R-FV.2) — renders nothing, moves\r\n// focus to the first field in error after a failed submit. Adopt both.\r\nexport { default as FormikErrorFocus } from \"./FormikErrorFocus\";\r\nexport type { FormikErrorFocusProps } from \"./FormikErrorFocus\";\r\nexport { default as PageContent } from \"./PageContent\";\r\nexport { default as DataGrid, applySort } from \"./DataGrid\";\r\nexport { default as DataGridVirtualized } from \"./DataGridVirtualized\";\r\nexport { default as DataGridSettingsMenu } from \"./DataGridSettingsMenu\";\r\nexport { default as DataGridToolbar } from \"./DataGridToolbar\";\r\nexport { default as CollapsibleDataGrid } from \"./CollapsibleDataGrid\";\r\nexport { default as SortableHeader, getAriaSort } from \"./SortableHeader\";\r\nexport { default as NetworkErrorBanner } from \"./NetworkErrorBanner\";\r\nexport { default as ReferentielField } from \"./ReferentielField\";\r\n/**\r\n * ReferentielField configuration types — public typed surface.\r\n *\r\n * Same class of gap as Gap-TS-003 (component types), which was fixed for\r\n * `./components` but never extended to `./patterns`: the VALUE above was\r\n * exported while the types describing its own REQUIRED props were not.\r\n * `columns` and `criteria` are mandatory-to-configure, so a consumer had no\r\n * way to type them without either deep-importing\r\n * `@portnet/ui/dist/v2/patterns/…` (fragile, bypasses the `exports` map) or\r\n * declaring a local twin — which the Platform TypeScript Guidelines forbid\r\n * (\"Reusable types belong inside Shared UI Library … Never duplicate\").\r\n *\r\n * `ReferentielSearchResult` and `ReferentielSearchParams` are deliberately\r\n * NOT re-exported here: identically-named types are already surfaced from\r\n * `./referentiel` (useReferentielSearch) and `./v2/models` respectively, and\r\n * `src/lib/index.ts` star-exports all three barrels — a second named export of\r\n * either identifier is a hard TS2308 ambiguity at the library root.\r\n *\r\n * Additive and type-only: no runtime change, no existing export altered.\r\n */\r\nexport type {\r\n ReferentielFieldProps,\r\n ReferentielCriterion,\r\n ReferentielFieldLabels,\r\n} from \"./ReferentielField\";\r\nexport { default as Tour } from \"./Tour\";\r\nexport { default as KeyboardShortcutsHelp } from \"./KeyboardShortcutsHelp\";\r\nexport { default as DeleteResourceConfirmDialog } from \"./DeleteResourceConfirmDialog\";\r\n\r\n// ── Personalization · Saved Filters framework (v2/personalization) ────────────\r\n// SaveFilterDialog is presentational; SavedFiltersMenu is connected to the\r\n// savedFilters capability via useSavedFilters.\r\nexport { default as SaveFilterDialog } from \"./SaveFilterDialog\";\r\nexport { default as SavedFiltersMenu } from \"./SavedFiltersMenu\";\r\n\r\n// ── Personalization · Favorites DataGrid integration (v2/personalization) ─────\r\n// makeFavoriteColumn builds an always-visible favorites column for v2.DataGrid;\r\n// FavoritesFilter is the all/favorites-only segmented control.\r\nexport { default as makeFavoriteColumn } from \"./FavoriteColumn\";\r\nexport { default as FavoritesFilter } from \"./FavoritesFilter\";\r\nexport type { FavoritesFilterProps, FavoritesFilterLabels } from \"./FavoritesFilter\";\r\n\r\n// ── Formik bridges ────────────────────────────────────────────────────────────\r\nexport { default as FormikInput } from \"./FormikInput\";\r\nexport { default as FormikTextarea } from \"./FormikTextarea\";\r\nexport { default as FormikSelect } from \"./FormikSelect\";\r\nexport { default as FormikCombobox } from \"./FormikCombobox\";\r\n/**\r\n * FormikCombobox props — public typed surface.\r\n *\r\n * SAME GAP-TS-003 CLASS as the ReferentielField note above. That fix covered\r\n * `ReferentielField` and `FormikReferentielField` but was not extended to the\r\n * other Formik bridges: the VALUE is exported while the type describing its props\r\n * is not, so a consumer cannot write `Omit<FormikComboboxProps<T>, …>`.\r\n *\r\n * REQUESTED BY bmdav-fe (TypeScript migration, batch 6f). That module stores the\r\n * OPTION OBJECT in Formik rather than a primitive key, because its payload mapper\r\n * reads `values.typeDemande.id` and sends `delegationTraitement` as a whole\r\n * object — so it cannot adopt the primitive-key model without changing the\r\n * request body sent to bmdav-be. It contains the resulting variance in ONE local\r\n * adapter (`ObjectValuedFormikCombobox`) rather than scattering assertions across\r\n * call sites, and that adapter must restate this component's prop contract minus\r\n * `getOptionValue`. The deep-import fallback is unavailable under\r\n * `moduleResolution: \"bundler\"`, since the package `exports` map does not expose\r\n * `dist/v2/patterns/*`.\r\n *\r\n * `ComboboxOptionValue` is deliberately NOT re-exported here — it is already\r\n * surfaced from `./components` (Combobox), and a second named export at the\r\n * library root would be a TS2308 ambiguity, exactly as recorded above for\r\n * `ReferentielSearchResult` / `ReferentielSearchParams`.\r\n *\r\n * Additive and type-only: no runtime change, no existing export altered.\r\n */\r\nexport type { FormikComboboxProps } from \"./FormikCombobox\";\r\nexport { default as FormikDatePicker } from \"./FormikDatePicker\";\r\nexport { default as FormikFile } from \"./FormikFile\";\r\nexport { default as FormikCheckboxGroup } from \"./FormikCheckboxGroup\";\r\nexport { default as FormikReferentielField } from \"./FormikReferentielField\";\r\nexport type { FormikReferentielFieldProps } from \"./FormikReferentielField\";\r\n\r\n/** Affichage valeur système — fond grisé, aucune interaction.\r\n * Utiliser à la place de FormikInput disabled pour les champs\r\n * auto-générés ou non modifiables par l'utilisateur. */\r\nexport { default as FormikDisplay } from \"../components/FormikDisplay\";\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -57,23 +57,23 @@ export declare const DEFAULT_PERSONALIZATION_LABELS: Readonly<{
|
|
|
57
57
|
cancel: string;
|
|
58
58
|
}>;
|
|
59
59
|
export interface UserPersonalizationProviderProps {
|
|
60
|
-
children?: React.ReactNode;
|
|
60
|
+
children?: React.ReactNode | undefined;
|
|
61
61
|
/** Required (in practice) — scopes all persisted preferences to this user. */
|
|
62
|
-
userId?: string;
|
|
62
|
+
userId?: string | undefined;
|
|
63
63
|
/** Optional multi-tenant partition. */
|
|
64
|
-
tenantId?: string;
|
|
64
|
+
tenantId?: string | undefined;
|
|
65
65
|
/** Optional per-app partition. */
|
|
66
|
-
appId?: string;
|
|
66
|
+
appId?: string | undefined;
|
|
67
67
|
/** Persistence boundary. Defaults to createLocalStorageAdapter(). Must be stable. */
|
|
68
|
-
adapter?: Adapter;
|
|
68
|
+
adapter?: Adapter | undefined;
|
|
69
69
|
/** Per-capability seed overrides, e.g. { favorites: {}, savedFilters: {} }. */
|
|
70
|
-
defaults?: Record<string, unknown
|
|
70
|
+
defaults?: Record<string, unknown> | undefined;
|
|
71
71
|
/** Label overrides (FR default; EN/AR supported). */
|
|
72
|
-
labels?: Partial<PersonalizationLabels
|
|
72
|
+
labels?: Partial<PersonalizationLabels> | undefined;
|
|
73
73
|
/** Central persistence-error hook: (error, { scope, capabilityId }) => void. */
|
|
74
|
-
onError?: PersonalizationErrorHandler;
|
|
74
|
+
onError?: PersonalizationErrorHandler | undefined;
|
|
75
75
|
/** Reconciliation policy between optimistic local state and adapter truth. @default "remote-wins" */
|
|
76
|
-
hydrateStrategy?: HydrateStrategy;
|
|
76
|
+
hydrateStrategy?: HydrateStrategy | undefined;
|
|
77
77
|
}
|
|
78
78
|
export declare function UserPersonalizationProvider(props: UserPersonalizationProviderProps): React.JSX.Element;
|
|
79
79
|
export default UserPersonalizationProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonalizationProvider.d.ts","sourceRoot":"","sources":["../../../src/lib/v2/personalization/PersonalizationProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAEV,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAEhF,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAS,MAAM,SAAS,CAAC;AAO/D;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;EAqBT,CAAC;AAEnC,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"PersonalizationProvider.d.ts","sourceRoot":"","sources":["../../../src/lib/v2/personalization/PersonalizationProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAEV,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAEhF,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAS,MAAM,SAAS,CAAC;AAO/D;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;EAqBT,CAAC;AAEnC,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACvC,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/C,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,SAAS,CAAC;IACpD,gFAAgF;IAChF,OAAO,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;IAClD,qGAAqG;IACrG,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;CAC/C;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,gCAAgC,GACtC,KAAK,CAAC,GAAG,CAAC,OAAO,CA6HnB;AAED,eAAe,2BAA2B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonalizationProvider.js","names":["React","_interopRequireWildcard","require","_personalizationContext","_createPersonalizationStore","_interopRequireDefault","_createLocalStorageAdapter","_jsxRuntime","obj","__esModule","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","Symbol","iterator","constructor","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","toPrimitive","undefined","res","TypeError","Number","isDev","process","env","DEFAULT_PERSONALIZATION_LABELS","exports","freeze","addFavorite","removeFavorite","favoritesOnly","showAll","favoriteColumnHeader","savedFilters","saveCurrentFilter","filterNameLabel","filterNamePlaceholder","saveFilter","updateFilter","deleteFilter","deleteFilterConfirm","setAsDefault","defaultBadge","manageFilters","noSavedFilters","cancel","UserPersonalizationProvider","props","children","userId","tenantId","appId","adapter","defaults","labels","onError","_props$hydrateStrateg","hydrateStrategy","console","warn","resolvedUserId","scope","useMemo","buildScope","defaultAdapterRef","useRef","current","createLocalStorageAdapter","resolvedAdapter","store","buildStore","createPersonalizationStore","useEffect","lifecycle","hydrate","off","connect","teardown","dispose","syncRuntime","setRuntime","prevAdapterRef","guardAdapterIdentity","mergedLabels","mergeLabels","assign","configValue","buildConfig","jsx","PersonalizationConfigContext","Provider","PersonalizationStoreContext","_default"],"sources":["../../../src/lib/v2/personalization/PersonalizationProvider.tsx"],"sourcesContent":["/**\r\n * UserPersonalizationProvider — Portnet UI v2 · personalization\r\n *\r\n * The single configuration point for per-user personalization. Mount it\r\n * once near the app root; every capability (favorites, saved filters, and\r\n * future slices) reads through the one store it establishes.\r\n *\r\n * import {\r\n * UserPersonalizationProvider,\r\n * createLocalStorageAdapter,\r\n * } from \"@portnet/ui/v2/personalization\";\r\n *\r\n * <UserPersonalizationProvider userId={user.id} tenantId={tenant.id}>\r\n * <App />\r\n * </UserPersonalizationProvider>\r\n *\r\n * Store lifecycle\r\n * - Exactly one store per scope. Memoised on (scope, adapter) ONLY;\r\n * onError / hydrateStrategy are pushed in live via store.setRuntime so\r\n * inline handlers never recreate the store.\r\n * - The default localStorage adapter is created once (ref). A PROVIDED\r\n * adapter must be stable (useMemo/module singleton) — a dev guard warns\r\n * if its identity changes between renders.\r\n * - A lifecycle effect runs hydrate() + connect() and dispose()s the old\r\n * store on scope change / unmount (cross-tab listener torn down).\r\n *\r\n * React 18/19 compatible: no 19-only API is required.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport {\r\n PersonalizationConfigContext,\r\n PersonalizationStoreContext,\r\n} from \"./personalizationContext\";\r\nimport type {\r\n PersonalizationConfig,\r\n PersonalizationLabels,\r\n} from \"./personalizationContext\";\r\nimport createPersonalizationStore from \"./createPersonalizationStore\";\r\nimport type { PersonalizationErrorHandler } from \"./createPersonalizationStore\";\r\nimport createLocalStorageAdapter from \"./adapters/createLocalStorageAdapter\";\r\nimport type { Adapter, HydrateStrategy, Scope } 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/**\r\n * Default labels for the whole foundation (FR — charter default). Hosts\r\n * override any subset via the `labels` prop; EN/AR overrides supported.\r\n * Front-loaded here so the favorites (Batch 3) and saved-filters (Batch 4)\r\n * components read consistent copy from one place.\r\n */\r\nexport const DEFAULT_PERSONALIZATION_LABELS = Object.freeze({\r\n // Follow / \"suivis\" (Batch 3)\r\n addFavorite: \"Suivre\",\r\n removeFavorite: \"Ne plus suivre\",\r\n favoritesOnly: \"Suivis uniquement\",\r\n showAll: \"Tout afficher\",\r\n favoriteColumnHeader: \"Suivis\",\r\n // Saved filters (Batch 4)\r\n savedFilters: \"Filtres enregistrés\",\r\n saveCurrentFilter: \"Enregistrer le filtre actuel…\",\r\n filterNameLabel: \"Nom du filtre\",\r\n filterNamePlaceholder: \"ex. Dossiers en attente\",\r\n saveFilter: \"Enregistrer\",\r\n updateFilter: \"Mettre à jour\",\r\n deleteFilter: \"Supprimer\",\r\n deleteFilterConfirm: \"Supprimer ce filtre enregistré ?\",\r\n setAsDefault: \"Définir par défaut\",\r\n defaultBadge: \"Par défaut\",\r\n manageFilters: \"Gérer les filtres\",\r\n noSavedFilters: \"Aucun filtre enregistré\",\r\n cancel: \"Annuler\",\r\n} satisfies PersonalizationLabels);\r\n\r\nexport interface UserPersonalizationProviderProps {\r\n children?: React.ReactNode;\r\n /** Required (in practice) — scopes all persisted preferences to this user. */\r\n userId?: string;\r\n /** Optional multi-tenant partition. */\r\n tenantId?: string;\r\n /** Optional per-app partition. */\r\n appId?: string;\r\n /** Persistence boundary. Defaults to createLocalStorageAdapter(). Must be stable. */\r\n adapter?: Adapter;\r\n /** Per-capability seed overrides, e.g. { favorites: {}, savedFilters: {} }. */\r\n defaults?: Record<string, unknown>;\r\n /** Label overrides (FR default; EN/AR supported). */\r\n labels?: Partial<PersonalizationLabels>;\r\n /** Central persistence-error hook: (error, { scope, capabilityId }) => void. */\r\n onError?: PersonalizationErrorHandler;\r\n /** Reconciliation policy between optimistic local state and adapter truth. @default \"remote-wins\" */\r\n hydrateStrategy?: HydrateStrategy;\r\n}\r\n\r\nexport function UserPersonalizationProvider(\r\n props: UserPersonalizationProviderProps\r\n): React.JSX.Element {\r\n const {\r\n children,\r\n userId,\r\n tenantId,\r\n appId,\r\n adapter,\r\n defaults,\r\n labels,\r\n onError,\r\n hydrateStrategy = \"remote-wins\",\r\n } = props;\r\n\r\n if (isDev && !userId && typeof console !== \"undefined\" && console.warn) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] UserPersonalizationProvider: `userId` is required to scope personalization. \" +\r\n \"Falling back to 'anonymous' — persisted preferences will be shared across unauthenticated sessions.\"\r\n );\r\n }\r\n const resolvedUserId = userId || \"anonymous\";\r\n\r\n const scope = React.useMemo<Scope>(\r\n function buildScope() {\r\n return {\r\n userId: resolvedUserId,\r\n ...(tenantId !== undefined ? { tenantId } : {}),\r\n ...(appId !== undefined ? { appId } : {}),\r\n };\r\n },\r\n [resolvedUserId, tenantId, appId]\r\n );\r\n\r\n // Default adapter created once; a provided adapter is trusted to be stable.\r\n const defaultAdapterRef = React.useRef<Adapter | null>(null);\r\n if (!adapter && !defaultAdapterRef.current) {\r\n defaultAdapterRef.current = createLocalStorageAdapter();\r\n }\r\n const resolvedAdapter = adapter || defaultAdapterRef.current;\r\n\r\n // One store per (scope, adapter). Intentionally NOT keyed on\r\n // defaults/onError/hydrateStrategy: those are fed live below.\r\n const store = React.useMemo(\r\n function buildStore() {\r\n return createPersonalizationStore({\r\n scope: scope,\r\n adapter: resolvedAdapter,\r\n ...(defaults !== undefined ? { defaults } : {}),\r\n ...(onError !== undefined ? { onError } : {}),\r\n hydrateStrategy: hydrateStrategy,\r\n });\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [scope, resolvedAdapter]\r\n );\r\n\r\n // Hydrate + cross-tab connect; dispose on store change / unmount.\r\n React.useEffect(\r\n function lifecycle() {\r\n store.hydrate();\r\n const off = store.connect();\r\n return function teardown() {\r\n if (typeof off === \"function\") off();\r\n store.dispose();\r\n };\r\n },\r\n [store]\r\n );\r\n\r\n // Push live runtime options without recreating the store.\r\n React.useEffect(\r\n function syncRuntime() {\r\n store.setRuntime({\r\n ...(onError !== undefined ? { onError } : {}),\r\n hydrateStrategy: hydrateStrategy,\r\n });\r\n },\r\n [store, onError, hydrateStrategy]\r\n );\r\n\r\n // Dev guard: a non-memoised adapter prop would recreate the store each\r\n // render and wipe in-memory state. Warn so it's caught early.\r\n const prevAdapterRef = React.useRef<Adapter | null>(resolvedAdapter);\r\n React.useEffect(\r\n function guardAdapterIdentity() {\r\n if (\r\n isDev &&\r\n prevAdapterRef.current !== resolvedAdapter &&\r\n typeof console !== \"undefined\" &&\r\n console.warn\r\n ) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] UserPersonalizationProvider: the `adapter` prop changed identity between \" +\r\n \"renders. Memoise it (useMemo or a module singleton) to avoid re-creating the personalization store.\"\r\n );\r\n }\r\n prevAdapterRef.current = resolvedAdapter;\r\n },\r\n [resolvedAdapter]\r\n );\r\n\r\n const mergedLabels = React.useMemo<PersonalizationLabels>(\r\n function mergeLabels() {\r\n return labels\r\n ? Object.assign({}, DEFAULT_PERSONALIZATION_LABELS, labels)\r\n : DEFAULT_PERSONALIZATION_LABELS;\r\n },\r\n [labels]\r\n );\r\n\r\n const configValue = React.useMemo<PersonalizationConfig>(\r\n function buildConfig() {\r\n return { scope: scope, labels: mergedLabels };\r\n },\r\n [scope, mergedLabels]\r\n );\r\n\r\n return (\r\n <PersonalizationConfigContext.Provider value={configValue}>\r\n <PersonalizationStoreContext.Provider value={store}>\r\n {children}\r\n </PersonalizationStoreContext.Provider>\r\n </PersonalizationConfigContext.Provider>\r\n );\r\n}\r\n\r\nexport default UserPersonalizationProvider;\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"PersonalizationProvider.js","names":["React","_interopRequireWildcard","require","_personalizationContext","_createPersonalizationStore","_interopRequireDefault","_createLocalStorageAdapter","_jsxRuntime","obj","__esModule","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","Symbol","iterator","constructor","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","toPrimitive","undefined","res","TypeError","Number","isDev","process","env","DEFAULT_PERSONALIZATION_LABELS","exports","freeze","addFavorite","removeFavorite","favoritesOnly","showAll","favoriteColumnHeader","savedFilters","saveCurrentFilter","filterNameLabel","filterNamePlaceholder","saveFilter","updateFilter","deleteFilter","deleteFilterConfirm","setAsDefault","defaultBadge","manageFilters","noSavedFilters","cancel","UserPersonalizationProvider","props","children","userId","tenantId","appId","adapter","defaults","labels","onError","_props$hydrateStrateg","hydrateStrategy","console","warn","resolvedUserId","scope","useMemo","buildScope","defaultAdapterRef","useRef","current","createLocalStorageAdapter","resolvedAdapter","store","buildStore","createPersonalizationStore","useEffect","lifecycle","hydrate","off","connect","teardown","dispose","syncRuntime","setRuntime","prevAdapterRef","guardAdapterIdentity","mergedLabels","mergeLabels","assign","configValue","buildConfig","jsx","PersonalizationConfigContext","Provider","PersonalizationStoreContext","_default"],"sources":["../../../src/lib/v2/personalization/PersonalizationProvider.tsx"],"sourcesContent":["/**\r\n * UserPersonalizationProvider — Portnet UI v2 · personalization\r\n *\r\n * The single configuration point for per-user personalization. Mount it\r\n * once near the app root; every capability (favorites, saved filters, and\r\n * future slices) reads through the one store it establishes.\r\n *\r\n * import {\r\n * UserPersonalizationProvider,\r\n * createLocalStorageAdapter,\r\n * } from \"@portnet/ui/v2/personalization\";\r\n *\r\n * <UserPersonalizationProvider userId={user.id} tenantId={tenant.id}>\r\n * <App />\r\n * </UserPersonalizationProvider>\r\n *\r\n * Store lifecycle\r\n * - Exactly one store per scope. Memoised on (scope, adapter) ONLY;\r\n * onError / hydrateStrategy are pushed in live via store.setRuntime so\r\n * inline handlers never recreate the store.\r\n * - The default localStorage adapter is created once (ref). A PROVIDED\r\n * adapter must be stable (useMemo/module singleton) — a dev guard warns\r\n * if its identity changes between renders.\r\n * - A lifecycle effect runs hydrate() + connect() and dispose()s the old\r\n * store on scope change / unmount (cross-tab listener torn down).\r\n *\r\n * React 18/19 compatible: no 19-only API is required.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport {\r\n PersonalizationConfigContext,\r\n PersonalizationStoreContext,\r\n} from \"./personalizationContext\";\r\nimport type {\r\n PersonalizationConfig,\r\n PersonalizationLabels,\r\n} from \"./personalizationContext\";\r\nimport createPersonalizationStore from \"./createPersonalizationStore\";\r\nimport type { PersonalizationErrorHandler } from \"./createPersonalizationStore\";\r\nimport createLocalStorageAdapter from \"./adapters/createLocalStorageAdapter\";\r\nimport type { Adapter, HydrateStrategy, Scope } 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/**\r\n * Default labels for the whole foundation (FR — charter default). Hosts\r\n * override any subset via the `labels` prop; EN/AR overrides supported.\r\n * Front-loaded here so the favorites (Batch 3) and saved-filters (Batch 4)\r\n * components read consistent copy from one place.\r\n */\r\nexport const DEFAULT_PERSONALIZATION_LABELS = Object.freeze({\r\n // Follow / \"suivis\" (Batch 3)\r\n addFavorite: \"Suivre\",\r\n removeFavorite: \"Ne plus suivre\",\r\n favoritesOnly: \"Suivis uniquement\",\r\n showAll: \"Tout afficher\",\r\n favoriteColumnHeader: \"Suivis\",\r\n // Saved filters (Batch 4)\r\n savedFilters: \"Filtres enregistrés\",\r\n saveCurrentFilter: \"Enregistrer le filtre actuel…\",\r\n filterNameLabel: \"Nom du filtre\",\r\n filterNamePlaceholder: \"ex. Dossiers en attente\",\r\n saveFilter: \"Enregistrer\",\r\n updateFilter: \"Mettre à jour\",\r\n deleteFilter: \"Supprimer\",\r\n deleteFilterConfirm: \"Supprimer ce filtre enregistré ?\",\r\n setAsDefault: \"Définir par défaut\",\r\n defaultBadge: \"Par défaut\",\r\n manageFilters: \"Gérer les filtres\",\r\n noSavedFilters: \"Aucun filtre enregistré\",\r\n cancel: \"Annuler\",\r\n} satisfies PersonalizationLabels);\r\n\r\nexport interface UserPersonalizationProviderProps {\r\n children?: React.ReactNode | undefined;\r\n /** Required (in practice) — scopes all persisted preferences to this user. */\r\n userId?: string | undefined;\r\n /** Optional multi-tenant partition. */\r\n tenantId?: string | undefined;\r\n /** Optional per-app partition. */\r\n appId?: string | undefined;\r\n /** Persistence boundary. Defaults to createLocalStorageAdapter(). Must be stable. */\r\n adapter?: Adapter | undefined;\r\n /** Per-capability seed overrides, e.g. { favorites: {}, savedFilters: {} }. */\r\n defaults?: Record<string, unknown> | undefined;\r\n /** Label overrides (FR default; EN/AR supported). */\r\n labels?: Partial<PersonalizationLabels> | undefined;\r\n /** Central persistence-error hook: (error, { scope, capabilityId }) => void. */\r\n onError?: PersonalizationErrorHandler | undefined;\r\n /** Reconciliation policy between optimistic local state and adapter truth. @default \"remote-wins\" */\r\n hydrateStrategy?: HydrateStrategy | undefined;\r\n}\r\n\r\nexport function UserPersonalizationProvider(\r\n props: UserPersonalizationProviderProps\r\n): React.JSX.Element {\r\n const {\r\n children,\r\n userId,\r\n tenantId,\r\n appId,\r\n adapter,\r\n defaults,\r\n labels,\r\n onError,\r\n hydrateStrategy = \"remote-wins\",\r\n } = props;\r\n\r\n if (isDev && !userId && typeof console !== \"undefined\" && console.warn) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] UserPersonalizationProvider: `userId` is required to scope personalization. \" +\r\n \"Falling back to 'anonymous' — persisted preferences will be shared across unauthenticated sessions.\"\r\n );\r\n }\r\n const resolvedUserId = userId || \"anonymous\";\r\n\r\n const scope = React.useMemo<Scope>(\r\n function buildScope() {\r\n return {\r\n userId: resolvedUserId,\r\n ...(tenantId !== undefined ? { tenantId } : {}),\r\n ...(appId !== undefined ? { appId } : {}),\r\n };\r\n },\r\n [resolvedUserId, tenantId, appId]\r\n );\r\n\r\n // Default adapter created once; a provided adapter is trusted to be stable.\r\n const defaultAdapterRef = React.useRef<Adapter | null>(null);\r\n if (!adapter && !defaultAdapterRef.current) {\r\n defaultAdapterRef.current = createLocalStorageAdapter();\r\n }\r\n const resolvedAdapter = adapter || defaultAdapterRef.current;\r\n\r\n // One store per (scope, adapter). Intentionally NOT keyed on\r\n // defaults/onError/hydrateStrategy: those are fed live below.\r\n const store = React.useMemo(\r\n function buildStore() {\r\n return createPersonalizationStore({\r\n scope: scope,\r\n adapter: resolvedAdapter,\r\n ...(defaults !== undefined ? { defaults } : {}),\r\n ...(onError !== undefined ? { onError } : {}),\r\n hydrateStrategy: hydrateStrategy,\r\n });\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [scope, resolvedAdapter]\r\n );\r\n\r\n // Hydrate + cross-tab connect; dispose on store change / unmount.\r\n React.useEffect(\r\n function lifecycle() {\r\n store.hydrate();\r\n const off = store.connect();\r\n return function teardown() {\r\n if (typeof off === \"function\") off();\r\n store.dispose();\r\n };\r\n },\r\n [store]\r\n );\r\n\r\n // Push live runtime options without recreating the store.\r\n React.useEffect(\r\n function syncRuntime() {\r\n store.setRuntime({\r\n ...(onError !== undefined ? { onError } : {}),\r\n hydrateStrategy: hydrateStrategy,\r\n });\r\n },\r\n [store, onError, hydrateStrategy]\r\n );\r\n\r\n // Dev guard: a non-memoised adapter prop would recreate the store each\r\n // render and wipe in-memory state. Warn so it's caught early.\r\n const prevAdapterRef = React.useRef<Adapter | null>(resolvedAdapter);\r\n React.useEffect(\r\n function guardAdapterIdentity() {\r\n if (\r\n isDev &&\r\n prevAdapterRef.current !== resolvedAdapter &&\r\n typeof console !== \"undefined\" &&\r\n console.warn\r\n ) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] UserPersonalizationProvider: the `adapter` prop changed identity between \" +\r\n \"renders. Memoise it (useMemo or a module singleton) to avoid re-creating the personalization store.\"\r\n );\r\n }\r\n prevAdapterRef.current = resolvedAdapter;\r\n },\r\n [resolvedAdapter]\r\n );\r\n\r\n const mergedLabels = React.useMemo<PersonalizationLabels>(\r\n function mergeLabels() {\r\n return labels\r\n ? Object.assign({}, DEFAULT_PERSONALIZATION_LABELS, labels)\r\n : DEFAULT_PERSONALIZATION_LABELS;\r\n },\r\n [labels]\r\n );\r\n\r\n const configValue = React.useMemo<PersonalizationConfig>(\r\n function buildConfig() {\r\n return { scope: scope, labels: mergedLabels };\r\n },\r\n [scope, mergedLabels]\r\n );\r\n\r\n return (\r\n <PersonalizationConfigContext.Provider value={configValue}>\r\n <PersonalizationStoreContext.Provider value={store}>\r\n {children}\r\n </PersonalizationStoreContext.Provider>\r\n </PersonalizationConfigContext.Provider>\r\n );\r\n}\r\n\r\nexport default UserPersonalizationProvider;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
import type { Adapter } from "../types";
|
|
26
26
|
export interface LocalStorageAdapterOptions {
|
|
27
27
|
/** Inject a Storage impl (tests / custom). */
|
|
28
|
-
storage?: Storage;
|
|
28
|
+
storage?: Storage | undefined;
|
|
29
29
|
}
|
|
30
30
|
export default function createLocalStorageAdapter(options?: LocalStorageAdapterOptions): Adapter;
|
|
31
31
|
//# sourceMappingURL=createLocalStorageAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLocalStorageAdapter.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/personalization/adapters/createLocalStorageAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,UAAU,CAAC;AAEzD,MAAM,WAAW,0BAA0B;IACzC,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"createLocalStorageAdapter.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/personalization/adapters/createLocalStorageAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,UAAU,CAAC;AAEzD,MAAM,WAAW,0BAA0B;IACzC,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAKD,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAuHT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLocalStorageAdapter.js","names":["_storageKey","require","_typeof","obj","Symbol","iterator","constructor","prototype","RESERVED_KEYS","Set","createLocalStorageAdapter","options","opts","storage","window","localStorage","isValidEnvelope","env","Object","hasOwnProperty","call","safeRemove","key","removeItem","_unused","loadSync","scope","out","prefix","buildScopePrefix","i","length","indexOf","capId","slice","has","raw","getItem","JSON","parse","_unused2","_unused3","load","Promise","resolve","save","capabilityId","envelope","setItem","buildKey","stringify","e","reject","remove","subscribe","onChange","addEventListener","noop","handler","handleStorage","storageArea","unsubscribe","removeEventListener","freeze","name","capabilities","crossTab","remote","shared"],"sources":["../../../../src/lib/v2/personalization/adapters/createLocalStorageAdapter.ts"],"sourcesContent":["/**\r\n * createLocalStorageAdapter — Portnet UI v2 · personalization\r\n *\r\n * Default Adapter. Persists each capability as an opaque envelope under a\r\n * scoped key (see adapters/_storageKey.ts). The adapter never interprets\r\n * `envelope.payload`.\r\n *\r\n * Safety:\r\n * - SSR-safe: with no `window`, the adapter is inert (load → {}, save →\r\n * resolved no-op) so it can be constructed anywhere.\r\n * - Every storage access is try/catch-wrapped. `save` REJECTS on quota/\r\n * private-mode failure so the store can keep the optimistic value for the\r\n * session and surface the error via onError.\r\n * - Reads self-heal: malformed entries are removed on sight.\r\n * - Reserved-key hardening: capability ids of `__proto__` / `constructor` /\r\n * `prototype` are skipped while scanning so a crafted same-origin key can't\r\n * reach the `__proto__` setter on the accumulator (SEC-LS1).\r\n * - NOTE: localStorage is readable by any same-origin script. Do NOT persist\r\n * secrets or PII in a capability payload (SEC-LS2).\r\n *\r\n * Cross-tab: `subscribe` listens to the `storage` event, which the spec fires\r\n * in OTHER tabs only — the writing tab is reconciled via the store's in-memory\r\n * path.\r\n */\r\n\r\nimport { buildKey, buildScopePrefix } from \"./_storageKey\";\r\nimport type { Adapter, Envelope, Scope } from \"../types\";\r\n\r\nexport interface LocalStorageAdapterOptions {\r\n /** Inject a Storage impl (tests / custom). */\r\n storage?: Storage;\r\n}\r\n\r\n/** Object keys that must never be written from external (storage-derived) data. */\r\nconst RESERVED_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\r\n\r\nexport default function createLocalStorageAdapter(\r\n options?: LocalStorageAdapterOptions\r\n): Adapter {\r\n const opts: LocalStorageAdapterOptions = options || {};\r\n const storage: Storage | null =\r\n opts.storage ||\r\n (typeof window !== \"undefined\" && window.localStorage\r\n ? window.localStorage\r\n : null);\r\n\r\n function isValidEnvelope(env: unknown): env is Envelope {\r\n return (\r\n !!env &&\r\n typeof env === \"object\" &&\r\n Object.prototype.hasOwnProperty.call(env, \"payload\")\r\n );\r\n }\r\n\r\n function safeRemove(key: string): void {\r\n if (!storage) return;\r\n try {\r\n storage.removeItem(key);\r\n } catch {\r\n /* ignore */\r\n }\r\n }\r\n\r\n /** Synchronous scan of every capability blob for `scope`. */\r\n function loadSync(scope: Scope): Record<string, Envelope> {\r\n if (!storage) return {};\r\n const out: Record<string, Envelope> = {};\r\n try {\r\n const prefix = buildScopePrefix(scope);\r\n for (let i = 0; i < storage.length; i++) {\r\n const key = storage.key(i);\r\n if (!key || key.indexOf(prefix) !== 0) continue;\r\n const capId = key.slice(prefix.length);\r\n // Skip empty + reserved keys: a same-origin writer could craft a\r\n // `<prefix>__proto__` key, and `out[capId] = env` would otherwise hit\r\n // the __proto__ setter on the accumulator (SEC-LS1).\r\n if (!capId || RESERVED_KEYS.has(capId)) continue;\r\n const raw = storage.getItem(key);\r\n if (!raw) continue;\r\n try {\r\n const env: unknown = JSON.parse(raw);\r\n if (isValidEnvelope(env)) out[capId] = env;\r\n else safeRemove(key);\r\n } catch {\r\n safeRemove(key);\r\n }\r\n }\r\n } catch {\r\n /* enumeration blocked (sandboxed) — return what we have */\r\n }\r\n return out;\r\n }\r\n\r\n function load(scope: Scope): Promise<Record<string, Envelope>> {\r\n return Promise.resolve(loadSync(scope));\r\n }\r\n\r\n function save(\r\n scope: Scope,\r\n capabilityId: string,\r\n envelope: Envelope\r\n ): Promise<void> {\r\n if (!storage) return Promise.resolve();\r\n try {\r\n storage.setItem(buildKey(scope, capabilityId), JSON.stringify(envelope));\r\n return Promise.resolve();\r\n } catch (e) {\r\n // Quota exceeded / private mode / sandboxed: reject so the store keeps\r\n // the optimistic in-memory value and notifies onError.\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n function remove(scope: Scope, capabilityId: string): Promise<void> {\r\n if (!storage) return Promise.resolve();\r\n safeRemove(buildKey(scope, capabilityId));\r\n return Promise.resolve();\r\n }\r\n\r\n function subscribe(\r\n scope: Scope,\r\n onChange: (capabilityId: string) => void\r\n ): () => void {\r\n if (\r\n typeof window === \"undefined\" ||\r\n typeof window.addEventListener !== \"function\"\r\n ) {\r\n return function noop() {};\r\n }\r\n const prefix = buildScopePrefix(scope);\r\n const handler = function handleStorage(e: StorageEvent) {\r\n if (!e || e.key == null) return; // e.key === null on storage.clear()\r\n // storageArea may be undefined in some environments; only filter when present.\r\n if (e.storageArea && e.storageArea !== storage) return;\r\n if (e.key.indexOf(prefix) !== 0) return;\r\n const capId = e.key.slice(prefix.length);\r\n if (capId && !RESERVED_KEYS.has(capId)) onChange(capId);\r\n };\r\n window.addEventListener(\"storage\", handler);\r\n return function unsubscribe() {\r\n window.removeEventListener(\"storage\", handler);\r\n };\r\n }\r\n\r\n return Object.freeze({\r\n name: \"localStorage\",\r\n load,\r\n loadSync,\r\n save,\r\n remove,\r\n subscribe,\r\n capabilities: Object.freeze({\r\n crossTab: true,\r\n remote: false,\r\n shared: false,\r\n }),\r\n });\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"createLocalStorageAdapter.js","names":["_storageKey","require","_typeof","obj","Symbol","iterator","constructor","prototype","RESERVED_KEYS","Set","createLocalStorageAdapter","options","opts","storage","window","localStorage","isValidEnvelope","env","Object","hasOwnProperty","call","safeRemove","key","removeItem","_unused","loadSync","scope","out","prefix","buildScopePrefix","i","length","indexOf","capId","slice","has","raw","getItem","JSON","parse","_unused2","_unused3","load","Promise","resolve","save","capabilityId","envelope","setItem","buildKey","stringify","e","reject","remove","subscribe","onChange","addEventListener","noop","handler","handleStorage","storageArea","unsubscribe","removeEventListener","freeze","name","capabilities","crossTab","remote","shared"],"sources":["../../../../src/lib/v2/personalization/adapters/createLocalStorageAdapter.ts"],"sourcesContent":["/**\r\n * createLocalStorageAdapter — Portnet UI v2 · personalization\r\n *\r\n * Default Adapter. Persists each capability as an opaque envelope under a\r\n * scoped key (see adapters/_storageKey.ts). The adapter never interprets\r\n * `envelope.payload`.\r\n *\r\n * Safety:\r\n * - SSR-safe: with no `window`, the adapter is inert (load → {}, save →\r\n * resolved no-op) so it can be constructed anywhere.\r\n * - Every storage access is try/catch-wrapped. `save` REJECTS on quota/\r\n * private-mode failure so the store can keep the optimistic value for the\r\n * session and surface the error via onError.\r\n * - Reads self-heal: malformed entries are removed on sight.\r\n * - Reserved-key hardening: capability ids of `__proto__` / `constructor` /\r\n * `prototype` are skipped while scanning so a crafted same-origin key can't\r\n * reach the `__proto__` setter on the accumulator (SEC-LS1).\r\n * - NOTE: localStorage is readable by any same-origin script. Do NOT persist\r\n * secrets or PII in a capability payload (SEC-LS2).\r\n *\r\n * Cross-tab: `subscribe` listens to the `storage` event, which the spec fires\r\n * in OTHER tabs only — the writing tab is reconciled via the store's in-memory\r\n * path.\r\n */\r\n\r\nimport { buildKey, buildScopePrefix } from \"./_storageKey\";\r\nimport type { Adapter, Envelope, Scope } from \"../types\";\r\n\r\nexport interface LocalStorageAdapterOptions {\r\n /** Inject a Storage impl (tests / custom). */\r\n storage?: Storage | undefined;\r\n}\r\n\r\n/** Object keys that must never be written from external (storage-derived) data. */\r\nconst RESERVED_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\r\n\r\nexport default function createLocalStorageAdapter(\r\n options?: LocalStorageAdapterOptions\r\n): Adapter {\r\n const opts: LocalStorageAdapterOptions = options || {};\r\n const storage: Storage | null =\r\n opts.storage ||\r\n (typeof window !== \"undefined\" && window.localStorage\r\n ? window.localStorage\r\n : null);\r\n\r\n function isValidEnvelope(env: unknown): env is Envelope {\r\n return (\r\n !!env &&\r\n typeof env === \"object\" &&\r\n Object.prototype.hasOwnProperty.call(env, \"payload\")\r\n );\r\n }\r\n\r\n function safeRemove(key: string): void {\r\n if (!storage) return;\r\n try {\r\n storage.removeItem(key);\r\n } catch {\r\n /* ignore */\r\n }\r\n }\r\n\r\n /** Synchronous scan of every capability blob for `scope`. */\r\n function loadSync(scope: Scope): Record<string, Envelope> {\r\n if (!storage) return {};\r\n const out: Record<string, Envelope> = {};\r\n try {\r\n const prefix = buildScopePrefix(scope);\r\n for (let i = 0; i < storage.length; i++) {\r\n const key = storage.key(i);\r\n if (!key || key.indexOf(prefix) !== 0) continue;\r\n const capId = key.slice(prefix.length);\r\n // Skip empty + reserved keys: a same-origin writer could craft a\r\n // `<prefix>__proto__` key, and `out[capId] = env` would otherwise hit\r\n // the __proto__ setter on the accumulator (SEC-LS1).\r\n if (!capId || RESERVED_KEYS.has(capId)) continue;\r\n const raw = storage.getItem(key);\r\n if (!raw) continue;\r\n try {\r\n const env: unknown = JSON.parse(raw);\r\n if (isValidEnvelope(env)) out[capId] = env;\r\n else safeRemove(key);\r\n } catch {\r\n safeRemove(key);\r\n }\r\n }\r\n } catch {\r\n /* enumeration blocked (sandboxed) — return what we have */\r\n }\r\n return out;\r\n }\r\n\r\n function load(scope: Scope): Promise<Record<string, Envelope>> {\r\n return Promise.resolve(loadSync(scope));\r\n }\r\n\r\n function save(\r\n scope: Scope,\r\n capabilityId: string,\r\n envelope: Envelope\r\n ): Promise<void> {\r\n if (!storage) return Promise.resolve();\r\n try {\r\n storage.setItem(buildKey(scope, capabilityId), JSON.stringify(envelope));\r\n return Promise.resolve();\r\n } catch (e) {\r\n // Quota exceeded / private mode / sandboxed: reject so the store keeps\r\n // the optimistic in-memory value and notifies onError.\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n function remove(scope: Scope, capabilityId: string): Promise<void> {\r\n if (!storage) return Promise.resolve();\r\n safeRemove(buildKey(scope, capabilityId));\r\n return Promise.resolve();\r\n }\r\n\r\n function subscribe(\r\n scope: Scope,\r\n onChange: (capabilityId: string) => void\r\n ): () => void {\r\n if (\r\n typeof window === \"undefined\" ||\r\n typeof window.addEventListener !== \"function\"\r\n ) {\r\n return function noop() {};\r\n }\r\n const prefix = buildScopePrefix(scope);\r\n const handler = function handleStorage(e: StorageEvent) {\r\n if (!e || e.key == null) return; // e.key === null on storage.clear()\r\n // storageArea may be undefined in some environments; only filter when present.\r\n if (e.storageArea && e.storageArea !== storage) return;\r\n if (e.key.indexOf(prefix) !== 0) return;\r\n const capId = e.key.slice(prefix.length);\r\n if (capId && !RESERVED_KEYS.has(capId)) onChange(capId);\r\n };\r\n window.addEventListener(\"storage\", handler);\r\n return function unsubscribe() {\r\n window.removeEventListener(\"storage\", handler);\r\n };\r\n }\r\n\r\n return Object.freeze({\r\n name: \"localStorage\",\r\n load,\r\n loadSync,\r\n save,\r\n remove,\r\n subscribe,\r\n capabilities: Object.freeze({\r\n crossTab: true,\r\n remote: false,\r\n shared: false,\r\n }),\r\n });\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -19,7 +19,7 @@ export interface MemoryAdapterSeedEntry {
|
|
|
19
19
|
}
|
|
20
20
|
export interface MemoryAdapterOptions {
|
|
21
21
|
/** Optional pre-populated entries for tests/stories. */
|
|
22
|
-
seed?: MemoryAdapterSeedEntry[];
|
|
22
|
+
seed?: MemoryAdapterSeedEntry[] | undefined;
|
|
23
23
|
}
|
|
24
24
|
export default function createMemoryAdapter(options?: MemoryAdapterOptions): Adapter;
|
|
25
25
|
//# sourceMappingURL=createMemoryAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMemoryAdapter.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/personalization/adapters/createMemoryAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEzD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,IAAI,CAAC,EAAE,sBAAsB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"createMemoryAdapter.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/personalization/adapters/createMemoryAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEzD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,IAAI,CAAC,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAkET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMemoryAdapter.js","names":["createMemoryAdapter","options","opts","map","Map","compositeKey","scope","capabilityId","tenant","tenantId","user","userId","scopePrefix","Array","isArray","seed","forEach","seedEntry","entry","envelope","set","loadSync","out","prefix","collect","key","indexOf","slice","length","load","Promise","resolve","save","remove","Object","freeze","name","capabilities","crossTab","remote","shared"],"sources":["../../../../src/lib/v2/personalization/adapters/createMemoryAdapter.ts"],"sourcesContent":["/**\r\n * createMemoryAdapter — Portnet UI v2 · personalization\r\n *\r\n * An Adapter that keeps everything in a Map. Use it for:\r\n * - unit tests (deterministic, no global storage state),\r\n * - SSR / sandboxed environments where localStorage is unavailable,\r\n * - Storybook stories (optionally pre-seeded),\r\n * - an explicit \"do not persist\" opt-out.\r\n *\r\n * Same contract as the localStorage adapter minus `subscribe` (a single\r\n * in-memory context has no cross-tab notion). `remote:false` lets the store\r\n * skip the redundant async re-hydrate after a synchronous seed.\r\n */\r\n\r\nimport type { Adapter, Envelope, Scope } from \"../types\";\r\n\r\nexport interface MemoryAdapterSeedEntry {\r\n scope: Scope;\r\n capabilityId: string;\r\n envelope: Envelope;\r\n}\r\n\r\nexport interface MemoryAdapterOptions {\r\n /** Optional pre-populated entries for tests/stories. */\r\n seed?: MemoryAdapterSeedEntry[];\r\n}\r\n\r\nexport default function createMemoryAdapter(\r\n options?: MemoryAdapterOptions\r\n): Adapter {\r\n const opts: MemoryAdapterOptions = options || {};\r\n /** composite key -> envelope */\r\n const map = new Map<string, Envelope>();\r\n\r\n function compositeKey(scope: Scope, capabilityId: string): string {\r\n const tenant = scope && scope.tenantId ? scope.tenantId : \"\";\r\n const user = scope && scope.userId ? scope.userId : \"\";\r\n return tenant + \"::\" + user + \"::\" + capabilityId;\r\n }\r\n\r\n function scopePrefix(scope: Scope): string {\r\n const tenant = scope && scope.tenantId ? scope.tenantId : \"\";\r\n const user = scope && scope.userId ? scope.userId : \"\";\r\n return tenant + \"::\" + user + \"::\";\r\n }\r\n\r\n if (Array.isArray(opts.seed)) {\r\n opts.seed.forEach(function seedEntry(entry) {\r\n if (entry && entry.scope && entry.capabilityId && entry.envelope) {\r\n map.set(compositeKey(entry.scope, entry.capabilityId), entry.envelope);\r\n }\r\n });\r\n }\r\n\r\n function loadSync(scope: Scope): Record<string, Envelope> {\r\n const out: Record<string, Envelope> = {};\r\n const prefix = scopePrefix(scope);\r\n map.forEach(function collect(envelope, key) {\r\n if (key.indexOf(prefix) === 0) {\r\n out[key.slice(prefix.length)] = envelope;\r\n }\r\n });\r\n return out;\r\n }\r\n\r\n function load(scope: Scope): Promise<Record<string, Envelope>> {\r\n return Promise.resolve(loadSync(scope));\r\n }\r\n\r\n function save(\r\n scope: Scope,\r\n capabilityId: string,\r\n envelope: Envelope\r\n ): Promise<void> {\r\n map.set(compositeKey(scope, capabilityId), envelope);\r\n return Promise.resolve();\r\n }\r\n\r\n function remove(scope: Scope, capabilityId: string): Promise<void> {\r\n map.delete(compositeKey(scope, capabilityId));\r\n return Promise.resolve();\r\n }\r\n\r\n return Object.freeze({\r\n name: \"memory\",\r\n load,\r\n loadSync,\r\n save,\r\n remove,\r\n capabilities: Object.freeze({\r\n crossTab: false,\r\n remote: false,\r\n shared: false,\r\n }),\r\n });\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"createMemoryAdapter.js","names":["createMemoryAdapter","options","opts","map","Map","compositeKey","scope","capabilityId","tenant","tenantId","user","userId","scopePrefix","Array","isArray","seed","forEach","seedEntry","entry","envelope","set","loadSync","out","prefix","collect","key","indexOf","slice","length","load","Promise","resolve","save","remove","Object","freeze","name","capabilities","crossTab","remote","shared"],"sources":["../../../../src/lib/v2/personalization/adapters/createMemoryAdapter.ts"],"sourcesContent":["/**\r\n * createMemoryAdapter — Portnet UI v2 · personalization\r\n *\r\n * An Adapter that keeps everything in a Map. Use it for:\r\n * - unit tests (deterministic, no global storage state),\r\n * - SSR / sandboxed environments where localStorage is unavailable,\r\n * - Storybook stories (optionally pre-seeded),\r\n * - an explicit \"do not persist\" opt-out.\r\n *\r\n * Same contract as the localStorage adapter minus `subscribe` (a single\r\n * in-memory context has no cross-tab notion). `remote:false` lets the store\r\n * skip the redundant async re-hydrate after a synchronous seed.\r\n */\r\n\r\nimport type { Adapter, Envelope, Scope } from \"../types\";\r\n\r\nexport interface MemoryAdapterSeedEntry {\r\n scope: Scope;\r\n capabilityId: string;\r\n envelope: Envelope;\r\n}\r\n\r\nexport interface MemoryAdapterOptions {\r\n /** Optional pre-populated entries for tests/stories. */\r\n seed?: MemoryAdapterSeedEntry[] | undefined;\r\n}\r\n\r\nexport default function createMemoryAdapter(\r\n options?: MemoryAdapterOptions\r\n): Adapter {\r\n const opts: MemoryAdapterOptions = options || {};\r\n /** composite key -> envelope */\r\n const map = new Map<string, Envelope>();\r\n\r\n function compositeKey(scope: Scope, capabilityId: string): string {\r\n const tenant = scope && scope.tenantId ? scope.tenantId : \"\";\r\n const user = scope && scope.userId ? scope.userId : \"\";\r\n return tenant + \"::\" + user + \"::\" + capabilityId;\r\n }\r\n\r\n function scopePrefix(scope: Scope): string {\r\n const tenant = scope && scope.tenantId ? scope.tenantId : \"\";\r\n const user = scope && scope.userId ? scope.userId : \"\";\r\n return tenant + \"::\" + user + \"::\";\r\n }\r\n\r\n if (Array.isArray(opts.seed)) {\r\n opts.seed.forEach(function seedEntry(entry) {\r\n if (entry && entry.scope && entry.capabilityId && entry.envelope) {\r\n map.set(compositeKey(entry.scope, entry.capabilityId), entry.envelope);\r\n }\r\n });\r\n }\r\n\r\n function loadSync(scope: Scope): Record<string, Envelope> {\r\n const out: Record<string, Envelope> = {};\r\n const prefix = scopePrefix(scope);\r\n map.forEach(function collect(envelope, key) {\r\n if (key.indexOf(prefix) === 0) {\r\n out[key.slice(prefix.length)] = envelope;\r\n }\r\n });\r\n return out;\r\n }\r\n\r\n function load(scope: Scope): Promise<Record<string, Envelope>> {\r\n return Promise.resolve(loadSync(scope));\r\n }\r\n\r\n function save(\r\n scope: Scope,\r\n capabilityId: string,\r\n envelope: Envelope\r\n ): Promise<void> {\r\n map.set(compositeKey(scope, capabilityId), envelope);\r\n return Promise.resolve();\r\n }\r\n\r\n function remove(scope: Scope, capabilityId: string): Promise<void> {\r\n map.delete(compositeKey(scope, capabilityId));\r\n return Promise.resolve();\r\n }\r\n\r\n return Object.freeze({\r\n name: \"memory\",\r\n load,\r\n loadSync,\r\n save,\r\n remove,\r\n capabilities: Object.freeze({\r\n crossTab: false,\r\n remote: false,\r\n shared: false,\r\n }),\r\n });\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -35,11 +35,11 @@ export declare function filterRowsByFavorites<T>(rows: readonly T[], favoriteIds
|
|
|
35
35
|
export declare function sortRowsByFavorites<T>(rows: readonly T[], favoriteIds: Set<RowId> | readonly RowId[] | null | undefined, getRowId: ((row: T) => RowId) | undefined, placement: FavoritesSortPlacement): readonly T[];
|
|
36
36
|
export interface UseFavoritesViewOptions<T> {
|
|
37
37
|
/** Should be stable; MUST match the grid's getRowId. Defaults to (r) => r.id. */
|
|
38
|
-
getRowId?: (row: T) => RowId;
|
|
38
|
+
getRowId?: ((row: T) => RowId) | undefined;
|
|
39
39
|
/** @default "all" */
|
|
40
|
-
filterMode?: FavoritesFilterMode;
|
|
40
|
+
filterMode?: FavoritesFilterMode | undefined;
|
|
41
41
|
/** @default "none" */
|
|
42
|
-
sortPlacement?: FavoritesSortPlacement;
|
|
42
|
+
sortPlacement?: FavoritesSortPlacement | undefined;
|
|
43
43
|
}
|
|
44
44
|
export interface UseFavoritesViewResult<T> {
|
|
45
45
|
rows: readonly T[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"favoritesView.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/personalization/capabilities/favoritesView.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,eAAO,MAAM,gBAAgB;;;EAGlB,CAAC;AACZ,eAAO,MAAM,cAAc;;;;EAIhB,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAC3D,MAAM,MAAM,sBAAsB,GAChC,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAkBvD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,KAAK,EAAE,GAAG,IAAI,GAAG,SAAS,EAC7D,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,SAAS,EACzC,IAAI,EAAE,mBAAmB,GACxB,SAAS,CAAC,EAAE,CASd;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,KAAK,EAAE,GAAG,IAAI,GAAG,SAAS,EAC7D,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,SAAS,EACzC,SAAS,EAAE,sBAAsB,GAChC,SAAS,CAAC,EAAE,CAqBd;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,iFAAiF;IACjF,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"favoritesView.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/personalization/capabilities/favoritesView.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,eAAO,MAAM,gBAAgB;;;EAGlB,CAAC;AACZ,eAAO,MAAM,cAAc;;;;EAIhB,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAC3D,MAAM,MAAM,sBAAsB,GAChC,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAkBvD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,KAAK,EAAE,GAAG,IAAI,GAAG,SAAS,EAC7D,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,SAAS,EACzC,IAAI,EAAE,mBAAmB,GACxB,SAAS,CAAC,EAAE,CASd;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,KAAK,EAAE,GAAG,IAAI,GAAG,SAAS,EAC7D,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,SAAS,EACzC,SAAS,EAAE,sBAAsB,GAChC,SAAS,CAAC,EAAE,CAqBd;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,iFAAiF;IACjF,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,SAAS,CAAC;IAC3C,qBAAqB;IACrB,UAAU,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC7C,sBAAsB;IACtB,aAAa,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,OAAO,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,GACnC,sBAAsB,CAAC,CAAC,CAAC,CA6B3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"favoritesView.js","names":["React","_interopRequireWildcard","require","_favorites","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","step","next","_e2","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","arr","len","arr2","FAVORITES_FILTER","exports","freeze","ALL","ONLY","FAVORITES_SORT","NONE","FIRST","LAST","EMPTY_ROWS","toIdSet","ids","Set","resolveGetRowId","getRowId","defaultGetRowId","r","id","filterRowsByFavorites","rows","favoriteIds","mode","source","getId","filter","keepFavorite","sortRowsByFavorites","placement","fav","rest","_iterator","_step","row","push","concat","useFavoritesView","resourceKey","options","opts","filterMode","sortPlacement","useFavorites","processed","useMemo","compute","base","filtered","favoriteCount","count","isFiltering"],"sources":["../../../../src/lib/v2/personalization/capabilities/favoritesView.ts"],"sourcesContent":["/**\r\n * favoritesView — Portnet UI v2 · personalization\r\n *\r\n * Grid-agnostic favorites VIEW logic: filter (all / favorites-only) and\r\n * sort (favorites-first / favorites-last). Pure helpers usable anywhere,\r\n * plus a useFavoritesView hook that wires them to the favorites capability.\r\n *\r\n * The host owns its row id contract and the toggle UI (use FavoritesFilter\r\n * or any control bound to `filterMode` / `sortPlacement`). These helpers\r\n * only reorder/subset the rows array the host already has — they never\r\n * fetch or mutate.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { useFavorites } from \"./favorites\";\r\nimport type { RowId } from \"../../types/common\";\r\n\r\nexport const FAVORITES_FILTER = Object.freeze({\r\n ALL: \"all\",\r\n ONLY: \"only\",\r\n} as const);\r\nexport const FAVORITES_SORT = Object.freeze({\r\n NONE: \"none\",\r\n FIRST: \"first\",\r\n LAST: \"last\",\r\n} as const);\r\n\r\nexport type FavoritesFilterMode =\r\n (typeof FAVORITES_FILTER)[keyof typeof FAVORITES_FILTER];\r\nexport type FavoritesSortPlacement =\r\n (typeof FAVORITES_SORT)[keyof typeof FAVORITES_SORT];\r\n\r\nconst EMPTY_ROWS: readonly never[] = Object.freeze([]);\r\n\r\nfunction toIdSet(\r\n ids: Set<RowId> | readonly RowId[] | null | undefined\r\n): Set<RowId> {\r\n return ids instanceof Set ? ids : new Set(ids || []);\r\n}\r\n\r\nfunction resolveGetRowId<T>(getRowId?: (row: T) => RowId): (row: T) => RowId {\r\n return typeof getRowId === \"function\"\r\n ? getRowId\r\n : function defaultGetRowId(r: T): RowId {\r\n return (r as { id: RowId }).id;\r\n };\r\n}\r\n\r\n/**\r\n * Keep only favorited rows when mode === \"only\"; otherwise return `rows`\r\n * unchanged (same reference).\r\n */\r\nexport function filterRowsByFavorites<T>(\r\n rows: readonly T[],\r\n favoriteIds: Set<RowId> | readonly RowId[] | null | undefined,\r\n getRowId: ((row: T) => RowId) | undefined,\r\n mode: FavoritesFilterMode\r\n): readonly T[] {\r\n if (mode !== FAVORITES_FILTER.ONLY || !Array.isArray(rows)) return rows;\r\n // Array.isArray widened `rows` to any[]; re-establish the element type.\r\n const source: readonly T[] = rows;\r\n const ids = toIdSet(favoriteIds);\r\n const getId = resolveGetRowId(getRowId);\r\n return source.filter(function keepFavorite(r) {\r\n return ids.has(getId(r));\r\n });\r\n}\r\n\r\n/**\r\n * Move favorited rows to the front (\"first\") or back (\"last\"), preserving\r\n * the host's existing order WITHIN each group (stable partition). Returns\r\n * `rows` unchanged when placement is \"none\" or when reordering is a no-op.\r\n */\r\nexport function sortRowsByFavorites<T>(\r\n rows: readonly T[],\r\n favoriteIds: Set<RowId> | readonly RowId[] | null | undefined,\r\n getRowId: ((row: T) => RowId) | undefined,\r\n placement: FavoritesSortPlacement\r\n): readonly T[] {\r\n if (\r\n (placement !== FAVORITES_SORT.FIRST && placement !== FAVORITES_SORT.LAST) ||\r\n !Array.isArray(rows)\r\n ) {\r\n return rows;\r\n }\r\n // Array.isArray widened `rows` to any[]; re-establish the element type.\r\n const source: readonly T[] = rows;\r\n const ids = toIdSet(favoriteIds);\r\n const getId = resolveGetRowId(getRowId);\r\n const fav: T[] = [];\r\n const rest: T[] = [];\r\n for (const row of source) {\r\n if (ids.has(getId(row))) fav.push(row);\r\n else rest.push(row);\r\n }\r\n if (fav.length === 0 || rest.length === 0) return source; // nothing to reorder\r\n return placement === FAVORITES_SORT.FIRST\r\n ? fav.concat(rest)\r\n : rest.concat(fav);\r\n}\r\n\r\nexport interface UseFavoritesViewOptions<T> {\r\n /** Should be stable; MUST match the grid's getRowId. Defaults to (r) => r.id. */\r\n getRowId?: (row: T) => RowId;\r\n /** @default \"all\" */\r\n filterMode?: FavoritesFilterMode;\r\n /** @default \"none\" */\r\n sortPlacement?: FavoritesSortPlacement;\r\n}\r\n\r\nexport interface UseFavoritesViewResult<T> {\r\n rows: readonly T[];\r\n favoriteIds: Set<RowId>;\r\n favoriteCount: number;\r\n isFiltering: boolean;\r\n}\r\n\r\n/**\r\n * useFavoritesView(resourceKey, rows, options)\r\n *\r\n * Reads the favorites id Set for `resourceKey` and applies the favorites\r\n * filter + sort to `rows`. In the all/none case the original `rows`\r\n * reference is returned unchanged.\r\n */\r\nexport function useFavoritesView<T>(\r\n resourceKey: string,\r\n rows: readonly T[],\r\n options?: UseFavoritesViewOptions<T>\r\n): UseFavoritesViewResult<T> {\r\n const opts: UseFavoritesViewOptions<T> = options || {};\r\n const getRowId = opts.getRowId;\r\n const filterMode = opts.filterMode || FAVORITES_FILTER.ALL;\r\n const sortPlacement = opts.sortPlacement || FAVORITES_SORT.NONE;\r\n\r\n const fav = useFavorites(resourceKey);\r\n const ids = fav.ids;\r\n\r\n const processed = React.useMemo(\r\n function compute(): readonly T[] {\r\n const base: readonly T[] = Array.isArray(rows) ? rows : EMPTY_ROWS;\r\n const filtered = filterRowsByFavorites(base, ids, getRowId, filterMode);\r\n return sortRowsByFavorites(filtered, ids, getRowId, sortPlacement);\r\n },\r\n [rows, ids, getRowId, filterMode, sortPlacement]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseFavoritesViewResult<T> {\r\n return {\r\n rows: processed,\r\n favoriteIds: ids,\r\n favoriteCount: fav.count,\r\n isFiltering: filterMode === FAVORITES_FILTER.ONLY,\r\n };\r\n },\r\n [processed, ids, fav.count, filterMode]\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"favoritesView.js","names":["React","_interopRequireWildcard","require","_favorites","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","step","next","_e2","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","arr","len","arr2","FAVORITES_FILTER","exports","freeze","ALL","ONLY","FAVORITES_SORT","NONE","FIRST","LAST","EMPTY_ROWS","toIdSet","ids","Set","resolveGetRowId","getRowId","defaultGetRowId","r","id","filterRowsByFavorites","rows","favoriteIds","mode","source","getId","filter","keepFavorite","sortRowsByFavorites","placement","fav","rest","_iterator","_step","row","push","concat","useFavoritesView","resourceKey","options","opts","filterMode","sortPlacement","useFavorites","processed","useMemo","compute","base","filtered","favoriteCount","count","isFiltering"],"sources":["../../../../src/lib/v2/personalization/capabilities/favoritesView.ts"],"sourcesContent":["/**\r\n * favoritesView — Portnet UI v2 · personalization\r\n *\r\n * Grid-agnostic favorites VIEW logic: filter (all / favorites-only) and\r\n * sort (favorites-first / favorites-last). Pure helpers usable anywhere,\r\n * plus a useFavoritesView hook that wires them to the favorites capability.\r\n *\r\n * The host owns its row id contract and the toggle UI (use FavoritesFilter\r\n * or any control bound to `filterMode` / `sortPlacement`). These helpers\r\n * only reorder/subset the rows array the host already has — they never\r\n * fetch or mutate.\r\n */\r\n\r\nimport * as React from \"react\";\r\n\r\nimport { useFavorites } from \"./favorites\";\r\nimport type { RowId } from \"../../types/common\";\r\n\r\nexport const FAVORITES_FILTER = Object.freeze({\r\n ALL: \"all\",\r\n ONLY: \"only\",\r\n} as const);\r\nexport const FAVORITES_SORT = Object.freeze({\r\n NONE: \"none\",\r\n FIRST: \"first\",\r\n LAST: \"last\",\r\n} as const);\r\n\r\nexport type FavoritesFilterMode =\r\n (typeof FAVORITES_FILTER)[keyof typeof FAVORITES_FILTER];\r\nexport type FavoritesSortPlacement =\r\n (typeof FAVORITES_SORT)[keyof typeof FAVORITES_SORT];\r\n\r\nconst EMPTY_ROWS: readonly never[] = Object.freeze([]);\r\n\r\nfunction toIdSet(\r\n ids: Set<RowId> | readonly RowId[] | null | undefined\r\n): Set<RowId> {\r\n return ids instanceof Set ? ids : new Set(ids || []);\r\n}\r\n\r\nfunction resolveGetRowId<T>(getRowId?: (row: T) => RowId): (row: T) => RowId {\r\n return typeof getRowId === \"function\"\r\n ? getRowId\r\n : function defaultGetRowId(r: T): RowId {\r\n return (r as { id: RowId }).id;\r\n };\r\n}\r\n\r\n/**\r\n * Keep only favorited rows when mode === \"only\"; otherwise return `rows`\r\n * unchanged (same reference).\r\n */\r\nexport function filterRowsByFavorites<T>(\r\n rows: readonly T[],\r\n favoriteIds: Set<RowId> | readonly RowId[] | null | undefined,\r\n getRowId: ((row: T) => RowId) | undefined,\r\n mode: FavoritesFilterMode\r\n): readonly T[] {\r\n if (mode !== FAVORITES_FILTER.ONLY || !Array.isArray(rows)) return rows;\r\n // Array.isArray widened `rows` to any[]; re-establish the element type.\r\n const source: readonly T[] = rows;\r\n const ids = toIdSet(favoriteIds);\r\n const getId = resolveGetRowId(getRowId);\r\n return source.filter(function keepFavorite(r) {\r\n return ids.has(getId(r));\r\n });\r\n}\r\n\r\n/**\r\n * Move favorited rows to the front (\"first\") or back (\"last\"), preserving\r\n * the host's existing order WITHIN each group (stable partition). Returns\r\n * `rows` unchanged when placement is \"none\" or when reordering is a no-op.\r\n */\r\nexport function sortRowsByFavorites<T>(\r\n rows: readonly T[],\r\n favoriteIds: Set<RowId> | readonly RowId[] | null | undefined,\r\n getRowId: ((row: T) => RowId) | undefined,\r\n placement: FavoritesSortPlacement\r\n): readonly T[] {\r\n if (\r\n (placement !== FAVORITES_SORT.FIRST && placement !== FAVORITES_SORT.LAST) ||\r\n !Array.isArray(rows)\r\n ) {\r\n return rows;\r\n }\r\n // Array.isArray widened `rows` to any[]; re-establish the element type.\r\n const source: readonly T[] = rows;\r\n const ids = toIdSet(favoriteIds);\r\n const getId = resolveGetRowId(getRowId);\r\n const fav: T[] = [];\r\n const rest: T[] = [];\r\n for (const row of source) {\r\n if (ids.has(getId(row))) fav.push(row);\r\n else rest.push(row);\r\n }\r\n if (fav.length === 0 || rest.length === 0) return source; // nothing to reorder\r\n return placement === FAVORITES_SORT.FIRST\r\n ? fav.concat(rest)\r\n : rest.concat(fav);\r\n}\r\n\r\nexport interface UseFavoritesViewOptions<T> {\r\n /** Should be stable; MUST match the grid's getRowId. Defaults to (r) => r.id. */\r\n getRowId?: ((row: T) => RowId) | undefined;\r\n /** @default \"all\" */\r\n filterMode?: FavoritesFilterMode | undefined;\r\n /** @default \"none\" */\r\n sortPlacement?: FavoritesSortPlacement | undefined;\r\n}\r\n\r\nexport interface UseFavoritesViewResult<T> {\r\n rows: readonly T[];\r\n favoriteIds: Set<RowId>;\r\n favoriteCount: number;\r\n isFiltering: boolean;\r\n}\r\n\r\n/**\r\n * useFavoritesView(resourceKey, rows, options)\r\n *\r\n * Reads the favorites id Set for `resourceKey` and applies the favorites\r\n * filter + sort to `rows`. In the all/none case the original `rows`\r\n * reference is returned unchanged.\r\n */\r\nexport function useFavoritesView<T>(\r\n resourceKey: string,\r\n rows: readonly T[],\r\n options?: UseFavoritesViewOptions<T>\r\n): UseFavoritesViewResult<T> {\r\n const opts: UseFavoritesViewOptions<T> = options || {};\r\n const getRowId = opts.getRowId;\r\n const filterMode = opts.filterMode || FAVORITES_FILTER.ALL;\r\n const sortPlacement = opts.sortPlacement || FAVORITES_SORT.NONE;\r\n\r\n const fav = useFavorites(resourceKey);\r\n const ids = fav.ids;\r\n\r\n const processed = React.useMemo(\r\n function compute(): readonly T[] {\r\n const base: readonly T[] = Array.isArray(rows) ? rows : EMPTY_ROWS;\r\n const filtered = filterRowsByFavorites(base, ids, getRowId, filterMode);\r\n return sortRowsByFavorites(filtered, ids, getRowId, sortPlacement);\r\n },\r\n [rows, ids, getRowId, filterMode, sortPlacement]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseFavoritesViewResult<T> {\r\n return {\r\n rows: processed,\r\n favoriteIds: ids,\r\n favoriteCount: fav.count,\r\n isFiltering: filterMode === FAVORITES_FILTER.ONLY,\r\n };\r\n },\r\n [processed, ids, fav.count, filterMode]\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -34,9 +34,9 @@ export declare const SAVED_FILTERS_CAPABILITY_ID = "savedFilters";
|
|
|
34
34
|
export interface SaveFilterInput {
|
|
35
35
|
name: string;
|
|
36
36
|
/** Opaque host filter payload — stored and re-emitted verbatim. */
|
|
37
|
-
criteria?: Record<string, unknown
|
|
38
|
-
isDefault?: boolean;
|
|
39
|
-
shared?: boolean;
|
|
37
|
+
criteria?: Record<string, unknown> | undefined;
|
|
38
|
+
isDefault?: boolean | undefined;
|
|
39
|
+
shared?: boolean | undefined;
|
|
40
40
|
}
|
|
41
41
|
export interface UseSavedFiltersResult {
|
|
42
42
|
filters: readonly SavedFilter[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"savedFilters.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/personalization/capabilities/savedFilters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAWH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C,eAAO,MAAM,2BAA2B,iBAAiB,CAAC;AA2J1D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"savedFilters.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/personalization/capabilities/savedFilters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAWH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C,eAAO,MAAM,2BAA2B,iBAAiB,CAAC;AA2J1D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/C,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,WAAW,CAAC;IAC9C,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC1D,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,CA0J1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"savedFilters.js","names":["React","_interopRequireWildcard","require","_uuid","_schema","_personalizationContext","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","step","next","_e2","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","arr","len","arr2","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","_objectSpread","target","arguments","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","toPrimitive","undefined","res","Number","SAVED_FILTERS_CAPABILITY_ID","exports","SCHEMA_VERSION","EMPTY_LIST","freeze","EMPTY_MAP","registerCapability","id","schemaVersion","defaultState","migrate","migrateSavedFilters","_fromVersion","payload","listFor","map","resourceKey","list","appendFilter","updatedAt","base","isDefault","demote","concat","patchFilter","patch","some","nextList","applyPatch","merged","demoteOthers","deleteFilter","keep","markDefault","changed","setFlag","shouldBe","unmarkDefault","clearFlag","useSavedFilters","store","usePersonalizationStore","useEffect","ensure","ensureCapability","selectList","useCallback","snapshot","filters","useStoreSelector","defaultFilter","useMemo","findDefault","_iterator","_step","save","now","Date","toISOString","scope","getScope","criteria","ownerId","userId","uuidv4","shared","createdAt","write","prev","update","rename","remove","setDefault","clearDefault","getById","_iterator2","_step2","count"],"sources":["../../../../src/lib/v2/personalization/capabilities/savedFilters.ts"],"sourcesContent":["/**\r\n * savedFilters — Portnet UI v2 · personalization capability\r\n *\r\n * The Saved Filters framework (Odoo-inspired \"saved searches\"). Lets a\r\n * user name and persist the current state of any list's filters, recall\r\n * them later, and optionally mark one as the default applied on open.\r\n *\r\n * Self-registers the \"savedFilters\" capability with the schema registry\r\n * at import time, so the capability-agnostic foundation discovers it\r\n * without hardcoding.\r\n *\r\n * State model (the capability payload):\r\n * { [resourceKey]: SavedFilter[] }\r\n * SavedFilter = {\r\n * id, name, resourceKey,\r\n * criteria, // OPAQUE — the host's own filter payload\r\n * ownerId,\r\n * isDefault, shared,\r\n * createdAt, updatedAt,\r\n * }\r\n *\r\n * `criteria` is never interpreted here — it is stored and re-emitted\r\n * verbatim, which is what keeps the framework reusable across every list\r\n * regardless of its filter schema (the host owns apply()). `shared` is\r\n * modelled but NOT enforced in Phase 1 (local persistence): it round-trips\r\n * for a future backend adapter and lets the UI show a shared indicator.\r\n *\r\n * Performance: the pure helpers rebuild only the touched resourceKey's\r\n * array and shallow-copy the map, so the store's structural sharing keeps\r\n * every OTHER resource's list referentially stable.\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nimport { registerCapability } from \"../schema\";\r\nimport {\r\n usePersonalizationStore,\r\n useStoreSelector,\r\n} from \"../personalizationContext\";\r\nimport type { PersonalizationSnapshot } from \"../createPersonalizationStore\";\r\nimport type { SavedFilter } from \"../types\";\r\n\r\n/** The saved-filters capability payload: SavedFilter arrays keyed by resourceKey. */\r\ntype SavedFiltersState = Record<string, SavedFilter[]>;\r\n\r\nexport const SAVED_FILTERS_CAPABILITY_ID = \"savedFilters\";\r\nconst SCHEMA_VERSION = 1;\r\n\r\nconst EMPTY_LIST: readonly SavedFilter[] = Object.freeze([]);\r\nconst EMPTY_MAP: SavedFiltersState = Object.freeze({});\r\n\r\n/* Register at import time — the foundation reads this at hydration. */\r\nregisterCapability({\r\n id: SAVED_FILTERS_CAPABILITY_ID,\r\n schemaVersion: SCHEMA_VERSION,\r\n defaultState: EMPTY_MAP, // { [resourceKey]: SavedFilter[] }\r\n migrate: function migrateSavedFilters(\r\n _fromVersion: number,\r\n payload: unknown\r\n ): unknown {\r\n // v1 is the initial schema. Defensive normalisation only.\r\n return payload && typeof payload === \"object\" ? payload : {};\r\n },\r\n});\r\n\r\n/* ── pure, resourceKey-scoped state helpers (structural sharing) ────── */\r\n\r\nfunction listFor(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string\r\n): readonly SavedFilter[] {\r\n const list = map ? map[resourceKey] : undefined;\r\n return Array.isArray(list) ? list : EMPTY_LIST;\r\n}\r\n\r\n// Append a fully-formed filter. Enforces a single default per resource:\r\n// when the new filter is default, demote any previous default.\r\nfunction appendFilter(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string,\r\n filter: SavedFilter,\r\n updatedAt: string\r\n): SavedFiltersState {\r\n const base = map || EMPTY_MAP;\r\n let list = listFor(base, resourceKey);\r\n if (filter.isDefault) {\r\n list = list.map(function demote(f) {\r\n return f.isDefault ? { ...f, isDefault: false, updatedAt: updatedAt } : f;\r\n });\r\n }\r\n const next: SavedFiltersState = { ...base };\r\n next[resourceKey] = list.concat([filter]);\r\n return next;\r\n}\r\n\r\n// Merge a patch into one filter (id/resourceKey are immutable). When the\r\n// patch promotes it to default, demote the others.\r\nfunction patchFilter(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string,\r\n id: string,\r\n patch: Partial<SavedFilter>,\r\n updatedAt: string\r\n): SavedFiltersState {\r\n const base = map || EMPTY_MAP;\r\n const list = listFor(base, resourceKey);\r\n if (\r\n !list.some(function (f) {\r\n return f.id === id;\r\n })\r\n ) {\r\n return base; // no-op\r\n }\r\n let nextList = list.map(function applyPatch(f) {\r\n if (f.id !== id) return f;\r\n const merged: SavedFilter = {\r\n ...f,\r\n ...patch,\r\n id: f.id,\r\n updatedAt: updatedAt,\r\n ...(f.resourceKey !== undefined ? { resourceKey: f.resourceKey } : {}),\r\n };\r\n return merged;\r\n });\r\n if (patch && patch.isDefault === true) {\r\n nextList = nextList.map(function demoteOthers(f) {\r\n if (f.id === id) return f;\r\n return f.isDefault ? { ...f, isDefault: false, updatedAt: updatedAt } : f;\r\n });\r\n }\r\n const next: SavedFiltersState = { ...base };\r\n next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction deleteFilter(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string,\r\n id: string\r\n): SavedFiltersState {\r\n const base = map || EMPTY_MAP;\r\n const list = listFor(base, resourceKey);\r\n if (\r\n !list.some(function (f) {\r\n return f.id === id;\r\n })\r\n ) {\r\n return base; // no-op\r\n }\r\n const nextList = list.filter(function keep(f) {\r\n return f.id !== id;\r\n });\r\n const next: SavedFiltersState = { ...base };\r\n if (nextList.length === 0) delete next[resourceKey]; // keep the map tidy\r\n else next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction markDefault(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string,\r\n id: string,\r\n updatedAt: string\r\n): SavedFiltersState {\r\n const base = map || EMPTY_MAP;\r\n const list = listFor(base, resourceKey);\r\n let changed = false;\r\n const nextList = list.map(function setFlag(f) {\r\n const shouldBe = f.id === id;\r\n if (!!f.isDefault === shouldBe) return f;\r\n changed = true;\r\n return { ...f, isDefault: shouldBe, updatedAt: updatedAt };\r\n });\r\n if (!changed) return base;\r\n const next: SavedFiltersState = { ...base };\r\n next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction unmarkDefault(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string,\r\n updatedAt: string\r\n): SavedFiltersState {\r\n const base = map || EMPTY_MAP;\r\n const list = listFor(base, resourceKey);\r\n let changed = false;\r\n const nextList = list.map(function clearFlag(f) {\r\n if (!f.isDefault) return f;\r\n changed = true;\r\n return { ...f, isDefault: false, updatedAt: updatedAt };\r\n });\r\n if (!changed) return base;\r\n const next: SavedFiltersState = { ...base };\r\n next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\n/* ── hook ───────────────────────────────────────────────────────────── */\r\n\r\nexport interface SaveFilterInput {\r\n name: string;\r\n /** Opaque host filter payload — stored and re-emitted verbatim. */\r\n criteria?: Record<string, unknown>;\r\n isDefault?: boolean;\r\n shared?: boolean;\r\n}\r\n\r\nexport interface UseSavedFiltersResult {\r\n filters: readonly SavedFilter[];\r\n defaultFilter: SavedFilter | null;\r\n count: number;\r\n save: (input: SaveFilterInput) => SavedFilter;\r\n update: (id: string, patch: Partial<SavedFilter>) => void;\r\n rename: (id: string, name: string) => void;\r\n remove: (id: string) => void;\r\n setDefault: (id: string) => void;\r\n clearDefault: () => void;\r\n getById: (id: string) => SavedFilter | null;\r\n}\r\n\r\n/**\r\n * useSavedFilters(resourceKey) — list, default, and CRUD for one resource.\r\n *\r\n * Applying a filter is the host's concern (it owns the criteria\r\n * semantics): read `getById(id).criteria` / a filter's `criteria` and set\r\n * your own filter state. SavedFiltersMenu wires this for you.\r\n */\r\nexport function useSavedFilters(resourceKey: string): UseSavedFiltersResult {\r\n const store = usePersonalizationStore();\r\n\r\n React.useEffect(\r\n function ensure() {\r\n store.ensureCapability(SAVED_FILTERS_CAPABILITY_ID);\r\n },\r\n [store]\r\n );\r\n\r\n const selectList = React.useCallback(\r\n function selectList(snapshot: PersonalizationSnapshot): readonly SavedFilter[] {\r\n const slice = snapshot[SAVED_FILTERS_CAPABILITY_ID] as\r\n | SavedFiltersState\r\n | undefined;\r\n return slice ? listFor(slice, resourceKey) : EMPTY_LIST;\r\n },\r\n [resourceKey]\r\n );\r\n const filters = useStoreSelector(selectList);\r\n\r\n const defaultFilter = React.useMemo(\r\n function findDefault(): SavedFilter | null {\r\n for (const f of filters) {\r\n if (f.isDefault) return f;\r\n }\r\n return null;\r\n },\r\n [filters]\r\n );\r\n\r\n const save = React.useCallback(\r\n function save(input: SaveFilterInput): SavedFilter {\r\n const now = new Date().toISOString();\r\n const scope = store.getScope ? store.getScope() : null;\r\n const criteria = input ? input.criteria : undefined;\r\n const ownerId = scope ? scope.userId : undefined;\r\n const filter: SavedFilter = {\r\n id: uuidv4(),\r\n name: input && input.name ? input.name : \"\",\r\n resourceKey: resourceKey,\r\n isDefault: !!(input && input.isDefault),\r\n shared: !!(input && input.shared),\r\n createdAt: now,\r\n updatedAt: now,\r\n ...(criteria !== undefined ? { criteria } : {}),\r\n ...(ownerId !== undefined ? { ownerId } : {}),\r\n };\r\n store.write<SavedFiltersState>(\r\n SAVED_FILTERS_CAPABILITY_ID,\r\n function (prev) {\r\n return appendFilter(prev, resourceKey, filter, now);\r\n }\r\n );\r\n return filter;\r\n },\r\n [store, resourceKey]\r\n );\r\n\r\n const update = React.useCallback(\r\n function update(id: string, patch: Partial<SavedFilter>): void {\r\n const now = new Date().toISOString();\r\n store.write<SavedFiltersState>(\r\n SAVED_FILTERS_CAPABILITY_ID,\r\n function (prev) {\r\n return patchFilter(prev, resourceKey, id, patch || {}, now);\r\n }\r\n );\r\n },\r\n [store, resourceKey]\r\n );\r\n\r\n const rename = React.useCallback(\r\n function rename(id: string, name: string): void {\r\n update(id, { name: name });\r\n },\r\n [update]\r\n );\r\n\r\n const remove = React.useCallback(\r\n function remove(id: string): void {\r\n store.write<SavedFiltersState>(\r\n SAVED_FILTERS_CAPABILITY_ID,\r\n function (prev) {\r\n return deleteFilter(prev, resourceKey, id);\r\n }\r\n );\r\n },\r\n [store, resourceKey]\r\n );\r\n\r\n const setDefault = React.useCallback(\r\n function setDefault(id: string): void {\r\n const now = new Date().toISOString();\r\n store.write<SavedFiltersState>(\r\n SAVED_FILTERS_CAPABILITY_ID,\r\n function (prev) {\r\n return markDefault(prev, resourceKey, id, now);\r\n }\r\n );\r\n },\r\n [store, resourceKey]\r\n );\r\n\r\n const clearDefault = React.useCallback(\r\n function clearDefault(): void {\r\n const now = new Date().toISOString();\r\n store.write<SavedFiltersState>(\r\n SAVED_FILTERS_CAPABILITY_ID,\r\n function (prev) {\r\n return unmarkDefault(prev, resourceKey, now);\r\n }\r\n );\r\n },\r\n [store, resourceKey]\r\n );\r\n\r\n const getById = React.useCallback(\r\n function getById(id: string): SavedFilter | null {\r\n for (const f of filters) {\r\n if (f.id === id) return f;\r\n }\r\n return null;\r\n },\r\n [filters]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseSavedFiltersResult {\r\n return {\r\n filters: filters,\r\n defaultFilter: defaultFilter,\r\n count: filters.length,\r\n save: save,\r\n update: update,\r\n rename: rename,\r\n remove: remove,\r\n setDefault: setDefault,\r\n clearDefault: clearDefault,\r\n getById: getById,\r\n };\r\n },\r\n [\r\n filters,\r\n defaultFilter,\r\n save,\r\n update,\r\n rename,\r\n remove,\r\n setDefault,\r\n clearDefault,\r\n getById,\r\n ]\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"savedFilters.js","names":["React","_interopRequireWildcard","require","_uuid","_schema","_personalizationContext","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","step","next","_e2","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","arr","len","arr2","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","_objectSpread","target","arguments","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","toPrimitive","undefined","res","Number","SAVED_FILTERS_CAPABILITY_ID","exports","SCHEMA_VERSION","EMPTY_LIST","freeze","EMPTY_MAP","registerCapability","id","schemaVersion","defaultState","migrate","migrateSavedFilters","_fromVersion","payload","listFor","map","resourceKey","list","appendFilter","updatedAt","base","isDefault","demote","concat","patchFilter","patch","some","nextList","applyPatch","merged","demoteOthers","deleteFilter","keep","markDefault","changed","setFlag","shouldBe","unmarkDefault","clearFlag","useSavedFilters","store","usePersonalizationStore","useEffect","ensure","ensureCapability","selectList","useCallback","snapshot","filters","useStoreSelector","defaultFilter","useMemo","findDefault","_iterator","_step","save","now","Date","toISOString","scope","getScope","criteria","ownerId","userId","uuidv4","shared","createdAt","write","prev","update","rename","remove","setDefault","clearDefault","getById","_iterator2","_step2","count"],"sources":["../../../../src/lib/v2/personalization/capabilities/savedFilters.ts"],"sourcesContent":["/**\r\n * savedFilters — Portnet UI v2 · personalization capability\r\n *\r\n * The Saved Filters framework (Odoo-inspired \"saved searches\"). Lets a\r\n * user name and persist the current state of any list's filters, recall\r\n * them later, and optionally mark one as the default applied on open.\r\n *\r\n * Self-registers the \"savedFilters\" capability with the schema registry\r\n * at import time, so the capability-agnostic foundation discovers it\r\n * without hardcoding.\r\n *\r\n * State model (the capability payload):\r\n * { [resourceKey]: SavedFilter[] }\r\n * SavedFilter = {\r\n * id, name, resourceKey,\r\n * criteria, // OPAQUE — the host's own filter payload\r\n * ownerId,\r\n * isDefault, shared,\r\n * createdAt, updatedAt,\r\n * }\r\n *\r\n * `criteria` is never interpreted here — it is stored and re-emitted\r\n * verbatim, which is what keeps the framework reusable across every list\r\n * regardless of its filter schema (the host owns apply()). `shared` is\r\n * modelled but NOT enforced in Phase 1 (local persistence): it round-trips\r\n * for a future backend adapter and lets the UI show a shared indicator.\r\n *\r\n * Performance: the pure helpers rebuild only the touched resourceKey's\r\n * array and shallow-copy the map, so the store's structural sharing keeps\r\n * every OTHER resource's list referentially stable.\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nimport { registerCapability } from \"../schema\";\r\nimport {\r\n usePersonalizationStore,\r\n useStoreSelector,\r\n} from \"../personalizationContext\";\r\nimport type { PersonalizationSnapshot } from \"../createPersonalizationStore\";\r\nimport type { SavedFilter } from \"../types\";\r\n\r\n/** The saved-filters capability payload: SavedFilter arrays keyed by resourceKey. */\r\ntype SavedFiltersState = Record<string, SavedFilter[]>;\r\n\r\nexport const SAVED_FILTERS_CAPABILITY_ID = \"savedFilters\";\r\nconst SCHEMA_VERSION = 1;\r\n\r\nconst EMPTY_LIST: readonly SavedFilter[] = Object.freeze([]);\r\nconst EMPTY_MAP: SavedFiltersState = Object.freeze({});\r\n\r\n/* Register at import time — the foundation reads this at hydration. */\r\nregisterCapability({\r\n id: SAVED_FILTERS_CAPABILITY_ID,\r\n schemaVersion: SCHEMA_VERSION,\r\n defaultState: EMPTY_MAP, // { [resourceKey]: SavedFilter[] }\r\n migrate: function migrateSavedFilters(\r\n _fromVersion: number,\r\n payload: unknown\r\n ): unknown {\r\n // v1 is the initial schema. Defensive normalisation only.\r\n return payload && typeof payload === \"object\" ? payload : {};\r\n },\r\n});\r\n\r\n/* ── pure, resourceKey-scoped state helpers (structural sharing) ────── */\r\n\r\nfunction listFor(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string\r\n): readonly SavedFilter[] {\r\n const list = map ? map[resourceKey] : undefined;\r\n return Array.isArray(list) ? list : EMPTY_LIST;\r\n}\r\n\r\n// Append a fully-formed filter. Enforces a single default per resource:\r\n// when the new filter is default, demote any previous default.\r\nfunction appendFilter(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string,\r\n filter: SavedFilter,\r\n updatedAt: string\r\n): SavedFiltersState {\r\n const base = map || EMPTY_MAP;\r\n let list = listFor(base, resourceKey);\r\n if (filter.isDefault) {\r\n list = list.map(function demote(f) {\r\n return f.isDefault ? { ...f, isDefault: false, updatedAt: updatedAt } : f;\r\n });\r\n }\r\n const next: SavedFiltersState = { ...base };\r\n next[resourceKey] = list.concat([filter]);\r\n return next;\r\n}\r\n\r\n// Merge a patch into one filter (id/resourceKey are immutable). When the\r\n// patch promotes it to default, demote the others.\r\nfunction patchFilter(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string,\r\n id: string,\r\n patch: Partial<SavedFilter>,\r\n updatedAt: string\r\n): SavedFiltersState {\r\n const base = map || EMPTY_MAP;\r\n const list = listFor(base, resourceKey);\r\n if (\r\n !list.some(function (f) {\r\n return f.id === id;\r\n })\r\n ) {\r\n return base; // no-op\r\n }\r\n let nextList = list.map(function applyPatch(f) {\r\n if (f.id !== id) return f;\r\n const merged: SavedFilter = {\r\n ...f,\r\n ...patch,\r\n id: f.id,\r\n updatedAt: updatedAt,\r\n ...(f.resourceKey !== undefined ? { resourceKey: f.resourceKey } : {}),\r\n };\r\n return merged;\r\n });\r\n if (patch && patch.isDefault === true) {\r\n nextList = nextList.map(function demoteOthers(f) {\r\n if (f.id === id) return f;\r\n return f.isDefault ? { ...f, isDefault: false, updatedAt: updatedAt } : f;\r\n });\r\n }\r\n const next: SavedFiltersState = { ...base };\r\n next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction deleteFilter(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string,\r\n id: string\r\n): SavedFiltersState {\r\n const base = map || EMPTY_MAP;\r\n const list = listFor(base, resourceKey);\r\n if (\r\n !list.some(function (f) {\r\n return f.id === id;\r\n })\r\n ) {\r\n return base; // no-op\r\n }\r\n const nextList = list.filter(function keep(f) {\r\n return f.id !== id;\r\n });\r\n const next: SavedFiltersState = { ...base };\r\n if (nextList.length === 0) delete next[resourceKey]; // keep the map tidy\r\n else next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction markDefault(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string,\r\n id: string,\r\n updatedAt: string\r\n): SavedFiltersState {\r\n const base = map || EMPTY_MAP;\r\n const list = listFor(base, resourceKey);\r\n let changed = false;\r\n const nextList = list.map(function setFlag(f) {\r\n const shouldBe = f.id === id;\r\n if (!!f.isDefault === shouldBe) return f;\r\n changed = true;\r\n return { ...f, isDefault: shouldBe, updatedAt: updatedAt };\r\n });\r\n if (!changed) return base;\r\n const next: SavedFiltersState = { ...base };\r\n next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\nfunction unmarkDefault(\r\n map: SavedFiltersState | null | undefined,\r\n resourceKey: string,\r\n updatedAt: string\r\n): SavedFiltersState {\r\n const base = map || EMPTY_MAP;\r\n const list = listFor(base, resourceKey);\r\n let changed = false;\r\n const nextList = list.map(function clearFlag(f) {\r\n if (!f.isDefault) return f;\r\n changed = true;\r\n return { ...f, isDefault: false, updatedAt: updatedAt };\r\n });\r\n if (!changed) return base;\r\n const next: SavedFiltersState = { ...base };\r\n next[resourceKey] = nextList;\r\n return next;\r\n}\r\n\r\n/* ── hook ───────────────────────────────────────────────────────────── */\r\n\r\nexport interface SaveFilterInput {\r\n name: string;\r\n /** Opaque host filter payload — stored and re-emitted verbatim. */\r\n criteria?: Record<string, unknown> | undefined;\r\n isDefault?: boolean | undefined;\r\n shared?: boolean | undefined;\r\n}\r\n\r\nexport interface UseSavedFiltersResult {\r\n filters: readonly SavedFilter[];\r\n defaultFilter: SavedFilter | null;\r\n count: number;\r\n save: (input: SaveFilterInput) => SavedFilter;\r\n update: (id: string, patch: Partial<SavedFilter>) => void;\r\n rename: (id: string, name: string) => void;\r\n remove: (id: string) => void;\r\n setDefault: (id: string) => void;\r\n clearDefault: () => void;\r\n getById: (id: string) => SavedFilter | null;\r\n}\r\n\r\n/**\r\n * useSavedFilters(resourceKey) — list, default, and CRUD for one resource.\r\n *\r\n * Applying a filter is the host's concern (it owns the criteria\r\n * semantics): read `getById(id).criteria` / a filter's `criteria` and set\r\n * your own filter state. SavedFiltersMenu wires this for you.\r\n */\r\nexport function useSavedFilters(resourceKey: string): UseSavedFiltersResult {\r\n const store = usePersonalizationStore();\r\n\r\n React.useEffect(\r\n function ensure() {\r\n store.ensureCapability(SAVED_FILTERS_CAPABILITY_ID);\r\n },\r\n [store]\r\n );\r\n\r\n const selectList = React.useCallback(\r\n function selectList(snapshot: PersonalizationSnapshot): readonly SavedFilter[] {\r\n const slice = snapshot[SAVED_FILTERS_CAPABILITY_ID] as\r\n | SavedFiltersState\r\n | undefined;\r\n return slice ? listFor(slice, resourceKey) : EMPTY_LIST;\r\n },\r\n [resourceKey]\r\n );\r\n const filters = useStoreSelector(selectList);\r\n\r\n const defaultFilter = React.useMemo(\r\n function findDefault(): SavedFilter | null {\r\n for (const f of filters) {\r\n if (f.isDefault) return f;\r\n }\r\n return null;\r\n },\r\n [filters]\r\n );\r\n\r\n const save = React.useCallback(\r\n function save(input: SaveFilterInput): SavedFilter {\r\n const now = new Date().toISOString();\r\n const scope = store.getScope ? store.getScope() : null;\r\n const criteria = input ? input.criteria : undefined;\r\n const ownerId = scope ? scope.userId : undefined;\r\n const filter: SavedFilter = {\r\n id: uuidv4(),\r\n name: input && input.name ? input.name : \"\",\r\n resourceKey: resourceKey,\r\n isDefault: !!(input && input.isDefault),\r\n shared: !!(input && input.shared),\r\n createdAt: now,\r\n updatedAt: now,\r\n ...(criteria !== undefined ? { criteria } : {}),\r\n ...(ownerId !== undefined ? { ownerId } : {}),\r\n };\r\n store.write<SavedFiltersState>(\r\n SAVED_FILTERS_CAPABILITY_ID,\r\n function (prev) {\r\n return appendFilter(prev, resourceKey, filter, now);\r\n }\r\n );\r\n return filter;\r\n },\r\n [store, resourceKey]\r\n );\r\n\r\n const update = React.useCallback(\r\n function update(id: string, patch: Partial<SavedFilter>): void {\r\n const now = new Date().toISOString();\r\n store.write<SavedFiltersState>(\r\n SAVED_FILTERS_CAPABILITY_ID,\r\n function (prev) {\r\n return patchFilter(prev, resourceKey, id, patch || {}, now);\r\n }\r\n );\r\n },\r\n [store, resourceKey]\r\n );\r\n\r\n const rename = React.useCallback(\r\n function rename(id: string, name: string): void {\r\n update(id, { name: name });\r\n },\r\n [update]\r\n );\r\n\r\n const remove = React.useCallback(\r\n function remove(id: string): void {\r\n store.write<SavedFiltersState>(\r\n SAVED_FILTERS_CAPABILITY_ID,\r\n function (prev) {\r\n return deleteFilter(prev, resourceKey, id);\r\n }\r\n );\r\n },\r\n [store, resourceKey]\r\n );\r\n\r\n const setDefault = React.useCallback(\r\n function setDefault(id: string): void {\r\n const now = new Date().toISOString();\r\n store.write<SavedFiltersState>(\r\n SAVED_FILTERS_CAPABILITY_ID,\r\n function (prev) {\r\n return markDefault(prev, resourceKey, id, now);\r\n }\r\n );\r\n },\r\n [store, resourceKey]\r\n );\r\n\r\n const clearDefault = React.useCallback(\r\n function clearDefault(): void {\r\n const now = new Date().toISOString();\r\n store.write<SavedFiltersState>(\r\n SAVED_FILTERS_CAPABILITY_ID,\r\n function (prev) {\r\n return unmarkDefault(prev, resourceKey, now);\r\n }\r\n );\r\n },\r\n [store, resourceKey]\r\n );\r\n\r\n const getById = React.useCallback(\r\n function getById(id: string): SavedFilter | null {\r\n for (const f of filters) {\r\n if (f.id === id) return f;\r\n }\r\n return null;\r\n },\r\n [filters]\r\n );\r\n\r\n return React.useMemo(\r\n function value(): UseSavedFiltersResult {\r\n return {\r\n filters: filters,\r\n defaultFilter: defaultFilter,\r\n count: filters.length,\r\n save: save,\r\n update: update,\r\n rename: rename,\r\n remove: remove,\r\n setDefault: setDefault,\r\n clearDefault: clearDefault,\r\n getById: getById,\r\n };\r\n },\r\n [\r\n filters,\r\n defaultFilter,\r\n save,\r\n update,\r\n rename,\r\n remove,\r\n setDefault,\r\n clearDefault,\r\n getById,\r\n ]\r\n );\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|