@portnet/ui 6.0.1 → 6.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +737 -0
- package/dist/esm/index.js +90 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
- package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldError.test.js +71 -39
- package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
- package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldWidth.test.js +146 -0
- package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FileCard.test.js +18 -18
- package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js +173 -0
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +236 -0
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +299 -0
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
- package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -43
- package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/esm/v2/__tests__/apiError.test.js +50 -69
- package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
- package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
- package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
- package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/esm/v2/__tests__/labels-merge.test.js +17 -22
- package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
- package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
- package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
- package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/esm/v2/components/Accordion.js +48 -70
- package/dist/esm/v2/components/Accordion.js.map +1 -1
- package/dist/esm/v2/components/ActionStrip.js +31 -43
- package/dist/esm/v2/components/ActionStrip.js.map +1 -1
- package/dist/esm/v2/components/Banner.js +25 -22
- package/dist/esm/v2/components/Banner.js.map +1 -1
- package/dist/esm/v2/components/Busy.js +14 -19
- package/dist/esm/v2/components/Busy.js.map +1 -1
- package/dist/esm/v2/components/Button.js +34 -45
- package/dist/esm/v2/components/Button.js.map +1 -1
- package/dist/esm/v2/components/CategoryTag.js +44 -27
- package/dist/esm/v2/components/CategoryTag.js.map +1 -1
- package/dist/esm/v2/components/Checkbox.js +32 -38
- package/dist/esm/v2/components/Checkbox.js.map +1 -1
- package/dist/esm/v2/components/Chip.js +23 -36
- package/dist/esm/v2/components/Chip.js.map +1 -1
- package/dist/esm/v2/components/Combobox.js +112 -136
- package/dist/esm/v2/components/Combobox.js.map +1 -1
- package/dist/esm/v2/components/CommandPalette.js +113 -198
- package/dist/esm/v2/components/CommandPalette.js.map +1 -1
- package/dist/esm/v2/components/ConfirmDialog.js +36 -45
- package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/esm/v2/components/DatePicker.js +78 -81
- package/dist/esm/v2/components/DatePicker.js.map +1 -1
- package/dist/esm/v2/components/DateRangePicker.js +63 -74
- package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
- package/dist/esm/v2/components/DateTimePicker.js +118 -90
- package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
- package/dist/esm/v2/components/Drawer.js +71 -65
- package/dist/esm/v2/components/Drawer.js.map +1 -1
- package/dist/esm/v2/components/Dropzone.js +130 -177
- package/dist/esm/v2/components/Dropzone.js.map +1 -1
- package/dist/esm/v2/components/EmptyState.js +9 -9
- package/dist/esm/v2/components/EmptyState.js.map +1 -1
- package/dist/esm/v2/components/FavoriteToggle.js +24 -33
- package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/esm/v2/components/Field.js +210 -52
- package/dist/esm/v2/components/Field.js.map +1 -1
- package/dist/esm/v2/components/FieldError.js +9 -13
- package/dist/esm/v2/components/FieldError.js.map +1 -1
- package/dist/esm/v2/components/FieldHelp.js +28 -49
- package/dist/esm/v2/components/FieldHelp.js.map +1 -1
- package/dist/esm/v2/components/FileCard.js +14 -19
- package/dist/esm/v2/components/FileCard.js.map +1 -1
- package/dist/esm/v2/components/FilterTab.js +22 -31
- package/dist/esm/v2/components/FilterTab.js.map +1 -1
- package/dist/esm/v2/components/ForbiddenPage.js +28 -8
- package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/esm/v2/components/FormGrid.js +48 -54
- package/dist/esm/v2/components/FormGrid.js.map +1 -1
- package/dist/esm/v2/components/FormikDisplay.js +98 -24
- package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
- package/dist/esm/v2/components/Input.js +75 -34
- package/dist/esm/v2/components/Input.js.map +1 -1
- package/dist/esm/v2/components/KPICard.js +42 -51
- package/dist/esm/v2/components/KPICard.js.map +1 -1
- package/dist/esm/v2/components/KPIStrip.js +9 -15
- package/dist/esm/v2/components/KPIStrip.js.map +1 -1
- package/dist/esm/v2/components/KV.js +16 -23
- package/dist/esm/v2/components/KV.js.map +1 -1
- package/dist/esm/v2/components/KVGrid.js +15 -23
- package/dist/esm/v2/components/KVGrid.js.map +1 -1
- package/dist/esm/v2/components/Layout.js +81 -117
- package/dist/esm/v2/components/Layout.js.map +1 -1
- package/dist/esm/v2/components/MobileRowCard.js +64 -75
- package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
- package/dist/esm/v2/components/Modal.js +44 -53
- package/dist/esm/v2/components/Modal.js.map +1 -1
- package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
- package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/esm/v2/components/NotFoundPage.js +28 -9
- package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
- package/dist/esm/v2/components/NumberInput.js +77 -107
- package/dist/esm/v2/components/NumberInput.js.map +1 -1
- package/dist/esm/v2/components/OverflowMenu.js +24 -42
- package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
- package/dist/esm/v2/components/PdfViewer.js +24 -33
- package/dist/esm/v2/components/PdfViewer.js.map +1 -1
- package/dist/esm/v2/components/ProgressBar.js +28 -36
- package/dist/esm/v2/components/ProgressBar.js.map +1 -1
- package/dist/esm/v2/components/Radio.js +49 -57
- package/dist/esm/v2/components/Radio.js.map +1 -1
- package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
- package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/esm/v2/components/SectionHeader.js +24 -31
- package/dist/esm/v2/components/SectionHeader.js.map +1 -1
- package/dist/esm/v2/components/Segmented.js +59 -84
- package/dist/esm/v2/components/Segmented.js.map +1 -1
- package/dist/esm/v2/components/Select.js +100 -138
- package/dist/esm/v2/components/Select.js.map +1 -1
- package/dist/esm/v2/components/ServerErrorPage.js +27 -10
- package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/esm/v2/components/Skeleton.js +81 -96
- package/dist/esm/v2/components/Skeleton.js.map +1 -1
- package/dist/esm/v2/components/SkipLink.js +6 -7
- package/dist/esm/v2/components/SkipLink.js.map +1 -1
- package/dist/esm/v2/components/Spinner.js +13 -22
- package/dist/esm/v2/components/Spinner.js.map +1 -1
- package/dist/esm/v2/components/Status.js +14 -25
- package/dist/esm/v2/components/Status.js.map +1 -1
- package/dist/esm/v2/components/Stepper.js +68 -71
- package/dist/esm/v2/components/Stepper.js.map +1 -1
- package/dist/esm/v2/components/Surface.js +25 -44
- package/dist/esm/v2/components/Surface.js.map +1 -1
- package/dist/esm/v2/components/Switch.js +21 -29
- package/dist/esm/v2/components/Switch.js.map +1 -1
- package/dist/esm/v2/components/TabPanel.js +84 -0
- package/dist/esm/v2/components/TabPanel.js.map +1 -0
- package/dist/esm/v2/components/Tabs.js +43 -19
- package/dist/esm/v2/components/Tabs.js.map +1 -1
- package/dist/esm/v2/components/TelInput.js +75 -108
- package/dist/esm/v2/components/TelInput.js.map +1 -1
- package/dist/esm/v2/components/Textarea.js +21 -30
- package/dist/esm/v2/components/Textarea.js.map +1 -1
- package/dist/esm/v2/components/TimePicker.js +59 -69
- package/dist/esm/v2/components/TimePicker.js.map +1 -1
- package/dist/esm/v2/components/Toast.js +109 -163
- package/dist/esm/v2/components/Toast.js.map +1 -1
- package/dist/esm/v2/components/Tooltip.js +18 -31
- package/dist/esm/v2/components/Tooltip.js.map +1 -1
- package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
- package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/esm/v2/components/_pickerShared.js +2 -2
- package/dist/esm/v2/components/_pickerShared.js.map +1 -1
- package/dist/esm/v2/components/index.js +64 -0
- package/dist/esm/v2/components/index.js.map +1 -1
- package/dist/esm/v2/hooks/index.js +62 -0
- package/dist/esm/v2/hooks/index.js.map +1 -1
- package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
- package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
- package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/esm/v2/hooks/useDensity.js +13 -17
- package/dist/esm/v2/hooks/useDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
- package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
- package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
- package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
- package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
- package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useSortedRows.js +3 -5
- package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/esm/v2/hooks/useTabLoading.js +6 -21
- package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/esm/v2/index.js +14 -4
- package/dist/esm/v2/index.js.map +1 -1
- package/dist/esm/v2/modalContext.js +2 -2
- package/dist/esm/v2/modalContext.js.map +1 -1
- package/dist/esm/v2/models/favorite.js.map +1 -1
- package/dist/esm/v2/models/personalization.js.map +1 -1
- package/dist/esm/v2/models/referentiel.js.map +1 -1
- package/dist/esm/v2/models/savedFilter.js.map +1 -1
- package/dist/esm/v2/patterns/ActionBar.js +115 -159
- package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/AppMain.js +108 -0
- package/dist/esm/v2/patterns/AppMain.js.map +1 -0
- package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
- package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/ChartFigure.js +151 -0
- package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
- package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/esm/v2/patterns/DataGrid.js +221 -255
- package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
- package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
- package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/esm/v2/patterns/DetailSplit.js +108 -0
- package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/esm/v2/patterns/FavoriteColumn.js +26 -75
- package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
- package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
- package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
- package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/esm/v2/patterns/FormPageShell.js +43 -41
- package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/FormSection.js +30 -38
- package/dist/esm/v2/patterns/FormSection.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCheckbox.js +130 -0
- package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -0
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCombobox.js +51 -66
- package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDatePicker.js +51 -99
- package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDateTimePicker.js +136 -0
- package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -0
- package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
- package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
- package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/esm/v2/patterns/FormikFile.js +94 -78
- package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
- package/dist/esm/v2/patterns/FormikInput.js +40 -50
- package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
- package/dist/esm/v2/patterns/FormikRadioGroup.js +129 -0
- package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -0
- package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
- package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/FormikSelect.js +64 -84
- package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/esm/v2/patterns/FormikTextarea.js +30 -43
- package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +64 -65
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
- package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/esm/v2/patterns/PageContent.js +10 -14
- package/dist/esm/v2/patterns/PageContent.js.map +1 -1
- package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
- package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/esm/v2/patterns/ReferentielField.js +327 -312
- package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/RowFavoriteToggle.js +127 -0
- package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -0
- package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
- package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
- package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
- package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/SortableHeader.js +22 -45
- package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/esm/v2/patterns/Tour.js +94 -120
- package/dist/esm/v2/patterns/Tour.js.map +1 -1
- package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
- package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/esm/v2/patterns/_pickerSerialisation.js +72 -0
- package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -0
- package/dist/esm/v2/patterns/_sort.js +17 -33
- package/dist/esm/v2/patterns/_sort.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
- package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
- package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/esm/v2/patterns/filterCriteria.js +102 -0
- package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/esm/v2/patterns/index.js +235 -0
- package/dist/esm/v2/patterns/index.js.map +1 -1
- package/dist/esm/v2/patterns/rowActions.js +223 -0
- package/dist/esm/v2/patterns/rowActions.js.map +1 -0
- package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
- package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
- package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
- package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js +203 -0
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/index.js +5 -0
- package/dist/esm/v2/personalization/capabilities/index.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
- package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
- package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/esm/v2/personalization/index.js +35 -0
- package/dist/esm/v2/personalization/index.js.map +1 -1
- package/dist/esm/v2/personalization/personalizationContext.js +9 -9
- package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/esm/v2/personalization/schema.js +8 -9
- package/dist/esm/v2/personalization/schema.js.map +1 -1
- package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
- package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/esm/v2/referentiel/types.js +2 -0
- package/dist/esm/v2/referentiel/types.js.map +1 -0
- package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
- package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
- package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
- package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/esm/v2/theme/_brand.js +8 -24
- package/dist/esm/v2/theme/_brand.js.map +1 -1
- package/dist/esm/v2/theme/_brandSecondary.js +8 -24
- package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
- package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/esm/v2/theme/cssVariables.js +62 -69
- package/dist/esm/v2/theme/cssVariables.js.map +1 -1
- package/dist/esm/v2/theme/index.js +5 -5
- package/dist/esm/v2/theme/index.js.map +1 -1
- package/dist/esm/v2/tokens/breakpoints.js +14 -14
- package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
- package/dist/esm/v2/tokens/chart.js +261 -0
- package/dist/esm/v2/tokens/chart.js.map +1 -0
- package/dist/esm/v2/tokens/colors.js +22 -22
- package/dist/esm/v2/tokens/colors.js.map +1 -1
- package/dist/esm/v2/tokens/density.js +62 -7
- package/dist/esm/v2/tokens/density.js.map +1 -1
- package/dist/esm/v2/tokens/index.js +49 -34
- package/dist/esm/v2/tokens/index.js.map +1 -1
- package/dist/esm/v2/tokens/motion.js +12 -20
- package/dist/esm/v2/tokens/motion.js.map +1 -1
- package/dist/esm/v2/tokens/radius.js +1 -1
- package/dist/esm/v2/tokens/radius.js.map +1 -1
- package/dist/esm/v2/tokens/shadows.js +6 -6
- package/dist/esm/v2/tokens/shadows.js.map +1 -1
- package/dist/esm/v2/tokens/spacing.js +2 -2
- package/dist/esm/v2/tokens/spacing.js.map +1 -1
- package/dist/esm/v2/tokens/state.js +1 -1
- package/dist/esm/v2/tokens/state.js.map +1 -1
- package/dist/esm/v2/tokens/statusPalette.js +17 -21
- package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
- package/dist/esm/v2/tokens/tokens.json +6 -1
- package/dist/esm/v2/tokens/typography.js +13 -13
- package/dist/esm/v2/tokens/typography.js.map +1 -1
- package/dist/esm/v2/tokens/zIndex.js +1 -1
- package/dist/esm/v2/tokens/zIndex.js.map +1 -1
- package/dist/esm/v2/types/datagrid.js.map +1 -1
- package/dist/esm/v2/utils/apiError.js +16 -37
- package/dist/esm/v2/utils/apiError.js.map +1 -1
- package/dist/esm/v2/utils/contrast.js +31 -32
- package/dist/esm/v2/utils/contrast.js.map +1 -1
- package/dist/esm/v2/utils/cx.js +5 -25
- package/dist/esm/v2/utils/cx.js.map +1 -1
- package/dist/esm/v2/utils/fileDownload.js +23 -26
- package/dist/esm/v2/utils/fileDownload.js.map +1 -1
- package/dist/esm/v2/utils/fileValidation.js +209 -0
- package/dist/esm/v2/utils/fileValidation.js.map +1 -0
- package/dist/esm/v2/utils/fmtDate.js +111 -0
- package/dist/esm/v2/utils/fmtDate.js.map +1 -0
- package/dist/esm/v2/utils/fmtMoney.js +8 -10
- package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
- package/dist/esm/v2/utils/formikErrors.js +78 -0
- package/dist/esm/v2/utils/formikErrors.js.map +1 -0
- package/dist/esm/v2/utils/index.js +35 -2
- package/dist/esm/v2/utils/index.js.map +1 -1
- package/dist/esm/v2/utils/mergeLabels.js +7 -12
- package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
- package/dist/esm/v2/utils/networkStatus.js +12 -12
- package/dist/esm/v2/utils/networkStatus.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +122 -47
- package/dist/index.js.map +1 -1
- package/dist/v2/__tests__/AppMain.test.js +133 -0
- package/dist/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/v2/__tests__/ChartFigure.test.js +183 -0
- package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/v2/__tests__/FieldError.test.js +98 -69
- package/dist/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/v2/__tests__/FieldNaming.test.js +161 -0
- package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/v2/__tests__/FieldWidth.test.js +148 -0
- package/dist/v2/__tests__/FieldWidth.test.js.map +1 -0
- package/dist/v2/__tests__/FileCard.test.js +45 -48
- package/dist/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/v2/__tests__/FormikCheckbox.test.js +175 -0
- package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -0
- package/dist/v2/__tests__/FormikDateTimePicker.test.js +237 -0
- package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
- package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
- package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/v2/__tests__/FormikRadioGroup.test.js +300 -0
- package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
- package/dist/v2/__tests__/MobileRowCard.test.js +100 -102
- package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
- package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
- package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/v2/__tests__/apiError.test.js +50 -69
- package/dist/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/v2/__tests__/banned-patterns.test.js +42 -123
- package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/v2/__tests__/chart-palette.test.js +205 -0
- package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/v2/__tests__/fileValidation.test.js +136 -0
- package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/v2/__tests__/filterCriteria.test.js +324 -0
- package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/fmtDate.test.js +69 -0
- package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/v2/__tests__/labels-merge.test.js +38 -46
- package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/v2/__tests__/locale-fallback.test.js +47 -52
- package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
- package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/rowActions.test.js +186 -0
- package/dist/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
- package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/v2/components/Accordion.js +60 -82
- package/dist/v2/components/Accordion.js.map +1 -1
- package/dist/v2/components/ActionStrip.js +40 -52
- package/dist/v2/components/ActionStrip.js.map +1 -1
- package/dist/v2/components/Banner.js +42 -41
- package/dist/v2/components/Banner.js.map +1 -1
- package/dist/v2/components/Busy.js +22 -27
- package/dist/v2/components/Busy.js.map +1 -1
- package/dist/v2/components/Button.js +39 -50
- package/dist/v2/components/Button.js.map +1 -1
- package/dist/v2/components/CategoryTag.d.ts.map +1 -1
- package/dist/v2/components/CategoryTag.js +49 -32
- package/dist/v2/components/CategoryTag.js.map +1 -1
- package/dist/v2/components/Checkbox.js +39 -45
- package/dist/v2/components/Checkbox.js.map +1 -1
- package/dist/v2/components/Chip.js +29 -42
- package/dist/v2/components/Chip.js.map +1 -1
- package/dist/v2/components/Combobox.js +122 -144
- package/dist/v2/components/Combobox.js.map +1 -1
- package/dist/v2/components/CommandPalette.js +138 -225
- package/dist/v2/components/CommandPalette.js.map +1 -1
- package/dist/v2/components/ConfirmDialog.js +46 -56
- package/dist/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/v2/components/DatePicker.js +81 -86
- package/dist/v2/components/DatePicker.js.map +1 -1
- package/dist/v2/components/DateRangePicker.js +77 -87
- package/dist/v2/components/DateRangePicker.js.map +1 -1
- package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
- package/dist/v2/components/DateTimePicker.js +121 -95
- package/dist/v2/components/DateTimePicker.js.map +1 -1
- package/dist/v2/components/Drawer.d.ts.map +1 -1
- package/dist/v2/components/Drawer.js +93 -88
- package/dist/v2/components/Drawer.js.map +1 -1
- package/dist/v2/components/Dropzone.js +150 -196
- package/dist/v2/components/Dropzone.js.map +1 -1
- package/dist/v2/components/EmptyState.js +18 -20
- package/dist/v2/components/EmptyState.js.map +1 -1
- package/dist/v2/components/FavoriteToggle.js +28 -39
- package/dist/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/v2/components/Field.d.ts +121 -5
- package/dist/v2/components/Field.d.ts.map +1 -1
- package/dist/v2/components/Field.js +221 -62
- package/dist/v2/components/Field.js.map +1 -1
- package/dist/v2/components/FieldError.js +18 -21
- package/dist/v2/components/FieldError.js.map +1 -1
- package/dist/v2/components/FieldHelp.js +40 -60
- package/dist/v2/components/FieldHelp.js.map +1 -1
- package/dist/v2/components/FileCard.js +27 -31
- package/dist/v2/components/FileCard.js.map +1 -1
- package/dist/v2/components/FilterTab.js +30 -38
- package/dist/v2/components/FilterTab.js.map +1 -1
- package/dist/v2/components/ForbiddenPage.d.ts +25 -1
- package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
- package/dist/v2/components/ForbiddenPage.js +37 -17
- package/dist/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/v2/components/FormGrid.js +53 -59
- package/dist/v2/components/FormGrid.js.map +1 -1
- package/dist/v2/components/FormikDisplay.d.ts +50 -1
- package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
- package/dist/v2/components/FormikDisplay.js +108 -33
- package/dist/v2/components/FormikDisplay.js.map +1 -1
- package/dist/v2/components/Input.d.ts +40 -0
- package/dist/v2/components/Input.d.ts.map +1 -1
- package/dist/v2/components/Input.js +81 -41
- package/dist/v2/components/Input.js.map +1 -1
- package/dist/v2/components/KPICard.js +57 -67
- package/dist/v2/components/KPICard.js.map +1 -1
- package/dist/v2/components/KPIStrip.js +16 -22
- package/dist/v2/components/KPIStrip.js.map +1 -1
- package/dist/v2/components/KV.js +25 -31
- package/dist/v2/components/KV.js.map +1 -1
- package/dist/v2/components/KVGrid.js +19 -26
- package/dist/v2/components/KVGrid.js.map +1 -1
- package/dist/v2/components/Layout.js +91 -120
- package/dist/v2/components/Layout.js.map +1 -1
- package/dist/v2/components/MobileRowCard.js +79 -91
- package/dist/v2/components/MobileRowCard.js.map +1 -1
- package/dist/v2/components/Modal.js +61 -69
- package/dist/v2/components/Modal.js.map +1 -1
- package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
- package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
- package/dist/v2/components/NetworkErrorPage.js +38 -21
- package/dist/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/v2/components/NotFoundPage.d.ts +17 -1
- package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
- package/dist/v2/components/NotFoundPage.js +37 -18
- package/dist/v2/components/NotFoundPage.js.map +1 -1
- package/dist/v2/components/NumberInput.js +88 -118
- package/dist/v2/components/NumberInput.js.map +1 -1
- package/dist/v2/components/OverflowMenu.js +38 -56
- package/dist/v2/components/OverflowMenu.js.map +1 -1
- package/dist/v2/components/PdfViewer.js +34 -45
- package/dist/v2/components/PdfViewer.js.map +1 -1
- package/dist/v2/components/ProgressBar.js +42 -49
- package/dist/v2/components/ProgressBar.js.map +1 -1
- package/dist/v2/components/Radio.js +59 -67
- package/dist/v2/components/Radio.js.map +1 -1
- package/dist/v2/components/SectionErrorBoundary.js +90 -135
- package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/v2/components/SectionHeader.js +34 -41
- package/dist/v2/components/SectionHeader.js.map +1 -1
- package/dist/v2/components/Segmented.js +69 -93
- package/dist/v2/components/Segmented.js.map +1 -1
- package/dist/v2/components/Select.d.ts +26 -2
- package/dist/v2/components/Select.d.ts.map +1 -1
- package/dist/v2/components/Select.js +120 -155
- package/dist/v2/components/Select.js.map +1 -1
- package/dist/v2/components/ServerErrorPage.d.ts +27 -1
- package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
- package/dist/v2/components/ServerErrorPage.js +37 -20
- package/dist/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/v2/components/Skeleton.js +86 -100
- package/dist/v2/components/Skeleton.js.map +1 -1
- package/dist/v2/components/SkipLink.js +9 -12
- package/dist/v2/components/SkipLink.js.map +1 -1
- package/dist/v2/components/Spinner.js +16 -25
- package/dist/v2/components/Spinner.js.map +1 -1
- package/dist/v2/components/Status.js +18 -29
- package/dist/v2/components/Status.js.map +1 -1
- package/dist/v2/components/Stepper.js +80 -82
- package/dist/v2/components/Stepper.js.map +1 -1
- package/dist/v2/components/Surface.js +34 -49
- package/dist/v2/components/Surface.js.map +1 -1
- package/dist/v2/components/Switch.js +29 -37
- package/dist/v2/components/Switch.js.map +1 -1
- package/dist/v2/components/TabPanel.d.ts +17 -0
- package/dist/v2/components/TabPanel.d.ts.map +1 -0
- package/dist/v2/components/TabPanel.js +90 -0
- package/dist/v2/components/TabPanel.js.map +1 -0
- package/dist/v2/components/Tabs.d.ts +25 -0
- package/dist/v2/components/Tabs.d.ts.map +1 -1
- package/dist/v2/components/Tabs.js +53 -29
- package/dist/v2/components/Tabs.js.map +1 -1
- package/dist/v2/components/TelInput.js +80 -115
- package/dist/v2/components/TelInput.js.map +1 -1
- package/dist/v2/components/Textarea.js +26 -35
- package/dist/v2/components/Textarea.js.map +1 -1
- package/dist/v2/components/TimePicker.js +62 -74
- package/dist/v2/components/TimePicker.js.map +1 -1
- package/dist/v2/components/Toast.js +119 -174
- package/dist/v2/components/Toast.js.map +1 -1
- package/dist/v2/components/Tooltip.js +23 -38
- package/dist/v2/components/Tooltip.js.map +1 -1
- package/dist/v2/components/_ErrorPageBody.js +15 -16
- package/dist/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/v2/components/_pickerShared.js +5 -5
- package/dist/v2/components/_pickerShared.js.map +1 -1
- package/dist/v2/components/index.d.ts +67 -1
- package/dist/v2/components/index.d.ts.map +1 -1
- package/dist/v2/components/index.js +153 -136
- package/dist/v2/components/index.js.map +1 -1
- package/dist/v2/hooks/index.d.ts +65 -0
- package/dist/v2/hooks/index.d.ts.map +1 -1
- package/dist/v2/hooks/index.js +63 -24
- package/dist/v2/hooks/index.js.map +1 -1
- package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
- package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
- package/dist/v2/hooks/useAppliedFilters.js +117 -0
- package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.js +87 -0
- package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/v2/hooks/useDelayedFlag.js +6 -20
- package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/v2/hooks/useDensity.d.ts.map +1 -1
- package/dist/v2/hooks/useDensity.js +14 -18
- package/dist/v2/hooks/useDensity.js.map +1 -1
- package/dist/v2/hooks/useFocusFirstError.js +26 -34
- package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/v2/hooks/useFocusTrap.js +20 -24
- package/dist/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
- package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.js +39 -54
- package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
- package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/v2/hooks/useResolvedDensity.js +5 -13
- package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/v2/hooks/useSortedRows.js +4 -6
- package/dist/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/v2/hooks/useTabLoading.js +7 -22
- package/dist/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/v2/index.d.ts.map +1 -1
- package/dist/v2/index.js +143 -145
- package/dist/v2/index.js.map +1 -1
- package/dist/v2/modalContext.js +2 -2
- package/dist/v2/modalContext.js.map +1 -1
- package/dist/v2/models/favorite.d.ts +8 -9
- package/dist/v2/models/favorite.d.ts.map +1 -1
- package/dist/v2/models/favorite.js.map +1 -1
- package/dist/v2/models/index.js +4 -4
- package/dist/v2/models/index.js.map +1 -1
- package/dist/v2/models/personalization.d.ts +44 -48
- package/dist/v2/models/personalization.d.ts.map +1 -1
- package/dist/v2/models/personalization.js.map +1 -1
- package/dist/v2/models/referentiel.d.ts +32 -50
- package/dist/v2/models/referentiel.d.ts.map +1 -1
- package/dist/v2/models/referentiel.js.map +1 -1
- package/dist/v2/models/savedFilter.d.ts +8 -17
- package/dist/v2/models/savedFilter.d.ts.map +1 -1
- package/dist/v2/models/savedFilter.js.map +1 -1
- package/dist/v2/patterns/ActionBar.js +152 -187
- package/dist/v2/patterns/ActionBar.js.map +1 -1
- package/dist/v2/patterns/AppMain.d.ts +109 -0
- package/dist/v2/patterns/AppMain.d.ts.map +1 -0
- package/dist/v2/patterns/AppMain.js +115 -0
- package/dist/v2/patterns/AppMain.js.map +1 -0
- package/dist/v2/patterns/BulkActionBar.js +40 -42
- package/dist/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/v2/patterns/ChartFigure.d.ts +124 -0
- package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
- package/dist/v2/patterns/ChartFigure.js +159 -0
- package/dist/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
- package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/v2/patterns/ColumnsToggle.js +60 -94
- package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
- package/dist/v2/patterns/DataGrid.js +262 -297
- package/dist/v2/patterns/DataGrid.js.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
- package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/v2/patterns/DataGridToolbar.js +103 -106
- package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/v2/patterns/DataGridVirtualized.js +179 -217
- package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/v2/patterns/DetailSplit.d.ts +87 -0
- package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
- package/dist/v2/patterns/DetailSplit.js +116 -0
- package/dist/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/v2/patterns/FavoriteColumn.d.ts +9 -9
- package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
- package/dist/v2/patterns/FavoriteColumn.js +32 -80
- package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/v2/patterns/FavoritesFilter.js +36 -44
- package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
- package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
- package/dist/v2/patterns/FilterTabBar.js +120 -0
- package/dist/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/v2/patterns/FormErrorSummary.js +20 -23
- package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/v2/patterns/FormPageShell.js +53 -50
- package/dist/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/v2/patterns/FormSection.d.ts +8 -3
- package/dist/v2/patterns/FormSection.d.ts.map +1 -1
- package/dist/v2/patterns/FormSection.js +44 -51
- package/dist/v2/patterns/FormSection.js.map +1 -1
- package/dist/v2/patterns/FormikCheckbox.d.ts +77 -0
- package/dist/v2/patterns/FormikCheckbox.d.ts.map +1 -0
- package/dist/v2/patterns/FormikCheckbox.js +138 -0
- package/dist/v2/patterns/FormikCheckbox.js.map +1 -0
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
- package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/v2/patterns/FormikCombobox.d.ts +7 -1
- package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCombobox.js +55 -69
- package/dist/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.d.ts +13 -1
- package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.js +59 -106
- package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/v2/patterns/FormikDateTimePicker.d.ts +111 -0
- package/dist/v2/patterns/FormikDateTimePicker.d.ts.map +1 -0
- package/dist/v2/patterns/FormikDateTimePicker.js +144 -0
- package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -0
- package/dist/v2/patterns/FormikErrorFocus.js +25 -26
- package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
- package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
- package/dist/v2/patterns/FormikErrorSummary.js +97 -0
- package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/v2/patterns/FormikFile.d.ts +14 -1
- package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
- package/dist/v2/patterns/FormikFile.js +99 -83
- package/dist/v2/patterns/FormikFile.js.map +1 -1
- package/dist/v2/patterns/FormikInput.d.ts +11 -1
- package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
- package/dist/v2/patterns/FormikInput.js +45 -55
- package/dist/v2/patterns/FormikInput.js.map +1 -1
- package/dist/v2/patterns/FormikRadioGroup.d.ts +80 -0
- package/dist/v2/patterns/FormikRadioGroup.d.ts.map +1 -0
- package/dist/v2/patterns/FormikRadioGroup.js +137 -0
- package/dist/v2/patterns/FormikRadioGroup.js.map +1 -0
- package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
- package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.js +54 -64
- package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/v2/patterns/FormikSelect.d.ts +9 -1
- package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
- package/dist/v2/patterns/FormikSelect.js +70 -89
- package/dist/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/v2/patterns/FormikTextarea.d.ts +9 -1
- package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
- package/dist/v2/patterns/FormikTextarea.js +35 -48
- package/dist/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +14 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.js +71 -74
- package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
- package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/v2/patterns/PageContent.js +17 -20
- package/dist/v2/patterns/PageContent.js.map +1 -1
- package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
- package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
- package/dist/v2/patterns/PreviewDrawer.js +159 -0
- package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/v2/patterns/ReferentielField.d.ts +86 -2
- package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/ReferentielField.js +347 -327
- package/dist/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/v2/patterns/RowFavoriteToggle.d.ts +98 -0
- package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -0
- package/dist/v2/patterns/RowFavoriteToggle.js +135 -0
- package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -0
- package/dist/v2/patterns/SaveFilterDialog.js +50 -77
- package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
- package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/v2/patterns/SkeletonPageShell.js +122 -143
- package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/v2/patterns/SortableHeader.js +35 -57
- package/dist/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/v2/patterns/Tour.js +121 -142
- package/dist/v2/patterns/Tour.js.map +1 -1
- package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
- package/dist/v2/patterns/_dataGridShared.js +131 -147
- package/dist/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/v2/patterns/_pickerSerialisation.d.ts +44 -0
- package/dist/v2/patterns/_pickerSerialisation.d.ts.map +1 -0
- package/dist/v2/patterns/_pickerSerialisation.js +80 -0
- package/dist/v2/patterns/_pickerSerialisation.js.map +1 -0
- package/dist/v2/patterns/_sort.js +17 -33
- package/dist/v2/patterns/_sort.js.map +1 -1
- package/dist/v2/patterns/_useColumnReorder.js +124 -163
- package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/v2/patterns/_useColumnResize.js +80 -99
- package/dist/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/v2/patterns/filterCriteria.d.ts +78 -0
- package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
- package/dist/v2/patterns/filterCriteria.js +110 -0
- package/dist/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/v2/patterns/index.d.ts +247 -0
- package/dist/v2/patterns/index.d.ts.map +1 -1
- package/dist/v2/patterns/index.js +182 -70
- package/dist/v2/patterns/index.js.map +1 -1
- package/dist/v2/patterns/rowActions.d.ts +150 -0
- package/dist/v2/patterns/rowActions.d.ts.map +1 -0
- package/dist/v2/patterns/rowActions.js +232 -0
- package/dist/v2/patterns/rowActions.js.map +1 -0
- package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
- package/dist/v2/personalization/PersonalizationProvider.js +57 -53
- package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
- package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/index.js +5 -5
- package/dist/v2/personalization/adapters/index.js.map +1 -1
- package/dist/v2/personalization/capabilities/favorites.js +39 -62
- package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
- package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/v2/personalization/capabilities/gridPreferences.d.ts +100 -0
- package/dist/v2/personalization/capabilities/gridPreferences.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/gridPreferences.js +210 -0
- package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -0
- package/dist/v2/personalization/capabilities/index.d.ts +6 -0
- package/dist/v2/personalization/capabilities/index.d.ts.map +1 -1
- package/dist/v2/personalization/capabilities/index.js +23 -10
- package/dist/v2/personalization/capabilities/index.js.map +1 -1
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
- package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.js +81 -182
- package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/v2/personalization/index.d.ts +34 -0
- package/dist/v2/personalization/index.d.ts.map +1 -1
- package/dist/v2/personalization/index.js +41 -21
- package/dist/v2/personalization/index.js.map +1 -1
- package/dist/v2/personalization/personalizationContext.js +10 -12
- package/dist/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/v2/personalization/schema.js +8 -9
- package/dist/v2/personalization/schema.js.map +1 -1
- package/dist/v2/referentiel/ReferentielProvider.js +31 -45
- package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/v2/referentiel/index.js +11 -13
- package/dist/v2/referentiel/index.js.map +1 -1
- package/dist/v2/referentiel/types.d.ts +105 -0
- package/dist/v2/referentiel/types.d.ts.map +1 -0
- package/dist/v2/referentiel/types.js +6 -0
- package/dist/v2/referentiel/types.js.map +1 -0
- package/dist/v2/referentiel/useReferentielClient.js +13 -16
- package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
- package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.js +63 -120
- package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
- package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.js +40 -95
- package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/v2/theme/_brand.js +12 -26
- package/dist/v2/theme/_brand.js.map +1 -1
- package/dist/v2/theme/_brandSecondary.js +12 -26
- package/dist/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/v2/theme/createPortnetTheme.js +41 -49
- package/dist/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/v2/theme/cssVariables.d.ts +3 -3
- package/dist/v2/theme/cssVariables.d.ts.map +1 -1
- package/dist/v2/theme/cssVariables.js +65 -70
- package/dist/v2/theme/cssVariables.js.map +1 -1
- package/dist/v2/theme/index.js +10 -10
- package/dist/v2/theme/index.js.map +1 -1
- package/dist/v2/tokens/breakpoints.js +16 -16
- package/dist/v2/tokens/breakpoints.js.map +1 -1
- package/dist/v2/tokens/chart.d.ts +103 -0
- package/dist/v2/tokens/chart.d.ts.map +1 -0
- package/dist/v2/tokens/chart.js +270 -0
- package/dist/v2/tokens/chart.js.map +1 -0
- package/dist/v2/tokens/colors.js +24 -24
- package/dist/v2/tokens/colors.js.map +1 -1
- package/dist/v2/tokens/density.d.ts +104 -0
- package/dist/v2/tokens/density.d.ts.map +1 -1
- package/dist/v2/tokens/density.js +67 -12
- package/dist/v2/tokens/density.js.map +1 -1
- package/dist/v2/tokens/index.d.ts +50 -1
- package/dist/v2/tokens/index.d.ts.map +1 -1
- package/dist/v2/tokens/index.js +116 -68
- package/dist/v2/tokens/index.js.map +1 -1
- package/dist/v2/tokens/motion.js +16 -22
- package/dist/v2/tokens/motion.js.map +1 -1
- package/dist/v2/tokens/radius.js +3 -3
- package/dist/v2/tokens/radius.js.map +1 -1
- package/dist/v2/tokens/shadows.js +8 -8
- package/dist/v2/tokens/shadows.js.map +1 -1
- package/dist/v2/tokens/spacing.js +4 -4
- package/dist/v2/tokens/spacing.js.map +1 -1
- package/dist/v2/tokens/state.js +3 -3
- package/dist/v2/tokens/state.js.map +1 -1
- package/dist/v2/tokens/statusPalette.js +21 -23
- package/dist/v2/tokens/statusPalette.js.map +1 -1
- package/dist/v2/tokens/tokens.json +6 -1
- package/dist/v2/tokens/typography.js +15 -15
- package/dist/v2/tokens/typography.js.map +1 -1
- package/dist/v2/tokens/zIndex.js +3 -3
- package/dist/v2/tokens/zIndex.js.map +1 -1
- package/dist/v2/types/datagrid.d.ts +9 -1
- package/dist/v2/types/datagrid.d.ts.map +1 -1
- package/dist/v2/types/datagrid.js.map +1 -1
- package/dist/v2/types/index.js +2 -2
- package/dist/v2/types/index.js.map +1 -1
- package/dist/v2/utils/apiError.js +16 -37
- package/dist/v2/utils/apiError.js.map +1 -1
- package/dist/v2/utils/contrast.js +31 -32
- package/dist/v2/utils/contrast.js.map +1 -1
- package/dist/v2/utils/cx.js +7 -27
- package/dist/v2/utils/cx.js.map +1 -1
- package/dist/v2/utils/fileDownload.js +25 -28
- package/dist/v2/utils/fileDownload.js.map +1 -1
- package/dist/v2/utils/fileValidation.d.ts +116 -0
- package/dist/v2/utils/fileValidation.d.ts.map +1 -0
- package/dist/v2/utils/fileValidation.js +220 -0
- package/dist/v2/utils/fileValidation.js.map +1 -0
- package/dist/v2/utils/fmtDate.d.ts +103 -0
- package/dist/v2/utils/fmtDate.d.ts.map +1 -0
- package/dist/v2/utils/fmtDate.js +119 -0
- package/dist/v2/utils/fmtDate.js.map +1 -0
- package/dist/v2/utils/fmtMoney.d.ts +3 -3
- package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
- package/dist/v2/utils/fmtMoney.js +9 -11
- package/dist/v2/utils/fmtMoney.js.map +1 -1
- package/dist/v2/utils/formikErrors.d.ts +67 -0
- package/dist/v2/utils/formikErrors.d.ts.map +1 -0
- package/dist/v2/utils/formikErrors.js +85 -0
- package/dist/v2/utils/formikErrors.js.map +1 -0
- package/dist/v2/utils/index.d.ts +5 -0
- package/dist/v2/utils/index.d.ts.map +1 -1
- package/dist/v2/utils/index.js +67 -18
- package/dist/v2/utils/index.js.map +1 -1
- package/dist/v2/utils/mergeLabels.js +9 -14
- package/dist/v2/utils/mergeLabels.js.map +1 -1
- package/dist/v2/utils/networkStatus.js +14 -14
- package/dist/v2/utils/networkStatus.js.map +1 -1
- package/package.json +26 -9
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
4
|
+
import { Formik, Form } from "formik";
|
|
5
|
+
import FormikRadioGroup from "../patterns/FormikRadioGroup";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* FormikRadioGroup — contract tests (gap G-C).
|
|
9
|
+
*
|
|
10
|
+
* WHY THIS FILE EXISTS
|
|
11
|
+
* --------------------
|
|
12
|
+
* §10.3 R-G.6 MUST — and every case below is a defect this bridge exists to
|
|
13
|
+
* stop, none of which is visible on screen:
|
|
14
|
+
*
|
|
15
|
+
* 1. THE STORED VALUE KEEPS ITS DECLARED TYPE. A native radio input only ever
|
|
16
|
+
* reports a string. A host with numeric options would silently start
|
|
17
|
+
* sending "1" where its payload declares 1 — accepted or rejected by the
|
|
18
|
+
* API days later, with nothing in the UI to show for it. This is the single
|
|
19
|
+
* most important assertion in the file.
|
|
20
|
+
*
|
|
21
|
+
* 2. THE SELECTION MATCHES ACROSS TYPES. Hosts seed these fields with booleans
|
|
22
|
+
* (`false`) or numbers while declaring string options ("false"). If the
|
|
23
|
+
* comparison were strict, the group would render EMPTY on a form that
|
|
24
|
+
* already holds an answer — and the user would re-answer a question that
|
|
25
|
+
* was already stored, or worse, leave it blank.
|
|
26
|
+
*
|
|
27
|
+
* 3. TOUCHED ON PICK, NOT ON BLUR. A radio group's first interaction IS the
|
|
28
|
+
* answer; there is no blur-before-change. Waiting for a blur keeps a
|
|
29
|
+
* required-group message hidden while the user clicks around.
|
|
30
|
+
*
|
|
31
|
+
* 4. NO INVALID ATTRIBUTE REACHES THE DOM. `Field` clones its child with
|
|
32
|
+
* `error` / `fullWidth`, which are not valid on `role="radiogroup"`.
|
|
33
|
+
* `RadioGroup` strips them — assert it, because the day it stops, React
|
|
34
|
+
* warns and the rendering stays pixel-identical.
|
|
35
|
+
*
|
|
36
|
+
* NOT COVERED — deliberately: the asterisk colour and the error panel are CSS
|
|
37
|
+
* variables, which jsdom does not resolve. Those belong to the story.
|
|
38
|
+
*/
|
|
39
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
40
|
+
const OPTIONS_TEXTE = [{
|
|
41
|
+
value: "true",
|
|
42
|
+
label: "Oui"
|
|
43
|
+
}, {
|
|
44
|
+
value: "false",
|
|
45
|
+
label: "Non"
|
|
46
|
+
}];
|
|
47
|
+
const OPTIONS_NOMBRE = [{
|
|
48
|
+
value: 1,
|
|
49
|
+
label: "Importation"
|
|
50
|
+
}, {
|
|
51
|
+
value: 2,
|
|
52
|
+
label: "Exportation"
|
|
53
|
+
}];
|
|
54
|
+
function Hote({
|
|
55
|
+
initialValue,
|
|
56
|
+
options = OPTIONS_TEXTE,
|
|
57
|
+
required,
|
|
58
|
+
hint,
|
|
59
|
+
onValues
|
|
60
|
+
}) {
|
|
61
|
+
return /*#__PURE__*/_jsx(Formik, {
|
|
62
|
+
initialValues: {
|
|
63
|
+
reponse: initialValue
|
|
64
|
+
},
|
|
65
|
+
validate: values => required && (values.reponse === null || values.reponse === undefined || values.reponse === "") ? {
|
|
66
|
+
reponse: "Choisissez une réponse."
|
|
67
|
+
} : {},
|
|
68
|
+
onSubmit: () => undefined,
|
|
69
|
+
children: ({
|
|
70
|
+
values
|
|
71
|
+
}) => {
|
|
72
|
+
onValues?.(values.reponse);
|
|
73
|
+
return /*#__PURE__*/_jsx(Form, {
|
|
74
|
+
children: /*#__PURE__*/_jsx(FormikRadioGroup, {
|
|
75
|
+
name: "reponse",
|
|
76
|
+
label: "Mod\xE8le d\xE9j\xE0 approuv\xE9",
|
|
77
|
+
options: options,
|
|
78
|
+
...(required !== undefined ? {
|
|
79
|
+
required
|
|
80
|
+
} : {}),
|
|
81
|
+
...(hint !== undefined ? {
|
|
82
|
+
hint
|
|
83
|
+
} : {})
|
|
84
|
+
})
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
describe("FormikRadioGroup — the stored value keeps its declared type", () => {
|
|
90
|
+
test("numeric options stay NUMBERS, not the DOM's strings", async () => {
|
|
91
|
+
const vues = [];
|
|
92
|
+
render(/*#__PURE__*/_jsx(Hote, {
|
|
93
|
+
initialValue: null,
|
|
94
|
+
options: OPTIONS_NOMBRE,
|
|
95
|
+
onValues: v => vues.push(v)
|
|
96
|
+
}));
|
|
97
|
+
await userEvent.click(screen.getByRole("radio", {
|
|
98
|
+
name: "Exportation"
|
|
99
|
+
}));
|
|
100
|
+
expect(vues.at(-1)).toBe(2);
|
|
101
|
+
expect(typeof vues.at(-1)).toBe("number");
|
|
102
|
+
});
|
|
103
|
+
test("string options stay strings — « false » is a value, not a boolean", async () => {
|
|
104
|
+
/* refonte-frontend's case: the payload carries "true" / "false" as text.
|
|
105
|
+
* Coercing to a boolean here would change what the backend receives. */
|
|
106
|
+
const vues = [];
|
|
107
|
+
render(/*#__PURE__*/_jsx(Hote, {
|
|
108
|
+
initialValue: null,
|
|
109
|
+
onValues: v => vues.push(v)
|
|
110
|
+
}));
|
|
111
|
+
await userEvent.click(screen.getByRole("radio", {
|
|
112
|
+
name: "Non"
|
|
113
|
+
}));
|
|
114
|
+
expect(vues.at(-1)).toBe("false");
|
|
115
|
+
expect(typeof vues.at(-1)).toBe("string");
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe("FormikRadioGroup — the selection matches across types", () => {
|
|
119
|
+
test("a boolean `false` in state selects the option declared « false »", () => {
|
|
120
|
+
/* Hosts seed with booleans while declaring string options. A strict
|
|
121
|
+
* comparison would render the group empty on a form that already holds an
|
|
122
|
+
* answer. */
|
|
123
|
+
render(/*#__PURE__*/_jsx(Hote, {
|
|
124
|
+
initialValue: false
|
|
125
|
+
}));
|
|
126
|
+
expect(screen.getByRole("radio", {
|
|
127
|
+
name: "Non"
|
|
128
|
+
})).toBeChecked();
|
|
129
|
+
expect(screen.getByRole("radio", {
|
|
130
|
+
name: "Oui"
|
|
131
|
+
})).not.toBeChecked();
|
|
132
|
+
});
|
|
133
|
+
test("a number in state selects its numeric option", () => {
|
|
134
|
+
render(/*#__PURE__*/_jsx(Hote, {
|
|
135
|
+
initialValue: 1,
|
|
136
|
+
options: OPTIONS_NOMBRE
|
|
137
|
+
}));
|
|
138
|
+
expect(screen.getByRole("radio", {
|
|
139
|
+
name: "Importation"
|
|
140
|
+
})).toBeChecked();
|
|
141
|
+
});
|
|
142
|
+
test("`null` selects nothing, and does not warn about an uncontrolled group", () => {
|
|
143
|
+
const avertissements = [];
|
|
144
|
+
const spy = jest.spyOn(console, "error").mockImplementation((...args) => {
|
|
145
|
+
avertissements.push(args);
|
|
146
|
+
});
|
|
147
|
+
render(/*#__PURE__*/_jsx(Hote, {
|
|
148
|
+
initialValue: null
|
|
149
|
+
}));
|
|
150
|
+
expect(screen.getByRole("radio", {
|
|
151
|
+
name: "Oui"
|
|
152
|
+
})).not.toBeChecked();
|
|
153
|
+
expect(screen.getByRole("radio", {
|
|
154
|
+
name: "Non"
|
|
155
|
+
})).not.toBeChecked();
|
|
156
|
+
expect(avertissements.some(a => String(a[0]).includes("uncontrolled"))).toBe(false);
|
|
157
|
+
spy.mockRestore();
|
|
158
|
+
});
|
|
159
|
+
test("displaying does not rewrite the stored value", async () => {
|
|
160
|
+
/* The string comparison is for MATCHING only. A form opened and closed
|
|
161
|
+
* without an answer must still send exactly what it was seeded with. */
|
|
162
|
+
const vues = [];
|
|
163
|
+
render(/*#__PURE__*/_jsx(Hote, {
|
|
164
|
+
initialValue: false,
|
|
165
|
+
onValues: v => vues.push(v)
|
|
166
|
+
}));
|
|
167
|
+
expect(screen.getByRole("radio", {
|
|
168
|
+
name: "Non"
|
|
169
|
+
})).toBeChecked();
|
|
170
|
+
expect(vues.every(v => v === false)).toBe(true);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
describe("FormikRadioGroup — the error is reachable without a blur", () => {
|
|
174
|
+
test("picking marks the field touched, so the message appears", async () => {
|
|
175
|
+
/* A validator that ALWAYS rejects : the message can then only be hidden by
|
|
176
|
+
* the field being untouched. Before the click it must be absent, after it
|
|
177
|
+
* present — that is the whole contract. */
|
|
178
|
+
render(/*#__PURE__*/_jsx(Formik, {
|
|
179
|
+
initialValues: {
|
|
180
|
+
reponse: null
|
|
181
|
+
},
|
|
182
|
+
validate: () => ({
|
|
183
|
+
reponse: "Choisissez une réponse."
|
|
184
|
+
}),
|
|
185
|
+
onSubmit: () => undefined,
|
|
186
|
+
children: /*#__PURE__*/_jsx(Form, {
|
|
187
|
+
children: /*#__PURE__*/_jsx(FormikRadioGroup, {
|
|
188
|
+
name: "reponse",
|
|
189
|
+
label: "Mod\xE8le d\xE9j\xE0 approuv\xE9",
|
|
190
|
+
options: OPTIONS_TEXTE,
|
|
191
|
+
required: true
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
}));
|
|
195
|
+
expect(screen.queryByRole("alert")).not.toBeInTheDocument();
|
|
196
|
+
await userEvent.click(screen.getByRole("radio", {
|
|
197
|
+
name: "Oui"
|
|
198
|
+
}));
|
|
199
|
+
expect(screen.getByRole("alert")).toHaveTextContent("Choisissez une réponse.");
|
|
200
|
+
});
|
|
201
|
+
test("the message becomes the group's accessible description", () => {
|
|
202
|
+
render(/*#__PURE__*/_jsx(Formik, {
|
|
203
|
+
initialValues: {
|
|
204
|
+
reponse: ""
|
|
205
|
+
},
|
|
206
|
+
initialTouched: {
|
|
207
|
+
reponse: true
|
|
208
|
+
},
|
|
209
|
+
initialErrors: {
|
|
210
|
+
reponse: "Choisissez une réponse."
|
|
211
|
+
},
|
|
212
|
+
onSubmit: () => undefined,
|
|
213
|
+
children: /*#__PURE__*/_jsx(Form, {
|
|
214
|
+
children: /*#__PURE__*/_jsx(FormikRadioGroup, {
|
|
215
|
+
name: "reponse",
|
|
216
|
+
label: "Mod\xE8le d\xE9j\xE0 approuv\xE9",
|
|
217
|
+
options: OPTIONS_TEXTE,
|
|
218
|
+
required: true
|
|
219
|
+
})
|
|
220
|
+
})
|
|
221
|
+
}));
|
|
222
|
+
expect(screen.getByRole("radiogroup")).toHaveAccessibleDescription("Choisissez une réponse.");
|
|
223
|
+
});
|
|
224
|
+
test("the hint shows while valid and is suppressed by the error", () => {
|
|
225
|
+
const {
|
|
226
|
+
unmount
|
|
227
|
+
} = render(/*#__PURE__*/_jsx(Hote, {
|
|
228
|
+
initialValue: null,
|
|
229
|
+
hint: "Une seule r\xE9ponse possible"
|
|
230
|
+
}));
|
|
231
|
+
expect(screen.getByText("Une seule réponse possible")).toBeInTheDocument();
|
|
232
|
+
unmount();
|
|
233
|
+
render(/*#__PURE__*/_jsx(Formik, {
|
|
234
|
+
initialValues: {
|
|
235
|
+
reponse: ""
|
|
236
|
+
},
|
|
237
|
+
initialTouched: {
|
|
238
|
+
reponse: true
|
|
239
|
+
},
|
|
240
|
+
initialErrors: {
|
|
241
|
+
reponse: "Choisissez une réponse."
|
|
242
|
+
},
|
|
243
|
+
onSubmit: () => undefined,
|
|
244
|
+
children: /*#__PURE__*/_jsx(Form, {
|
|
245
|
+
children: /*#__PURE__*/_jsx(FormikRadioGroup, {
|
|
246
|
+
name: "reponse",
|
|
247
|
+
label: "Mod\xE8le d\xE9j\xE0 approuv\xE9",
|
|
248
|
+
options: OPTIONS_TEXTE,
|
|
249
|
+
hint: "Une seule r\xE9ponse possible"
|
|
250
|
+
})
|
|
251
|
+
})
|
|
252
|
+
}));
|
|
253
|
+
expect(screen.queryByText("Une seule réponse possible")).not.toBeInTheDocument();
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
describe("FormikRadioGroup — ARIA and DOM hygiene", () => {
|
|
257
|
+
test("the group is named by the field label", () => {
|
|
258
|
+
render(/*#__PURE__*/_jsx(Hote, {
|
|
259
|
+
initialValue: null
|
|
260
|
+
}));
|
|
261
|
+
expect(screen.getByRole("radiogroup", {
|
|
262
|
+
name: /Modèle déjà approuvé/
|
|
263
|
+
})).toBeInTheDocument();
|
|
264
|
+
});
|
|
265
|
+
test("`required` reaches the group as aria-required", () => {
|
|
266
|
+
/* Unlike the single-checkbox case, aria-required IS valid on
|
|
267
|
+
* role="radiogroup" and RadioGroup forwards Field's injection. */
|
|
268
|
+
render(/*#__PURE__*/_jsx(Hote, {
|
|
269
|
+
initialValue: null,
|
|
270
|
+
required: true
|
|
271
|
+
}));
|
|
272
|
+
expect(screen.getByRole("radiogroup")).toHaveAttribute("aria-required", "true");
|
|
273
|
+
});
|
|
274
|
+
test("no `error` or `fullWidth` attribute leaks onto the group", () => {
|
|
275
|
+
render(/*#__PURE__*/_jsx(Formik, {
|
|
276
|
+
initialValues: {
|
|
277
|
+
reponse: ""
|
|
278
|
+
},
|
|
279
|
+
initialTouched: {
|
|
280
|
+
reponse: true
|
|
281
|
+
},
|
|
282
|
+
initialErrors: {
|
|
283
|
+
reponse: "Choisissez une réponse."
|
|
284
|
+
},
|
|
285
|
+
onSubmit: () => undefined,
|
|
286
|
+
children: /*#__PURE__*/_jsx(Form, {
|
|
287
|
+
children: /*#__PURE__*/_jsx(FormikRadioGroup, {
|
|
288
|
+
name: "reponse",
|
|
289
|
+
label: "Mod\xE8le d\xE9j\xE0 approuv\xE9",
|
|
290
|
+
options: OPTIONS_TEXTE
|
|
291
|
+
})
|
|
292
|
+
})
|
|
293
|
+
}));
|
|
294
|
+
const groupe = screen.getByRole("radiogroup");
|
|
295
|
+
expect(groupe).not.toHaveAttribute("error");
|
|
296
|
+
expect(groupe).not.toHaveAttribute("fullWidth");
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
//# sourceMappingURL=FormikRadioGroup.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormikRadioGroup.test.js","names":["render","screen","userEvent","Formik","Form","FormikRadioGroup","jsx","_jsx","OPTIONS_TEXTE","value","label","OPTIONS_NOMBRE","Hote","initialValue","options","required","hint","onValues","initialValues","reponse","validate","values","undefined","onSubmit","children","name","describe","test","vues","v","push","click","getByRole","expect","at","toBe","toBeChecked","not","avertissements","spy","jest","spyOn","console","mockImplementation","args","some","a","String","includes","mockRestore","every","queryByRole","toBeInTheDocument","toHaveTextContent","initialTouched","initialErrors","toHaveAccessibleDescription","unmount","getByText","queryByText","toHaveAttribute","groupe"],"sources":["../../../../src/lib/v2/__tests__/FormikRadioGroup.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport userEvent from \"@testing-library/user-event\";\r\nimport { Formik, Form } from \"formik\";\r\nimport FormikRadioGroup from \"../patterns/FormikRadioGroup\";\r\n\r\n/**\r\n * FormikRadioGroup — contract tests (gap G-C).\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST — and every case below is a defect this bridge exists to\r\n * stop, none of which is visible on screen:\r\n *\r\n * 1. THE STORED VALUE KEEPS ITS DECLARED TYPE. A native radio input only ever\r\n * reports a string. A host with numeric options would silently start\r\n * sending \"1\" where its payload declares 1 — accepted or rejected by the\r\n * API days later, with nothing in the UI to show for it. This is the single\r\n * most important assertion in the file.\r\n *\r\n * 2. THE SELECTION MATCHES ACROSS TYPES. Hosts seed these fields with booleans\r\n * (`false`) or numbers while declaring string options (\"false\"). If the\r\n * comparison were strict, the group would render EMPTY on a form that\r\n * already holds an answer — and the user would re-answer a question that\r\n * was already stored, or worse, leave it blank.\r\n *\r\n * 3. TOUCHED ON PICK, NOT ON BLUR. A radio group's first interaction IS the\r\n * answer; there is no blur-before-change. Waiting for a blur keeps a\r\n * required-group message hidden while the user clicks around.\r\n *\r\n * 4. NO INVALID ATTRIBUTE REACHES THE DOM. `Field` clones its child with\r\n * `error` / `fullWidth`, which are not valid on `role=\"radiogroup\"`.\r\n * `RadioGroup` strips them — assert it, because the day it stops, React\r\n * warns and the rendering stays pixel-identical.\r\n *\r\n * NOT COVERED — deliberately: the asterisk colour and the error panel are CSS\r\n * variables, which jsdom does not resolve. Those belong to the story.\r\n */\r\n\r\nconst OPTIONS_TEXTE = [\r\n { value: \"true\", label: \"Oui\" },\r\n { value: \"false\", label: \"Non\" },\r\n];\r\n\r\nconst OPTIONS_NOMBRE = [\r\n { value: 1, label: \"Importation\" },\r\n { value: 2, label: \"Exportation\" },\r\n];\r\n\r\nfunction Hote({\r\n initialValue,\r\n options = OPTIONS_TEXTE,\r\n required,\r\n hint,\r\n onValues,\r\n}: {\r\n initialValue: unknown;\r\n options?: { value: string | number; label: string }[];\r\n required?: boolean;\r\n hint?: string;\r\n onValues?: (valeur: unknown) => void;\r\n}) {\r\n return (\r\n <Formik\r\n initialValues={{ reponse: initialValue }}\r\n validate={(values) =>\r\n required &&\r\n (values.reponse === null ||\r\n values.reponse === undefined ||\r\n values.reponse === \"\")\r\n ? { reponse: \"Choisissez une réponse.\" }\r\n : {}\r\n }\r\n onSubmit={() => undefined}\r\n >\r\n {({ values }) => {\r\n onValues?.(values.reponse);\r\n return (\r\n <Form>\r\n <FormikRadioGroup\r\n name=\"reponse\"\r\n label=\"Modèle déjà approuvé\"\r\n options={options}\r\n {...(required !== undefined ? { required } : {})}\r\n {...(hint !== undefined ? { hint } : {})}\r\n />\r\n </Form>\r\n );\r\n }}\r\n </Formik>\r\n );\r\n}\r\n\r\ndescribe(\"FormikRadioGroup — the stored value keeps its declared type\", () => {\r\n test(\"numeric options stay NUMBERS, not the DOM's strings\", async () => {\r\n const vues: unknown[] = [];\r\n render(\r\n <Hote\r\n initialValue={null}\r\n options={OPTIONS_NOMBRE}\r\n onValues={(v) => vues.push(v)}\r\n />\r\n );\r\n\r\n await userEvent.click(screen.getByRole(\"radio\", { name: \"Exportation\" }));\r\n\r\n expect(vues.at(-1)).toBe(2);\r\n expect(typeof vues.at(-1)).toBe(\"number\");\r\n });\r\n\r\n test(\"string options stay strings — « false » is a value, not a boolean\", async () => {\r\n /* refonte-frontend's case: the payload carries \"true\" / \"false\" as text.\r\n * Coercing to a boolean here would change what the backend receives. */\r\n const vues: unknown[] = [];\r\n render(<Hote initialValue={null} onValues={(v) => vues.push(v)} />);\r\n\r\n await userEvent.click(screen.getByRole(\"radio\", { name: \"Non\" }));\r\n\r\n expect(vues.at(-1)).toBe(\"false\");\r\n expect(typeof vues.at(-1)).toBe(\"string\");\r\n });\r\n});\r\n\r\ndescribe(\"FormikRadioGroup — the selection matches across types\", () => {\r\n test(\"a boolean `false` in state selects the option declared « false »\", () => {\r\n /* Hosts seed with booleans while declaring string options. A strict\r\n * comparison would render the group empty on a form that already holds an\r\n * answer. */\r\n render(<Hote initialValue={false} />);\r\n\r\n expect(screen.getByRole(\"radio\", { name: \"Non\" })).toBeChecked();\r\n expect(screen.getByRole(\"radio\", { name: \"Oui\" })).not.toBeChecked();\r\n });\r\n\r\n test(\"a number in state selects its numeric option\", () => {\r\n render(<Hote initialValue={1} options={OPTIONS_NOMBRE} />);\r\n\r\n expect(screen.getByRole(\"radio\", { name: \"Importation\" })).toBeChecked();\r\n });\r\n\r\n test(\"`null` selects nothing, and does not warn about an uncontrolled group\", () => {\r\n const avertissements: unknown[][] = [];\r\n const spy = jest\r\n .spyOn(console, \"error\")\r\n .mockImplementation((...args: unknown[]) => {\r\n avertissements.push(args);\r\n });\r\n\r\n render(<Hote initialValue={null} />);\r\n\r\n expect(screen.getByRole(\"radio\", { name: \"Oui\" })).not.toBeChecked();\r\n expect(screen.getByRole(\"radio\", { name: \"Non\" })).not.toBeChecked();\r\n expect(\r\n avertissements.some((a) => String(a[0]).includes(\"uncontrolled\"))\r\n ).toBe(false);\r\n\r\n spy.mockRestore();\r\n });\r\n\r\n test(\"displaying does not rewrite the stored value\", async () => {\r\n /* The string comparison is for MATCHING only. A form opened and closed\r\n * without an answer must still send exactly what it was seeded with. */\r\n const vues: unknown[] = [];\r\n render(<Hote initialValue={false} onValues={(v) => vues.push(v)} />);\r\n\r\n expect(screen.getByRole(\"radio\", { name: \"Non\" })).toBeChecked();\r\n expect(vues.every((v) => v === false)).toBe(true);\r\n });\r\n});\r\n\r\ndescribe(\"FormikRadioGroup — the error is reachable without a blur\", () => {\r\n test(\"picking marks the field touched, so the message appears\", async () => {\r\n /* A validator that ALWAYS rejects : the message can then only be hidden by\r\n * the field being untouched. Before the click it must be absent, after it\r\n * present — that is the whole contract. */\r\n render(\r\n <Formik\r\n initialValues={{ reponse: null }}\r\n validate={() => ({ reponse: \"Choisissez une réponse.\" })}\r\n onSubmit={() => undefined}\r\n >\r\n <Form>\r\n <FormikRadioGroup\r\n name=\"reponse\"\r\n label=\"Modèle déjà approuvé\"\r\n options={OPTIONS_TEXTE}\r\n required\r\n />\r\n </Form>\r\n </Formik>\r\n );\r\n\r\n expect(screen.queryByRole(\"alert\")).not.toBeInTheDocument();\r\n\r\n await userEvent.click(screen.getByRole(\"radio\", { name: \"Oui\" }));\r\n\r\n expect(screen.getByRole(\"alert\")).toHaveTextContent(\r\n \"Choisissez une réponse.\"\r\n );\r\n });\r\n\r\n test(\"the message becomes the group's accessible description\", () => {\r\n render(\r\n <Formik\r\n initialValues={{ reponse: \"\" }}\r\n initialTouched={{ reponse: true }}\r\n initialErrors={{ reponse: \"Choisissez une réponse.\" }}\r\n onSubmit={() => undefined}\r\n >\r\n <Form>\r\n <FormikRadioGroup\r\n name=\"reponse\"\r\n label=\"Modèle déjà approuvé\"\r\n options={OPTIONS_TEXTE}\r\n required\r\n />\r\n </Form>\r\n </Formik>\r\n );\r\n\r\n expect(screen.getByRole(\"radiogroup\")).toHaveAccessibleDescription(\r\n \"Choisissez une réponse.\"\r\n );\r\n });\r\n\r\n test(\"the hint shows while valid and is suppressed by the error\", () => {\r\n const { unmount } = render(\r\n <Hote initialValue={null} hint=\"Une seule réponse possible\" />\r\n );\r\n expect(screen.getByText(\"Une seule réponse possible\")).toBeInTheDocument();\r\n unmount();\r\n\r\n render(\r\n <Formik\r\n initialValues={{ reponse: \"\" }}\r\n initialTouched={{ reponse: true }}\r\n initialErrors={{ reponse: \"Choisissez une réponse.\" }}\r\n onSubmit={() => undefined}\r\n >\r\n <Form>\r\n <FormikRadioGroup\r\n name=\"reponse\"\r\n label=\"Modèle déjà approuvé\"\r\n options={OPTIONS_TEXTE}\r\n hint=\"Une seule réponse possible\"\r\n />\r\n </Form>\r\n </Formik>\r\n );\r\n expect(\r\n screen.queryByText(\"Une seule réponse possible\")\r\n ).not.toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FormikRadioGroup — ARIA and DOM hygiene\", () => {\r\n test(\"the group is named by the field label\", () => {\r\n render(<Hote initialValue={null} />);\r\n expect(\r\n screen.getByRole(\"radiogroup\", { name: /Modèle déjà approuvé/ })\r\n ).toBeInTheDocument();\r\n });\r\n\r\n test(\"`required` reaches the group as aria-required\", () => {\r\n /* Unlike the single-checkbox case, aria-required IS valid on\r\n * role=\"radiogroup\" and RadioGroup forwards Field's injection. */\r\n render(<Hote initialValue={null} required />);\r\n expect(screen.getByRole(\"radiogroup\")).toHaveAttribute(\r\n \"aria-required\",\r\n \"true\"\r\n );\r\n });\r\n\r\n test(\"no `error` or `fullWidth` attribute leaks onto the group\", () => {\r\n render(\r\n <Formik\r\n initialValues={{ reponse: \"\" }}\r\n initialTouched={{ reponse: true }}\r\n initialErrors={{ reponse: \"Choisissez une réponse.\" }}\r\n onSubmit={() => undefined}\r\n >\r\n <Form>\r\n <FormikRadioGroup\r\n name=\"reponse\"\r\n label=\"Modèle déjà approuvé\"\r\n options={OPTIONS_TEXTE}\r\n />\r\n </Form>\r\n </Formik>\r\n );\r\n\r\n const groupe = screen.getByRole(\"radiogroup\");\r\n expect(groupe).not.toHaveAttribute(\"error\");\r\n expect(groupe).not.toHaveAttribute(\"fullWidth\");\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import "@testing-library/jest-dom";
|
|
2
|
-
import * as React from "react";
|
|
3
2
|
import { render, screen, fireEvent } from "@testing-library/react";
|
|
4
3
|
import MobileRowCard from "../components/MobileRowCard";
|
|
5
4
|
|
|
@@ -29,8 +28,8 @@ import MobileRowCard from "../components/MobileRowCard";
|
|
|
29
28
|
* open for all three props.
|
|
30
29
|
*/
|
|
31
30
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
32
|
-
describe("MobileRowCard — slot rendering",
|
|
33
|
-
test("renders title, subtitle and meta, omitting lines with no content",
|
|
31
|
+
describe("MobileRowCard — slot rendering", () => {
|
|
32
|
+
test("renders title, subtitle and meta, omitting lines with no content", () => {
|
|
34
33
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
35
34
|
title: "2025-IM-0042",
|
|
36
35
|
subtitle: "SOFRANE SA",
|
|
@@ -41,7 +40,7 @@ describe("MobileRowCard — slot rendering", function () {
|
|
|
41
40
|
// meta joins with " · " into a single node
|
|
42
41
|
expect(screen.getByText("12/05/2026 · 3 pièces")).toBeInTheDocument();
|
|
43
42
|
});
|
|
44
|
-
test("meta drops null / empty entries rather than rendering stray separators",
|
|
43
|
+
test("meta drops null / empty entries rather than rendering stray separators", () => {
|
|
45
44
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
46
45
|
title: "X",
|
|
47
46
|
meta: ["Émise 01/01/2026", null, "", undefined]
|
|
@@ -49,11 +48,12 @@ describe("MobileRowCard — slot rendering", function () {
|
|
|
49
48
|
expect(screen.getByText("Émise 01/01/2026")).toBeInTheDocument();
|
|
50
49
|
expect(screen.queryByText(/·/)).not.toBeInTheDocument();
|
|
51
50
|
});
|
|
52
|
-
test("a string title gets a native tooltip; a node title does not stringify",
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
test("a string title gets a native tooltip; a node title does not stringify", () => {
|
|
52
|
+
const {
|
|
53
|
+
rerender
|
|
54
|
+
} = render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
55
|
+
title: "Long reference"
|
|
56
|
+
}));
|
|
57
57
|
expect(screen.getByText("Long reference")).toHaveAttribute("title", "Long reference");
|
|
58
58
|
rerender(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
59
59
|
title: /*#__PURE__*/_jsx("span", {
|
|
@@ -72,8 +72,8 @@ describe("MobileRowCard — slot rendering", function () {
|
|
|
72
72
|
expect(screen.queryByTitle(/./)).not.toBeInTheDocument();
|
|
73
73
|
});
|
|
74
74
|
});
|
|
75
|
-
describe("MobileRowCard — kv slot",
|
|
76
|
-
test("renders each pair as a KV label/value unit",
|
|
75
|
+
describe("MobileRowCard — kv slot", () => {
|
|
76
|
+
test("renders each pair as a KV label/value unit", () => {
|
|
77
77
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
78
78
|
title: "ref",
|
|
79
79
|
kv: [{
|
|
@@ -89,7 +89,7 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
89
89
|
expect(screen.getByText("Importateur")).toBeInTheDocument();
|
|
90
90
|
expect(screen.getByText("SOFRANE SA")).toBeInTheDocument();
|
|
91
91
|
});
|
|
92
|
-
test("an empty value KEEPS the pair and shows KV's own em-dash placeholder",
|
|
92
|
+
test("an empty value KEEPS the pair and shows KV's own em-dash placeholder", () => {
|
|
93
93
|
// This is why every consuming site could drop its `?? \"-\"`: KV owns the
|
|
94
94
|
// placeholder. Losing this behaviour would silently reintroduce ten local
|
|
95
95
|
// fallbacks across the fleet.
|
|
@@ -111,7 +111,7 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
111
111
|
expect(screen.getByText("Devise")).toBeInTheDocument();
|
|
112
112
|
expect(screen.getAllByText("—")).toHaveLength(3);
|
|
113
113
|
});
|
|
114
|
-
test("a custom fallback overrides the em dash",
|
|
114
|
+
test("a custom fallback overrides the em dash", () => {
|
|
115
115
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
116
116
|
title: "ref",
|
|
117
117
|
kv: [{
|
|
@@ -121,7 +121,7 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
121
121
|
}));
|
|
122
122
|
expect(screen.getByText("Non assignée")).toBeInTheDocument();
|
|
123
123
|
});
|
|
124
|
-
test("pairs with no label are DROPPED (KV would emit a dangling aria-labelledby)",
|
|
124
|
+
test("pairs with no label are DROPPED (KV would emit a dangling aria-labelledby)", () => {
|
|
125
125
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
126
126
|
title: "ref",
|
|
127
127
|
kv: [{
|
|
@@ -143,8 +143,8 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
143
143
|
expect(screen.getByText("kept-value")).toBeInTheDocument();
|
|
144
144
|
});
|
|
145
145
|
});
|
|
146
|
-
describe("MobileRowCard — chips slot",
|
|
147
|
-
test("renders chip nodes and filters falsy entries",
|
|
146
|
+
describe("MobileRowCard — chips slot", () => {
|
|
147
|
+
test("renders chip nodes and filters falsy entries", () => {
|
|
148
148
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
149
149
|
title: "ref",
|
|
150
150
|
chips: [/*#__PURE__*/_jsx("span", {
|
|
@@ -157,13 +157,14 @@ describe("MobileRowCard — chips slot", function () {
|
|
|
157
157
|
expect(screen.getByText("CO")).toBeInTheDocument();
|
|
158
158
|
});
|
|
159
159
|
});
|
|
160
|
-
describe("MobileRowCard — actions (kebab)",
|
|
161
|
-
test("kebab renders only when at least one non-divider action exists",
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
160
|
+
describe("MobileRowCard — actions (kebab)", () => {
|
|
161
|
+
test("kebab renders only when at least one non-divider action exists", () => {
|
|
162
|
+
const {
|
|
163
|
+
rerender
|
|
164
|
+
} = render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
165
|
+
title: "ref",
|
|
166
|
+
actions: []
|
|
167
|
+
}));
|
|
167
168
|
expect(screen.queryByRole("button")).not.toBeInTheDocument();
|
|
168
169
|
rerender(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
169
170
|
title: "ref",
|
|
@@ -176,7 +177,7 @@ describe("MobileRowCard — actions (kebab)", function () {
|
|
|
176
177
|
title: "ref",
|
|
177
178
|
actions: [{
|
|
178
179
|
label: "Détail",
|
|
179
|
-
onClick:
|
|
180
|
+
onClick: () => {}
|
|
180
181
|
}],
|
|
181
182
|
actionsAriaLabel: "Actions pour 2025-IM-0042"
|
|
182
183
|
}));
|
|
@@ -206,9 +207,9 @@ describe("MobileRowCard — actions (kebab)", function () {
|
|
|
206
207
|
* Making these two consistent — in either direction — is a breaking change for
|
|
207
208
|
* the ten sites that depend on them.
|
|
208
209
|
*/
|
|
209
|
-
describe("MobileRowCard — propagation asymmetry (deliberate)",
|
|
210
|
-
test("leading does NOT stop click propagation to the card",
|
|
211
|
-
|
|
210
|
+
describe("MobileRowCard — propagation asymmetry (deliberate)", () => {
|
|
211
|
+
test("leading does NOT stop click propagation to the card", () => {
|
|
212
|
+
const onCardClick = jest.fn();
|
|
212
213
|
render(/*#__PURE__*/_jsx("div", {
|
|
213
214
|
onClick: onCardClick,
|
|
214
215
|
children: /*#__PURE__*/_jsx(MobileRowCard, {
|
|
@@ -221,9 +222,9 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
221
222
|
fireEvent.click(screen.getByText("star"));
|
|
222
223
|
expect(onCardClick).toHaveBeenCalledTimes(1);
|
|
223
224
|
});
|
|
224
|
-
test("trailing DOES stop click propagation to the card",
|
|
225
|
-
|
|
226
|
-
|
|
225
|
+
test("trailing DOES stop click propagation to the card", () => {
|
|
226
|
+
const onCardClick = jest.fn();
|
|
227
|
+
const onAction = jest.fn();
|
|
227
228
|
render(/*#__PURE__*/_jsx("div", {
|
|
228
229
|
onClick: onCardClick,
|
|
229
230
|
children: /*#__PURE__*/_jsx(MobileRowCard, {
|
|
@@ -240,8 +241,8 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
240
241
|
expect(onAction).toHaveBeenCalledTimes(1);
|
|
241
242
|
expect(onCardClick).not.toHaveBeenCalled();
|
|
242
243
|
});
|
|
243
|
-
test("trailing stops keydown propagation too (keyboard parity)",
|
|
244
|
-
|
|
244
|
+
test("trailing stops keydown propagation too (keyboard parity)", () => {
|
|
245
|
+
const onCardKeyDown = jest.fn();
|
|
245
246
|
render(/*#__PURE__*/_jsx("div", {
|
|
246
247
|
onKeyDown: onCardKeyDown,
|
|
247
248
|
children: /*#__PURE__*/_jsx(MobileRowCard, {
|
|
@@ -258,15 +259,15 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
258
259
|
});
|
|
259
260
|
expect(onCardKeyDown).not.toHaveBeenCalled();
|
|
260
261
|
});
|
|
261
|
-
test("opening the kebab does not fire the card click",
|
|
262
|
-
|
|
262
|
+
test("opening the kebab does not fire the card click", () => {
|
|
263
|
+
const onCardClick = jest.fn();
|
|
263
264
|
render(/*#__PURE__*/_jsx("div", {
|
|
264
265
|
onClick: onCardClick,
|
|
265
266
|
children: /*#__PURE__*/_jsx(MobileRowCard, {
|
|
266
267
|
title: "ref",
|
|
267
268
|
actions: [{
|
|
268
269
|
label: "Détail",
|
|
269
|
-
onClick:
|
|
270
|
+
onClick: () => {}
|
|
270
271
|
}]
|
|
271
272
|
})
|
|
272
273
|
}));
|
|
@@ -276,8 +277,8 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
276
277
|
expect(onCardClick).not.toHaveBeenCalled();
|
|
277
278
|
});
|
|
278
279
|
});
|
|
279
|
-
describe("MobileRowCard — header composition",
|
|
280
|
-
test("trailing and the kebab coexist, trailing first",
|
|
280
|
+
describe("MobileRowCard — header composition", () => {
|
|
281
|
+
test("trailing and the kebab coexist, trailing first", () => {
|
|
281
282
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
282
283
|
title: "ref",
|
|
283
284
|
trailing: /*#__PURE__*/_jsx("button", {
|
|
@@ -285,14 +286,14 @@ describe("MobileRowCard — header composition", function () {
|
|
|
285
286
|
}),
|
|
286
287
|
actions: [{
|
|
287
288
|
label: "Supprimer",
|
|
288
|
-
onClick:
|
|
289
|
+
onClick: () => {}
|
|
289
290
|
}],
|
|
290
291
|
actionsAriaLabel: "Autres actions"
|
|
291
292
|
}));
|
|
292
|
-
|
|
293
|
+
const visualiser = screen.getByRole("button", {
|
|
293
294
|
name: "Visualiser"
|
|
294
295
|
});
|
|
295
|
-
|
|
296
|
+
const kebab = screen.getByRole("button", {
|
|
296
297
|
name: "Autres actions"
|
|
297
298
|
});
|
|
298
299
|
expect(visualiser).toBeInTheDocument();
|
|
@@ -301,7 +302,7 @@ describe("MobileRowCard — header composition", function () {
|
|
|
301
302
|
// Document order: trailing precedes the kebab in the header end cluster.
|
|
302
303
|
expect(visualiser.compareDocumentPosition(kebab) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy();
|
|
303
304
|
});
|
|
304
|
-
test("a card with ONLY trailing still renders its header",
|
|
305
|
+
test("a card with ONLY trailing still renders its header", () => {
|
|
305
306
|
// Regression guard: hasHeader must include hasTrailing, otherwise a
|
|
306
307
|
// title-less picker card would drop its action entirely.
|
|
307
308
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
@@ -313,7 +314,7 @@ describe("MobileRowCard — header composition", function () {
|
|
|
313
314
|
name: "Choisir"
|
|
314
315
|
})).toBeInTheDocument();
|
|
315
316
|
});
|
|
316
|
-
test("a card with ONLY leading still renders its header",
|
|
317
|
+
test("a card with ONLY leading still renders its header", () => {
|
|
317
318
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
318
319
|
leading: /*#__PURE__*/_jsx("span", {
|
|
319
320
|
children: "star"
|
|
@@ -321,7 +322,7 @@ describe("MobileRowCard — header composition", function () {
|
|
|
321
322
|
}));
|
|
322
323
|
expect(screen.getByText("star")).toBeInTheDocument();
|
|
323
324
|
});
|
|
324
|
-
test("no props renders no header and does not throw",
|
|
325
|
+
test("no props renders no header and does not throw", () => {
|
|
325
326
|
/* `render` not throwing IS the second half of this assertion. The button
|
|
326
327
|
* check uses screen.queryByRole rather than container.querySelector
|
|
327
328
|
* (testing-library/no-container + no-node-access), matching the idiom the
|