@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,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("@testing-library/jest-dom");
|
|
4
|
+
var _react = require("@testing-library/react");
|
|
5
|
+
var _Field = _interopRequireWildcard(require("../components/Field"));
|
|
6
|
+
var _Input = _interopRequireDefault(require("../components/Input"));
|
|
7
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
10
|
+
/**
|
|
11
|
+
* Field — largeur semantique (gap G-H) : tests de contrat.
|
|
12
|
+
*
|
|
13
|
+
* CE QUE JSDOM PEUT ET NE PEUT PAS VERIFIER
|
|
14
|
+
* -----------------------------------------
|
|
15
|
+
* Le plafond n'est pose qu'a partir du palier `sm` — le standard exigeant
|
|
16
|
+
* « 100% grid width » sur mobile. Il passe donc par une requete media
|
|
17
|
+
* qu'`emotion` injecte dans la feuille de style, et jsdom ne resout pas les
|
|
18
|
+
* requetes media : `getComputedStyle` ne rendra jamais la largeur effective au
|
|
19
|
+
* palier desktop. Un test de rendu ne PEUT pas l'assertir, et pretendre le
|
|
20
|
+
* faire donnerait un test qui passe sans rien verifier.
|
|
21
|
+
*
|
|
22
|
+
* Ce fichier epingle donc ce qui est verifiable et qui compte :
|
|
23
|
+
*
|
|
24
|
+
* 1. LES CINQ VALEURS. C'est le point sensible du tour : elles ne se lisent
|
|
25
|
+
* pas dans le standard, qui donne des FOURCHETTES — quelqu'un a choisi, et
|
|
26
|
+
* ce choix doit etre visible et protege. Si l'equipe design les revoit,
|
|
27
|
+
* c'est ce test qui doit etre mis a jour sciemment, pas un ecran qui doit
|
|
28
|
+
* bouger par surprise.
|
|
29
|
+
*
|
|
30
|
+
* 2. QUE `width` NE CASSE PAS LE CABLAGE D'ACCESSIBILITE. `Field` associe
|
|
31
|
+
* libelle, indication et erreur au controle ; ajouter une contrainte de
|
|
32
|
+
* mise en page ne doit rien y toucher. C'est la regression la plus
|
|
33
|
+
* probable d'un changement qui passe par `sx`.
|
|
34
|
+
*
|
|
35
|
+
* 3. QUE L'OMISSION RESTE NEUTRE. Sans `width`, aucun plafond : les
|
|
36
|
+
* appelants d'avant G-H ne doivent pas bouger d'un pixel.
|
|
37
|
+
*
|
|
38
|
+
* Le comportement responsive lui-meme se verifie dans la story, en
|
|
39
|
+
* redimensionnant la fenetre — c'est la que le contrat est observable.
|
|
40
|
+
*/describe("Field — les cinq gabarits (G-H)", () => {
|
|
41
|
+
test("les valeurs sont celles retenues dans la fourchette du standard", () => {
|
|
42
|
+
/* Fourchettes du standard, et valeur retenue (le HAUT, ces largeurs etant
|
|
43
|
+
* des plafonds) :
|
|
44
|
+
* xs ~80-120 -> 120 s ~160-200 -> 200
|
|
45
|
+
* m ~320-400 -> 400 l ~500-600 -> 600
|
|
46
|
+
* xl 100%
|
|
47
|
+
* Chaque valeur passe par une variable CSS pour etre revue sans toucher au
|
|
48
|
+
* code : c'est le repli qui est epingle ici. */
|
|
49
|
+
expect(_Field.FIELD_MAX_WIDTH.xs).toBe("var(--field-w-xs, 120px)");
|
|
50
|
+
expect(_Field.FIELD_MAX_WIDTH.s).toBe("var(--field-w-s, 200px)");
|
|
51
|
+
expect(_Field.FIELD_MAX_WIDTH.m).toBe("var(--field-w-m, 400px)");
|
|
52
|
+
expect(_Field.FIELD_MAX_WIDTH.l).toBe("var(--field-w-l, 600px)");
|
|
53
|
+
expect(_Field.FIELD_MAX_WIDTH.xl).toBe("100%");
|
|
54
|
+
});
|
|
55
|
+
test("les cinq gabarits du standard sont couverts, ni plus ni moins", () => {
|
|
56
|
+
/* Un gabarit ajoute ou retire est un ecart au standard, pas un detail
|
|
57
|
+
* d'implementation. */
|
|
58
|
+
expect(Object.keys(_Field.FIELD_MAX_WIDTH).sort()).toEqual(["l", "m", "s", "xl", "xs"]);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe("Field — `width` ne touche pas au cablage d'accessibilite", () => {
|
|
62
|
+
test("le libelle nomme toujours le controle", () => {
|
|
63
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
|
|
64
|
+
label: "Identifiant fiscal",
|
|
65
|
+
htmlFor: "ifu",
|
|
66
|
+
width: "s",
|
|
67
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.default, {})
|
|
68
|
+
}));
|
|
69
|
+
expect(_react.screen.getByRole("textbox", {
|
|
70
|
+
name: /Identifiant fiscal/
|
|
71
|
+
})).toBeInTheDocument();
|
|
72
|
+
});
|
|
73
|
+
test("l'erreur reste la description accessible du controle", () => {
|
|
74
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
|
|
75
|
+
label: "Identifiant fiscal",
|
|
76
|
+
htmlFor: "ifu",
|
|
77
|
+
width: "s",
|
|
78
|
+
error: "Quinze caract\xE8res maximum.",
|
|
79
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.default, {})
|
|
80
|
+
}));
|
|
81
|
+
expect(_react.screen.getByRole("textbox")).toHaveAccessibleDescription("Quinze caractères maximum.");
|
|
82
|
+
expect(_react.screen.getByRole("textbox")).toHaveAttribute("aria-invalid", "true");
|
|
83
|
+
});
|
|
84
|
+
test("l'indication reste la description accessible du controle", () => {
|
|
85
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
|
|
86
|
+
label: "Adresse",
|
|
87
|
+
htmlFor: "adresse",
|
|
88
|
+
width: "l",
|
|
89
|
+
hint: "Voie, code postal et ville.",
|
|
90
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.default, {})
|
|
91
|
+
}));
|
|
92
|
+
expect(_react.screen.getByRole("textbox")).toHaveAccessibleDescription("Voie, code postal et ville.");
|
|
93
|
+
});
|
|
94
|
+
test("`required` reste annonce comme tel", () => {
|
|
95
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
|
|
96
|
+
label: "Marque",
|
|
97
|
+
htmlFor: "marque",
|
|
98
|
+
width: "m",
|
|
99
|
+
required: true,
|
|
100
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.default, {})
|
|
101
|
+
}));
|
|
102
|
+
|
|
103
|
+
/* `toBeRequired` accepte l'attribut NATIF `required` comme `aria-required` :
|
|
104
|
+
* c'est volontaire, et c'est la bonne assertion ici.
|
|
105
|
+
*
|
|
106
|
+
* Les deux mecanismes coexistent dans la library, par des chemins
|
|
107
|
+
* differents, et viser l'un des deux nommement rendrait le test faux sans
|
|
108
|
+
* que le comportement change :
|
|
109
|
+
* — sur un controle MUI (`Input`, `Textarea`), `Field` passe `required`
|
|
110
|
+
* au `FormControl`, dont le CONTEXTE le propage jusqu'a l'input, qui
|
|
111
|
+
* porte alors l'attribut natif ;
|
|
112
|
+
* — sur un groupe (`RadioGroup`), aucun contexte ne s'applique : `Field`
|
|
113
|
+
* injecte `aria-required` sur l'enfant, que le groupe transmet a son
|
|
114
|
+
* `role="radiogroup"` (voir le test de `FormikRadioGroup`).
|
|
115
|
+
*
|
|
116
|
+
* Ce qui compte pour R-I.2 est qu'une technologie d'assistance l'annonce,
|
|
117
|
+
* pas quel attribut le porte. */
|
|
118
|
+
expect(_react.screen.getByRole("textbox")).toBeRequired();
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe("Field — l'omission reste neutre", () => {
|
|
122
|
+
test("sans `width`, le champ se rend et se nomme comme avant G-H", () => {
|
|
123
|
+
/* Ce que ce test prouve, et ce qu'il ne prouve pas.
|
|
124
|
+
*
|
|
125
|
+
* L'absence de plafond n'est PAS assertable : elle se lit dans la feuille
|
|
126
|
+
* de style generee par `emotion`, que jsdom ne resout pas plus qu'une
|
|
127
|
+
* requete media. Une premiere version comparait le nombre de noeuds avec
|
|
128
|
+
* et sans `width` — ce qui exigeait un acces direct au DOM, interdit a
|
|
129
|
+
* juste titre par `testing-library/no-node-access` : compter des `<label>`
|
|
130
|
+
* teste l'implementation, pas le comportement.
|
|
131
|
+
*
|
|
132
|
+
* Ce qui EST verifiable et suffit a la retrocompatibilite : sans `width`,
|
|
133
|
+
* le controle est rendu, nomme par son libelle, et n'a herite d'aucun etat
|
|
134
|
+
* qu'il n'a pas demande. Le plafond, lui, se verifie dans la story. */
|
|
135
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.default, {
|
|
136
|
+
label: "Marque",
|
|
137
|
+
htmlFor: "sans-gabarit",
|
|
138
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.default, {})
|
|
139
|
+
}));
|
|
140
|
+
const champ = _react.screen.getByRole("textbox", {
|
|
141
|
+
name: /Marque/
|
|
142
|
+
});
|
|
143
|
+
expect(champ).toBeInTheDocument();
|
|
144
|
+
expect(champ).not.toBeRequired();
|
|
145
|
+
expect(champ).not.toBeInvalid();
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
//# sourceMappingURL=FieldWidth.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldWidth.test.js","names":["require","_react","_Field","_interopRequireWildcard","_Input","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","describe","test","expect","FIELD_MAX_WIDTH","xs","toBe","s","m","l","xl","keys","sort","toEqual","render","jsx","label","htmlFor","width","children","screen","getByRole","name","toBeInTheDocument","error","toHaveAccessibleDescription","toHaveAttribute","hint","required","toBeRequired","champ","not","toBeInvalid"],"sources":["../../../src/lib/v2/__tests__/FieldWidth.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport Field, { FIELD_MAX_WIDTH } from \"../components/Field\";\r\nimport Input from \"../components/Input\";\r\n\r\n/**\r\n * Field — largeur semantique (gap G-H) : tests de contrat.\r\n *\r\n * CE QUE JSDOM PEUT ET NE PEUT PAS VERIFIER\r\n * -----------------------------------------\r\n * Le plafond n'est pose qu'a partir du palier `sm` — le standard exigeant\r\n * « 100% grid width » sur mobile. Il passe donc par une requete media\r\n * qu'`emotion` injecte dans la feuille de style, et jsdom ne resout pas les\r\n * requetes media : `getComputedStyle` ne rendra jamais la largeur effective au\r\n * palier desktop. Un test de rendu ne PEUT pas l'assertir, et pretendre le\r\n * faire donnerait un test qui passe sans rien verifier.\r\n *\r\n * Ce fichier epingle donc ce qui est verifiable et qui compte :\r\n *\r\n * 1. LES CINQ VALEURS. C'est le point sensible du tour : elles ne se lisent\r\n * pas dans le standard, qui donne des FOURCHETTES — quelqu'un a choisi, et\r\n * ce choix doit etre visible et protege. Si l'equipe design les revoit,\r\n * c'est ce test qui doit etre mis a jour sciemment, pas un ecran qui doit\r\n * bouger par surprise.\r\n *\r\n * 2. QUE `width` NE CASSE PAS LE CABLAGE D'ACCESSIBILITE. `Field` associe\r\n * libelle, indication et erreur au controle ; ajouter une contrainte de\r\n * mise en page ne doit rien y toucher. C'est la regression la plus\r\n * probable d'un changement qui passe par `sx`.\r\n *\r\n * 3. QUE L'OMISSION RESTE NEUTRE. Sans `width`, aucun plafond : les\r\n * appelants d'avant G-H ne doivent pas bouger d'un pixel.\r\n *\r\n * Le comportement responsive lui-meme se verifie dans la story, en\r\n * redimensionnant la fenetre — c'est la que le contrat est observable.\r\n */\r\n\r\ndescribe(\"Field — les cinq gabarits (G-H)\", () => {\r\n test(\"les valeurs sont celles retenues dans la fourchette du standard\", () => {\r\n /* Fourchettes du standard, et valeur retenue (le HAUT, ces largeurs etant\r\n * des plafonds) :\r\n * xs ~80-120 -> 120 s ~160-200 -> 200\r\n * m ~320-400 -> 400 l ~500-600 -> 600\r\n * xl 100%\r\n * Chaque valeur passe par une variable CSS pour etre revue sans toucher au\r\n * code : c'est le repli qui est epingle ici. */\r\n expect(FIELD_MAX_WIDTH.xs).toBe(\"var(--field-w-xs, 120px)\");\r\n expect(FIELD_MAX_WIDTH.s).toBe(\"var(--field-w-s, 200px)\");\r\n expect(FIELD_MAX_WIDTH.m).toBe(\"var(--field-w-m, 400px)\");\r\n expect(FIELD_MAX_WIDTH.l).toBe(\"var(--field-w-l, 600px)\");\r\n expect(FIELD_MAX_WIDTH.xl).toBe(\"100%\");\r\n });\r\n\r\n test(\"les cinq gabarits du standard sont couverts, ni plus ni moins\", () => {\r\n /* Un gabarit ajoute ou retire est un ecart au standard, pas un detail\r\n * d'implementation. */\r\n expect(Object.keys(FIELD_MAX_WIDTH).sort()).toEqual([\r\n \"l\",\r\n \"m\",\r\n \"s\",\r\n \"xl\",\r\n \"xs\",\r\n ]);\r\n });\r\n});\r\n\r\ndescribe(\"Field — `width` ne touche pas au cablage d'accessibilite\", () => {\r\n test(\"le libelle nomme toujours le controle\", () => {\r\n render(\r\n <Field label=\"Identifiant fiscal\" htmlFor=\"ifu\" width=\"s\">\r\n <Input />\r\n </Field>\r\n );\r\n\r\n expect(\r\n screen.getByRole(\"textbox\", { name: /Identifiant fiscal/ })\r\n ).toBeInTheDocument();\r\n });\r\n\r\n test(\"l'erreur reste la description accessible du controle\", () => {\r\n render(\r\n <Field\r\n label=\"Identifiant fiscal\"\r\n htmlFor=\"ifu\"\r\n width=\"s\"\r\n error=\"Quinze caractères maximum.\"\r\n >\r\n <Input />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"textbox\")).toHaveAccessibleDescription(\r\n \"Quinze caractères maximum.\"\r\n );\r\n expect(screen.getByRole(\"textbox\")).toHaveAttribute(\r\n \"aria-invalid\",\r\n \"true\"\r\n );\r\n });\r\n\r\n test(\"l'indication reste la description accessible du controle\", () => {\r\n render(\r\n <Field\r\n label=\"Adresse\"\r\n htmlFor=\"adresse\"\r\n width=\"l\"\r\n hint=\"Voie, code postal et ville.\"\r\n >\r\n <Input />\r\n </Field>\r\n );\r\n\r\n expect(screen.getByRole(\"textbox\")).toHaveAccessibleDescription(\r\n \"Voie, code postal et ville.\"\r\n );\r\n });\r\n\r\n test(\"`required` reste annonce comme tel\", () => {\r\n render(\r\n <Field label=\"Marque\" htmlFor=\"marque\" width=\"m\" required>\r\n <Input />\r\n </Field>\r\n );\r\n\r\n /* `toBeRequired` accepte l'attribut NATIF `required` comme `aria-required` :\r\n * c'est volontaire, et c'est la bonne assertion ici.\r\n *\r\n * Les deux mecanismes coexistent dans la library, par des chemins\r\n * differents, et viser l'un des deux nommement rendrait le test faux sans\r\n * que le comportement change :\r\n * — sur un controle MUI (`Input`, `Textarea`), `Field` passe `required`\r\n * au `FormControl`, dont le CONTEXTE le propage jusqu'a l'input, qui\r\n * porte alors l'attribut natif ;\r\n * — sur un groupe (`RadioGroup`), aucun contexte ne s'applique : `Field`\r\n * injecte `aria-required` sur l'enfant, que le groupe transmet a son\r\n * `role=\"radiogroup\"` (voir le test de `FormikRadioGroup`).\r\n *\r\n * Ce qui compte pour R-I.2 est qu'une technologie d'assistance l'annonce,\r\n * pas quel attribut le porte. */\r\n expect(screen.getByRole(\"textbox\")).toBeRequired();\r\n });\r\n});\r\n\r\ndescribe(\"Field — l'omission reste neutre\", () => {\r\n test(\"sans `width`, le champ se rend et se nomme comme avant G-H\", () => {\r\n /* Ce que ce test prouve, et ce qu'il ne prouve pas.\r\n *\r\n * L'absence de plafond n'est PAS assertable : elle se lit dans la feuille\r\n * de style generee par `emotion`, que jsdom ne resout pas plus qu'une\r\n * requete media. Une premiere version comparait le nombre de noeuds avec\r\n * et sans `width` — ce qui exigeait un acces direct au DOM, interdit a\r\n * juste titre par `testing-library/no-node-access` : compter des `<label>`\r\n * teste l'implementation, pas le comportement.\r\n *\r\n * Ce qui EST verifiable et suffit a la retrocompatibilite : sans `width`,\r\n * le controle est rendu, nomme par son libelle, et n'a herite d'aucun etat\r\n * qu'il n'a pas demande. Le plafond, lui, se verifie dans la story. */\r\n render(\r\n <Field label=\"Marque\" htmlFor=\"sans-gabarit\">\r\n <Input />\r\n </Field>\r\n );\r\n\r\n const champ = screen.getByRole(\"textbox\", { name: /Marque/ });\r\n expect(champ).toBeInTheDocument();\r\n expect(champ).not.toBeRequired();\r\n expect(champ).not.toBeInvalid();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
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); }
|
|
4
3
|
require("@testing-library/jest-dom");
|
|
5
|
-
var
|
|
6
|
-
var _react2 = require("@testing-library/react");
|
|
4
|
+
var _react = require("@testing-library/react");
|
|
7
5
|
var _FileCard = _interopRequireDefault(require("../components/FileCard"));
|
|
8
6
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
9
|
-
function _interopRequireDefault(
|
|
10
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
11
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
7
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
8
|
/**
|
|
13
9
|
* FileCard — contract tests.
|
|
14
10
|
*
|
|
@@ -30,10 +26,10 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
30
26
|
* contract lives in FileCard.stories.tsx ("Long filename"), which is where a
|
|
31
27
|
* browser can actually check it. Same reasoning as MobileRowCard.test.tsx
|
|
32
28
|
* records for R-G.3.
|
|
33
|
-
*/describe("FileCard — identity",
|
|
34
|
-
test("renders the filename and mirrors it into title for the truncated case",
|
|
35
|
-
|
|
36
|
-
(0,
|
|
29
|
+
*/describe("FileCard — identity", () => {
|
|
30
|
+
test("renders the filename and mirrors it into title for the truncated case", () => {
|
|
31
|
+
const name = "autorisation-de-depot-prealable-a-l-exportation-2025-IM-0042-revision-finale.pdf";
|
|
32
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
|
|
37
33
|
name: name
|
|
38
34
|
}));
|
|
39
35
|
|
|
@@ -41,16 +37,16 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
41
37
|
* than ReactNode: once the CSS ellipsis hides the tail, the attribute is
|
|
42
38
|
* what keeps the full filename reachable. Losing it is invisible in every
|
|
43
39
|
* screenshot and only hurts the user with the long filename. */
|
|
44
|
-
expect(
|
|
40
|
+
expect(_react.screen.getByText(name)).toHaveAttribute("title", name);
|
|
45
41
|
});
|
|
46
|
-
test("renders the meta line when supplied",
|
|
47
|
-
(0,
|
|
42
|
+
test("renders the meta line when supplied", () => {
|
|
43
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
|
|
48
44
|
name: "facture.pdf",
|
|
49
45
|
meta: "1,24 Mo"
|
|
50
46
|
}));
|
|
51
|
-
expect(
|
|
47
|
+
expect(_react.screen.getByText("1,24 Mo")).toBeInTheDocument();
|
|
52
48
|
});
|
|
53
|
-
test("omits the meta line entirely when absent or empty",
|
|
49
|
+
test("omits the meta line entirely when absent or empty", () => {
|
|
54
50
|
/* Not rendered rather than rendered blank: an empty second line reads as
|
|
55
51
|
* missing data, and it changes the row height, which breaks the alignment
|
|
56
52
|
* of a list of files. Both `undefined` and `""` are covered because a host
|
|
@@ -60,89 +56,90 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
60
56
|
* cannot be expressed as a text query, and the repo's eslint config forbids
|
|
61
57
|
* direct node access — correctly, since a structural child count would also
|
|
62
58
|
* break the moment the component gains an unrelated third line. */
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
expect(
|
|
69
|
-
|
|
59
|
+
const {
|
|
60
|
+
rerender
|
|
61
|
+
} = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
|
|
62
|
+
name: "a.pdf"
|
|
63
|
+
}));
|
|
64
|
+
expect(_react.screen.getByText("a.pdf")).toBeInTheDocument();
|
|
65
|
+
expect(_react.screen.queryByTestId("filecard-meta")).not.toBeInTheDocument();
|
|
66
|
+
rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
|
|
70
67
|
name: "a.pdf",
|
|
71
68
|
meta: ""
|
|
72
69
|
}));
|
|
73
|
-
expect(
|
|
74
|
-
rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard
|
|
70
|
+
expect(_react.screen.queryByTestId("filecard-meta")).not.toBeInTheDocument();
|
|
71
|
+
rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
|
|
75
72
|
name: "a.pdf",
|
|
76
73
|
meta: "248 Ko"
|
|
77
74
|
}));
|
|
78
|
-
expect(
|
|
75
|
+
expect(_react.screen.getByTestId("filecard-meta")).toHaveTextContent("248 Ko");
|
|
79
76
|
});
|
|
80
77
|
});
|
|
81
|
-
describe("FileCard — actions slot",
|
|
82
|
-
test("renders host-supplied actions",
|
|
83
|
-
(0,
|
|
78
|
+
describe("FileCard — actions slot", () => {
|
|
79
|
+
test("renders host-supplied actions", () => {
|
|
80
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
|
|
84
81
|
name: "a.pdf",
|
|
85
82
|
actions: /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
|
|
86
83
|
type: "button",
|
|
87
84
|
children: "T\xE9l\xE9charger"
|
|
88
85
|
})
|
|
89
86
|
}));
|
|
90
|
-
expect(
|
|
87
|
+
expect(_react.screen.getByRole("button", {
|
|
91
88
|
name: "Télécharger"
|
|
92
89
|
})).toBeInTheDocument();
|
|
93
90
|
});
|
|
94
|
-
test("renders no action cluster when actions is absent",
|
|
95
|
-
(0,
|
|
91
|
+
test("renders no action cluster when actions is absent", () => {
|
|
92
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
|
|
96
93
|
name: "a.pdf"
|
|
97
94
|
}));
|
|
98
|
-
expect(
|
|
95
|
+
expect(_react.screen.queryByRole("button")).not.toBeInTheDocument();
|
|
99
96
|
});
|
|
100
|
-
test("does not invent any action of its own",
|
|
97
|
+
test("does not invent any action of its own", () => {
|
|
101
98
|
/* Regression guard on the component's SCOPE, not its rendering. FileCard is
|
|
102
99
|
* presentational: a download link, a delete confirmation and a blob URL all
|
|
103
100
|
* belong to the host. If a future change adds a built-in button, this fails
|
|
104
101
|
* — which is the intent. */
|
|
105
|
-
(0,
|
|
102
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
|
|
106
103
|
name: "a.pdf",
|
|
107
104
|
meta: "1 Ko"
|
|
108
105
|
}));
|
|
109
|
-
expect(
|
|
110
|
-
expect(
|
|
106
|
+
expect(_react.screen.queryByRole("button")).not.toBeInTheDocument();
|
|
107
|
+
expect(_react.screen.queryByRole("link")).not.toBeInTheDocument();
|
|
111
108
|
});
|
|
112
109
|
});
|
|
113
|
-
describe("FileCard — accessibility",
|
|
114
|
-
test("the leading icon is hidden from assistive tech",
|
|
110
|
+
describe("FileCard — accessibility", () => {
|
|
111
|
+
test("the leading icon is hidden from assistive tech", () => {
|
|
115
112
|
/* R-Ar.2 — the filename IS the accessible name; a decorative glyph carrying
|
|
116
113
|
* one would make a screen reader announce the row twice. The wrapper has no
|
|
117
114
|
* role and no name by design, so there is no semantic query for it: the
|
|
118
115
|
* component exposes a stable testid for exactly this assertion. */
|
|
119
|
-
(0,
|
|
116
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
|
|
120
117
|
name: "a.pdf"
|
|
121
118
|
}));
|
|
122
|
-
expect(
|
|
119
|
+
expect(_react.screen.getByTestId("filecard-icon")).toHaveAttribute("aria-hidden", "true");
|
|
123
120
|
});
|
|
124
|
-
test("a custom icon replaces the default and stays hidden",
|
|
121
|
+
test("a custom icon replaces the default and stays hidden", () => {
|
|
125
122
|
/* The second assertion is the one that matters: a host passing its own glyph
|
|
126
123
|
* must not be able to leak it into the accessibility tree. */
|
|
127
|
-
(0,
|
|
124
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
|
|
128
125
|
name: "a.pdf",
|
|
129
126
|
icon: /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", {
|
|
130
127
|
"data-testid": "custom"
|
|
131
128
|
})
|
|
132
129
|
}));
|
|
133
|
-
expect(
|
|
134
|
-
expect(
|
|
130
|
+
expect(_react.screen.getByTestId("custom")).toBeInTheDocument();
|
|
131
|
+
expect(_react.screen.getByTestId("filecard-icon")).toHaveAttribute("aria-hidden", "true");
|
|
135
132
|
});
|
|
136
|
-
test("carries no role of its own",
|
|
133
|
+
test("carries no role of its own", () => {
|
|
137
134
|
/* The card is not interactive — only its actions are. Giving it role=button
|
|
138
135
|
* or wrapping it in a group without an accessible name would add noise to
|
|
139
136
|
* the SR tree. Asserted so a future "make the whole row clickable" change
|
|
140
137
|
* has to be a deliberate decision rather than a drive-by. */
|
|
141
|
-
(0,
|
|
138
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_FileCard.default, {
|
|
142
139
|
name: "a.pdf"
|
|
143
140
|
}));
|
|
144
|
-
expect(
|
|
145
|
-
expect(
|
|
141
|
+
expect(_react.screen.queryByRole("button")).not.toBeInTheDocument();
|
|
142
|
+
expect(_react.screen.queryByRole("group")).not.toBeInTheDocument();
|
|
146
143
|
});
|
|
147
144
|
});
|
|
148
145
|
//# sourceMappingURL=FileCard.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileCard.test.js","names":["require","React","_interopRequireWildcard","_react2","_FileCard","_interopRequireDefault","_jsxRuntime","obj","__esModule","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","describe","test","name","render","jsx","expect","screen","getByText","toHaveAttribute","meta","toBeInTheDocument","_render","rerender","queryByTestId","not","getByTestId","toHaveTextContent","actions","type","children","getByRole","queryByRole","icon"],"sources":["../../../src/lib/v2/__tests__/FileCard.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport * as React from \"react\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport FileCard from \"../components/FileCard\";\r\n\r\n/**\r\n * FileCard — contract tests.\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST — \"Snapshot Storybook + tests Jest/Testing-Library\". The\r\n * component was extracted from THREE hand-written copies found in addpe-fe\r\n * (Attachment, AutorisationPreviewDrawer, AutorisationDetail), which had drifted\r\n * to three different paddings for one concept. Consolidating them means a single\r\n * change now moves every attachment row in the fleet, so the contracts below are\r\n * the ones that must not move silently.\r\n *\r\n * NOT COVERED — deliberately\r\n * The width negotiation is the most fragile part of this component and it is\r\n * NOT tested here: `text-overflow: ellipsis`, `minWidth: 0` on the identity\r\n * block and `flexShrink: 0` on the action cluster are LAYOUT, and jsdom computes\r\n * no layout. A test asserting them would pass while the card is broken on a\r\n * phone — worse than no coverage, because it would look like coverage. That\r\n * contract lives in FileCard.stories.tsx (\"Long filename\"), which is where a\r\n * browser can actually check it. Same reasoning as MobileRowCard.test.tsx\r\n * records for R-G.3.\r\n */\r\ndescribe(\"FileCard — identity\", () => {\r\n test(\"renders the filename and mirrors it into title for the truncated case\", () => {\r\n const name =\r\n \"autorisation-de-depot-prealable-a-l-exportation-2025-IM-0042-revision-finale.pdf\";\r\n render(<FileCard name={name} />);\r\n\r\n /* The title attribute is the ONLY reason `name` is typed `string` rather\r\n * than ReactNode: once the CSS ellipsis hides the tail, the attribute is\r\n * what keeps the full filename reachable. Losing it is invisible in every\r\n * screenshot and only hurts the user with the long filename. */\r\n expect(screen.getByText(name)).toHaveAttribute(\"title\", name);\r\n });\r\n\r\n test(\"renders the meta line when supplied\", () => {\r\n render(<FileCard name=\"facture.pdf\" meta=\"1,24 Mo\" />);\r\n expect(screen.getByText(\"1,24 Mo\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"omits the meta line entirely when absent or empty\", () => {\r\n /* Not rendered rather than rendered blank: an empty second line reads as\r\n * missing data, and it changes the row height, which breaks the alignment\r\n * of a list of files. Both `undefined` and `\"\"` are covered because a host\r\n * formatting a byte count from an optional field produces either.\r\n *\r\n * Queried by testid, not by walking parentElement: \"absent, not empty\"\r\n * cannot be expressed as a text query, and the repo's eslint config forbids\r\n * direct node access — correctly, since a structural child count would also\r\n * break the moment the component gains an unrelated third line. */\r\n const { rerender } = render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.getByText(\"a.pdf\")).toBeInTheDocument();\r\n expect(screen.queryByTestId(\"filecard-meta\")).not.toBeInTheDocument();\r\n\r\n rerender(<FileCard name=\"a.pdf\" meta=\"\" />);\r\n expect(screen.queryByTestId(\"filecard-meta\")).not.toBeInTheDocument();\r\n\r\n rerender(<FileCard name=\"a.pdf\" meta=\"248 Ko\" />);\r\n expect(screen.getByTestId(\"filecard-meta\")).toHaveTextContent(\"248 Ko\");\r\n });\r\n});\r\n\r\ndescribe(\"FileCard — actions slot\", () => {\r\n test(\"renders host-supplied actions\", () => {\r\n render(\r\n <FileCard\r\n name=\"a.pdf\"\r\n actions={<button type=\"button\">Télécharger</button>}\r\n />\r\n );\r\n expect(screen.getByRole(\"button\", { name: \"Télécharger\" })).toBeInTheDocument();\r\n });\r\n\r\n test(\"renders no action cluster when actions is absent\", () => {\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n });\r\n\r\n test(\"does not invent any action of its own\", () => {\r\n /* Regression guard on the component's SCOPE, not its rendering. FileCard is\r\n * presentational: a download link, a delete confirmation and a blob URL all\r\n * belong to the host. If a future change adds a built-in button, this fails\r\n * — which is the intent. */\r\n render(<FileCard name=\"a.pdf\" meta=\"1 Ko\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n expect(screen.queryByRole(\"link\")).not.toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FileCard — accessibility\", () => {\r\n test(\"the leading icon is hidden from assistive tech\", () => {\r\n /* R-Ar.2 — the filename IS the accessible name; a decorative glyph carrying\r\n * one would make a screen reader announce the row twice. The wrapper has no\r\n * role and no name by design, so there is no semantic query for it: the\r\n * component exposes a stable testid for exactly this assertion. */\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.getByTestId(\"filecard-icon\")).toHaveAttribute(\"aria-hidden\", \"true\");\r\n });\r\n\r\n test(\"a custom icon replaces the default and stays hidden\", () => {\r\n /* The second assertion is the one that matters: a host passing its own glyph\r\n * must not be able to leak it into the accessibility tree. */\r\n render(<FileCard name=\"a.pdf\" icon={<svg data-testid=\"custom\" />} />);\r\n expect(screen.getByTestId(\"custom\")).toBeInTheDocument();\r\n expect(screen.getByTestId(\"filecard-icon\")).toHaveAttribute(\"aria-hidden\", \"true\");\r\n });\r\n\r\n test(\"carries no role of its own\", () => {\r\n /* The card is not interactive — only its actions are. Giving it role=button\r\n * or wrapping it in a group without an accessible name would add noise to\r\n * the SR tree. Asserted so a future \"make the whole row clickable\" change\r\n * has to be a deliberate decision rather than a drive-by. */\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n expect(screen.queryByRole(\"group\")).not.toBeInTheDocument();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FileCard.test.js","names":["require","_react","_FileCard","_interopRequireDefault","_jsxRuntime","e","__esModule","default","describe","test","name","render","jsx","expect","screen","getByText","toHaveAttribute","meta","toBeInTheDocument","rerender","queryByTestId","not","getByTestId","toHaveTextContent","actions","type","children","getByRole","queryByRole","icon"],"sources":["../../../src/lib/v2/__tests__/FileCard.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport FileCard from \"../components/FileCard\";\r\n\r\n/**\r\n * FileCard — contract tests.\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST — \"Snapshot Storybook + tests Jest/Testing-Library\". The\r\n * component was extracted from THREE hand-written copies found in addpe-fe\r\n * (Attachment, AutorisationPreviewDrawer, AutorisationDetail), which had drifted\r\n * to three different paddings for one concept. Consolidating them means a single\r\n * change now moves every attachment row in the fleet, so the contracts below are\r\n * the ones that must not move silently.\r\n *\r\n * NOT COVERED — deliberately\r\n * The width negotiation is the most fragile part of this component and it is\r\n * NOT tested here: `text-overflow: ellipsis`, `minWidth: 0` on the identity\r\n * block and `flexShrink: 0` on the action cluster are LAYOUT, and jsdom computes\r\n * no layout. A test asserting them would pass while the card is broken on a\r\n * phone — worse than no coverage, because it would look like coverage. That\r\n * contract lives in FileCard.stories.tsx (\"Long filename\"), which is where a\r\n * browser can actually check it. Same reasoning as MobileRowCard.test.tsx\r\n * records for R-G.3.\r\n */\r\ndescribe(\"FileCard — identity\", () => {\r\n test(\"renders the filename and mirrors it into title for the truncated case\", () => {\r\n const name =\r\n \"autorisation-de-depot-prealable-a-l-exportation-2025-IM-0042-revision-finale.pdf\";\r\n render(<FileCard name={name} />);\r\n\r\n /* The title attribute is the ONLY reason `name` is typed `string` rather\r\n * than ReactNode: once the CSS ellipsis hides the tail, the attribute is\r\n * what keeps the full filename reachable. Losing it is invisible in every\r\n * screenshot and only hurts the user with the long filename. */\r\n expect(screen.getByText(name)).toHaveAttribute(\"title\", name);\r\n });\r\n\r\n test(\"renders the meta line when supplied\", () => {\r\n render(<FileCard name=\"facture.pdf\" meta=\"1,24 Mo\" />);\r\n expect(screen.getByText(\"1,24 Mo\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"omits the meta line entirely when absent or empty\", () => {\r\n /* Not rendered rather than rendered blank: an empty second line reads as\r\n * missing data, and it changes the row height, which breaks the alignment\r\n * of a list of files. Both `undefined` and `\"\"` are covered because a host\r\n * formatting a byte count from an optional field produces either.\r\n *\r\n * Queried by testid, not by walking parentElement: \"absent, not empty\"\r\n * cannot be expressed as a text query, and the repo's eslint config forbids\r\n * direct node access — correctly, since a structural child count would also\r\n * break the moment the component gains an unrelated third line. */\r\n const { rerender } = render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.getByText(\"a.pdf\")).toBeInTheDocument();\r\n expect(screen.queryByTestId(\"filecard-meta\")).not.toBeInTheDocument();\r\n\r\n rerender(<FileCard name=\"a.pdf\" meta=\"\" />);\r\n expect(screen.queryByTestId(\"filecard-meta\")).not.toBeInTheDocument();\r\n\r\n rerender(<FileCard name=\"a.pdf\" meta=\"248 Ko\" />);\r\n expect(screen.getByTestId(\"filecard-meta\")).toHaveTextContent(\"248 Ko\");\r\n });\r\n});\r\n\r\ndescribe(\"FileCard — actions slot\", () => {\r\n test(\"renders host-supplied actions\", () => {\r\n render(\r\n <FileCard\r\n name=\"a.pdf\"\r\n actions={<button type=\"button\">Télécharger</button>}\r\n />\r\n );\r\n expect(screen.getByRole(\"button\", { name: \"Télécharger\" })).toBeInTheDocument();\r\n });\r\n\r\n test(\"renders no action cluster when actions is absent\", () => {\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n });\r\n\r\n test(\"does not invent any action of its own\", () => {\r\n /* Regression guard on the component's SCOPE, not its rendering. FileCard is\r\n * presentational: a download link, a delete confirmation and a blob URL all\r\n * belong to the host. If a future change adds a built-in button, this fails\r\n * — which is the intent. */\r\n render(<FileCard name=\"a.pdf\" meta=\"1 Ko\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n expect(screen.queryByRole(\"link\")).not.toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FileCard — accessibility\", () => {\r\n test(\"the leading icon is hidden from assistive tech\", () => {\r\n /* R-Ar.2 — the filename IS the accessible name; a decorative glyph carrying\r\n * one would make a screen reader announce the row twice. The wrapper has no\r\n * role and no name by design, so there is no semantic query for it: the\r\n * component exposes a stable testid for exactly this assertion. */\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.getByTestId(\"filecard-icon\")).toHaveAttribute(\"aria-hidden\", \"true\");\r\n });\r\n\r\n test(\"a custom icon replaces the default and stays hidden\", () => {\r\n /* The second assertion is the one that matters: a host passing its own glyph\r\n * must not be able to leak it into the accessibility tree. */\r\n render(<FileCard name=\"a.pdf\" icon={<svg data-testid=\"custom\" />} />);\r\n expect(screen.getByTestId(\"custom\")).toBeInTheDocument();\r\n expect(screen.getByTestId(\"filecard-icon\")).toHaveAttribute(\"aria-hidden\", \"true\");\r\n });\r\n\r\n test(\"carries no role of its own\", () => {\r\n /* The card is not interactive — only its actions are. Giving it role=button\r\n * or wrapping it in a group without an accessible name would add noise to\r\n * the SR tree. Asserted so a future \"make the whole row clickable\" change\r\n * has to be a deliberate decision rather than a drive-by. */\r\n render(<FileCard name=\"a.pdf\" />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n expect(screen.queryByRole(\"group\")).not.toBeInTheDocument();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("@testing-library/jest-dom");
|
|
4
|
+
var React = _interopRequireWildcard(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
7
|
+
var _formik = require("formik");
|
|
8
|
+
var _FormikCheckbox = _interopRequireDefault(require("../patterns/FormikCheckbox"));
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
+
/**
|
|
13
|
+
* FormikCheckbox — contract tests (gap G-A).
|
|
14
|
+
*
|
|
15
|
+
* WHY THIS FILE EXISTS
|
|
16
|
+
* --------------------
|
|
17
|
+
* §10.3 R-G.6 MUST. But the contracts worth pinning here are the ones a
|
|
18
|
+
* screenshot cannot see, and each of them is a real defect this bridge was
|
|
19
|
+
* created to stop repeating:
|
|
20
|
+
*
|
|
21
|
+
* 1. THE VALUE SHAPE. This component exists because `FormikCheckboxGroup`
|
|
22
|
+
* writes an ARRAY. If a refactor ever routed this bridge through the group,
|
|
23
|
+
* hosts would start sending `["on"]` where their payload declares a
|
|
24
|
+
* boolean — visually identical, and wrong all the way to the database.
|
|
25
|
+
*
|
|
26
|
+
* 2. TOUCHED-ON-CHANGE. A checkbox has no meaningful blur-before-change, so
|
|
27
|
+
* if the field is only marked touched on blur, a required-checkbox error
|
|
28
|
+
* stays invisible however many times the user clicks. That is exactly the
|
|
29
|
+
* defect reported from refonte-frontend, where a hand-rolled bridge
|
|
30
|
+
* rendered no message at all.
|
|
31
|
+
*
|
|
32
|
+
* 3. `aria-required` LANDS ON THE INPUT. `Field` injects it onto its child,
|
|
33
|
+
* which here is the CheckboxGroup — a `role="group"` div that does not
|
|
34
|
+
* forward it. Assert the input, not the group.
|
|
35
|
+
*
|
|
36
|
+
* 4. NO `error` ATTRIBUTE ON THE DOM. `Field` clones its child with
|
|
37
|
+
* `error`/`disabled` for the v2 inputs that read them directly. A bare
|
|
38
|
+
* `Checkbox` would spread `error` down to the native input; the
|
|
39
|
+
* CheckboxGroup wrapper is what absorbs it. Drop the wrapper and React
|
|
40
|
+
* starts warning while every pixel stays identical.
|
|
41
|
+
*
|
|
42
|
+
* NOT COVERED — deliberately: the asterisk colour and the grey error panel are
|
|
43
|
+
* CSS variables, which jsdom does not resolve. Those belong to the story.
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/** Minimal host: a Formik form exposing its values for assertion. */function Hote({
|
|
47
|
+
initialValue,
|
|
48
|
+
required,
|
|
49
|
+
onValues,
|
|
50
|
+
...props
|
|
51
|
+
}) {
|
|
52
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_formik.Formik, {
|
|
53
|
+
initialValues: {
|
|
54
|
+
flag: initialValue
|
|
55
|
+
},
|
|
56
|
+
validate: values => required && values.flag !== true ? {
|
|
57
|
+
flag: "Cochez cette case pour continuer."
|
|
58
|
+
} : {},
|
|
59
|
+
onSubmit: () => undefined,
|
|
60
|
+
children: ({
|
|
61
|
+
values
|
|
62
|
+
}) => {
|
|
63
|
+
onValues?.(values);
|
|
64
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_formik.Form, {
|
|
65
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormikCheckbox.default, {
|
|
66
|
+
name: "flag",
|
|
67
|
+
label: "Premi\xE8re d\xE9claration",
|
|
68
|
+
...(required !== undefined ? {
|
|
69
|
+
required
|
|
70
|
+
} : {}),
|
|
71
|
+
...props
|
|
72
|
+
})
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
describe("FormikCheckbox — the value stays a BOOLEAN", () => {
|
|
78
|
+
test("toggling writes `true`, untoggling writes `false` — never an array", async () => {
|
|
79
|
+
const vues = [];
|
|
80
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
|
|
81
|
+
initialValue: false,
|
|
82
|
+
onValues: v => vues.push(v.flag)
|
|
83
|
+
}));
|
|
84
|
+
await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
|
|
85
|
+
expect(vues.at(-1)).toBe(true);
|
|
86
|
+
await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
|
|
87
|
+
expect(vues.at(-1)).toBe(false);
|
|
88
|
+
|
|
89
|
+
/* The point of the assertion: not one intermediate value was an array. */
|
|
90
|
+
expect(vues.some(v => Array.isArray(v))).toBe(false);
|
|
91
|
+
});
|
|
92
|
+
test("a `null` seed renders a CONTROLLED, unchecked input", () => {
|
|
93
|
+
/* Hosts seed these flags with `null` (« not answered yet »). Passing that
|
|
94
|
+
* straight to `checked` makes React treat the input as uncontrolled for one
|
|
95
|
+
* render, then warn and lose the first click. */
|
|
96
|
+
const avertissements = [];
|
|
97
|
+
const spy = jest.spyOn(console, "error").mockImplementation((...args) => {
|
|
98
|
+
avertissements.push(args);
|
|
99
|
+
});
|
|
100
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
|
|
101
|
+
initialValue: null
|
|
102
|
+
}));
|
|
103
|
+
expect(_react2.screen.getByRole("checkbox")).not.toBeChecked();
|
|
104
|
+
expect(avertissements.some(a => String(a[0]).includes("uncontrolled"))).toBe(false);
|
|
105
|
+
spy.mockRestore();
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
describe("FormikCheckbox — the error is reachable without a blur", () => {
|
|
109
|
+
test("clicking marks the field touched, so the message appears", async () => {
|
|
110
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
|
|
111
|
+
initialValue: false,
|
|
112
|
+
required: true
|
|
113
|
+
}));
|
|
114
|
+
|
|
115
|
+
/* Untouched: no message, however invalid the value is. */
|
|
116
|
+
expect(_react2.screen.queryByRole("alert")).not.toBeInTheDocument();
|
|
117
|
+
|
|
118
|
+
/* Check then uncheck — the field is now touched AND invalid. */
|
|
119
|
+
await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
|
|
120
|
+
await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
|
|
121
|
+
expect(_react2.screen.getByRole("alert")).toHaveTextContent("Cochez cette case pour continuer.");
|
|
122
|
+
});
|
|
123
|
+
test("the message becomes the group's accessible description", async () => {
|
|
124
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
|
|
125
|
+
initialValue: false,
|
|
126
|
+
required: true
|
|
127
|
+
}));
|
|
128
|
+
await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
|
|
129
|
+
await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
|
|
130
|
+
expect(_react2.screen.getByRole("group")).toHaveAccessibleDescription("Cochez cette case pour continuer.");
|
|
131
|
+
});
|
|
132
|
+
test("the hint shows while valid and is suppressed by the error", async () => {
|
|
133
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
|
|
134
|
+
initialValue: false,
|
|
135
|
+
required: true,
|
|
136
|
+
hint: "Obligatoire pour soumettre la demande"
|
|
137
|
+
}));
|
|
138
|
+
expect(_react2.screen.getByText("Obligatoire pour soumettre la demande")).toBeInTheDocument();
|
|
139
|
+
await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
|
|
140
|
+
await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
|
|
141
|
+
expect(_react2.screen.queryByText("Obligatoire pour soumettre la demande")).not.toBeInTheDocument();
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe("FormikCheckbox — ARIA and DOM hygiene", () => {
|
|
145
|
+
test("`required` puts aria-required on the INPUT, not on the group", () => {
|
|
146
|
+
/* Field's own injection lands on the CheckboxGroup, which is a role=group
|
|
147
|
+
* div and does not forward it — hence the explicit inputProps route. */
|
|
148
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
|
|
149
|
+
initialValue: false,
|
|
150
|
+
required: true
|
|
151
|
+
}));
|
|
152
|
+
expect(_react2.screen.getByRole("checkbox")).toHaveAttribute("aria-required", "true");
|
|
153
|
+
});
|
|
154
|
+
test("the label names the checkbox", () => {
|
|
155
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
|
|
156
|
+
initialValue: false
|
|
157
|
+
}));
|
|
158
|
+
expect(_react2.screen.getByRole("checkbox", {
|
|
159
|
+
name: /Première déclaration/
|
|
160
|
+
})).toBeInTheDocument();
|
|
161
|
+
});
|
|
162
|
+
test("no `error` attribute leaks onto the native input", async () => {
|
|
163
|
+
/* The CheckboxGroup wrapper is what absorbs Field's `error` clone. Without
|
|
164
|
+
* it React warns and the DOM carries an invalid attribute — with no visual
|
|
165
|
+
* tell whatsoever. */
|
|
166
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Hote, {
|
|
167
|
+
initialValue: false,
|
|
168
|
+
required: true
|
|
169
|
+
}));
|
|
170
|
+
await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
|
|
171
|
+
await _userEvent.default.click(_react2.screen.getByRole("checkbox"));
|
|
172
|
+
expect(_react2.screen.getByRole("checkbox")).not.toHaveAttribute("error");
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
//# sourceMappingURL=FormikCheckbox.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormikCheckbox.test.js","names":["require","React","_interopRequireWildcard","_react2","_userEvent","_interopRequireDefault","_formik","_FormikCheckbox","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Hote","initialValue","required","onValues","props","jsx","Formik","initialValues","flag","validate","values","onSubmit","undefined","children","Form","name","label","describe","test","vues","render","v","push","userEvent","click","screen","getByRole","expect","at","toBe","some","Array","isArray","avertissements","spy","jest","spyOn","console","mockImplementation","args","not","toBeChecked","a","String","includes","mockRestore","queryByRole","toBeInTheDocument","toHaveTextContent","toHaveAccessibleDescription","hint","getByText","queryByText","toHaveAttribute"],"sources":["../../../src/lib/v2/__tests__/FormikCheckbox.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport * as React from \"react\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport userEvent from \"@testing-library/user-event\";\r\nimport { Formik, Form } from \"formik\";\r\nimport FormikCheckbox from \"../patterns/FormikCheckbox\";\r\n\r\n/**\r\n * FormikCheckbox — contract tests (gap G-A).\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST. But the contracts worth pinning here are the ones a\r\n * screenshot cannot see, and each of them is a real defect this bridge was\r\n * created to stop repeating:\r\n *\r\n * 1. THE VALUE SHAPE. This component exists because `FormikCheckboxGroup`\r\n * writes an ARRAY. If a refactor ever routed this bridge through the group,\r\n * hosts would start sending `[\"on\"]` where their payload declares a\r\n * boolean — visually identical, and wrong all the way to the database.\r\n *\r\n * 2. TOUCHED-ON-CHANGE. A checkbox has no meaningful blur-before-change, so\r\n * if the field is only marked touched on blur, a required-checkbox error\r\n * stays invisible however many times the user clicks. That is exactly the\r\n * defect reported from refonte-frontend, where a hand-rolled bridge\r\n * rendered no message at all.\r\n *\r\n * 3. `aria-required` LANDS ON THE INPUT. `Field` injects it onto its child,\r\n * which here is the CheckboxGroup — a `role=\"group\"` div that does not\r\n * forward it. Assert the input, not the group.\r\n *\r\n * 4. NO `error` ATTRIBUTE ON THE DOM. `Field` clones its child with\r\n * `error`/`disabled` for the v2 inputs that read them directly. A bare\r\n * `Checkbox` would spread `error` down to the native input; the\r\n * CheckboxGroup wrapper is what absorbs it. Drop the wrapper and React\r\n * starts warning while every pixel stays identical.\r\n *\r\n * NOT COVERED — deliberately: the asterisk colour and the grey error panel are\r\n * CSS variables, which jsdom does not resolve. Those belong to the story.\r\n */\r\n\r\n/** Minimal host: a Formik form exposing its values for assertion. */\r\nfunction Hote({\r\n initialValue,\r\n required,\r\n onValues,\r\n ...props\r\n}: {\r\n initialValue: boolean | null;\r\n required?: boolean;\r\n onValues?: (values: { flag: unknown }) => void;\r\n label?: React.ReactNode;\r\n hint?: React.ReactNode;\r\n}) {\r\n return (\r\n <Formik\r\n initialValues={{ flag: initialValue }}\r\n validate={(values) =>\r\n required && values.flag !== true\r\n ? { flag: \"Cochez cette case pour continuer.\" }\r\n : {}\r\n }\r\n onSubmit={() => undefined}\r\n >\r\n {({ values }) => {\r\n onValues?.(values);\r\n return (\r\n <Form>\r\n <FormikCheckbox\r\n name=\"flag\"\r\n label=\"Première déclaration\"\r\n {...(required !== undefined ? { required } : {})}\r\n {...props}\r\n />\r\n </Form>\r\n );\r\n }}\r\n </Formik>\r\n );\r\n}\r\n\r\ndescribe(\"FormikCheckbox — the value stays a BOOLEAN\", () => {\r\n test(\"toggling writes `true`, untoggling writes `false` — never an array\", async () => {\r\n const vues: unknown[] = [];\r\n render(\r\n <Hote initialValue={false} onValues={(v) => vues.push(v.flag)} />\r\n );\r\n\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n expect(vues.at(-1)).toBe(true);\r\n\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n expect(vues.at(-1)).toBe(false);\r\n\r\n /* The point of the assertion: not one intermediate value was an array. */\r\n expect(vues.some((v) => Array.isArray(v))).toBe(false);\r\n });\r\n\r\n test(\"a `null` seed renders a CONTROLLED, unchecked input\", () => {\r\n /* Hosts seed these flags with `null` (« not answered yet »). Passing that\r\n * straight to `checked` makes React treat the input as uncontrolled for one\r\n * render, then warn and lose the first click. */\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(\"checkbox\")).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\r\ndescribe(\"FormikCheckbox — the error is reachable without a blur\", () => {\r\n test(\"clicking marks the field touched, so the message appears\", async () => {\r\n render(<Hote initialValue={false} required />);\r\n\r\n /* Untouched: no message, however invalid the value is. */\r\n expect(screen.queryByRole(\"alert\")).not.toBeInTheDocument();\r\n\r\n /* Check then uncheck — the field is now touched AND invalid. */\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n\r\n expect(screen.getByRole(\"alert\")).toHaveTextContent(\r\n \"Cochez cette case pour continuer.\"\r\n );\r\n });\r\n\r\n test(\"the message becomes the group's accessible description\", async () => {\r\n render(<Hote initialValue={false} required />);\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n\r\n expect(screen.getByRole(\"group\")).toHaveAccessibleDescription(\r\n \"Cochez cette case pour continuer.\"\r\n );\r\n });\r\n\r\n test(\"the hint shows while valid and is suppressed by the error\", async () => {\r\n render(\r\n <Hote\r\n initialValue={false}\r\n required\r\n hint=\"Obligatoire pour soumettre la demande\"\r\n />\r\n );\r\n\r\n expect(\r\n screen.getByText(\"Obligatoire pour soumettre la demande\")\r\n ).toBeInTheDocument();\r\n\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n\r\n expect(\r\n screen.queryByText(\"Obligatoire pour soumettre la demande\")\r\n ).not.toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"FormikCheckbox — ARIA and DOM hygiene\", () => {\r\n test(\"`required` puts aria-required on the INPUT, not on the group\", () => {\r\n /* Field's own injection lands on the CheckboxGroup, which is a role=group\r\n * div and does not forward it — hence the explicit inputProps route. */\r\n render(<Hote initialValue={false} required />);\r\n\r\n expect(screen.getByRole(\"checkbox\")).toHaveAttribute(\r\n \"aria-required\",\r\n \"true\"\r\n );\r\n });\r\n\r\n test(\"the label names the checkbox\", () => {\r\n render(<Hote initialValue={false} />);\r\n expect(\r\n screen.getByRole(\"checkbox\", { name: /Première déclaration/ })\r\n ).toBeInTheDocument();\r\n });\r\n\r\n test(\"no `error` attribute leaks onto the native input\", async () => {\r\n /* The CheckboxGroup wrapper is what absorbs Field's `error` clone. Without\r\n * it React warns and the DOM carries an invalid attribute — with no visual\r\n * tell whatsoever. */\r\n render(<Hote initialValue={false} required />);\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n await userEvent.click(screen.getByRole(\"checkbox\"));\r\n\r\n expect(screen.getByRole(\"checkbox\")).not.toHaveAttribute(\"error\");\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|