@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,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("@testing-library/jest-dom");
|
|
4
|
+
var _react = require("@testing-library/react");
|
|
5
|
+
var _AppMain = _interopRequireDefault(require("../patterns/AppMain"));
|
|
6
|
+
var _SkipLink = _interopRequireDefault(require("../components/SkipLink"));
|
|
7
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
describe("AppMain", () => {
|
|
10
|
+
it("renders a main landmark holding its children", () => {
|
|
11
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
12
|
+
children: "contenu"
|
|
13
|
+
}));
|
|
14
|
+
const main = _react.screen.getByRole("main");
|
|
15
|
+
expect(main).toHaveTextContent("contenu");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
/* The id is half of a contract: SkipLink's default href is "#main-content". */
|
|
19
|
+
it("defaults its id to SkipLink's default target", () => {
|
|
20
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
21
|
+
children: "x"
|
|
22
|
+
}));
|
|
23
|
+
expect(_react.screen.getByRole("main")).toHaveAttribute("id", "main-content");
|
|
24
|
+
});
|
|
25
|
+
it("accepts a custom id", () => {
|
|
26
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
27
|
+
id: "zone-principale",
|
|
28
|
+
children: "x"
|
|
29
|
+
}));
|
|
30
|
+
expect(_react.screen.getByRole("main")).toHaveAttribute("id", "zone-principale");
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
/* Focusable programmatically, NOT a tab stop. */
|
|
34
|
+
it("is programmatically focusable without joining the tab order", () => {
|
|
35
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
36
|
+
children: "x"
|
|
37
|
+
}));
|
|
38
|
+
expect(_react.screen.getByRole("main")).toHaveAttribute("tabindex", "-1");
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
/* R-L.5 — and the cap is meaningless without the auto margins: the content
|
|
42
|
+
* would pin left and leave the whole surplus as one gutter. */
|
|
43
|
+
it("caps the wide measure and centres it", () => {
|
|
44
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
45
|
+
children: "x"
|
|
46
|
+
}));
|
|
47
|
+
const main = _react.screen.getByRole("main");
|
|
48
|
+
expect(main.style.maxWidth).toBe("var(--content-max)");
|
|
49
|
+
expect(main.style.marginInline).toBe("auto");
|
|
50
|
+
});
|
|
51
|
+
it("caps the form measure at the form token", () => {
|
|
52
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
53
|
+
measure: "form",
|
|
54
|
+
children: "x"
|
|
55
|
+
}));
|
|
56
|
+
expect(_react.screen.getByRole("main").style.maxWidth).toBe("var(--form-max)");
|
|
57
|
+
});
|
|
58
|
+
it("applies no cap for the full measure", () => {
|
|
59
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
60
|
+
measure: "full",
|
|
61
|
+
children: "x"
|
|
62
|
+
}));
|
|
63
|
+
const main = _react.screen.getByRole("main");
|
|
64
|
+
expect(main.style.maxWidth).toBe("");
|
|
65
|
+
expect(main.style.marginInline).toBe("");
|
|
66
|
+
});
|
|
67
|
+
it("reserves a minimum height, overridable", () => {
|
|
68
|
+
const {
|
|
69
|
+
unmount
|
|
70
|
+
} = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
71
|
+
children: "x"
|
|
72
|
+
}));
|
|
73
|
+
expect(_react.screen.getByRole("main").style.minHeight).toBe("100vh");
|
|
74
|
+
unmount();
|
|
75
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
76
|
+
minHeight: "480px",
|
|
77
|
+
children: "x"
|
|
78
|
+
}));
|
|
79
|
+
expect(_react.screen.getByRole("main").style.minHeight).toBe("480px");
|
|
80
|
+
});
|
|
81
|
+
it("lets an explicit style win over the computed one", () => {
|
|
82
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
83
|
+
style: {
|
|
84
|
+
maxWidth: "960px"
|
|
85
|
+
},
|
|
86
|
+
children: "x"
|
|
87
|
+
}));
|
|
88
|
+
expect(_react.screen.getByRole("main").style.maxWidth).toBe("960px");
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
/* PRE-CONTENT — the case that made these two props exist. A host rendering
|
|
92
|
+
* the landmark before its router mounts (R-Pp.1) has nothing inside to name
|
|
93
|
+
* it, and an empty landmark is indistinguishable from a failed one. */
|
|
94
|
+
it("names and marks the region busy when asked", () => {
|
|
95
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
96
|
+
ariaLabel: "Initialisation de l'application",
|
|
97
|
+
ariaBusy: true,
|
|
98
|
+
children: null
|
|
99
|
+
}));
|
|
100
|
+
const main = _react.screen.getByRole("main");
|
|
101
|
+
expect(main).toHaveAccessibleName("Initialisation de l'application");
|
|
102
|
+
expect(main).toHaveAttribute("aria-busy", "true");
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
/* And stays silent otherwise: a `<main>` holding content needs no name, and
|
|
106
|
+
* a spurious `aria-busy="false"` on every page would be noise in the tree. */
|
|
107
|
+
it("emits neither attribute by default", () => {
|
|
108
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
109
|
+
children: "contenu"
|
|
110
|
+
}));
|
|
111
|
+
const main = _react.screen.getByRole("main");
|
|
112
|
+
expect(main).not.toHaveAttribute("aria-label");
|
|
113
|
+
expect(main).not.toHaveAttribute("aria-busy");
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
/* THE CONTRACT THIS PATTERN COMPLETES (WCAG 2.4.1 / R-N.6). Until now the
|
|
117
|
+
* library shipped the link and prescribed the target without providing it,
|
|
118
|
+
* so this pairing was only ever exercised in module code. */
|
|
119
|
+
it("receives focus when the skip link is activated", () => {
|
|
120
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
121
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_SkipLink.default, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_AppMain.default, {
|
|
122
|
+
children: "contenu"
|
|
123
|
+
})]
|
|
124
|
+
}));
|
|
125
|
+
|
|
126
|
+
/* fireEvent rather than user-event: the assertion is about SkipLink's own
|
|
127
|
+
click handler moving focus, and it keeps this suite free of a testing
|
|
128
|
+
dependency the repo may not carry. */
|
|
129
|
+
_react.fireEvent.click(_react.screen.getByRole("link"));
|
|
130
|
+
expect(_react.screen.getByRole("main")).toHaveFocus();
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=AppMain.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppMain.test.js","names":["require","_react","_AppMain","_interopRequireDefault","_SkipLink","_jsxRuntime","e","__esModule","default","describe","it","render","jsx","children","main","screen","getByRole","expect","toHaveTextContent","toHaveAttribute","id","style","maxWidth","toBe","marginInline","measure","unmount","minHeight","ariaLabel","ariaBusy","toHaveAccessibleName","not","jsxs","Fragment","fireEvent","click","toHaveFocus"],"sources":["../../../src/lib/v2/__tests__/AppMain.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { fireEvent, render, screen } from \"@testing-library/react\";\r\n\r\nimport AppMain from \"../patterns/AppMain\";\r\nimport SkipLink from \"../components/SkipLink\";\r\n\r\ndescribe(\"AppMain\", () => {\r\n it(\"renders a main landmark holding its children\", () => {\r\n render(<AppMain>contenu</AppMain>);\r\n const main = screen.getByRole(\"main\");\r\n expect(main).toHaveTextContent(\"contenu\");\r\n });\r\n\r\n /* The id is half of a contract: SkipLink's default href is \"#main-content\". */\r\n it(\"defaults its id to SkipLink's default target\", () => {\r\n render(<AppMain>x</AppMain>);\r\n expect(screen.getByRole(\"main\")).toHaveAttribute(\"id\", \"main-content\");\r\n });\r\n\r\n it(\"accepts a custom id\", () => {\r\n render(<AppMain id=\"zone-principale\">x</AppMain>);\r\n expect(screen.getByRole(\"main\")).toHaveAttribute(\"id\", \"zone-principale\");\r\n });\r\n\r\n /* Focusable programmatically, NOT a tab stop. */\r\n it(\"is programmatically focusable without joining the tab order\", () => {\r\n render(<AppMain>x</AppMain>);\r\n expect(screen.getByRole(\"main\")).toHaveAttribute(\"tabindex\", \"-1\");\r\n });\r\n\r\n /* R-L.5 — and the cap is meaningless without the auto margins: the content\r\n * would pin left and leave the whole surplus as one gutter. */\r\n it(\"caps the wide measure and centres it\", () => {\r\n render(<AppMain>x</AppMain>);\r\n const main = screen.getByRole(\"main\");\r\n expect(main.style.maxWidth).toBe(\"var(--content-max)\");\r\n expect(main.style.marginInline).toBe(\"auto\");\r\n });\r\n\r\n it(\"caps the form measure at the form token\", () => {\r\n render(<AppMain measure=\"form\">x</AppMain>);\r\n expect(screen.getByRole(\"main\").style.maxWidth).toBe(\"var(--form-max)\");\r\n });\r\n\r\n it(\"applies no cap for the full measure\", () => {\r\n render(<AppMain measure=\"full\">x</AppMain>);\r\n const main = screen.getByRole(\"main\");\r\n expect(main.style.maxWidth).toBe(\"\");\r\n expect(main.style.marginInline).toBe(\"\");\r\n });\r\n\r\n it(\"reserves a minimum height, overridable\", () => {\r\n const { unmount } = render(<AppMain>x</AppMain>);\r\n expect(screen.getByRole(\"main\").style.minHeight).toBe(\"100vh\");\r\n unmount();\r\n\r\n render(<AppMain minHeight=\"480px\">x</AppMain>);\r\n expect(screen.getByRole(\"main\").style.minHeight).toBe(\"480px\");\r\n });\r\n\r\n it(\"lets an explicit style win over the computed one\", () => {\r\n render(<AppMain style={{ maxWidth: \"960px\" }}>x</AppMain>);\r\n expect(screen.getByRole(\"main\").style.maxWidth).toBe(\"960px\");\r\n });\r\n\r\n /* PRE-CONTENT — the case that made these two props exist. A host rendering\r\n * the landmark before its router mounts (R-Pp.1) has nothing inside to name\r\n * it, and an empty landmark is indistinguishable from a failed one. */\r\n it(\"names and marks the region busy when asked\", () => {\r\n render(\r\n <AppMain ariaLabel=\"Initialisation de l'application\" ariaBusy>\r\n {null}\r\n </AppMain>\r\n );\r\n\r\n const main = screen.getByRole(\"main\");\r\n expect(main).toHaveAccessibleName(\"Initialisation de l'application\");\r\n expect(main).toHaveAttribute(\"aria-busy\", \"true\");\r\n });\r\n\r\n /* And stays silent otherwise: a `<main>` holding content needs no name, and\r\n * a spurious `aria-busy=\"false\"` on every page would be noise in the tree. */\r\n it(\"emits neither attribute by default\", () => {\r\n render(<AppMain>contenu</AppMain>);\r\n const main = screen.getByRole(\"main\");\r\n expect(main).not.toHaveAttribute(\"aria-label\");\r\n expect(main).not.toHaveAttribute(\"aria-busy\");\r\n });\r\n\r\n /* THE CONTRACT THIS PATTERN COMPLETES (WCAG 2.4.1 / R-N.6). Until now the\r\n * library shipped the link and prescribed the target without providing it,\r\n * so this pairing was only ever exercised in module code. */\r\n it(\"receives focus when the skip link is activated\", () => {\r\n render(\r\n <>\r\n <SkipLink />\r\n <AppMain>contenu</AppMain>\r\n </>\r\n );\r\n\r\n /* fireEvent rather than user-event: the assertion is about SkipLink's own\r\n click handler moving focus, and it keeps this suite free of a testing\r\n dependency the repo may not carry. */\r\n fireEvent.click(screen.getByRole(\"link\"));\r\n\r\n expect(screen.getByRole(\"main\")).toHaveFocus();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("@testing-library/jest-dom");
|
|
4
|
+
var _react = require("@testing-library/react");
|
|
5
|
+
var _ChartFigure = _interopRequireDefault(require("../patterns/ChartFigure"));
|
|
6
|
+
var _chart = require("../tokens/chart");
|
|
7
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
describe("ChartFigure", () => {
|
|
10
|
+
it("renders a figure with its heading, chart and caption", () => {
|
|
11
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
|
|
12
|
+
title: "Dossiers par type",
|
|
13
|
+
caption: "Admission : 128 (64 %). Renouvellement : 72 (36 %).",
|
|
14
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
15
|
+
"data-testid": "canvas",
|
|
16
|
+
children: "graphe"
|
|
17
|
+
})
|
|
18
|
+
}));
|
|
19
|
+
expect(_react.screen.getByRole("figure")).toBeInTheDocument();
|
|
20
|
+
expect(_react.screen.getByRole("heading", {
|
|
21
|
+
name: "Dossiers par type"
|
|
22
|
+
})).toBeInTheDocument();
|
|
23
|
+
expect(_react.screen.getByTestId("canvas")).toBeInTheDocument();
|
|
24
|
+
expect(_react.screen.getByText("Admission : 128 (64 %). Renouvellement : 72 (36 %).")).toBeInTheDocument();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
/* The heading is REAL TEXT, not an SVG title: selectable, translatable, and
|
|
28
|
+
* reachable as a heading. The renderer's own `title` option stays empty. */
|
|
29
|
+
it("exposes the title as a heading at h3 by default", () => {
|
|
30
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
|
|
31
|
+
title: "R\xE9partition",
|
|
32
|
+
caption: "\u2026",
|
|
33
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {})
|
|
34
|
+
}));
|
|
35
|
+
expect(_react.screen.getByRole("heading", {
|
|
36
|
+
name: "Répartition"
|
|
37
|
+
}).tagName).toBe("H3");
|
|
38
|
+
});
|
|
39
|
+
it("accepts another heading level", () => {
|
|
40
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
|
|
41
|
+
title: "R\xE9partition",
|
|
42
|
+
caption: "\u2026",
|
|
43
|
+
level: "h2",
|
|
44
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {})
|
|
45
|
+
}));
|
|
46
|
+
expect(_react.screen.getByRole("heading", {
|
|
47
|
+
name: "Répartition"
|
|
48
|
+
}).tagName).toBe("H2");
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
/* A renderer emits dozens of unstructured SVG text nodes; a screen reader
|
|
52
|
+
* walks them one by one, in visual order. That is noise, and the caption
|
|
53
|
+
* speaks for the canvas instead. */
|
|
54
|
+
it("hides the canvas from assistive technology by default", () => {
|
|
55
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
|
|
56
|
+
title: "T",
|
|
57
|
+
caption: "C",
|
|
58
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
59
|
+
"data-testid": "canvas",
|
|
60
|
+
children: "graphe"
|
|
61
|
+
})
|
|
62
|
+
}));
|
|
63
|
+
expect(_react.screen.getByTestId("canvas").parentElement).toHaveAttribute("aria-hidden", "true");
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
/* Escape hatch for a renderer that builds its own accessible data table. */
|
|
67
|
+
it("can leave the canvas exposed", () => {
|
|
68
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
|
|
69
|
+
title: "T",
|
|
70
|
+
caption: "C",
|
|
71
|
+
hideCanvasFromScreenReaders: false,
|
|
72
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
73
|
+
"data-testid": "canvas",
|
|
74
|
+
children: "graphe"
|
|
75
|
+
})
|
|
76
|
+
}));
|
|
77
|
+
expect(_react.screen.getByTestId("canvas").parentElement).not.toHaveAttribute("aria-hidden");
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
/* R-R.4 — the caption must not jump down the page when the chart paints. */
|
|
81
|
+
it("reserves the canvas height when asked", () => {
|
|
82
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
|
|
83
|
+
title: "T",
|
|
84
|
+
caption: "C",
|
|
85
|
+
minHeight: 320,
|
|
86
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
87
|
+
"data-testid": "canvas"
|
|
88
|
+
})
|
|
89
|
+
}));
|
|
90
|
+
expect(_react.screen.getByTestId("canvas").parentElement?.style.minHeight).toBe("320px");
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
/* The caption is VISIBLE, not visually-hidden: the numbers help the reader
|
|
94
|
+
* who can see the chart too, and a caption nobody sees is a caption nobody
|
|
95
|
+
* notices has gone stale. */
|
|
96
|
+
it("renders the caption as a visible figcaption", () => {
|
|
97
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
|
|
98
|
+
title: "T",
|
|
99
|
+
caption: "Approuv\xE9s : 12",
|
|
100
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {})
|
|
101
|
+
}));
|
|
102
|
+
const caption = _react.screen.getByText("Approuvés : 12");
|
|
103
|
+
expect(caption.tagName).toBe("FIGCAPTION");
|
|
104
|
+
expect(caption).toBeVisible();
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
/* ── Tolérance aux pannes (ISO/IEC 25010, lot 12 Area 12) ──────────
|
|
109
|
+
*
|
|
110
|
+
* Le canevas héberge un moteur de graphes TIERS alimenté par des agrégats dont
|
|
111
|
+
* les modèles déclarent tous les champs optionnels. Sans frontière, une
|
|
112
|
+
* exception au rendu démonte tout l'arbre : la page de bilan entière, bande de
|
|
113
|
+
* KPI et tableau compris — le tableau qui porte précisément les chiffres que le
|
|
114
|
+
* graphe dessinait.
|
|
115
|
+
*
|
|
116
|
+
* `console.error` est réduit au silence sur ces deux cas : React journalise
|
|
117
|
+
* toute exception capturée par une frontière, et c'est du bruit attendu ici,
|
|
118
|
+
* pas un signal. */
|
|
119
|
+
describe("ChartFigure — tolérance aux pannes", () => {
|
|
120
|
+
const Exploding = () => {
|
|
121
|
+
throw new Error("series[0].data is not iterable");
|
|
122
|
+
};
|
|
123
|
+
let consoleError;
|
|
124
|
+
beforeEach(() => {
|
|
125
|
+
consoleError = jest.spyOn(console, "error").mockImplementation(() => {});
|
|
126
|
+
});
|
|
127
|
+
afterEach(() => {
|
|
128
|
+
consoleError.mockRestore();
|
|
129
|
+
});
|
|
130
|
+
it("contient la panne dans la carte, titre et légende intacts", () => {
|
|
131
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
|
|
132
|
+
title: "Dossiers par type",
|
|
133
|
+
caption: "Admission : 128 (64 %). Renouvellement : 72 (36 %).",
|
|
134
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Exploding, {})
|
|
135
|
+
}));
|
|
136
|
+
|
|
137
|
+
/* Ce qui compte : la figure EXISTE encore, et surtout la légende — elle
|
|
138
|
+
porte les chiffres en texte, donc le lecteur obtient la DONNÉE même quand
|
|
139
|
+
le dessin a disparu. */
|
|
140
|
+
expect(_react.screen.getByRole("figure")).toBeInTheDocument();
|
|
141
|
+
expect(_react.screen.getByRole("heading", {
|
|
142
|
+
name: "Dossiers par type"
|
|
143
|
+
})).toBeInTheDocument();
|
|
144
|
+
expect(_react.screen.getByText("Admission : 128 (64 %). Renouvellement : 72 (36 %).")).toBeInTheDocument();
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
/* LA PARTIE FRAGILE. La frontière doit envelopper le `div` `aria-hidden`, pas
|
|
148
|
+
* y vivre : placée dedans, sa bannière d'erreur hériterait de l'`aria-hidden`
|
|
149
|
+
* et aucun lecteur d'écran ne l'annoncerait. Un voyant verrait la panne, un
|
|
150
|
+
* non-voyant n'entendrait rien — et rien à l'écran ne le révélerait. */
|
|
151
|
+
it("annonce l'erreur aux technologies d'assistance", () => {
|
|
152
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartFigure.default, {
|
|
153
|
+
title: "Dossiers par type",
|
|
154
|
+
caption: "\u2014",
|
|
155
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Exploding, {})
|
|
156
|
+
}));
|
|
157
|
+
const alert = _react.screen.getByRole("alert");
|
|
158
|
+
expect(alert).toBeInTheDocument();
|
|
159
|
+
expect(alert.closest("[aria-hidden='true']")).toBeNull();
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe("chartChrome", () => {
|
|
163
|
+
/* A hard-coded white canvas is what breaks a chart in dark mode. */
|
|
164
|
+
it("keeps the canvas transparent", () => {
|
|
165
|
+
expect(_chart.chartChrome.background).toBe("transparent");
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
/* Chart libraries hand their style objects to SVG attributes, which never get
|
|
169
|
+
* a unit appended for free — a bare 16 is ignored by some renderers. */
|
|
170
|
+
it("gives font sizes with units", () => {
|
|
171
|
+
expect(_chart.chartChrome.title.fontSize).toMatch(/^\d+px$/);
|
|
172
|
+
expect(_chart.chartChrome.label.fontSize).toMatch(/^\d+px$/);
|
|
173
|
+
});
|
|
174
|
+
it("maps the roles onto distinct ink tokens", () => {
|
|
175
|
+
expect(_chart.chartChrome.title.color).not.toBe(_chart.chartChrome.label.color);
|
|
176
|
+
});
|
|
177
|
+
it("is frozen, so no consumer can mutate the shared mapping", () => {
|
|
178
|
+
expect(Object.isFrozen(_chart.chartChrome)).toBe(true);
|
|
179
|
+
expect(Object.isFrozen(_chart.chartChrome.title)).toBe(true);
|
|
180
|
+
expect(Object.isFrozen(_chart.chartChrome.label)).toBe(true);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
//# sourceMappingURL=ChartFigure.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartFigure.test.js","names":["require","_react","_ChartFigure","_interopRequireDefault","_chart","_jsxRuntime","e","__esModule","default","describe","it","render","jsx","title","caption","children","expect","screen","getByRole","toBeInTheDocument","name","getByTestId","getByText","tagName","toBe","level","parentElement","toHaveAttribute","hideCanvasFromScreenReaders","not","minHeight","style","toBeVisible","Exploding","Error","consoleError","beforeEach","jest","spyOn","console","mockImplementation","afterEach","mockRestore","alert","closest","toBeNull","chartChrome","background","fontSize","toMatch","label","color","Object","isFrozen"],"sources":["../../../src/lib/v2/__tests__/ChartFigure.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\n\r\nimport ChartFigure from \"../patterns/ChartFigure\";\r\nimport { chartChrome } from \"../tokens/chart\";\r\n\r\ndescribe(\"ChartFigure\", () => {\r\n it(\"renders a figure with its heading, chart and caption\", () => {\r\n render(\r\n <ChartFigure\r\n title=\"Dossiers par type\"\r\n caption=\"Admission : 128 (64 %). Renouvellement : 72 (36 %).\"\r\n >\r\n <div data-testid=\"canvas\">graphe</div>\r\n </ChartFigure>\r\n );\r\n\r\n expect(screen.getByRole(\"figure\")).toBeInTheDocument();\r\n expect(\r\n screen.getByRole(\"heading\", { name: \"Dossiers par type\" })\r\n ).toBeInTheDocument();\r\n expect(screen.getByTestId(\"canvas\")).toBeInTheDocument();\r\n expect(\r\n screen.getByText(\"Admission : 128 (64 %). Renouvellement : 72 (36 %).\")\r\n ).toBeInTheDocument();\r\n });\r\n\r\n /* The heading is REAL TEXT, not an SVG title: selectable, translatable, and\r\n * reachable as a heading. The renderer's own `title` option stays empty. */\r\n it(\"exposes the title as a heading at h3 by default\", () => {\r\n render(\r\n <ChartFigure title=\"Répartition\" caption=\"…\">\r\n <div />\r\n </ChartFigure>\r\n );\r\n expect(screen.getByRole(\"heading\", { name: \"Répartition\" }).tagName).toBe(\r\n \"H3\"\r\n );\r\n });\r\n\r\n it(\"accepts another heading level\", () => {\r\n render(\r\n <ChartFigure title=\"Répartition\" caption=\"…\" level=\"h2\">\r\n <div />\r\n </ChartFigure>\r\n );\r\n expect(screen.getByRole(\"heading\", { name: \"Répartition\" }).tagName).toBe(\r\n \"H2\"\r\n );\r\n });\r\n\r\n /* A renderer emits dozens of unstructured SVG text nodes; a screen reader\r\n * walks them one by one, in visual order. That is noise, and the caption\r\n * speaks for the canvas instead. */\r\n it(\"hides the canvas from assistive technology by default\", () => {\r\n render(\r\n <ChartFigure title=\"T\" caption=\"C\">\r\n <div data-testid=\"canvas\">graphe</div>\r\n </ChartFigure>\r\n );\r\n expect(screen.getByTestId(\"canvas\").parentElement).toHaveAttribute(\r\n \"aria-hidden\",\r\n \"true\"\r\n );\r\n });\r\n\r\n /* Escape hatch for a renderer that builds its own accessible data table. */\r\n it(\"can leave the canvas exposed\", () => {\r\n render(\r\n <ChartFigure title=\"T\" caption=\"C\" hideCanvasFromScreenReaders={false}>\r\n <div data-testid=\"canvas\">graphe</div>\r\n </ChartFigure>\r\n );\r\n expect(screen.getByTestId(\"canvas\").parentElement).not.toHaveAttribute(\r\n \"aria-hidden\"\r\n );\r\n });\r\n\r\n /* R-R.4 — the caption must not jump down the page when the chart paints. */\r\n it(\"reserves the canvas height when asked\", () => {\r\n render(\r\n <ChartFigure title=\"T\" caption=\"C\" minHeight={320}>\r\n <div data-testid=\"canvas\" />\r\n </ChartFigure>\r\n );\r\n expect(screen.getByTestId(\"canvas\").parentElement?.style.minHeight).toBe(\r\n \"320px\"\r\n );\r\n });\r\n\r\n /* The caption is VISIBLE, not visually-hidden: the numbers help the reader\r\n * who can see the chart too, and a caption nobody sees is a caption nobody\r\n * notices has gone stale. */\r\n it(\"renders the caption as a visible figcaption\", () => {\r\n render(\r\n <ChartFigure title=\"T\" caption=\"Approuvés : 12\">\r\n <div />\r\n </ChartFigure>\r\n );\r\n const caption = screen.getByText(\"Approuvés : 12\");\r\n expect(caption.tagName).toBe(\"FIGCAPTION\");\r\n expect(caption).toBeVisible();\r\n });\r\n});\r\n\r\n/* ── Tolérance aux pannes (ISO/IEC 25010, lot 12 Area 12) ──────────\r\n *\r\n * Le canevas héberge un moteur de graphes TIERS alimenté par des agrégats dont\r\n * les modèles déclarent tous les champs optionnels. Sans frontière, une\r\n * exception au rendu démonte tout l'arbre : la page de bilan entière, bande de\r\n * KPI et tableau compris — le tableau qui porte précisément les chiffres que le\r\n * graphe dessinait.\r\n *\r\n * `console.error` est réduit au silence sur ces deux cas : React journalise\r\n * toute exception capturée par une frontière, et c'est du bruit attendu ici,\r\n * pas un signal. */\r\ndescribe(\"ChartFigure — tolérance aux pannes\", () => {\r\n const Exploding = () => {\r\n throw new Error(\"series[0].data is not iterable\");\r\n };\r\n\r\n let consoleError: jest.SpyInstance;\r\n\r\n beforeEach(() => {\r\n consoleError = jest.spyOn(console, \"error\").mockImplementation(() => {});\r\n });\r\n\r\n afterEach(() => {\r\n consoleError.mockRestore();\r\n });\r\n\r\n it(\"contient la panne dans la carte, titre et légende intacts\", () => {\r\n render(\r\n <ChartFigure\r\n title=\"Dossiers par type\"\r\n caption=\"Admission : 128 (64 %). Renouvellement : 72 (36 %).\"\r\n >\r\n <Exploding />\r\n </ChartFigure>\r\n );\r\n\r\n /* Ce qui compte : la figure EXISTE encore, et surtout la légende — elle\r\n porte les chiffres en texte, donc le lecteur obtient la DONNÉE même quand\r\n le dessin a disparu. */\r\n expect(screen.getByRole(\"figure\")).toBeInTheDocument();\r\n expect(\r\n screen.getByRole(\"heading\", { name: \"Dossiers par type\" })\r\n ).toBeInTheDocument();\r\n expect(\r\n screen.getByText(\"Admission : 128 (64 %). Renouvellement : 72 (36 %).\")\r\n ).toBeInTheDocument();\r\n });\r\n\r\n /* LA PARTIE FRAGILE. La frontière doit envelopper le `div` `aria-hidden`, pas\r\n * y vivre : placée dedans, sa bannière d'erreur hériterait de l'`aria-hidden`\r\n * et aucun lecteur d'écran ne l'annoncerait. Un voyant verrait la panne, un\r\n * non-voyant n'entendrait rien — et rien à l'écran ne le révélerait. */\r\n it(\"annonce l'erreur aux technologies d'assistance\", () => {\r\n render(\r\n <ChartFigure title=\"Dossiers par type\" caption=\"—\">\r\n <Exploding />\r\n </ChartFigure>\r\n );\r\n\r\n const alert = screen.getByRole(\"alert\");\r\n expect(alert).toBeInTheDocument();\r\n expect(alert.closest(\"[aria-hidden='true']\")).toBeNull();\r\n });\r\n});\r\n\r\ndescribe(\"chartChrome\", () => {\r\n /* A hard-coded white canvas is what breaks a chart in dark mode. */\r\n it(\"keeps the canvas transparent\", () => {\r\n expect(chartChrome.background).toBe(\"transparent\");\r\n });\r\n\r\n /* Chart libraries hand their style objects to SVG attributes, which never get\r\n * a unit appended for free — a bare 16 is ignored by some renderers. */\r\n it(\"gives font sizes with units\", () => {\r\n expect(chartChrome.title.fontSize).toMatch(/^\\d+px$/);\r\n expect(chartChrome.label.fontSize).toMatch(/^\\d+px$/);\r\n });\r\n\r\n it(\"maps the roles onto distinct ink tokens\", () => {\r\n expect(chartChrome.title.color).not.toBe(chartChrome.label.color);\r\n });\r\n\r\n it(\"is frozen, so no consumer can mutate the shared mapping\", () => {\r\n expect(Object.isFrozen(chartChrome)).toBe(true);\r\n expect(Object.isFrozen(chartChrome.title)).toBe(true);\r\n expect(Object.isFrozen(chartChrome.label)).toBe(true);\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("@testing-library/jest-dom");
|
|
4
|
+
var _react = require("@testing-library/react");
|
|
5
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
6
|
+
var _DataGrid = _interopRequireDefault(require("../patterns/DataGrid"));
|
|
7
|
+
var _rowActions = require("../patterns/rowActions");
|
|
8
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
/**
|
|
11
|
+
* DataGrid — la cellule d'actions contient ses propres événements.
|
|
12
|
+
*
|
|
13
|
+
* CE QUE CE FICHIER PROTÈGE, ET POURQUOI IL EXISTE
|
|
14
|
+
* ------------------------------------------------
|
|
15
|
+
* §Row Interaction fait du clic de ligne l'ouverture du drawer d'aperçu, et
|
|
16
|
+
* des actions de ligne l'affordance COMPLÉMENTAIRE. Les deux cohabitent donc
|
|
17
|
+
* sur toute grille de listing de la plateforme — et la cellule d'actions est
|
|
18
|
+
* un descendant de la ligne cliquable.
|
|
19
|
+
*
|
|
20
|
+
* Sans containment, activer une action déclenche AUSSI le clic de ligne :
|
|
21
|
+
* l'utilisateur obtient son action et, par-dessus, un drawer qui s'ouvre. Ce
|
|
22
|
+
* n'est pas rattrapable au niveau de l'action — `buildRowActions` décrit une
|
|
23
|
+
* action comme `onClick: (row) => void` et n'expose délibérément pas
|
|
24
|
+
* l'événement DOM, parce qu'un descripteur métier n'a pas à connaître la
|
|
25
|
+
* propagation. La cellule est le seul endroit qui tient l'invariant pour
|
|
26
|
+
* TOUTES les formes : le kebab, la rangée d'icônes, et n'importe quel
|
|
27
|
+
* renderer `rowActions` écrit par un hôte.
|
|
28
|
+
*
|
|
29
|
+
* Relevé par l'audit Area 3 d'`addm-fe`, dont les deux listings avaient écrit
|
|
30
|
+
* leur rangée d'icônes à la main précisément pour appeler `stopPropagation()`
|
|
31
|
+
* bouton par bouton — ce qui faisait passer l'adoption de `buildRowActions`
|
|
32
|
+
* pour une régression.
|
|
33
|
+
*
|
|
34
|
+
* Le test couvre les DEUX formes (`iconsUpTo` et le kebab) et les deux
|
|
35
|
+
* chemins (souris et clavier), parce que la ligne écoute `onClick` ET
|
|
36
|
+
* `onKeyDown`.
|
|
37
|
+
*
|
|
38
|
+
* POURQUOI `fireEvent` POUR LA SOURIS ET `userEvent` POUR LE CLAVIER
|
|
39
|
+
* -----------------------------------------------------------------
|
|
40
|
+
* `ROW_ACTIONS_OVERLAY_SX` porte `pointerEvents: "none"` et ne passe à `auto`
|
|
41
|
+
* que sous `tr:hover`, `tr:focus-within` ou `@media (pointer: coarse)`. jsdom
|
|
42
|
+
* ne résout ni les pseudo-classes d'état ni les media queries — même limite
|
|
43
|
+
* que celle documentée dans `FieldWidth.test.tsx` — donc l'overlay y reste
|
|
44
|
+
* inerte et `user-event` REFUSE de simuler un pointeur dessus. Son refus est
|
|
45
|
+
* correct : il modèle un utilisateur, et un utilisateur ne peut pas cliquer un
|
|
46
|
+
* élément à `pointer-events: none`. Ce que jsdom ne peut pas modéliser, c'est
|
|
47
|
+
* le survol qui précède ce clic dans un vrai navigateur.
|
|
48
|
+
*
|
|
49
|
+
* Neutraliser la garde (`pointerEventsCheck: Never`) serait prétendre simuler
|
|
50
|
+
* un utilisateur tout en désactivant la vérification qui rend la simulation
|
|
51
|
+
* crédible. `fireEvent.click` ne prétend rien : il émet un `MouseEvent` qui
|
|
52
|
+
* BULLE, ce qui est exactement et uniquement ce que ces deux tests examinent.
|
|
53
|
+
* Le chemin clavier, lui, ne passe pas par le hit-testing du pointeur, donc
|
|
54
|
+
* `userEvent` y reste l'outil juste — et c'est le chemin où la ligne écoute
|
|
55
|
+
* `onKeyDown`.
|
|
56
|
+
*
|
|
57
|
+
* Ce que ce fichier ne prouve donc PAS : que l'overlay est atteignable à la
|
|
58
|
+
* souris. Ça se vérifie dans la story, au survol.
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
const LIGNES = [{
|
|
62
|
+
id: 1,
|
|
63
|
+
reference: "2025-IM-0042"
|
|
64
|
+
}];
|
|
65
|
+
const COLONNES = [{
|
|
66
|
+
key: "reference",
|
|
67
|
+
header: "Référence"
|
|
68
|
+
}];
|
|
69
|
+
function renderGrille(options) {
|
|
70
|
+
const descripteurs = [{
|
|
71
|
+
id: "consulter",
|
|
72
|
+
label: "Consulter la ligne",
|
|
73
|
+
onClick: () => options.onAction()
|
|
74
|
+
}];
|
|
75
|
+
return (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_DataGrid.default, {
|
|
76
|
+
rows: LIGNES,
|
|
77
|
+
columns: COLONNES,
|
|
78
|
+
ariaLabel: "Lignes de test",
|
|
79
|
+
onRowClick: options.onRowClick,
|
|
80
|
+
rowActions: (0, _rowActions.buildRowActions)(descripteurs, "Actions sur la ligne", options.iconsUpTo !== undefined ? {
|
|
81
|
+
iconsUpTo: options.iconsUpTo
|
|
82
|
+
} : undefined)
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
describe("DataGrid — une action de ligne ne déclenche pas le clic de ligne", () => {
|
|
86
|
+
test("rangée d'icônes, à la souris", () => {
|
|
87
|
+
const onRowClick = jest.fn();
|
|
88
|
+
const onAction = jest.fn();
|
|
89
|
+
renderGrille({
|
|
90
|
+
onRowClick,
|
|
91
|
+
onAction,
|
|
92
|
+
iconsUpTo: 3
|
|
93
|
+
});
|
|
94
|
+
_react.fireEvent.click(_react.screen.getByRole("button", {
|
|
95
|
+
name: "Consulter la ligne"
|
|
96
|
+
}));
|
|
97
|
+
expect(onAction).toHaveBeenCalledTimes(1);
|
|
98
|
+
/* L'assertion qui compte : l'action a eu lieu, la ligne n'a pas été
|
|
99
|
+
* ouverte. Avant le containment, les deux se déclenchaient. */
|
|
100
|
+
expect(onRowClick).not.toHaveBeenCalled();
|
|
101
|
+
});
|
|
102
|
+
test("rangée d'icônes, au clavier", async () => {
|
|
103
|
+
const onRowClick = jest.fn();
|
|
104
|
+
const onAction = jest.fn();
|
|
105
|
+
renderGrille({
|
|
106
|
+
onRowClick,
|
|
107
|
+
onAction,
|
|
108
|
+
iconsUpTo: 3
|
|
109
|
+
});
|
|
110
|
+
const bouton = _react.screen.getByRole("button", {
|
|
111
|
+
name: "Consulter la ligne"
|
|
112
|
+
});
|
|
113
|
+
bouton.focus();
|
|
114
|
+
await _userEvent.default.keyboard("{Enter}");
|
|
115
|
+
|
|
116
|
+
/* La ligne porte AUSSI un `onKeyDown` (Enter / Espace → onRowClick), donc
|
|
117
|
+
* le clavier est un second chemin de fuite, distinct de la souris. */
|
|
118
|
+
expect(onAction).toHaveBeenCalledTimes(1);
|
|
119
|
+
expect(onRowClick).not.toHaveBeenCalled();
|
|
120
|
+
});
|
|
121
|
+
test("kebab : ouvrir le menu n'ouvre pas la ligne", () => {
|
|
122
|
+
const onRowClick = jest.fn();
|
|
123
|
+
const onAction = jest.fn();
|
|
124
|
+
/* Sans `iconsUpTo`, le renderer rend `OverflowMenu` — son déclencheur est
|
|
125
|
+
* dans la même position que les boutons d'icône. */
|
|
126
|
+
renderGrille({
|
|
127
|
+
onRowClick,
|
|
128
|
+
onAction
|
|
129
|
+
});
|
|
130
|
+
_react.fireEvent.click(_react.screen.getByRole("button", {
|
|
131
|
+
name: "Actions sur la ligne"
|
|
132
|
+
}));
|
|
133
|
+
expect(onRowClick).not.toHaveBeenCalled();
|
|
134
|
+
});
|
|
135
|
+
test("le clic de ligne fonctionne toujours ailleurs dans la ligne", async () => {
|
|
136
|
+
const onRowClick = jest.fn();
|
|
137
|
+
const onAction = jest.fn();
|
|
138
|
+
renderGrille({
|
|
139
|
+
onRowClick,
|
|
140
|
+
onAction,
|
|
141
|
+
iconsUpTo: 3
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
/* Le containment doit être local à la cellule d'actions : une cellule de
|
|
145
|
+
* données reste le déclencheur du clic de ligne. Sans cette assertion, un
|
|
146
|
+
* containment posé trop haut (sur la ligne) passerait les trois tests
|
|
147
|
+
* ci-dessus tout en cassant §Row Interaction. */
|
|
148
|
+
await _userEvent.default.click(_react.screen.getByText("2025-IM-0042"));
|
|
149
|
+
expect(onRowClick).toHaveBeenCalledTimes(1);
|
|
150
|
+
expect(onAction).not.toHaveBeenCalled();
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=DataGridRowActionsPropagation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataGridRowActionsPropagation.test.js","names":["require","_react","_userEvent","_interopRequireDefault","_DataGrid","_rowActions","_jsxRuntime","e","__esModule","default","LIGNES","id","reference","COLONNES","key","header","renderGrille","options","descripteurs","label","onClick","onAction","render","jsx","rows","columns","ariaLabel","onRowClick","rowActions","buildRowActions","iconsUpTo","undefined","describe","test","jest","fn","fireEvent","click","screen","getByRole","name","expect","toHaveBeenCalledTimes","not","toHaveBeenCalled","bouton","focus","userEvent","keyboard","getByText"],"sources":["../../../src/lib/v2/__tests__/DataGridRowActionsPropagation.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { fireEvent, render, screen } from \"@testing-library/react\";\r\nimport userEvent from \"@testing-library/user-event\";\r\nimport DataGrid from \"../patterns/DataGrid\";\r\nimport { buildRowActions } from \"../patterns/rowActions\";\r\nimport type { RowActionDescriptor } from \"../patterns/rowActions\";\r\n\r\n/**\r\n * DataGrid — la cellule d'actions contient ses propres événements.\r\n *\r\n * CE QUE CE FICHIER PROTÈGE, ET POURQUOI IL EXISTE\r\n * ------------------------------------------------\r\n * §Row Interaction fait du clic de ligne l'ouverture du drawer d'aperçu, et\r\n * des actions de ligne l'affordance COMPLÉMENTAIRE. Les deux cohabitent donc\r\n * sur toute grille de listing de la plateforme — et la cellule d'actions est\r\n * un descendant de la ligne cliquable.\r\n *\r\n * Sans containment, activer une action déclenche AUSSI le clic de ligne :\r\n * l'utilisateur obtient son action et, par-dessus, un drawer qui s'ouvre. Ce\r\n * n'est pas rattrapable au niveau de l'action — `buildRowActions` décrit une\r\n * action comme `onClick: (row) => void` et n'expose délibérément pas\r\n * l'événement DOM, parce qu'un descripteur métier n'a pas à connaître la\r\n * propagation. La cellule est le seul endroit qui tient l'invariant pour\r\n * TOUTES les formes : le kebab, la rangée d'icônes, et n'importe quel\r\n * renderer `rowActions` écrit par un hôte.\r\n *\r\n * Relevé par l'audit Area 3 d'`addm-fe`, dont les deux listings avaient écrit\r\n * leur rangée d'icônes à la main précisément pour appeler `stopPropagation()`\r\n * bouton par bouton — ce qui faisait passer l'adoption de `buildRowActions`\r\n * pour une régression.\r\n *\r\n * Le test couvre les DEUX formes (`iconsUpTo` et le kebab) et les deux\r\n * chemins (souris et clavier), parce que la ligne écoute `onClick` ET\r\n * `onKeyDown`.\r\n *\r\n * POURQUOI `fireEvent` POUR LA SOURIS ET `userEvent` POUR LE CLAVIER\r\n * -----------------------------------------------------------------\r\n * `ROW_ACTIONS_OVERLAY_SX` porte `pointerEvents: \"none\"` et ne passe à `auto`\r\n * que sous `tr:hover`, `tr:focus-within` ou `@media (pointer: coarse)`. jsdom\r\n * ne résout ni les pseudo-classes d'état ni les media queries — même limite\r\n * que celle documentée dans `FieldWidth.test.tsx` — donc l'overlay y reste\r\n * inerte et `user-event` REFUSE de simuler un pointeur dessus. Son refus est\r\n * correct : il modèle un utilisateur, et un utilisateur ne peut pas cliquer un\r\n * élément à `pointer-events: none`. Ce que jsdom ne peut pas modéliser, c'est\r\n * le survol qui précède ce clic dans un vrai navigateur.\r\n *\r\n * Neutraliser la garde (`pointerEventsCheck: Never`) serait prétendre simuler\r\n * un utilisateur tout en désactivant la vérification qui rend la simulation\r\n * crédible. `fireEvent.click` ne prétend rien : il émet un `MouseEvent` qui\r\n * BULLE, ce qui est exactement et uniquement ce que ces deux tests examinent.\r\n * Le chemin clavier, lui, ne passe pas par le hit-testing du pointeur, donc\r\n * `userEvent` y reste l'outil juste — et c'est le chemin où la ligne écoute\r\n * `onKeyDown`.\r\n *\r\n * Ce que ce fichier ne prouve donc PAS : que l'overlay est atteignable à la\r\n * souris. Ça se vérifie dans la story, au survol.\r\n */\r\n\r\ninterface Ligne {\r\n id: number;\r\n reference: string;\r\n}\r\n\r\nconst LIGNES: Ligne[] = [{ id: 1, reference: \"2025-IM-0042\" }];\r\n\r\nconst COLONNES = [{ key: \"reference\", header: \"Référence\" }];\r\n\r\nfunction renderGrille(options: {\r\n onRowClick: () => void;\r\n onAction: () => void;\r\n iconsUpTo?: number;\r\n}) {\r\n const descripteurs: RowActionDescriptor<Ligne>[] = [\r\n {\r\n id: \"consulter\",\r\n label: \"Consulter la ligne\",\r\n onClick: () => options.onAction(),\r\n },\r\n ];\r\n\r\n return render(\r\n <DataGrid<Ligne>\r\n rows={LIGNES}\r\n columns={COLONNES}\r\n ariaLabel=\"Lignes de test\"\r\n onRowClick={options.onRowClick}\r\n rowActions={buildRowActions(\r\n descripteurs,\r\n \"Actions sur la ligne\",\r\n options.iconsUpTo !== undefined\r\n ? { iconsUpTo: options.iconsUpTo }\r\n : undefined\r\n )}\r\n />\r\n );\r\n}\r\n\r\ndescribe(\"DataGrid — une action de ligne ne déclenche pas le clic de ligne\", () => {\r\n test(\"rangée d'icônes, à la souris\", () => {\r\n const onRowClick = jest.fn();\r\n const onAction = jest.fn();\r\n renderGrille({ onRowClick, onAction, iconsUpTo: 3 });\r\n\r\n fireEvent.click(\r\n screen.getByRole(\"button\", { name: \"Consulter la ligne\" })\r\n );\r\n\r\n expect(onAction).toHaveBeenCalledTimes(1);\r\n /* L'assertion qui compte : l'action a eu lieu, la ligne n'a pas été\r\n * ouverte. Avant le containment, les deux se déclenchaient. */\r\n expect(onRowClick).not.toHaveBeenCalled();\r\n });\r\n\r\n test(\"rangée d'icônes, au clavier\", async () => {\r\n const onRowClick = jest.fn();\r\n const onAction = jest.fn();\r\n renderGrille({ onRowClick, onAction, iconsUpTo: 3 });\r\n\r\n const bouton = screen.getByRole(\"button\", { name: \"Consulter la ligne\" });\r\n bouton.focus();\r\n await userEvent.keyboard(\"{Enter}\");\r\n\r\n /* La ligne porte AUSSI un `onKeyDown` (Enter / Espace → onRowClick), donc\r\n * le clavier est un second chemin de fuite, distinct de la souris. */\r\n expect(onAction).toHaveBeenCalledTimes(1);\r\n expect(onRowClick).not.toHaveBeenCalled();\r\n });\r\n\r\n test(\"kebab : ouvrir le menu n'ouvre pas la ligne\", () => {\r\n const onRowClick = jest.fn();\r\n const onAction = jest.fn();\r\n /* Sans `iconsUpTo`, le renderer rend `OverflowMenu` — son déclencheur est\r\n * dans la même position que les boutons d'icône. */\r\n renderGrille({ onRowClick, onAction });\r\n\r\n fireEvent.click(\r\n screen.getByRole(\"button\", { name: \"Actions sur la ligne\" })\r\n );\r\n\r\n expect(onRowClick).not.toHaveBeenCalled();\r\n });\r\n\r\n test(\"le clic de ligne fonctionne toujours ailleurs dans la ligne\", async () => {\r\n const onRowClick = jest.fn();\r\n const onAction = jest.fn();\r\n renderGrille({ onRowClick, onAction, iconsUpTo: 3 });\r\n\r\n /* Le containment doit être local à la cellule d'actions : une cellule de\r\n * données reste le déclencheur du clic de ligne. Sans cette assertion, un\r\n * containment posé trop haut (sur la ligne) passerait les trois tests\r\n * ci-dessus tout en cassant §Row Interaction. */\r\n await userEvent.click(screen.getByText(\"2025-IM-0042\"));\r\n\r\n expect(onRowClick).toHaveBeenCalledTimes(1);\r\n expect(onAction).not.toHaveBeenCalled();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("@testing-library/jest-dom");
|
|
4
|
+
var _react = require("@testing-library/react");
|
|
5
|
+
var _Drawer = _interopRequireDefault(require("../components/Drawer"));
|
|
6
|
+
var _tokens = require("../tokens");
|
|
7
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
/**
|
|
10
|
+
* R-7.4 / WCAG 2.5.5 — the drawer header's icon-only buttons.
|
|
11
|
+
*
|
|
12
|
+
* `tokens/density` states the rule this file guards, in its own words: "Icon-
|
|
13
|
+
* only buttons MUST set min-width/min-height to `tactileMin`", because the
|
|
14
|
+
* VISUAL height of a button may drop below 44px in the tighter density tiers
|
|
15
|
+
* while the hit area may not. The drawer header's three buttons — prev, next,
|
|
16
|
+
* close — were `IconButton size="small"` with only a colour rule: about 34px,
|
|
17
|
+
* ten short of the floor this library imposes on its hosts.
|
|
18
|
+
*
|
|
19
|
+
* The gap stayed invisible while item navigation was rarely wired, since a
|
|
20
|
+
* filter panel renders the close button alone. A module that equips its
|
|
21
|
+
* preview drawers with onPrev/onNext exposes three per drawer — which is what
|
|
22
|
+
* surfaced it.
|
|
23
|
+
*
|
|
24
|
+
* ── WHY `toHaveStyle` AND NOT `element.style` ────────────────────────
|
|
25
|
+
*
|
|
26
|
+
* The first version of this file asserted on `element.style.minWidth` and
|
|
27
|
+
* failed on all three cases with an empty string — correctly. `sx` compiles to
|
|
28
|
+
* an EMOTION CLASS, never to an inline style attribute, so the inline bag is
|
|
29
|
+
* empty by construction. `toHaveStyle` resolves the declaration through
|
|
30
|
+
* `getComputedStyle`, which jsdom does cascade from the injected stylesheet.
|
|
31
|
+
*
|
|
32
|
+
* What this verifies is therefore the DECLARED floor, not a rendered box:
|
|
33
|
+
* jsdom performs no layout, so no assertion here could prove the button
|
|
34
|
+
* measures 44px on screen. The declaration is what the rule asks for, and it
|
|
35
|
+
* is what a refactor of this header would silently drop.
|
|
36
|
+
*/const TACTILE_MIN = `${_tokens.layout.tactileMin}px`;
|
|
37
|
+
const TACTILE_FLOOR = {
|
|
38
|
+
minWidth: TACTILE_MIN,
|
|
39
|
+
minHeight: TACTILE_MIN
|
|
40
|
+
};
|
|
41
|
+
describe("Drawer — cibles tactiles de l'en-tête (R-7.4)", () => {
|
|
42
|
+
it("plancher de 44px sur le bouton de fermeture", () => {
|
|
43
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Drawer.default, {
|
|
44
|
+
open: true,
|
|
45
|
+
onClose: () => undefined,
|
|
46
|
+
title: "Filtres avanc\xE9s",
|
|
47
|
+
children: "contenu"
|
|
48
|
+
}));
|
|
49
|
+
expect(_react.screen.getByRole("button", {
|
|
50
|
+
name: /Fermer/i
|
|
51
|
+
})).toHaveStyle(TACTILE_FLOOR);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
/* Les deux flèches ne sont rendues que si un gestionnaire est fourni
|
|
55
|
+
(navigation opt-in, D-A10.2) — c'est ce qui a longtemps masqué l'écart. */
|
|
56
|
+
it("plancher de 44px sur les deux flèches de navigation", () => {
|
|
57
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Drawer.default, {
|
|
58
|
+
open: true,
|
|
59
|
+
onClose: () => undefined,
|
|
60
|
+
title: "Dossier 2026-IM-00042",
|
|
61
|
+
onPrev: () => undefined,
|
|
62
|
+
onNext: () => undefined,
|
|
63
|
+
hasPrev: true,
|
|
64
|
+
hasNext: true,
|
|
65
|
+
children: "contenu"
|
|
66
|
+
}));
|
|
67
|
+
expect(_react.screen.getByRole("button", {
|
|
68
|
+
name: /Précédent/i
|
|
69
|
+
})).toHaveStyle(TACTILE_FLOOR);
|
|
70
|
+
expect(_react.screen.getByRole("button", {
|
|
71
|
+
name: /Suivant/i
|
|
72
|
+
})).toHaveStyle(TACTILE_FLOOR);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
/* Le plancher vaut aussi pour un bouton DÉSACTIVÉ : il reste une cible que
|
|
76
|
+
l'utilisateur va viser, et le rendre plus petit que les autres ferait
|
|
77
|
+
sauter la rangée d'un tiroir à l'autre. */
|
|
78
|
+
it("plancher maintenu quand la navigation est désactivée", () => {
|
|
79
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Drawer.default, {
|
|
80
|
+
open: true,
|
|
81
|
+
onClose: () => undefined,
|
|
82
|
+
title: "Dossier unique",
|
|
83
|
+
onPrev: () => undefined,
|
|
84
|
+
onNext: () => undefined,
|
|
85
|
+
children: "contenu"
|
|
86
|
+
}));
|
|
87
|
+
const previous = _react.screen.getByRole("button", {
|
|
88
|
+
name: /Précédent/i
|
|
89
|
+
});
|
|
90
|
+
expect(previous).toBeDisabled();
|
|
91
|
+
expect(previous).toHaveStyle(TACTILE_FLOOR);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=DrawerTactileTargets.test.js.map
|