@portnet/ui 5.0.32 → 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/CHANGELOG.md +524 -0
- package/README.md +101 -38
- 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 +60 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +183 -191
- package/dist/index.js.map +1 -0
- 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__/MobileRowCard.test.js +337 -0
- package/dist/v2/__tests__/MobileRowCard.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/__tests__/apiError.test.js +182 -0
- package/dist/v2/__tests__/apiError.test.js.map +1 -0
- package/dist/v2/__tests__/banned-patterns.test.js +272 -0
- package/dist/v2/__tests__/banned-patterns.test.js.map +1 -0
- package/dist/v2/__tests__/contrast-palette.test.js +225 -0
- package/dist/v2/__tests__/contrast-palette.test.js.map +1 -0
- package/dist/v2/__tests__/cssVariables.test.js +158 -0
- package/dist/v2/__tests__/cssVariables.test.js.map +1 -0
- package/dist/v2/__tests__/labels-merge.test.js +153 -0
- package/dist/v2/__tests__/labels-merge.test.js.map +1 -0
- package/dist/v2/__tests__/locale-fallback.test.js +111 -0
- package/dist/v2/__tests__/locale-fallback.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusTrap.test.js +517 -0
- package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -0
- package/dist/v2/components/Accordion.d.ts +56 -0
- package/dist/v2/components/Accordion.d.ts.map +1 -0
- package/dist/v2/components/Accordion.js +238 -0
- package/dist/v2/components/Accordion.js.map +1 -0
- package/dist/v2/components/ActionStrip.d.ts +67 -0
- package/dist/v2/components/ActionStrip.d.ts.map +1 -0
- package/dist/v2/components/ActionStrip.js +154 -0
- package/dist/v2/components/ActionStrip.js.map +1 -0
- package/dist/v2/components/Banner.d.ts +88 -0
- package/dist/v2/components/Banner.d.ts.map +1 -0
- package/dist/v2/components/Banner.js +264 -0
- package/dist/v2/components/Banner.js.map +1 -0
- package/dist/v2/components/Busy.d.ts +18 -0
- package/dist/v2/components/Busy.d.ts.map +1 -0
- package/dist/v2/components/Busy.js +104 -0
- package/dist/v2/components/Busy.js.map +1 -0
- package/dist/v2/components/Button.d.ts +36 -0
- package/dist/v2/components/Button.d.ts.map +1 -0
- package/dist/v2/components/Button.js +122 -0
- package/dist/v2/components/Button.js.map +1 -0
- package/dist/v2/components/CategoryTag.d.ts +45 -0
- package/dist/v2/components/CategoryTag.d.ts.map +1 -0
- package/dist/v2/components/CategoryTag.js +89 -0
- package/dist/v2/components/CategoryTag.js.map +1 -0
- package/dist/v2/components/Checkbox.d.ts +59 -0
- package/dist/v2/components/Checkbox.d.ts.map +1 -0
- package/dist/v2/components/Checkbox.js +134 -0
- package/dist/v2/components/Checkbox.js.map +1 -0
- package/dist/v2/components/Chip.d.ts +48 -0
- package/dist/v2/components/Chip.d.ts.map +1 -0
- package/dist/v2/components/Chip.js +132 -0
- package/dist/v2/components/Chip.js.map +1 -0
- package/dist/v2/components/Combobox.d.ts +134 -0
- package/dist/v2/components/Combobox.d.ts.map +1 -0
- package/dist/v2/components/Combobox.js +400 -0
- package/dist/v2/components/Combobox.js.map +1 -0
- package/dist/v2/components/CommandPalette.d.ts +36 -0
- package/dist/v2/components/CommandPalette.d.ts.map +1 -0
- package/dist/v2/components/CommandPalette.js +668 -0
- package/dist/v2/components/CommandPalette.js.map +1 -0
- package/dist/v2/components/ConfirmDialog.d.ts +23 -0
- package/dist/v2/components/ConfirmDialog.d.ts.map +1 -0
- package/dist/v2/components/ConfirmDialog.js +151 -0
- package/dist/v2/components/ConfirmDialog.js.map +1 -0
- package/dist/v2/components/DatePicker.d.ts +21 -0
- package/dist/v2/components/DatePicker.d.ts.map +1 -0
- package/dist/v2/components/DatePicker.js +207 -0
- package/dist/v2/components/DatePicker.js.map +1 -0
- package/dist/v2/components/DateRangePicker.d.ts +81 -0
- package/dist/v2/components/DateRangePicker.d.ts.map +1 -0
- package/dist/v2/components/DateRangePicker.js +296 -0
- package/dist/v2/components/DateRangePicker.js.map +1 -0
- package/dist/v2/components/DateTimePicker.d.ts +21 -0
- package/dist/v2/components/DateTimePicker.d.ts.map +1 -0
- package/dist/v2/components/DateTimePicker.js +189 -0
- package/dist/v2/components/DateTimePicker.js.map +1 -0
- package/dist/v2/components/Drawer.d.ts +34 -0
- package/dist/v2/components/Drawer.d.ts.map +1 -0
- package/dist/v2/components/Drawer.js +340 -0
- package/dist/v2/components/Drawer.js.map +1 -0
- package/dist/v2/components/Dropzone.d.ts +150 -0
- package/dist/v2/components/Dropzone.d.ts.map +1 -0
- package/dist/v2/components/Dropzone.js +547 -0
- package/dist/v2/components/Dropzone.js.map +1 -0
- package/dist/v2/components/EmptyState.d.ts +36 -0
- package/dist/v2/components/EmptyState.d.ts.map +1 -0
- package/dist/v2/components/EmptyState.js +112 -0
- package/dist/v2/components/EmptyState.js.map +1 -0
- package/dist/v2/components/FavoriteToggle.d.ts +22 -0
- package/dist/v2/components/FavoriteToggle.d.ts.map +1 -0
- package/dist/v2/components/FavoriteToggle.js +135 -0
- package/dist/v2/components/FavoriteToggle.js.map +1 -0
- package/dist/v2/components/Field.d.ts +63 -0
- package/dist/v2/components/Field.d.ts.map +1 -0
- package/dist/v2/components/Field.js +204 -0
- package/dist/v2/components/Field.js.map +1 -0
- 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 +54 -0
- package/dist/v2/components/FieldHelp.d.ts.map +1 -0
- package/dist/v2/components/FieldHelp.js +209 -0
- package/dist/v2/components/FieldHelp.js.map +1 -0
- 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 +35 -0
- package/dist/v2/components/FilterTab.d.ts.map +1 -0
- package/dist/v2/components/FilterTab.js +145 -0
- package/dist/v2/components/FilterTab.js.map +1 -0
- package/dist/v2/components/ForbiddenPage.d.ts +40 -0
- package/dist/v2/components/ForbiddenPage.d.ts.map +1 -0
- package/dist/v2/components/ForbiddenPage.js +81 -0
- package/dist/v2/components/ForbiddenPage.js.map +1 -0
- package/dist/v2/components/FormGrid.d.ts +81 -0
- package/dist/v2/components/FormGrid.d.ts.map +1 -0
- package/dist/v2/components/FormGrid.js +187 -0
- package/dist/v2/components/FormGrid.js.map +1 -0
- package/dist/v2/components/FormikDisplay.d.ts +38 -0
- package/dist/v2/components/FormikDisplay.d.ts.map +1 -0
- package/dist/v2/components/FormikDisplay.js +125 -0
- package/dist/v2/components/FormikDisplay.js.map +1 -0
- package/dist/v2/components/Input.d.ts +62 -0
- package/dist/v2/components/Input.d.ts.map +1 -0
- package/dist/v2/components/Input.js +115 -0
- package/dist/v2/components/Input.js.map +1 -0
- package/dist/v2/components/KPICard.d.ts +52 -0
- package/dist/v2/components/KPICard.d.ts.map +1 -0
- package/dist/v2/components/KPICard.js +244 -0
- package/dist/v2/components/KPICard.js.map +1 -0
- 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 +25 -0
- package/dist/v2/components/KV.d.ts.map +1 -0
- package/dist/v2/components/KV.js +82 -0
- package/dist/v2/components/KV.js.map +1 -0
- package/dist/v2/components/KVGrid.d.ts +44 -0
- package/dist/v2/components/KVGrid.d.ts.map +1 -0
- package/dist/v2/components/KVGrid.js +80 -0
- package/dist/v2/components/KVGrid.js.map +1 -0
- package/dist/v2/components/Layout.d.ts +78 -0
- package/dist/v2/components/Layout.d.ts.map +1 -0
- package/dist/v2/components/Layout.js +284 -0
- package/dist/v2/components/Layout.js.map +1 -0
- package/dist/v2/components/MobileRowCard.d.ts +63 -0
- package/dist/v2/components/MobileRowCard.d.ts.map +1 -0
- package/dist/v2/components/MobileRowCard.js +321 -0
- package/dist/v2/components/MobileRowCard.js.map +1 -0
- package/dist/v2/components/Modal.d.ts +21 -0
- package/dist/v2/components/Modal.d.ts.map +1 -0
- package/dist/v2/components/Modal.js +281 -0
- package/dist/v2/components/Modal.js.map +1 -0
- package/dist/v2/components/NetworkErrorPage.d.ts +11 -0
- package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -0
- package/dist/v2/components/NetworkErrorPage.js +86 -0
- package/dist/v2/components/NetworkErrorPage.js.map +1 -0
- package/dist/v2/components/NotFoundPage.d.ts +9 -0
- package/dist/v2/components/NotFoundPage.d.ts.map +1 -0
- package/dist/v2/components/NotFoundPage.js +66 -0
- package/dist/v2/components/NotFoundPage.js.map +1 -0
- package/dist/v2/components/NumberInput.d.ts +83 -0
- package/dist/v2/components/NumberInput.d.ts.map +1 -0
- package/dist/v2/components/NumberInput.js +317 -0
- package/dist/v2/components/NumberInput.js.map +1 -0
- package/dist/v2/components/OverflowMenu.d.ts +55 -0
- package/dist/v2/components/OverflowMenu.d.ts.map +1 -0
- package/dist/v2/components/OverflowMenu.js +192 -0
- package/dist/v2/components/OverflowMenu.js.map +1 -0
- package/dist/v2/components/PdfViewer.d.ts +56 -0
- package/dist/v2/components/PdfViewer.d.ts.map +1 -0
- package/dist/v2/components/PdfViewer.js +132 -0
- package/dist/v2/components/PdfViewer.js.map +1 -0
- package/dist/v2/components/ProgressBar.d.ts +53 -0
- package/dist/v2/components/ProgressBar.d.ts.map +1 -0
- package/dist/v2/components/ProgressBar.js +209 -0
- package/dist/v2/components/ProgressBar.js.map +1 -0
- package/dist/v2/components/Radio.d.ts +78 -0
- package/dist/v2/components/Radio.d.ts.map +1 -0
- package/dist/v2/components/Radio.js +238 -0
- package/dist/v2/components/Radio.js.map +1 -0
- 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 +53 -0
- package/dist/v2/components/SectionHeader.d.ts.map +1 -0
- package/dist/v2/components/SectionHeader.js +140 -0
- package/dist/v2/components/SectionHeader.js.map +1 -0
- package/dist/v2/components/Segmented.d.ts +61 -0
- package/dist/v2/components/Segmented.d.ts.map +1 -0
- package/dist/v2/components/Segmented.js +261 -0
- package/dist/v2/components/Segmented.js.map +1 -0
- package/dist/v2/components/Select.d.ts +90 -0
- package/dist/v2/components/Select.d.ts.map +1 -0
- package/dist/v2/components/Select.js +499 -0
- package/dist/v2/components/Select.js.map +1 -0
- package/dist/v2/components/ServerErrorPage.d.ts +11 -0
- package/dist/v2/components/ServerErrorPage.d.ts.map +1 -0
- package/dist/v2/components/ServerErrorPage.js +82 -0
- package/dist/v2/components/ServerErrorPage.js.map +1 -0
- package/dist/v2/components/Skeleton.d.ts +56 -0
- package/dist/v2/components/Skeleton.d.ts.map +1 -0
- package/dist/v2/components/Skeleton.js +281 -0
- package/dist/v2/components/Skeleton.js.map +1 -0
- package/dist/v2/components/SkipLink.d.ts +30 -0
- package/dist/v2/components/SkipLink.d.ts.map +1 -0
- package/dist/v2/components/SkipLink.js +58 -0
- package/dist/v2/components/SkipLink.js.map +1 -0
- package/dist/v2/components/Spinner.d.ts +40 -0
- package/dist/v2/components/Spinner.d.ts.map +1 -0
- package/dist/v2/components/Spinner.js +76 -0
- package/dist/v2/components/Spinner.js.map +1 -0
- package/dist/v2/components/Status.d.ts +42 -0
- package/dist/v2/components/Status.d.ts.map +1 -0
- package/dist/v2/components/Status.js +71 -0
- package/dist/v2/components/Status.js.map +1 -0
- package/dist/v2/components/Stepper.d.ts +142 -0
- package/dist/v2/components/Stepper.d.ts.map +1 -0
- package/dist/v2/components/Stepper.js +441 -0
- package/dist/v2/components/Stepper.js.map +1 -0
- 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 +30 -0
- package/dist/v2/components/Switch.d.ts.map +1 -0
- package/dist/v2/components/Switch.js +136 -0
- package/dist/v2/components/Switch.js.map +1 -0
- package/dist/v2/components/Tabs.d.ts +49 -0
- package/dist/v2/components/Tabs.d.ts.map +1 -0
- package/dist/v2/components/Tabs.js +160 -0
- package/dist/v2/components/Tabs.js.map +1 -0
- package/dist/v2/components/TelInput.d.ts +33 -0
- package/dist/v2/components/TelInput.d.ts.map +1 -0
- package/dist/v2/components/TelInput.js +282 -0
- package/dist/v2/components/TelInput.js.map +1 -0
- package/dist/v2/components/Textarea.d.ts +23 -0
- package/dist/v2/components/Textarea.d.ts.map +1 -0
- package/dist/v2/components/Textarea.js +80 -0
- package/dist/v2/components/Textarea.js.map +1 -0
- package/dist/v2/components/TimePicker.d.ts +21 -0
- package/dist/v2/components/TimePicker.d.ts.map +1 -0
- package/dist/v2/components/TimePicker.js +141 -0
- package/dist/v2/components/TimePicker.js.map +1 -0
- package/dist/v2/components/Toast.d.ts +32 -0
- package/dist/v2/components/Toast.d.ts.map +1 -0
- package/dist/v2/components/Toast.js +385 -0
- package/dist/v2/components/Toast.js.map +1 -0
- package/dist/v2/components/Tooltip.d.ts +9 -0
- package/dist/v2/components/Tooltip.d.ts.map +1 -0
- package/dist/v2/components/Tooltip.js +169 -0
- package/dist/v2/components/Tooltip.js.map +1 -0
- package/dist/v2/components/_ErrorPageBody.d.ts +48 -0
- package/dist/v2/components/_ErrorPageBody.d.ts.map +1 -0
- package/dist/v2/components/_ErrorPageBody.js +96 -0
- package/dist/v2/components/_ErrorPageBody.js.map +1 -0
- package/dist/v2/components/_pickerShared.d.ts +47 -0
- package/dist/v2/components/_pickerShared.d.ts.map +1 -0
- package/dist/v2/components/_pickerShared.js +68 -0
- package/dist/v2/components/_pickerShared.js.map +1 -0
- package/dist/v2/components/index.d.ts +226 -0
- package/dist/v2/components/index.d.ts.map +1 -0
- package/dist/v2/components/index.js +512 -0
- package/dist/v2/components/index.js.map +1 -0
- package/dist/v2/hooks/index.d.ts +11 -0
- package/dist/v2/hooks/index.d.ts.map +1 -0
- package/dist/v2/hooks/index.js +85 -0
- package/dist/v2/hooks/index.js.map +1 -0
- package/dist/v2/hooks/useDelayedFlag.d.ts +22 -0
- package/dist/v2/hooks/useDelayedFlag.d.ts.map +1 -0
- package/dist/v2/hooks/useDelayedFlag.js +60 -0
- package/dist/v2/hooks/useDelayedFlag.js.map +1 -0
- package/dist/v2/hooks/useDensity.d.ts +23 -0
- package/dist/v2/hooks/useDensity.d.ts.map +1 -0
- package/dist/v2/hooks/useDensity.js +124 -0
- package/dist/v2/hooks/useDensity.js.map +1 -0
- package/dist/v2/hooks/useFocusFirstError.d.ts +121 -0
- package/dist/v2/hooks/useFocusFirstError.d.ts.map +1 -0
- package/dist/v2/hooks/useFocusFirstError.js +203 -0
- package/dist/v2/hooks/useFocusFirstError.js.map +1 -0
- package/dist/v2/hooks/useFocusTrap.d.ts +3 -0
- package/dist/v2/hooks/useFocusTrap.d.ts.map +1 -0
- package/dist/v2/hooks/useFocusTrap.js +207 -0
- package/dist/v2/hooks/useFocusTrap.js.map +1 -0
- package/dist/v2/hooks/useFormAutoSave.d.ts +42 -0
- package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -0
- package/dist/v2/hooks/useFormAutoSave.js +186 -0
- package/dist/v2/hooks/useFormAutoSave.js.map +1 -0
- package/dist/v2/hooks/useFormCompletionProgress.d.ts +52 -0
- package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -0
- package/dist/v2/hooks/useFormCompletionProgress.js +136 -0
- package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -0
- package/dist/v2/hooks/useResolvedDensity.d.ts +31 -0
- package/dist/v2/hooks/useResolvedDensity.d.ts.map +1 -0
- package/dist/v2/hooks/useResolvedDensity.js +50 -0
- package/dist/v2/hooks/useResolvedDensity.js.map +1 -0
- package/dist/v2/hooks/useSortedRows.d.ts +25 -0
- package/dist/v2/hooks/useSortedRows.d.ts.map +1 -0
- package/dist/v2/hooks/useSortedRows.js +38 -0
- package/dist/v2/hooks/useSortedRows.js.map +1 -0
- package/dist/v2/hooks/useTabLoading.d.ts +39 -0
- package/dist/v2/hooks/useTabLoading.d.ts.map +1 -0
- package/dist/v2/hooks/useTabLoading.js +85 -0
- package/dist/v2/hooks/useTabLoading.js.map +1 -0
- package/dist/v2/index.d.ts +115 -0
- package/dist/v2/index.d.ts.map +1 -0
- package/dist/v2/index.js +1127 -0
- package/dist/v2/index.js.map +1 -0
- package/dist/v2/modalContext.d.ts +96 -0
- package/dist/v2/modalContext.d.ts.map +1 -0
- package/dist/v2/modalContext.js +113 -0
- package/dist/v2/modalContext.js.map +1 -0
- package/dist/v2/models/favorite.d.ts +14 -0
- package/dist/v2/models/favorite.d.ts.map +1 -0
- package/dist/v2/models/favorite.js +6 -0
- package/dist/v2/models/favorite.js.map +1 -0
- package/dist/v2/models/index.d.ts +11 -0
- package/dist/v2/models/index.d.ts.map +1 -0
- package/dist/v2/models/index.js +50 -0
- package/dist/v2/models/index.js.map +1 -0
- package/dist/v2/models/personalization.d.ts +65 -0
- package/dist/v2/models/personalization.d.ts.map +1 -0
- package/dist/v2/models/personalization.js +6 -0
- package/dist/v2/models/personalization.js.map +1 -0
- package/dist/v2/models/referentiel.d.ts +67 -0
- package/dist/v2/models/referentiel.d.ts.map +1 -0
- package/dist/v2/models/referentiel.js +6 -0
- package/dist/v2/models/referentiel.js.map +1 -0
- package/dist/v2/models/savedFilter.d.ts +22 -0
- package/dist/v2/models/savedFilter.d.ts.map +1 -0
- package/dist/v2/models/savedFilter.js +6 -0
- package/dist/v2/models/savedFilter.js.map +1 -0
- package/dist/v2/patterns/ActionBar.d.ts +137 -0
- package/dist/v2/patterns/ActionBar.d.ts.map +1 -0
- package/dist/v2/patterns/ActionBar.js +602 -0
- package/dist/v2/patterns/ActionBar.js.map +1 -0
- package/dist/v2/patterns/BulkActionBar.d.ts +63 -0
- package/dist/v2/patterns/BulkActionBar.d.ts.map +1 -0
- package/dist/v2/patterns/BulkActionBar.js +154 -0
- package/dist/v2/patterns/BulkActionBar.js.map +1 -0
- package/dist/v2/patterns/CollapsibleDataGrid.d.ts +62 -0
- package/dist/v2/patterns/CollapsibleDataGrid.d.ts.map +1 -0
- package/dist/v2/patterns/CollapsibleDataGrid.js +306 -0
- package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -0
- package/dist/v2/patterns/ColumnsToggle.d.ts +55 -0
- package/dist/v2/patterns/ColumnsToggle.d.ts.map +1 -0
- package/dist/v2/patterns/ColumnsToggle.js +310 -0
- package/dist/v2/patterns/ColumnsToggle.js.map +1 -0
- package/dist/v2/patterns/DataGrid.d.ts +7 -0
- package/dist/v2/patterns/DataGrid.d.ts.map +1 -0
- package/dist/v2/patterns/DataGrid.js +834 -0
- package/dist/v2/patterns/DataGrid.js.map +1 -0
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts +68 -0
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -0
- package/dist/v2/patterns/DataGridSettingsMenu.js +382 -0
- package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -0
- package/dist/v2/patterns/DataGridToolbar.d.ts +81 -0
- package/dist/v2/patterns/DataGridToolbar.d.ts.map +1 -0
- package/dist/v2/patterns/DataGridToolbar.js +256 -0
- package/dist/v2/patterns/DataGridToolbar.js.map +1 -0
- package/dist/v2/patterns/DataGridVirtualized.d.ts +76 -0
- package/dist/v2/patterns/DataGridVirtualized.d.ts.map +1 -0
- package/dist/v2/patterns/DataGridVirtualized.js +528 -0
- package/dist/v2/patterns/DataGridVirtualized.js.map +1 -0
- package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts +46 -0
- package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts.map +1 -0
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js +77 -0
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -0
- package/dist/v2/patterns/FavoriteColumn.d.ts +72 -0
- package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -0
- package/dist/v2/patterns/FavoriteColumn.js +171 -0
- package/dist/v2/patterns/FavoriteColumn.js.map +1 -0
- package/dist/v2/patterns/FavoritesFilter.d.ts +51 -0
- package/dist/v2/patterns/FavoritesFilter.d.ts.map +1 -0
- package/dist/v2/patterns/FavoritesFilter.js +98 -0
- package/dist/v2/patterns/FavoritesFilter.js.map +1 -0
- package/dist/v2/patterns/FormErrorSummary.d.ts +39 -0
- package/dist/v2/patterns/FormErrorSummary.d.ts.map +1 -0
- package/dist/v2/patterns/FormErrorSummary.js +111 -0
- package/dist/v2/patterns/FormErrorSummary.js.map +1 -0
- package/dist/v2/patterns/FormPageShell.d.ts +55 -0
- package/dist/v2/patterns/FormPageShell.d.ts.map +1 -0
- package/dist/v2/patterns/FormPageShell.js +133 -0
- package/dist/v2/patterns/FormPageShell.js.map +1 -0
- package/dist/v2/patterns/FormSection.d.ts +64 -0
- package/dist/v2/patterns/FormSection.d.ts.map +1 -0
- package/dist/v2/patterns/FormSection.js +197 -0
- package/dist/v2/patterns/FormSection.js.map +1 -0
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts +51 -0
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -0
- package/dist/v2/patterns/FormikCheckboxGroup.js +117 -0
- package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -0
- package/dist/v2/patterns/FormikCombobox.d.ts +43 -0
- package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -0
- package/dist/v2/patterns/FormikCombobox.js +121 -0
- package/dist/v2/patterns/FormikCombobox.js.map +1 -0
- package/dist/v2/patterns/FormikDatePicker.d.ts +115 -0
- package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -0
- package/dist/v2/patterns/FormikDatePicker.js +203 -0
- package/dist/v2/patterns/FormikDatePicker.js.map +1 -0
- package/dist/v2/patterns/FormikErrorFocus.d.ts +59 -0
- package/dist/v2/patterns/FormikErrorFocus.d.ts.map +1 -0
- package/dist/v2/patterns/FormikErrorFocus.js +83 -0
- package/dist/v2/patterns/FormikErrorFocus.js.map +1 -0
- package/dist/v2/patterns/FormikFile.d.ts +43 -0
- package/dist/v2/patterns/FormikFile.d.ts.map +1 -0
- package/dist/v2/patterns/FormikFile.js +156 -0
- package/dist/v2/patterns/FormikFile.js.map +1 -0
- package/dist/v2/patterns/FormikInput.d.ts +72 -0
- package/dist/v2/patterns/FormikInput.d.ts.map +1 -0
- package/dist/v2/patterns/FormikInput.js +135 -0
- package/dist/v2/patterns/FormikInput.js.map +1 -0
- package/dist/v2/patterns/FormikReferentielField.d.ts +33 -0
- package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -0
- package/dist/v2/patterns/FormikReferentielField.js +124 -0
- package/dist/v2/patterns/FormikReferentielField.js.map +1 -0
- package/dist/v2/patterns/FormikSelect.d.ts +61 -0
- package/dist/v2/patterns/FormikSelect.d.ts.map +1 -0
- package/dist/v2/patterns/FormikSelect.js +165 -0
- package/dist/v2/patterns/FormikSelect.js.map +1 -0
- package/dist/v2/patterns/FormikTextarea.d.ts +31 -0
- package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -0
- package/dist/v2/patterns/FormikTextarea.js +84 -0
- package/dist/v2/patterns/FormikTextarea.js.map +1 -0
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +44 -0
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -0
- package/dist/v2/patterns/KeyboardShortcutsHelp.js +203 -0
- package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -0
- package/dist/v2/patterns/NetworkErrorBanner.d.ts +26 -0
- package/dist/v2/patterns/NetworkErrorBanner.d.ts.map +1 -0
- package/dist/v2/patterns/NetworkErrorBanner.js +82 -0
- package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -0
- package/dist/v2/patterns/PageContent.d.ts +40 -0
- package/dist/v2/patterns/PageContent.d.ts.map +1 -0
- package/dist/v2/patterns/PageContent.js +69 -0
- package/dist/v2/patterns/PageContent.js.map +1 -0
- package/dist/v2/patterns/ReferentielField.d.ts +118 -0
- package/dist/v2/patterns/ReferentielField.d.ts.map +1 -0
- package/dist/v2/patterns/ReferentielField.js +618 -0
- package/dist/v2/patterns/ReferentielField.js.map +1 -0
- package/dist/v2/patterns/SaveFilterDialog.d.ts +68 -0
- package/dist/v2/patterns/SaveFilterDialog.d.ts.map +1 -0
- package/dist/v2/patterns/SaveFilterDialog.js +204 -0
- package/dist/v2/patterns/SaveFilterDialog.js.map +1 -0
- package/dist/v2/patterns/SavedFiltersMenu.d.ts +74 -0
- package/dist/v2/patterns/SavedFiltersMenu.d.ts.map +1 -0
- package/dist/v2/patterns/SavedFiltersMenu.js +413 -0
- package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -0
- package/dist/v2/patterns/SkeletonPageShell.d.ts +76 -0
- package/dist/v2/patterns/SkeletonPageShell.d.ts.map +1 -0
- package/dist/v2/patterns/SkeletonPageShell.js +347 -0
- package/dist/v2/patterns/SkeletonPageShell.js.map +1 -0
- package/dist/v2/patterns/SortableHeader.d.ts +47 -0
- package/dist/v2/patterns/SortableHeader.d.ts.map +1 -0
- package/dist/v2/patterns/SortableHeader.js +193 -0
- package/dist/v2/patterns/SortableHeader.js.map +1 -0
- package/dist/v2/patterns/Tour.d.ts +55 -0
- package/dist/v2/patterns/Tour.d.ts.map +1 -0
- package/dist/v2/patterns/Tour.js +474 -0
- package/dist/v2/patterns/Tour.js.map +1 -0
- package/dist/v2/patterns/_dataGridShared.d.ts +144 -0
- package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -0
- package/dist/v2/patterns/_dataGridShared.js +440 -0
- package/dist/v2/patterns/_dataGridShared.js.map +1 -0
- package/dist/v2/patterns/_sort.d.ts +22 -0
- package/dist/v2/patterns/_sort.d.ts.map +1 -0
- package/dist/v2/patterns/_sort.js +118 -0
- package/dist/v2/patterns/_sort.js.map +1 -0
- package/dist/v2/patterns/_useColumnReorder.d.ts +69 -0
- package/dist/v2/patterns/_useColumnReorder.d.ts.map +1 -0
- package/dist/v2/patterns/_useColumnReorder.js +264 -0
- package/dist/v2/patterns/_useColumnReorder.js.map +1 -0
- package/dist/v2/patterns/_useColumnResize.d.ts +49 -0
- package/dist/v2/patterns/_useColumnResize.d.ts.map +1 -0
- package/dist/v2/patterns/_useColumnResize.js +198 -0
- package/dist/v2/patterns/_useColumnResize.js.map +1 -0
- package/dist/v2/patterns/index.d.ts +89 -0
- package/dist/v2/patterns/index.d.ts.map +1 -0
- package/dist/v2/patterns/index.js +246 -0
- package/dist/v2/patterns/index.js.map +1 -0
- package/dist/v2/personalization/PersonalizationProvider.d.ts +80 -0
- package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -0
- package/dist/v2/personalization/PersonalizationProvider.js +177 -0
- package/dist/v2/personalization/PersonalizationProvider.js.map +1 -0
- package/dist/v2/personalization/adapters/_storageKey.d.ts +35 -0
- package/dist/v2/personalization/adapters/_storageKey.d.ts.map +1 -0
- package/dist/v2/personalization/adapters/_storageKey.js +69 -0
- package/dist/v2/personalization/adapters/_storageKey.js.map +1 -0
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts +31 -0
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts.map +1 -0
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +128 -0
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -0
- package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts +25 -0
- package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts.map +1 -0
- package/dist/v2/personalization/adapters/createMemoryAdapter.js +76 -0
- package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -0
- package/dist/v2/personalization/adapters/index.d.ts +10 -0
- package/dist/v2/personalization/adapters/index.d.ts.map +1 -0
- package/dist/v2/personalization/adapters/index.js +21 -0
- package/dist/v2/personalization/adapters/index.js.map +1 -0
- package/dist/v2/personalization/capabilities/favorites.d.ts +53 -0
- package/dist/v2/personalization/capabilities/favorites.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/favorites.js +223 -0
- package/dist/v2/personalization/capabilities/favorites.js.map +1 -0
- package/dist/v2/personalization/capabilities/favoritesView.d.ts +58 -0
- package/dist/v2/personalization/capabilities/favoritesView.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/favoritesView.js +121 -0
- package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -0
- package/dist/v2/personalization/capabilities/index.d.ts +16 -0
- package/dist/v2/personalization/capabilities/index.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/index.js +69 -0
- package/dist/v2/personalization/capabilities/index.js.map +1 -0
- package/dist/v2/personalization/capabilities/savedFilters.d.ts +61 -0
- package/dist/v2/personalization/capabilities/savedFilters.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/savedFilters.js +297 -0
- package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -0
- package/dist/v2/personalization/createPersonalizationStore.d.ts +76 -0
- package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -0
- package/dist/v2/personalization/createPersonalizationStore.js +475 -0
- package/dist/v2/personalization/createPersonalizationStore.js.map +1 -0
- package/dist/v2/personalization/index.d.ts +33 -0
- package/dist/v2/personalization/index.d.ts.map +1 -0
- package/dist/v2/personalization/index.js +111 -0
- package/dist/v2/personalization/index.js.map +1 -0
- package/dist/v2/personalization/personalizationContext.d.ts +78 -0
- package/dist/v2/personalization/personalizationContext.d.ts.map +1 -0
- package/dist/v2/personalization/personalizationContext.js +121 -0
- package/dist/v2/personalization/personalizationContext.js.map +1 -0
- package/dist/v2/personalization/schema.d.ts +60 -0
- package/dist/v2/personalization/schema.d.ts.map +1 -0
- package/dist/v2/personalization/schema.js +102 -0
- package/dist/v2/personalization/schema.js.map +1 -0
- package/dist/v2/personalization/types.d.ts +81 -0
- package/dist/v2/personalization/types.d.ts.map +1 -0
- package/dist/v2/personalization/types.js +6 -0
- package/dist/v2/personalization/types.js.map +1 -0
- package/dist/v2/referentiel/ReferentielProvider.d.ts +53 -0
- package/dist/v2/referentiel/ReferentielProvider.d.ts.map +1 -0
- package/dist/v2/referentiel/ReferentielProvider.js +94 -0
- package/dist/v2/referentiel/ReferentielProvider.js.map +1 -0
- package/dist/v2/referentiel/index.d.ts +18 -0
- package/dist/v2/referentiel/index.d.ts.map +1 -0
- package/dist/v2/referentiel/index.js +44 -0
- package/dist/v2/referentiel/index.js.map +1 -0
- package/dist/v2/referentiel/useReferentielClient.d.ts +15 -0
- package/dist/v2/referentiel/useReferentielClient.d.ts.map +1 -0
- package/dist/v2/referentiel/useReferentielClient.js +46 -0
- package/dist/v2/referentiel/useReferentielClient.js.map +1 -0
- package/dist/v2/referentiel/useReferentielOptions.d.ts +40 -0
- package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -0
- package/dist/v2/referentiel/useReferentielOptions.js +177 -0
- package/dist/v2/referentiel/useReferentielOptions.js.map +1 -0
- package/dist/v2/referentiel/useReferentielSearch.d.ts +76 -0
- package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -0
- package/dist/v2/referentiel/useReferentielSearch.js +140 -0
- package/dist/v2/referentiel/useReferentielSearch.js.map +1 -0
- package/dist/v2/styles/base.css +425 -0
- package/dist/v2/styles/css.d.ts +10 -0
- package/dist/v2/styles/index.d.ts +12 -0
- package/dist/v2/styles/index.d.ts.map +1 -0
- package/dist/v2/styles/index.js +4 -0
- package/dist/v2/styles/index.js.map +1 -0
- package/dist/v2/theme/_brand.d.ts +29 -0
- package/dist/v2/theme/_brand.d.ts.map +1 -0
- package/dist/v2/theme/_brand.js +69 -0
- package/dist/v2/theme/_brand.js.map +1 -0
- package/dist/v2/theme/_brandSecondary.d.ts +26 -0
- package/dist/v2/theme/_brandSecondary.d.ts.map +1 -0
- package/dist/v2/theme/_brandSecondary.js +65 -0
- package/dist/v2/theme/_brandSecondary.js.map +1 -0
- package/dist/v2/theme/createPortnetTheme.d.ts +75 -0
- package/dist/v2/theme/createPortnetTheme.d.ts.map +1 -0
- package/dist/v2/theme/createPortnetTheme.js +553 -0
- package/dist/v2/theme/createPortnetTheme.js.map +1 -0
- package/dist/v2/theme/cssVariables.d.ts +41 -0
- package/dist/v2/theme/cssVariables.d.ts.map +1 -0
- package/dist/v2/theme/cssVariables.js +205 -0
- package/dist/v2/theme/cssVariables.js.map +1 -0
- package/dist/v2/theme/index.d.ts +33 -0
- package/dist/v2/theme/index.d.ts.map +1 -0
- package/dist/v2/theme/index.js +60 -0
- package/dist/v2/theme/index.js.map +1 -0
- package/dist/v2/tokens/breakpoints.d.ts +74 -0
- package/dist/v2/tokens/breakpoints.d.ts.map +1 -0
- package/dist/v2/tokens/breakpoints.js +114 -0
- package/dist/v2/tokens/breakpoints.js.map +1 -0
- package/dist/v2/tokens/colors.d.ts +228 -0
- package/dist/v2/tokens/colors.d.ts.map +1 -0
- package/dist/v2/tokens/colors.js +225 -0
- package/dist/v2/tokens/colors.js.map +1 -0
- package/dist/v2/tokens/density.d.ts +142 -0
- package/dist/v2/tokens/density.d.ts.map +1 -0
- package/dist/v2/tokens/density.js +111 -0
- package/dist/v2/tokens/density.js.map +1 -0
- package/dist/v2/tokens/index.d.ts +556 -0
- package/dist/v2/tokens/index.d.ts.map +1 -0
- package/dist/v2/tokens/index.js +313 -0
- package/dist/v2/tokens/index.js.map +1 -0
- package/dist/v2/tokens/motion.d.ts +85 -0
- package/dist/v2/tokens/motion.d.ts.map +1 -0
- package/dist/v2/tokens/motion.js +94 -0
- package/dist/v2/tokens/motion.js.map +1 -0
- package/dist/v2/tokens/radius.d.ts +18 -0
- package/dist/v2/tokens/radius.d.ts.map +1 -0
- package/dist/v2/tokens/radius.js +28 -0
- package/dist/v2/tokens/radius.js.map +1 -0
- package/dist/v2/tokens/shadows.d.ts +25 -0
- package/dist/v2/tokens/shadows.d.ts.map +1 -0
- package/dist/v2/tokens/shadows.js +46 -0
- package/dist/v2/tokens/shadows.js.map +1 -0
- package/dist/v2/tokens/spacing.d.ts +38 -0
- package/dist/v2/tokens/spacing.d.ts.map +1 -0
- package/dist/v2/tokens/spacing.js +57 -0
- package/dist/v2/tokens/spacing.js.map +1 -0
- package/dist/v2/tokens/state.d.ts +40 -0
- package/dist/v2/tokens/state.d.ts.map +1 -0
- package/dist/v2/tokens/state.js +47 -0
- package/dist/v2/tokens/state.js.map +1 -0
- package/dist/v2/tokens/statusPalette.d.ts +54 -0
- package/dist/v2/tokens/statusPalette.d.ts.map +1 -0
- package/dist/v2/tokens/statusPalette.js +72 -0
- package/dist/v2/tokens/statusPalette.js.map +1 -0
- package/dist/v2/tokens/tokens.json +153 -0
- package/dist/v2/tokens/typography.d.ts +206 -0
- package/dist/v2/tokens/typography.d.ts.map +1 -0
- package/dist/v2/tokens/typography.js +155 -0
- package/dist/v2/tokens/typography.js.map +1 -0
- package/dist/v2/tokens/zIndex.d.ts +33 -0
- package/dist/v2/tokens/zIndex.d.ts.map +1 -0
- package/dist/v2/tokens/zIndex.js +50 -0
- package/dist/v2/tokens/zIndex.js.map +1 -0
- package/dist/v2/types/common.d.ts +24 -0
- package/dist/v2/types/common.d.ts.map +1 -0
- package/dist/v2/types/common.js +6 -0
- package/dist/v2/types/common.js.map +1 -0
- package/dist/v2/types/datagrid.d.ts +131 -0
- package/dist/v2/types/datagrid.d.ts.map +1 -0
- package/dist/v2/types/datagrid.js +6 -0
- package/dist/v2/types/datagrid.js.map +1 -0
- package/dist/v2/types/index.d.ts +11 -0
- package/dist/v2/types/index.d.ts.map +1 -0
- package/dist/v2/types/index.js +28 -0
- package/dist/v2/types/index.js.map +1 -0
- package/dist/v2/utils/apiError.d.ts +151 -0
- package/dist/v2/utils/apiError.d.ts.map +1 -0
- package/dist/v2/utils/apiError.js +290 -0
- package/dist/v2/utils/apiError.js.map +1 -0
- package/dist/v2/utils/contrast.d.ts +68 -0
- package/dist/v2/utils/contrast.d.ts.map +1 -0
- package/dist/v2/utils/contrast.js +167 -0
- package/dist/v2/utils/contrast.js.map +1 -0
- package/dist/v2/utils/cx.d.ts +9 -0
- package/dist/v2/utils/cx.d.ts.map +1 -0
- package/dist/v2/utils/cx.js +45 -0
- package/dist/v2/utils/cx.js.map +1 -0
- package/dist/v2/utils/fileDownload.d.ts +94 -0
- package/dist/v2/utils/fileDownload.d.ts.map +1 -0
- package/dist/v2/utils/fileDownload.js +236 -0
- package/dist/v2/utils/fileDownload.js.map +1 -0
- package/dist/v2/utils/fmtMoney.d.ts +28 -0
- package/dist/v2/utils/fmtMoney.d.ts.map +1 -0
- package/dist/v2/utils/fmtMoney.js +84 -0
- package/dist/v2/utils/fmtMoney.js.map +1 -0
- package/dist/v2/utils/index.d.ts +9 -0
- package/dist/v2/utils/index.d.ts.map +1 -0
- package/dist/v2/utils/index.js +97 -0
- package/dist/v2/utils/index.js.map +1 -0
- 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/dist/v2/utils/networkStatus.d.ts +88 -0
- package/dist/v2/utils/networkStatus.d.ts.map +1 -0
- package/dist/v2/utils/networkStatus.js +121 -0
- package/dist/v2/utils/networkStatus.js.map +1 -0
- package/package.json +198 -76
- package/dist/api/guideApi.js +0 -12
- package/dist/api/guideImageService.js +0 -119
- package/dist/api/reclamationApi.js +0 -119
- package/dist/assets/guides/FAQ.json +0 -118
- package/dist/assets/guides/index.js +0 -11
- package/dist/assets/images/tijariaLogo.ico +0 -0
- package/dist/components/buttons/PuiButton.js +0 -217
- package/dist/components/buttons/PuiIconButton.js +0 -98
- package/dist/components/common/PuiAlertContext.js +0 -12
- package/dist/components/common/PuiHelpWidgetContext.js +0 -17
- package/dist/components/common/StyledMuiButton.js +0 -48
- package/dist/components/common/StyledMuiTextField.js +0 -180
- package/dist/components/inputs/PuiAutocomplete.js +0 -352
- package/dist/components/inputs/PuiCheckbox.js +0 -308
- package/dist/components/inputs/PuiCheckboxGroup.js +0 -215
- package/dist/components/inputs/PuiCheckboxItem.js +0 -162
- package/dist/components/inputs/PuiDateField.js +0 -280
- package/dist/components/inputs/PuiDateTimeField.js +0 -276
- package/dist/components/inputs/PuiFileField.js +0 -265
- package/dist/components/inputs/PuiRadioGroup.js +0 -197
- package/dist/components/inputs/PuiRadioItem.js +0 -100
- package/dist/components/inputs/PuiSelect.js +0 -427
- package/dist/components/inputs/PuiTextField.js +0 -263
- package/dist/components/others/PuiBadge.js +0 -58
- package/dist/components/others/PuiChip.js +0 -150
- package/dist/components/others/PuiDialog.js +0 -102
- package/dist/components/others/PuiFormikForm.js +0 -70
- package/dist/components/others/PuiGrid.js +0 -23
- package/dist/components/others/PuiIcon.js +0 -92
- package/dist/components/others/PuiLoadingBackdrop.js +0 -32
- package/dist/components/others/PuiMainContainer.js +0 -41
- package/dist/components/others/PuiNavigation.js +0 -68
- package/dist/components/others/PuiSection.js +0 -187
- package/dist/components/others/PuiTooltip.js +0 -86
- package/dist/components/providers/PuiAlertProvider.js +0 -134
- package/dist/components/providers/PuiHelpWidgetProvider.js +0 -91
- package/dist/components/providers/PuiLocalizationProvider.js +0 -34
- package/dist/components/referentiel/common/ReferetielContext.js +0 -12
- package/dist/components/referentiel/common/constants/specificReferentielsApis.js +0 -22
- package/dist/components/referentiel/common/constants/specificReferentielsBaseColumns.js +0 -691
- package/dist/components/referentiel/common/constants/specificReferentielsBaseFilters.js +0 -598
- package/dist/components/referentiel/common/constants/specificReferentielsInitialValues.js +0 -80
- package/dist/components/referentiel/common/constants/specificReferentielsKeys.js +0 -18
- package/dist/components/referentiel/common/constants/specificReferentielsTitles.js +0 -22
- package/dist/components/referentiel/common/constants/specificReferentielsValidationSchemas.js +0 -85
- package/dist/components/referentiel/components/PuiBasePopupReferentielField.js +0 -356
- package/dist/components/referentiel/components/PuiCustomPopupReferentielField.js +0 -181
- package/dist/components/referentiel/components/PuiSimplePopupReferentielField.js +0 -325
- package/dist/components/referentiel/components/PuiSimpleReferentielField.js +0 -203
- package/dist/components/referentiel/components/PuiSpecificReferentielField.js +0 -352
- package/dist/components/referentiel/providers/PuiReferentielProvider.js +0 -66
- package/dist/components/tab/PuiTab.js +0 -25
- package/dist/components/tab/PuiTabs.js +0 -148
- package/dist/components/table/PuiTable.js +0 -643
- package/dist/components/table/PuiTableAction.js +0 -75
- package/dist/components/typography/PuiDefinition.js +0 -42
- package/dist/components/typography/PuiIndication.js +0 -80
- package/dist/components/typography/PuiMainTitle.js +0 -144
- package/dist/components/ui/dialogs/PuiSearchDialog.js +0 -106
- package/dist/components/ui/pages/errors/PuiErrorBasePage.js +0 -73
- package/dist/components/ui/pages/errors/PuiForbiddenErrorPage.js +0 -36
- package/dist/components/ui/pages/errors/PuiNetworkErrorPage.js +0 -36
- package/dist/components/ui/pages/errors/PuiNotFoundErrorPage.js +0 -30
- package/dist/components/ui/pages/errors/PuiServerErrorPage.js +0 -37
- package/dist/components/ui/pages/general/PuiDefaultPage.js +0 -68
- package/dist/components/ui/pages/general/PuiSearchPage.js +0 -203
- package/dist/components/widgets/GuideImage.js +0 -251
- package/dist/components/widgets/PuiHelpWidget.js +0 -4276
- package/dist/config/apperance.js +0 -26
- package/dist/config/mapping.js +0 -26
- package/dist/config/referentiel.js +0 -10
- package/dist/general/yupValidationErrors.js +0 -8
- package/dist/hooks/useAlert.js +0 -19
- package/dist/hooks/useAxios.js +0 -23
- package/dist/hooks/useQuery.js +0 -21
- package/dist/hooks/useReclamation.js +0 -116
- package/dist/styles/ReclamationFormModal.css +0 -629
- package/dist/styles/help-widget.css +0 -621
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = useFocusTrap;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
/**
|
|
9
|
+
* useFocusTrap — Portnet UI v2
|
|
10
|
+
*
|
|
11
|
+
* Traps Tab / Shift+Tab inside `ref` while `isActive`.
|
|
12
|
+
* On activation, focuses the first `[autofocus]` / `[data-autofocus]`
|
|
13
|
+
* descendant if present, otherwise the first focusable child.
|
|
14
|
+
* On deactivation, restores focus to the element that previously held
|
|
15
|
+
* it (only if still in the DOM).
|
|
16
|
+
*
|
|
17
|
+
* WCAG 2.4.3, charter R-F.2.
|
|
18
|
+
*
|
|
19
|
+
* Implementation notes
|
|
20
|
+
* - Keydown listener attached to `document` in capture phase. If
|
|
21
|
+
* focus has somehow escaped the container, the next Tab is caught
|
|
22
|
+
* and warped back inside.
|
|
23
|
+
* - NESTED TRAPS — only the topmost trap on `trapStack` intercepts
|
|
24
|
+
* Tab. Outer traps stay registered and resume duty when the inner
|
|
25
|
+
* trap unmounts. This makes ConfirmDialog-in-Drawer-in-Modal
|
|
26
|
+
* flows behave correctly.
|
|
27
|
+
* - Focusable elements are filtered to exclude those inside
|
|
28
|
+
* aria-hidden / inert / hidden / display:none subtrees, even
|
|
29
|
+
* though querySelectorAll happily returns them.
|
|
30
|
+
* - BOUNDARY SCOPE — Tab is intercepted only at the cycle edges
|
|
31
|
+
* (Tab on `last`, Shift+Tab on `first`) plus the escaped-focus
|
|
32
|
+
* recovery path. Mid-cycle moves are deliberately left to the
|
|
33
|
+
* browser's native tab order.
|
|
34
|
+
*
|
|
35
|
+
* Consequence worth knowing: the filter above decides what counts
|
|
36
|
+
* as `first` / `last`, so the trap never DELIVERS focus into a
|
|
37
|
+
* filtered element — but it cannot stop the browser tabbing into
|
|
38
|
+
* one mid-cycle. `hidden` and `inert` are unaffected (both remove
|
|
39
|
+
* an element from the native tab order); `aria-hidden` is NOT, as
|
|
40
|
+
* per spec it annotates only the accessibility tree. So a
|
|
41
|
+
* focusable control inside `aria-hidden="true"` IS still reachable
|
|
42
|
+
* by Tab — that is a content defect (axe `aria-hidden-focus`), and
|
|
43
|
+
* the fix is `inert` on the subtree, not more interception here.
|
|
44
|
+
*
|
|
45
|
+
* Full per-Tab interception would close that gap, at the cost of
|
|
46
|
+
* taking over native traversal for every Modal / Drawer /
|
|
47
|
+
* ConfirmDialog in the fleet — which also breaks radio-group
|
|
48
|
+
* roving tabindex and any positive `tabindex` ordering. Not done
|
|
49
|
+
* without a browser-level test bed. See the aria-hidden case in
|
|
50
|
+
* __tests__/useFocusTrap.test.tsx.
|
|
51
|
+
* - Cleanup never calls focus() on an unmounted or detached
|
|
52
|
+
* trigger and cancels the initial-focus rAF.
|
|
53
|
+
*
|
|
54
|
+
* Escape handling is INTENTIONALLY OUT OF SCOPE — the consumer (Modal,
|
|
55
|
+
* Drawer, ConfirmDialog) is responsible for closing on Escape per
|
|
56
|
+
* R-F.1. Mixing concerns here would force every trap user to opt out.
|
|
57
|
+
*
|
|
58
|
+
* @param ref The container ref to trap focus inside. Accepts a
|
|
59
|
+
* nullable `current` (`RefObject<T | null>`) so callers
|
|
60
|
+
* can pass `useRef<HTMLElement>(null)` directly without a
|
|
61
|
+
* cast — the effect no-ops until `current` is populated.
|
|
62
|
+
* @param isActive Whether the trap is currently on.
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
var FOCUSABLE_SELECTORS = ["a[href]", "button:not(:disabled)", "input:not(:disabled)", "select:not(:disabled)", "textarea:not(:disabled)", '[tabindex]:not([tabindex="-1"])', '[contenteditable]:not([contenteditable="false"])', "audio[controls]", "video[controls]"].join(", ");
|
|
66
|
+
var AUTOFOCUS_SELECTORS = "[autofocus], [data-autofocus]";
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Module-level stack of active trap containers. Only the LAST entry
|
|
70
|
+
* (innermost trap) intercepts Tab; outer traps stay registered but
|
|
71
|
+
* pass-through. Cleanup pops by reference to tolerate out-of-order
|
|
72
|
+
* unmount sequences (portal teardown, hot-replace).
|
|
73
|
+
*/
|
|
74
|
+
var trapStack = [];
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Is `container` the INNERMOST active trap?
|
|
78
|
+
*
|
|
79
|
+
* ⚠ DO NOT REPLACE THIS WITH `trapStack[trapStack.length - 1] === container`.
|
|
80
|
+
*
|
|
81
|
+
* Stack POSITION does not track nesting depth. React runs CHILD effects before
|
|
82
|
+
* PARENT effects, so when an outer and an inner trap mount in the SAME commit
|
|
83
|
+
* (Modal rendering a ConfirmDialog, Drawer with a nested trap) the INNER trap is
|
|
84
|
+
* pushed FIRST and the OUTER one LAST — making the last entry the OUTERMOST trap,
|
|
85
|
+
* the exact opposite of the intent.
|
|
86
|
+
*
|
|
87
|
+
* Push order only happens to match nesting when the traps mount at different
|
|
88
|
+
* times, which is the common case and why the bug stayed hidden. The
|
|
89
|
+
* simultaneous-mount path gave Tab duty to the trap BEHIND the dialog the user
|
|
90
|
+
* was looking at (R-M.2 / R-F.2).
|
|
91
|
+
*
|
|
92
|
+
* Containment is order-independent: a trap is innermost when no other active
|
|
93
|
+
* trap lives inside it. Correct for both mount orderings, and for unmount — once
|
|
94
|
+
* the inner trap pops, the outer contains nothing and resumes duty.
|
|
95
|
+
*/
|
|
96
|
+
function isInnermostTrap(container) {
|
|
97
|
+
return !trapStack.some(function (other) {
|
|
98
|
+
return other !== container && container.contains(other);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* True iff the element is rendered AND not inside an aria-hidden /
|
|
104
|
+
* inert / hidden / display:none ancestor. querySelectorAll picks
|
|
105
|
+
* those up indiscriminately, so re-filter at use time.
|
|
106
|
+
*/
|
|
107
|
+
function isVisuallyFocusable(el) {
|
|
108
|
+
if (!el) return false;
|
|
109
|
+
if ("disabled" in el && el.disabled) return false;
|
|
110
|
+
if (el.getAttribute && el.getAttribute("aria-disabled") === "true") return false;
|
|
111
|
+
// Cheap visibility test — covers display:none and visibility:hidden.
|
|
112
|
+
// Note: elements with `display: contents` may report 0 rects but have
|
|
113
|
+
// focusable descendants; the descendants themselves still match if
|
|
114
|
+
// they have their own boxes, so this filter is a reasonable trade-off.
|
|
115
|
+
if (typeof el.getClientRects === "function" && el.getClientRects().length === 0) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
// Walk ancestors for hidden / aria-hidden / inert.
|
|
119
|
+
var node = el;
|
|
120
|
+
while (node && node !== document.body) {
|
|
121
|
+
if (node.hasAttribute && (node.hasAttribute("inert") || node.hasAttribute("hidden") || node.getAttribute("aria-hidden") === "true")) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
node = node.parentElement;
|
|
125
|
+
}
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
function useFocusTrap(ref, isActive) {
|
|
129
|
+
(0, _react.useEffect)(function () {
|
|
130
|
+
if (!isActive || !ref.current) return undefined;
|
|
131
|
+
var container = ref.current;
|
|
132
|
+
trapStack.push(container);
|
|
133
|
+
var getFocusable = function getFocusable() {
|
|
134
|
+
return Array.from(container.querySelectorAll(FOCUSABLE_SELECTORS)).filter(isVisuallyFocusable);
|
|
135
|
+
};
|
|
136
|
+
var trigger = document.activeElement;
|
|
137
|
+
|
|
138
|
+
// Initial focus, deferred to next frame so React has finished
|
|
139
|
+
// painting any conditional content. Cancellation handle stored
|
|
140
|
+
// so unmount-within-same-frame cannot leak a stale .focus() call.
|
|
141
|
+
var rafId = requestAnimationFrame(function () {
|
|
142
|
+
/* Only the innermost trap claims initial focus — same predicate as `trap()`
|
|
143
|
+
* below, so keyboard duty and initial focus can never disagree.
|
|
144
|
+
*
|
|
145
|
+
* Initial focus was previously unguarded: every trap focused on
|
|
146
|
+
* activation regardless of nesting, so on simultaneous mount the outer
|
|
147
|
+
* trap's rAF fired last and overwrote the inner trap's focus. */
|
|
148
|
+
if (!isInnermostTrap(container)) return;
|
|
149
|
+
var explicit = container.querySelector(AUTOFOCUS_SELECTORS);
|
|
150
|
+
var target = explicit && isVisuallyFocusable(explicit) ? explicit : getFocusable()[0];
|
|
151
|
+
if (target && typeof target.focus === "function") target.focus();
|
|
152
|
+
});
|
|
153
|
+
var trap = function trap(e) {
|
|
154
|
+
if (e.key !== "Tab") return;
|
|
155
|
+
// Only the innermost trap acts. Outer traps stay registered and defer.
|
|
156
|
+
// Containment, NOT stack position — see isInnermostTrap.
|
|
157
|
+
if (!isInnermostTrap(container)) return;
|
|
158
|
+
var els = getFocusable();
|
|
159
|
+
if (!els.length) {
|
|
160
|
+
// Pathological case (no focusable inside): swallow Tab so
|
|
161
|
+
// focus cannot escape into the page behind the trap.
|
|
162
|
+
e.preventDefault();
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
var first = els[0];
|
|
166
|
+
var last = els[els.length - 1];
|
|
167
|
+
if (!first || !last) return;
|
|
168
|
+
var active = document.activeElement;
|
|
169
|
+
|
|
170
|
+
// Recovery: if focus is currently OUTSIDE the container, warp it
|
|
171
|
+
// back to the first focusable. Without this, an escaped focus
|
|
172
|
+
// (mount race, programmatic blur, SR virtual cursor) leaks Tab
|
|
173
|
+
// navigation to the page behind the trap.
|
|
174
|
+
if (!container.contains(active)) {
|
|
175
|
+
e.preventDefault();
|
|
176
|
+
first.focus();
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (e.shiftKey && active === first) {
|
|
180
|
+
e.preventDefault();
|
|
181
|
+
last.focus();
|
|
182
|
+
} else if (!e.shiftKey && active === last) {
|
|
183
|
+
e.preventDefault();
|
|
184
|
+
first.focus();
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
document.addEventListener("keydown", trap, true);
|
|
188
|
+
return function () {
|
|
189
|
+
cancelAnimationFrame(rafId);
|
|
190
|
+
|
|
191
|
+
// Pop by reference (NOT by index) — tolerates out-of-order
|
|
192
|
+
// unmount sequences during portal teardown or hot-replace.
|
|
193
|
+
var idx = trapStack.lastIndexOf(container);
|
|
194
|
+
if (idx >= 0) trapStack.splice(idx, 1);
|
|
195
|
+
document.removeEventListener("keydown", trap, true);
|
|
196
|
+
|
|
197
|
+
// Restore focus only if the trigger is still mounted, focusable,
|
|
198
|
+
// and not currently disabled. Calling .focus() on a detached or
|
|
199
|
+
// disabled node silently leaves focus on <body> with no visible
|
|
200
|
+
// indicator — actively user-hostile.
|
|
201
|
+
if (trigger && trigger !== document.body && "focus" in trigger && typeof trigger.focus === "function" && document.body.contains(trigger) && !("disabled" in trigger && trigger.disabled)) {
|
|
202
|
+
trigger.focus();
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
}, [isActive, ref]);
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=useFocusTrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFocusTrap.js","names":["_react","require","FOCUSABLE_SELECTORS","join","AUTOFOCUS_SELECTORS","trapStack","isInnermostTrap","container","some","other","contains","isVisuallyFocusable","el","disabled","getAttribute","getClientRects","length","node","document","body","hasAttribute","parentElement","useFocusTrap","ref","isActive","useEffect","current","undefined","push","getFocusable","Array","from","querySelectorAll","filter","trigger","activeElement","rafId","requestAnimationFrame","explicit","querySelector","target","focus","trap","e","key","els","preventDefault","first","last","active","shiftKey","addEventListener","cancelAnimationFrame","idx","lastIndexOf","splice","removeEventListener"],"sources":["../../../src/lib/v2/hooks/useFocusTrap.ts"],"sourcesContent":["import { useEffect, type RefObject } from \"react\";\r\n\r\n/**\r\n * useFocusTrap — Portnet UI v2\r\n *\r\n * Traps Tab / Shift+Tab inside `ref` while `isActive`.\r\n * On activation, focuses the first `[autofocus]` / `[data-autofocus]`\r\n * descendant if present, otherwise the first focusable child.\r\n * On deactivation, restores focus to the element that previously held\r\n * it (only if still in the DOM).\r\n *\r\n * WCAG 2.4.3, charter R-F.2.\r\n *\r\n * Implementation notes\r\n * - Keydown listener attached to `document` in capture phase. If\r\n * focus has somehow escaped the container, the next Tab is caught\r\n * and warped back inside.\r\n * - NESTED TRAPS — only the topmost trap on `trapStack` intercepts\r\n * Tab. Outer traps stay registered and resume duty when the inner\r\n * trap unmounts. This makes ConfirmDialog-in-Drawer-in-Modal\r\n * flows behave correctly.\r\n * - Focusable elements are filtered to exclude those inside\r\n * aria-hidden / inert / hidden / display:none subtrees, even\r\n * though querySelectorAll happily returns them.\r\n * - BOUNDARY SCOPE — Tab is intercepted only at the cycle edges\r\n * (Tab on `last`, Shift+Tab on `first`) plus the escaped-focus\r\n * recovery path. Mid-cycle moves are deliberately left to the\r\n * browser's native tab order.\r\n *\r\n * Consequence worth knowing: the filter above decides what counts\r\n * as `first` / `last`, so the trap never DELIVERS focus into a\r\n * filtered element — but it cannot stop the browser tabbing into\r\n * one mid-cycle. `hidden` and `inert` are unaffected (both remove\r\n * an element from the native tab order); `aria-hidden` is NOT, as\r\n * per spec it annotates only the accessibility tree. So a\r\n * focusable control inside `aria-hidden=\"true\"` IS still reachable\r\n * by Tab — that is a content defect (axe `aria-hidden-focus`), and\r\n * the fix is `inert` on the subtree, not more interception here.\r\n *\r\n * Full per-Tab interception would close that gap, at the cost of\r\n * taking over native traversal for every Modal / Drawer /\r\n * ConfirmDialog in the fleet — which also breaks radio-group\r\n * roving tabindex and any positive `tabindex` ordering. Not done\r\n * without a browser-level test bed. See the aria-hidden case in\r\n * __tests__/useFocusTrap.test.tsx.\r\n * - Cleanup never calls focus() on an unmounted or detached\r\n * trigger and cancels the initial-focus rAF.\r\n *\r\n * Escape handling is INTENTIONALLY OUT OF SCOPE — the consumer (Modal,\r\n * Drawer, ConfirmDialog) is responsible for closing on Escape per\r\n * R-F.1. Mixing concerns here would force every trap user to opt out.\r\n *\r\n * @param ref The container ref to trap focus inside. Accepts a\r\n * nullable `current` (`RefObject<T | null>`) so callers\r\n * can pass `useRef<HTMLElement>(null)` directly without a\r\n * cast — the effect no-ops until `current` is populated.\r\n * @param isActive Whether the trap is currently on.\r\n */\r\n\r\nconst FOCUSABLE_SELECTORS = [\r\n \"a[href]\",\r\n \"button:not(:disabled)\",\r\n \"input:not(:disabled)\",\r\n \"select:not(:disabled)\",\r\n \"textarea:not(:disabled)\",\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n '[contenteditable]:not([contenteditable=\"false\"])',\r\n \"audio[controls]\",\r\n \"video[controls]\",\r\n].join(\", \");\r\n\r\nconst AUTOFOCUS_SELECTORS = \"[autofocus], [data-autofocus]\";\r\n\r\n/**\r\n * Module-level stack of active trap containers. Only the LAST entry\r\n * (innermost trap) intercepts Tab; outer traps stay registered but\r\n * pass-through. Cleanup pops by reference to tolerate out-of-order\r\n * unmount sequences (portal teardown, hot-replace).\r\n */\r\nconst trapStack: HTMLElement[] = [];\r\n\r\n/**\r\n * Is `container` the INNERMOST active trap?\r\n *\r\n * ⚠ DO NOT REPLACE THIS WITH `trapStack[trapStack.length - 1] === container`.\r\n *\r\n * Stack POSITION does not track nesting depth. React runs CHILD effects before\r\n * PARENT effects, so when an outer and an inner trap mount in the SAME commit\r\n * (Modal rendering a ConfirmDialog, Drawer with a nested trap) the INNER trap is\r\n * pushed FIRST and the OUTER one LAST — making the last entry the OUTERMOST trap,\r\n * the exact opposite of the intent.\r\n *\r\n * Push order only happens to match nesting when the traps mount at different\r\n * times, which is the common case and why the bug stayed hidden. The\r\n * simultaneous-mount path gave Tab duty to the trap BEHIND the dialog the user\r\n * was looking at (R-M.2 / R-F.2).\r\n *\r\n * Containment is order-independent: a trap is innermost when no other active\r\n * trap lives inside it. Correct for both mount orderings, and for unmount — once\r\n * the inner trap pops, the outer contains nothing and resumes duty.\r\n */\r\nfunction isInnermostTrap(container: HTMLElement): boolean {\r\n return !trapStack.some(\r\n (other) => other !== container && container.contains(other)\r\n );\r\n}\r\n\r\n/**\r\n * True iff the element is rendered AND not inside an aria-hidden /\r\n * inert / hidden / display:none ancestor. querySelectorAll picks\r\n * those up indiscriminately, so re-filter at use time.\r\n */\r\nfunction isVisuallyFocusable(el: Element | null): el is HTMLElement {\r\n if (!el) return false;\r\n if (\"disabled\" in el && el.disabled) return false;\r\n if (el.getAttribute && el.getAttribute(\"aria-disabled\") === \"true\") return false;\r\n // Cheap visibility test — covers display:none and visibility:hidden.\r\n // Note: elements with `display: contents` may report 0 rects but have\r\n // focusable descendants; the descendants themselves still match if\r\n // they have their own boxes, so this filter is a reasonable trade-off.\r\n if (typeof el.getClientRects === \"function\" && el.getClientRects().length === 0) {\r\n return false;\r\n }\r\n // Walk ancestors for hidden / aria-hidden / inert.\r\n let node: Element | null = el;\r\n while (node && node !== document.body) {\r\n if (node.hasAttribute && (\r\n node.hasAttribute(\"inert\") ||\r\n node.hasAttribute(\"hidden\") ||\r\n node.getAttribute(\"aria-hidden\") === \"true\"\r\n )) {\r\n return false;\r\n }\r\n node = node.parentElement;\r\n }\r\n return true;\r\n}\r\n\r\nexport default function useFocusTrap<T extends HTMLElement = HTMLElement>(\r\n ref: RefObject<T | null>,\r\n isActive: boolean\r\n): void {\r\n useEffect(() => {\r\n if (!isActive || !ref.current) return undefined;\r\n\r\n const container = ref.current;\r\n trapStack.push(container);\r\n\r\n const getFocusable = (): HTMLElement[] =>\r\n Array.from(container.querySelectorAll(FOCUSABLE_SELECTORS)).filter(isVisuallyFocusable);\r\n\r\n const trigger = document.activeElement;\r\n\r\n // Initial focus, deferred to next frame so React has finished\r\n // painting any conditional content. Cancellation handle stored\r\n // so unmount-within-same-frame cannot leak a stale .focus() call.\r\n const rafId = requestAnimationFrame(() => {\r\n /* Only the innermost trap claims initial focus — same predicate as `trap()`\r\n * below, so keyboard duty and initial focus can never disagree.\r\n *\r\n * Initial focus was previously unguarded: every trap focused on\r\n * activation regardless of nesting, so on simultaneous mount the outer\r\n * trap's rAF fired last and overwrote the inner trap's focus. */\r\n if (!isInnermostTrap(container)) return;\r\n\r\n const explicit = container.querySelector(AUTOFOCUS_SELECTORS);\r\n const target = (explicit && isVisuallyFocusable(explicit))\r\n ? explicit\r\n : getFocusable()[0];\r\n if (target && typeof target.focus === \"function\") target.focus();\r\n });\r\n\r\n const trap = (e: KeyboardEvent): void => {\r\n if (e.key !== \"Tab\") return;\r\n // Only the innermost trap acts. Outer traps stay registered and defer.\r\n // Containment, NOT stack position — see isInnermostTrap.\r\n if (!isInnermostTrap(container)) return;\r\n\r\n const els = getFocusable();\r\n if (!els.length) {\r\n // Pathological case (no focusable inside): swallow Tab so\r\n // focus cannot escape into the page behind the trap.\r\n e.preventDefault();\r\n return;\r\n }\r\n const first = els[0];\r\n const last = els[els.length - 1];\r\n if (!first || !last) return;\r\n const active = document.activeElement;\r\n\r\n // Recovery: if focus is currently OUTSIDE the container, warp it\r\n // back to the first focusable. Without this, an escaped focus\r\n // (mount race, programmatic blur, SR virtual cursor) leaks Tab\r\n // navigation to the page behind the trap.\r\n if (!container.contains(active)) {\r\n e.preventDefault();\r\n first.focus();\r\n return;\r\n }\r\n\r\n if (e.shiftKey && active === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!e.shiftKey && active === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", trap, true);\r\n\r\n return () => {\r\n cancelAnimationFrame(rafId);\r\n\r\n // Pop by reference (NOT by index) — tolerates out-of-order\r\n // unmount sequences during portal teardown or hot-replace.\r\n const idx = trapStack.lastIndexOf(container);\r\n if (idx >= 0) trapStack.splice(idx, 1);\r\n\r\n document.removeEventListener(\"keydown\", trap, true);\r\n\r\n // Restore focus only if the trigger is still mounted, focusable,\r\n // and not currently disabled. Calling .focus() on a detached or\r\n // disabled node silently leaves focus on <body> with no visible\r\n // indicator — actively user-hostile.\r\n if (\r\n trigger &&\r\n trigger !== document.body &&\r\n \"focus\" in trigger &&\r\n typeof trigger.focus === \"function\" &&\r\n document.body.contains(trigger) &&\r\n !(\"disabled\" in trigger && trigger.disabled)\r\n ) {\r\n trigger.focus();\r\n }\r\n };\r\n }, [isActive, ref]);\r\n}\r\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMC,mBAAmB,GAAG,CAC1B,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,iCAAiC,EACjC,kDAAkD,EAClD,iBAAiB,EACjB,iBAAiB,CAClB,CAACC,IAAI,CAAC,IAAI,CAAC;AAEZ,IAAMC,mBAAmB,GAAG,+BAA+B;;AAE3D;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,SAAwB,GAAG,EAAE;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,eAAeA,CAACC,SAAsB,EAAW;EACxD,OAAO,CAACF,SAAS,CAACG,IAAI,CACpB,UAACC,KAAK;IAAA,OAAKA,KAAK,KAAKF,SAAS,IAAIA,SAAS,CAACG,QAAQ,CAACD,KAAK,CAAC;EAAA,CAC7D,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASE,mBAAmBA,CAACC,EAAkB,EAAqB;EAClE,IAAI,CAACA,EAAE,EAAE,OAAO,KAAK;EACrB,IAAI,UAAU,IAAIA,EAAE,IAAIA,EAAE,CAACC,QAAQ,EAAE,OAAO,KAAK;EACjD,IAAID,EAAE,CAACE,YAAY,IAAIF,EAAE,CAACE,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,EAAE,OAAO,KAAK;EAChF;EACA;EACA;EACA;EACA,IAAI,OAAOF,EAAE,CAACG,cAAc,KAAK,UAAU,IAAIH,EAAE,CAACG,cAAc,CAAC,CAAC,CAACC,M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","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useFormAutoSave — persist Formik (or any form) values to
|
|
3
|
+
* localStorage with debounced writes, and expose draft-restore
|
|
4
|
+
* affordances to the host. Pure orchestration; no UI.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* import { v2 } from "@portnet/ui";
|
|
8
|
+
* const { useFormAutoSave, Banner } = v2;
|
|
9
|
+
*
|
|
10
|
+
* const { hasDraft, lastSavedAt, restoreDraft, clearDraft } =
|
|
11
|
+
* useFormAutoSave({
|
|
12
|
+
* storageKey: `addpe:autorisation:draft:${id || "new"}`,
|
|
13
|
+
* values: formik.values,
|
|
14
|
+
* setValues: formik.setValues,
|
|
15
|
+
* enabled: !id, // CREATE only, not edit
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* Safety:
|
|
19
|
+
* - All localStorage access is try/catch-wrapped.
|
|
20
|
+
* - Empty-state values are skipped so we don't produce noise entries.
|
|
21
|
+
* - When a draft exists but hasn't been actioned (hasDraft=true),
|
|
22
|
+
* the debounced write is PAUSED to prevent overwriting the draft
|
|
23
|
+
* with empty initial values before the user decides to restore/ignore.
|
|
24
|
+
*/
|
|
25
|
+
type FormAutoSaveOptions<Values> = {
|
|
26
|
+
storageKey: string;
|
|
27
|
+
values: Values;
|
|
28
|
+
/** Required if you call restoreDraft(). */
|
|
29
|
+
setValues?: (values: Values) => void;
|
|
30
|
+
enabled?: boolean;
|
|
31
|
+
debounceMs?: number;
|
|
32
|
+
initialEmptyCheck?: (values: Values) => boolean;
|
|
33
|
+
};
|
|
34
|
+
type FormAutoSaveResult = {
|
|
35
|
+
hasDraft: boolean;
|
|
36
|
+
lastSavedAt: Date | null;
|
|
37
|
+
restoreDraft: () => boolean;
|
|
38
|
+
clearDraft: () => void;
|
|
39
|
+
};
|
|
40
|
+
export default function useFormAutoSave<Values>({ storageKey, values, setValues, enabled, debounceMs, initialEmptyCheck, }: FormAutoSaveOptions<Values>): FormAutoSaveResult;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=useFormAutoSave.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormAutoSave.d.ts","sourceRoot":"","sources":["../../../src/lib/v2/hooks/useFormAutoSave.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,KAAK,mBAAmB,CAAC,MAAM,IAAI;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CACjD,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,MAAM,EAAE,EAC9C,UAAU,EACV,MAAM,EACN,SAAS,EACT,OAAc,EACd,UAAgB,EAChB,iBAAqC,GACtC,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,kBAAkB,CA+HlD"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = useFormAutoSave;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
9
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
10
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
11
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
12
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
13
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
14
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
15
|
+
/**
|
|
16
|
+
* useFormAutoSave — persist Formik (or any form) values to
|
|
17
|
+
* localStorage with debounced writes, and expose draft-restore
|
|
18
|
+
* affordances to the host. Pure orchestration; no UI.
|
|
19
|
+
*
|
|
20
|
+
* Usage:
|
|
21
|
+
* import { v2 } from "@portnet/ui";
|
|
22
|
+
* const { useFormAutoSave, Banner } = v2;
|
|
23
|
+
*
|
|
24
|
+
* const { hasDraft, lastSavedAt, restoreDraft, clearDraft } =
|
|
25
|
+
* useFormAutoSave({
|
|
26
|
+
* storageKey: `addpe:autorisation:draft:${id || "new"}`,
|
|
27
|
+
* values: formik.values,
|
|
28
|
+
* setValues: formik.setValues,
|
|
29
|
+
* enabled: !id, // CREATE only, not edit
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* Safety:
|
|
33
|
+
* - All localStorage access is try/catch-wrapped.
|
|
34
|
+
* - Empty-state values are skipped so we don't produce noise entries.
|
|
35
|
+
* - When a draft exists but hasn't been actioned (hasDraft=true),
|
|
36
|
+
* the debounced write is PAUSED to prevent overwriting the draft
|
|
37
|
+
* with empty initial values before the user decides to restore/ignore.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
function useFormAutoSave(_ref) {
|
|
41
|
+
var storageKey = _ref.storageKey,
|
|
42
|
+
values = _ref.values,
|
|
43
|
+
setValues = _ref.setValues,
|
|
44
|
+
_ref$enabled = _ref.enabled,
|
|
45
|
+
enabled = _ref$enabled === void 0 ? true : _ref$enabled,
|
|
46
|
+
_ref$debounceMs = _ref.debounceMs,
|
|
47
|
+
debounceMs = _ref$debounceMs === void 0 ? 800 : _ref$debounceMs,
|
|
48
|
+
_ref$initialEmptyChec = _ref.initialEmptyCheck,
|
|
49
|
+
initialEmptyCheck = _ref$initialEmptyChec === void 0 ? defaultEmptyCheck : _ref$initialEmptyChec;
|
|
50
|
+
var _useState = (0, _react.useState)(false),
|
|
51
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
52
|
+
hasDraft = _useState2[0],
|
|
53
|
+
setHasDraft = _useState2[1];
|
|
54
|
+
var _useState3 = (0, _react.useState)(null),
|
|
55
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
56
|
+
lastSavedAt = _useState4[0],
|
|
57
|
+
setLastSavedAt = _useState4[1];
|
|
58
|
+
var debounceTimerRef = (0, _react.useRef)(null);
|
|
59
|
+
var mountedRef = (0, _react.useRef)(false);
|
|
60
|
+
|
|
61
|
+
/* ── Mount-time draft detection ────────────────── */
|
|
62
|
+
(0, _react.useEffect)(function () {
|
|
63
|
+
if (!enabled) return;
|
|
64
|
+
if (mountedRef.current) return;
|
|
65
|
+
mountedRef.current = true;
|
|
66
|
+
try {
|
|
67
|
+
var raw = localStorage.getItem(storageKey);
|
|
68
|
+
if (!raw) return;
|
|
69
|
+
var parsed = JSON.parse(raw);
|
|
70
|
+
if (parsed && _typeof(parsed) === "object" && "values" in parsed && parsed.values && _typeof(parsed.values) === "object") {
|
|
71
|
+
setHasDraft(true);
|
|
72
|
+
if ("savedAt" in parsed && typeof parsed.savedAt === "string") {
|
|
73
|
+
var d = new Date(parsed.savedAt);
|
|
74
|
+
if (!Number.isNaN(d.getTime())) setLastSavedAt(d);
|
|
75
|
+
}
|
|
76
|
+
} else {
|
|
77
|
+
localStorage.removeItem(storageKey);
|
|
78
|
+
}
|
|
79
|
+
} catch (_unused) {
|
|
80
|
+
try {
|
|
81
|
+
localStorage.removeItem(storageKey);
|
|
82
|
+
} catch (_unused2) {
|
|
83
|
+
/* ignore */
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}, [enabled, storageKey]);
|
|
87
|
+
|
|
88
|
+
/* ── Debounced write on values change ──────────────────
|
|
89
|
+
*
|
|
90
|
+
* CRITICAL: do NOT write while hasDraft=true (draft not yet actioned).
|
|
91
|
+
*
|
|
92
|
+
* If we write immediately on mount, the empty initial values would
|
|
93
|
+
* overwrite the user's saved draft after `debounceMs` milliseconds.
|
|
94
|
+
* The user would see the "restore" banner, wait/hesitate, then click
|
|
95
|
+
* "Restaurer" only to find the form empty because restoreDraft() read
|
|
96
|
+
* the overwritten (empty) localStorage entry.
|
|
97
|
+
*
|
|
98
|
+
* We pause writes until hasDraft becomes false, which happens when:
|
|
99
|
+
* - restoreDraft() is called (user chose to restore)
|
|
100
|
+
* - clearDraft() is called (user chose to ignore)
|
|
101
|
+
* - No draft existed on mount (hasDraft was never set to true)
|
|
102
|
+
*/
|
|
103
|
+
(0, _react.useEffect)(function () {
|
|
104
|
+
if (!enabled) return undefined;
|
|
105
|
+
if (hasDraft) return undefined; // ← PAUSE: preserve existing draft
|
|
106
|
+
if (initialEmptyCheck(values)) return undefined;
|
|
107
|
+
if (debounceTimerRef.current) {
|
|
108
|
+
clearTimeout(debounceTimerRef.current);
|
|
109
|
+
}
|
|
110
|
+
debounceTimerRef.current = setTimeout(function () {
|
|
111
|
+
try {
|
|
112
|
+
var now = new Date();
|
|
113
|
+
localStorage.setItem(storageKey, JSON.stringify({
|
|
114
|
+
values: values,
|
|
115
|
+
savedAt: now.toISOString()
|
|
116
|
+
}));
|
|
117
|
+
setLastSavedAt(now);
|
|
118
|
+
} catch (_unused3) {
|
|
119
|
+
// Quota full / private mode — no-op.
|
|
120
|
+
}
|
|
121
|
+
}, debounceMs);
|
|
122
|
+
return function () {
|
|
123
|
+
if (debounceTimerRef.current) {
|
|
124
|
+
clearTimeout(debounceTimerRef.current);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
}, [values, enabled, hasDraft, storageKey, debounceMs, initialEmptyCheck]);
|
|
128
|
+
|
|
129
|
+
/* ── Restore draft ─────────────────────── */
|
|
130
|
+
var restoreDraft = (0, _react.useCallback)(function () {
|
|
131
|
+
if (!setValues) {
|
|
132
|
+
if (process.env["NODE_ENV"] !== "production") {
|
|
133
|
+
// eslint-disable-next-line no-console
|
|
134
|
+
console.warn("[v2.useFormAutoSave] restoreDraft called but setValues was not provided.");
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
var raw = localStorage.getItem(storageKey);
|
|
140
|
+
if (!raw) return false;
|
|
141
|
+
var parsed = JSON.parse(raw);
|
|
142
|
+
if (!parsed || _typeof(parsed) !== "object" || !("values" in parsed) || !parsed.values) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
// Persisted draft payload is the form's Values, round-tripped
|
|
146
|
+
// through JSON; assert back to Values for the setter.
|
|
147
|
+
setValues(parsed.values);
|
|
148
|
+
setHasDraft(false); // ← resumes auto-save with restored values
|
|
149
|
+
return true;
|
|
150
|
+
} catch (_unused4) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}, [storageKey, setValues]);
|
|
154
|
+
|
|
155
|
+
/* ── Clear draft ─────────────────────── */
|
|
156
|
+
var clearDraft = (0, _react.useCallback)(function () {
|
|
157
|
+
try {
|
|
158
|
+
localStorage.removeItem(storageKey);
|
|
159
|
+
} catch (_unused5) {
|
|
160
|
+
/* ignore */
|
|
161
|
+
}
|
|
162
|
+
setHasDraft(false); // ← resumes auto-save for new input
|
|
163
|
+
setLastSavedAt(null);
|
|
164
|
+
}, [storageKey]);
|
|
165
|
+
return {
|
|
166
|
+
hasDraft: hasDraft,
|
|
167
|
+
lastSavedAt: lastSavedAt,
|
|
168
|
+
restoreDraft: restoreDraft,
|
|
169
|
+
clearDraft: clearDraft
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* ── Helpers ───────────────────────────── */
|
|
174
|
+
|
|
175
|
+
function isEmptyValue(v) {
|
|
176
|
+
if (v === null || v === undefined) return true;
|
|
177
|
+
if (typeof v === "string") return v.trim().length === 0;
|
|
178
|
+
if (Array.isArray(v)) return v.length === 0;
|
|
179
|
+
if (_typeof(v) === "object") return Object.keys(v).length === 0;
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
function defaultEmptyCheck(values) {
|
|
183
|
+
if (!values || _typeof(values) !== "object") return true;
|
|
184
|
+
return Object.values(values).every(isEmptyValue);
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=useFormAutoSave.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormAutoSave.js","names":["_react","require","_typeof","obj","Symbol","iterator","constructor","prototype","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","o","minLen","_arrayLikeToArray","n","Object","toString","call","slice","name","Array","from","test","len","length","arr2","_i","_s","_e","_x","_r","_arr","_n","_d","next","done","push","value","err","isArray","useFormAutoSave","_ref","storageKey","values","setValues","_ref$enabled","enabled","_ref$debounceMs","debounceMs","_ref$initialEmptyChec","initialEmptyCheck","defaultEmptyCheck","_useState","useState","_useState2","hasDraft","setHasDraft","_useState3","_useState4","lastSavedAt","setLastSavedAt","debounceTimerRef","useRef","mountedRef","useEffect","current","raw","localStorage","getItem","parsed","JSON","parse","savedAt","d","Date","Number","isNaN","getTime","removeItem","_unused","_unused2","undefined","clearTimeout","setTimeout","now","setItem","stringify","toISOString","_unused3","restoreDraft","useCallback","process","env","console","warn","_unused4","clearDraft","_unused5","isEmptyValue","v","trim","keys","every"],"sources":["../../../src/lib/v2/hooks/useFormAutoSave.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\r\n\r\n/**\r\n * useFormAutoSave — persist Formik (or any form) values to\r\n * localStorage with debounced writes, and expose draft-restore\r\n * affordances to the host. Pure orchestration; no UI.\r\n *\r\n * Usage:\r\n * import { v2 } from \"@portnet/ui\";\r\n * const { useFormAutoSave, Banner } = v2;\r\n *\r\n * const { hasDraft, lastSavedAt, restoreDraft, clearDraft } =\r\n * useFormAutoSave({\r\n * storageKey: `addpe:autorisation:draft:${id || \"new\"}`,\r\n * values: formik.values,\r\n * setValues: formik.setValues,\r\n * enabled: !id, // CREATE only, not edit\r\n * });\r\n *\r\n * Safety:\r\n * - All localStorage access is try/catch-wrapped.\r\n * - Empty-state values are skipped so we don't produce noise entries.\r\n * - When a draft exists but hasn't been actioned (hasDraft=true),\r\n * the debounced write is PAUSED to prevent overwriting the draft\r\n * with empty initial values before the user decides to restore/ignore.\r\n */\r\n\r\ntype FormAutoSaveOptions<Values> = {\r\n storageKey: string;\r\n values: Values;\r\n /** Required if you call restoreDraft(). */\r\n setValues?: (values: Values) => void;\r\n enabled?: boolean;\r\n debounceMs?: number;\r\n initialEmptyCheck?: (values: Values) => boolean;\r\n};\r\n\r\ntype FormAutoSaveResult = {\r\n hasDraft: boolean;\r\n lastSavedAt: Date | null;\r\n restoreDraft: () => boolean;\r\n clearDraft: () => void;\r\n};\r\n\r\nexport default function useFormAutoSave<Values>({\r\n storageKey,\r\n values,\r\n setValues,\r\n enabled = true,\r\n debounceMs = 800,\r\n initialEmptyCheck = defaultEmptyCheck,\r\n}: FormAutoSaveOptions<Values>): FormAutoSaveResult {\r\n const [hasDraft, setHasDraft] = useState(false);\r\n const [lastSavedAt, setLastSavedAt] = useState<Date | null>(null);\r\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const mountedRef = useRef(false);\r\n\r\n /* ── Mount-time draft detection ────────────────── */\r\n useEffect(() => {\r\n if (!enabled) return;\r\n if (mountedRef.current) return;\r\n mountedRef.current = true;\r\n\r\n try {\r\n const raw = localStorage.getItem(storageKey);\r\n if (!raw) return;\r\n const parsed: unknown = JSON.parse(raw);\r\n if (\r\n parsed &&\r\n typeof parsed === \"object\" &&\r\n \"values\" in parsed &&\r\n parsed.values &&\r\n typeof parsed.values === \"object\"\r\n ) {\r\n setHasDraft(true);\r\n if (\"savedAt\" in parsed && typeof parsed.savedAt === \"string\") {\r\n const d = new Date(parsed.savedAt);\r\n if (!Number.isNaN(d.getTime())) setLastSavedAt(d);\r\n }\r\n } else {\r\n localStorage.removeItem(storageKey);\r\n }\r\n } catch {\r\n try {\r\n localStorage.removeItem(storageKey);\r\n } catch {\r\n /* ignore */\r\n }\r\n }\r\n }, [enabled, storageKey]);\r\n\r\n /* ── Debounced write on values change ──────────────────\r\n *\r\n * CRITICAL: do NOT write while hasDraft=true (draft not yet actioned).\r\n *\r\n * If we write immediately on mount, the empty initial values would\r\n * overwrite the user's saved draft after `debounceMs` milliseconds.\r\n * The user would see the \"restore\" banner, wait/hesitate, then click\r\n * \"Restaurer\" only to find the form empty because restoreDraft() read\r\n * the overwritten (empty) localStorage entry.\r\n *\r\n * We pause writes until hasDraft becomes false, which happens when:\r\n * - restoreDraft() is called (user chose to restore)\r\n * - clearDraft() is called (user chose to ignore)\r\n * - No draft existed on mount (hasDraft was never set to true)\r\n */\r\n useEffect(() => {\r\n if (!enabled) return undefined;\r\n if (hasDraft) return undefined; // ← PAUSE: preserve existing draft\r\n if (initialEmptyCheck(values)) return undefined;\r\n\r\n if (debounceTimerRef.current) {\r\n clearTimeout(debounceTimerRef.current);\r\n }\r\n\r\n debounceTimerRef.current = setTimeout(() => {\r\n try {\r\n const now = new Date();\r\n localStorage.setItem(\r\n storageKey,\r\n JSON.stringify({ values, savedAt: now.toISOString() })\r\n );\r\n setLastSavedAt(now);\r\n } catch {\r\n // Quota full / private mode — no-op.\r\n }\r\n }, debounceMs);\r\n\r\n return () => {\r\n if (debounceTimerRef.current) {\r\n clearTimeout(debounceTimerRef.current);\r\n }\r\n };\r\n }, [values, enabled, hasDraft, storageKey, debounceMs, initialEmptyCheck]);\r\n\r\n /* ── Restore draft ─────────────────────── */\r\n const restoreDraft = useCallback((): boolean => {\r\n if (!setValues) {\r\n if (process.env[\"NODE_ENV\"] !== \"production\") {\r\n // eslint-disable-next-line no-console\r\n console.warn(\"[v2.useFormAutoSave] restoreDraft called but setValues was not provided.\");\r\n }\r\n return false;\r\n }\r\n try {\r\n const raw = localStorage.getItem(storageKey);\r\n if (!raw) return false;\r\n const parsed: unknown = JSON.parse(raw);\r\n if (\r\n !parsed ||\r\n typeof parsed !== \"object\" ||\r\n !(\"values\" in parsed) ||\r\n !parsed.values\r\n ) {\r\n return false;\r\n }\r\n // Persisted draft payload is the form's Values, round-tripped\r\n // through JSON; assert back to Values for the setter.\r\n setValues(parsed.values as Values);\r\n setHasDraft(false); // ← resumes auto-save with restored values\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }, [storageKey, setValues]);\r\n\r\n /* ── Clear draft ─────────────────────── */\r\n const clearDraft = useCallback((): void => {\r\n try {\r\n localStorage.removeItem(storageKey);\r\n } catch {\r\n /* ignore */\r\n }\r\n setHasDraft(false); // ← resumes auto-save for new input\r\n setLastSavedAt(null);\r\n }, [storageKey]);\r\n\r\n return { hasDraft, lastSavedAt, restoreDraft, clearDraft };\r\n}\r\n\r\n/* ── Helpers ───────────────────────────── */\r\n\r\nfunction isEmptyValue(v: unknown): boolean {\r\n if (v === null || v === undefined) return true;\r\n if (typeof v === \"string\") return v.trim().length === 0;\r\n if (Array.isArray(v)) return v.length === 0;\r\n if (typeof v === \"object\") return Object.keys(v).length === 0;\r\n return false;\r\n}\r\n\r\nfunction defaultEmptyCheck(values: unknown): boolean {\r\n if (!values || typeof values !== \"object\") return true;\r\n return Object.values(values).every(isEmptyValue);\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useFormCompletionProgress — derive required/overall completion
|
|
3
|
+
* percentages from current form values and a declared field list.
|
|
4
|
+
* Pure useMemo computation, no side effects.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* import { v2 } from "@portnet/ui";
|
|
8
|
+
* const { useFormCompletionProgress, ProgressBar } = v2;
|
|
9
|
+
*
|
|
10
|
+
* const REQUIRED = ["typeAutorisation", "importer.id", "dateFinValidite"];
|
|
11
|
+
* const OPTIONAL = ["referenceLicence", "region"];
|
|
12
|
+
*
|
|
13
|
+
* const {
|
|
14
|
+
* requiredPct,
|
|
15
|
+
* overallPct,
|
|
16
|
+
* isCompleteRequired,
|
|
17
|
+
* missingRequired,
|
|
18
|
+
* filledRequired,
|
|
19
|
+
* totalRequired,
|
|
20
|
+
* } = useFormCompletionProgress({
|
|
21
|
+
* values: formik.values,
|
|
22
|
+
* requiredFields: REQUIRED,
|
|
23
|
+
* optionalFields: OPTIONAL,
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* <ProgressBar value={requiredPct} />
|
|
27
|
+
* <span>{filledRequired}/{totalRequired} requis</span>
|
|
28
|
+
*
|
|
29
|
+
* Field paths support dot notation for nested values:
|
|
30
|
+
* "importer.id" → values.importer.id
|
|
31
|
+
* "articles" → values.articles (array length checked)
|
|
32
|
+
*/
|
|
33
|
+
type FormCompletionProgressOptions<Values> = {
|
|
34
|
+
values: Values;
|
|
35
|
+
/** Field keys / dot-paths that are required. */
|
|
36
|
+
requiredFields: string[];
|
|
37
|
+
/** Field keys / dot-paths that are optional. */
|
|
38
|
+
optionalFields?: string[];
|
|
39
|
+
};
|
|
40
|
+
type FormCompletionProgress = {
|
|
41
|
+
requiredPct: number;
|
|
42
|
+
overallPct: number;
|
|
43
|
+
filledRequired: number;
|
|
44
|
+
totalRequired: number;
|
|
45
|
+
filledOptional: number;
|
|
46
|
+
totalOptional: number;
|
|
47
|
+
isCompleteRequired: boolean;
|
|
48
|
+
missingRequired: string[];
|
|
49
|
+
};
|
|
50
|
+
export default function useFormCompletionProgress<Values>({ values, requiredFields, optionalFields, }: FormCompletionProgressOptions<Values>): FormCompletionProgress;
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=useFormCompletionProgress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormCompletionProgress.d.ts","sourceRoot":"","sources":["../../../src/lib/v2/hooks/useFormCompletionProgress.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,KAAK,6BAA6B,CAAC,MAAM,IAAI;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,MAAM,EAAE,EACxD,MAAM,EACN,cAAc,EACd,cAAmB,GACpB,EAAE,6BAA6B,CAAC,MAAM,CAAC,GAAG,sBAAsB,CAwChE"}
|