@portnet/ui 6.0.2 → 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 +652 -0
- package/dist/esm/index.js +72 -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 -38
- 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 +11 -11
- package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FileCard.test.js +18 -17
- package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js +87 -179
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +32 -44
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
- 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 +118 -199
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
- package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -42
- 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 -21
- 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 +81 -86
- 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 +155 -59
- 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 +37 -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 +2 -3
- 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 +15 -17
- 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 +29 -39
- package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -1
- 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 -69
- package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDatePicker.js +44 -58
- package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDateTimePicker.js +44 -58
- package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -1
- 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 -53
- package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
- package/dist/esm/v2/patterns/FormikRadioGroup.js +39 -51
- package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -1
- 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 -87
- package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/esm/v2/patterns/FormikTextarea.js +30 -46
- package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +53 -71
- 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 +27 -22
- package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -1
- 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 +6 -8
- package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -1
- 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 +152 -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 +28 -34
- package/dist/esm/v2/personalization/capabilities/gridPreferences.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 +17 -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 +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +110 -49
- 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 +82 -49
- 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 +23 -25
- package/dist/v2/__tests__/FieldWidth.test.js.map +1 -1
- package/dist/v2/__tests__/FileCard.test.js +29 -28
- package/dist/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/v2/__tests__/FormikCheckbox.test.js +90 -183
- package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -1
- package/dist/v2/__tests__/FormikDateTimePicker.test.js +38 -48
- package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
- 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 +123 -204
- package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
- package/dist/v2/__tests__/MobileRowCard.test.js +63 -61
- 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 +23 -27
- 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.js +84 -91
- 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 +62 -4
- package/dist/v2/components/Field.d.ts.map +1 -1
- package/dist/v2/components/Field.js +169 -70
- 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 +40 -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.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.js +22 -23
- 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.js +36 -45
- package/dist/v2/patterns/FormikCheckbox.js.map +1 -1
- 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.js +55 -72
- package/dist/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.js +50 -64
- package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/v2/patterns/FormikDateTimePicker.js +50 -64
- package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -1
- 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.js +45 -58
- package/dist/v2/patterns/FormikInput.js.map +1 -1
- package/dist/v2/patterns/FormikRadioGroup.js +45 -56
- package/dist/v2/patterns/FormikRadioGroup.js.map +1 -1
- 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.js +70 -92
- package/dist/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/v2/patterns/FormikTextarea.js +35 -51
- package/dist/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.js +60 -80
- 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 +6 -0
- package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -1
- package/dist/v2/patterns/RowFavoriteToggle.js +38 -30
- package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -1
- 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.js +9 -10
- package/dist/v2/patterns/_pickerSerialisation.js.map +1 -1
- 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 +160 -0
- package/dist/v2/patterns/index.d.ts.map +1 -1
- package/dist/v2/patterns/index.js +157 -79
- 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.js +31 -36
- package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -1
- package/dist/v2/personalization/capabilities/index.js +12 -12
- 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 +16 -0
- package/dist/v2/personalization/index.d.ts.map +1 -1
- package/dist/v2/personalization/index.js +30 -23
- 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
|
@@ -28,8 +28,8 @@ import MobileRowCard from "../components/MobileRowCard";
|
|
|
28
28
|
* open for all three props.
|
|
29
29
|
*/
|
|
30
30
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
31
|
-
describe("MobileRowCard — slot rendering",
|
|
32
|
-
test("renders title, subtitle and meta, omitting lines with no content",
|
|
31
|
+
describe("MobileRowCard — slot rendering", () => {
|
|
32
|
+
test("renders title, subtitle and meta, omitting lines with no content", () => {
|
|
33
33
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
34
34
|
title: "2025-IM-0042",
|
|
35
35
|
subtitle: "SOFRANE SA",
|
|
@@ -40,7 +40,7 @@ describe("MobileRowCard — slot rendering", function () {
|
|
|
40
40
|
// meta joins with " · " into a single node
|
|
41
41
|
expect(screen.getByText("12/05/2026 · 3 pièces")).toBeInTheDocument();
|
|
42
42
|
});
|
|
43
|
-
test("meta drops null / empty entries rather than rendering stray separators",
|
|
43
|
+
test("meta drops null / empty entries rather than rendering stray separators", () => {
|
|
44
44
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
45
45
|
title: "X",
|
|
46
46
|
meta: ["Émise 01/01/2026", null, "", undefined]
|
|
@@ -48,11 +48,12 @@ describe("MobileRowCard — slot rendering", function () {
|
|
|
48
48
|
expect(screen.getByText("Émise 01/01/2026")).toBeInTheDocument();
|
|
49
49
|
expect(screen.queryByText(/·/)).not.toBeInTheDocument();
|
|
50
50
|
});
|
|
51
|
-
test("a string title gets a native tooltip; a node title does not stringify",
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
test("a string title gets a native tooltip; a node title does not stringify", () => {
|
|
52
|
+
const {
|
|
53
|
+
rerender
|
|
54
|
+
} = render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
55
|
+
title: "Long reference"
|
|
56
|
+
}));
|
|
56
57
|
expect(screen.getByText("Long reference")).toHaveAttribute("title", "Long reference");
|
|
57
58
|
rerender(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
58
59
|
title: /*#__PURE__*/_jsx("span", {
|
|
@@ -71,8 +72,8 @@ describe("MobileRowCard — slot rendering", function () {
|
|
|
71
72
|
expect(screen.queryByTitle(/./)).not.toBeInTheDocument();
|
|
72
73
|
});
|
|
73
74
|
});
|
|
74
|
-
describe("MobileRowCard — kv slot",
|
|
75
|
-
test("renders each pair as a KV label/value unit",
|
|
75
|
+
describe("MobileRowCard — kv slot", () => {
|
|
76
|
+
test("renders each pair as a KV label/value unit", () => {
|
|
76
77
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
77
78
|
title: "ref",
|
|
78
79
|
kv: [{
|
|
@@ -88,7 +89,7 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
88
89
|
expect(screen.getByText("Importateur")).toBeInTheDocument();
|
|
89
90
|
expect(screen.getByText("SOFRANE SA")).toBeInTheDocument();
|
|
90
91
|
});
|
|
91
|
-
test("an empty value KEEPS the pair and shows KV's own em-dash placeholder",
|
|
92
|
+
test("an empty value KEEPS the pair and shows KV's own em-dash placeholder", () => {
|
|
92
93
|
// This is why every consuming site could drop its `?? \"-\"`: KV owns the
|
|
93
94
|
// placeholder. Losing this behaviour would silently reintroduce ten local
|
|
94
95
|
// fallbacks across the fleet.
|
|
@@ -110,7 +111,7 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
110
111
|
expect(screen.getByText("Devise")).toBeInTheDocument();
|
|
111
112
|
expect(screen.getAllByText("—")).toHaveLength(3);
|
|
112
113
|
});
|
|
113
|
-
test("a custom fallback overrides the em dash",
|
|
114
|
+
test("a custom fallback overrides the em dash", () => {
|
|
114
115
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
115
116
|
title: "ref",
|
|
116
117
|
kv: [{
|
|
@@ -120,7 +121,7 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
120
121
|
}));
|
|
121
122
|
expect(screen.getByText("Non assignée")).toBeInTheDocument();
|
|
122
123
|
});
|
|
123
|
-
test("pairs with no label are DROPPED (KV would emit a dangling aria-labelledby)",
|
|
124
|
+
test("pairs with no label are DROPPED (KV would emit a dangling aria-labelledby)", () => {
|
|
124
125
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
125
126
|
title: "ref",
|
|
126
127
|
kv: [{
|
|
@@ -142,8 +143,8 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
142
143
|
expect(screen.getByText("kept-value")).toBeInTheDocument();
|
|
143
144
|
});
|
|
144
145
|
});
|
|
145
|
-
describe("MobileRowCard — chips slot",
|
|
146
|
-
test("renders chip nodes and filters falsy entries",
|
|
146
|
+
describe("MobileRowCard — chips slot", () => {
|
|
147
|
+
test("renders chip nodes and filters falsy entries", () => {
|
|
147
148
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
148
149
|
title: "ref",
|
|
149
150
|
chips: [/*#__PURE__*/_jsx("span", {
|
|
@@ -156,13 +157,14 @@ describe("MobileRowCard — chips slot", function () {
|
|
|
156
157
|
expect(screen.getByText("CO")).toBeInTheDocument();
|
|
157
158
|
});
|
|
158
159
|
});
|
|
159
|
-
describe("MobileRowCard — actions (kebab)",
|
|
160
|
-
test("kebab renders only when at least one non-divider action exists",
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
160
|
+
describe("MobileRowCard — actions (kebab)", () => {
|
|
161
|
+
test("kebab renders only when at least one non-divider action exists", () => {
|
|
162
|
+
const {
|
|
163
|
+
rerender
|
|
164
|
+
} = render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
165
|
+
title: "ref",
|
|
166
|
+
actions: []
|
|
167
|
+
}));
|
|
166
168
|
expect(screen.queryByRole("button")).not.toBeInTheDocument();
|
|
167
169
|
rerender(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
168
170
|
title: "ref",
|
|
@@ -175,7 +177,7 @@ describe("MobileRowCard — actions (kebab)", function () {
|
|
|
175
177
|
title: "ref",
|
|
176
178
|
actions: [{
|
|
177
179
|
label: "Détail",
|
|
178
|
-
onClick:
|
|
180
|
+
onClick: () => {}
|
|
179
181
|
}],
|
|
180
182
|
actionsAriaLabel: "Actions pour 2025-IM-0042"
|
|
181
183
|
}));
|
|
@@ -205,9 +207,9 @@ describe("MobileRowCard — actions (kebab)", function () {
|
|
|
205
207
|
* Making these two consistent — in either direction — is a breaking change for
|
|
206
208
|
* the ten sites that depend on them.
|
|
207
209
|
*/
|
|
208
|
-
describe("MobileRowCard — propagation asymmetry (deliberate)",
|
|
209
|
-
test("leading does NOT stop click propagation to the card",
|
|
210
|
-
|
|
210
|
+
describe("MobileRowCard — propagation asymmetry (deliberate)", () => {
|
|
211
|
+
test("leading does NOT stop click propagation to the card", () => {
|
|
212
|
+
const onCardClick = jest.fn();
|
|
211
213
|
render(/*#__PURE__*/_jsx("div", {
|
|
212
214
|
onClick: onCardClick,
|
|
213
215
|
children: /*#__PURE__*/_jsx(MobileRowCard, {
|
|
@@ -220,9 +222,9 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
220
222
|
fireEvent.click(screen.getByText("star"));
|
|
221
223
|
expect(onCardClick).toHaveBeenCalledTimes(1);
|
|
222
224
|
});
|
|
223
|
-
test("trailing DOES stop click propagation to the card",
|
|
224
|
-
|
|
225
|
-
|
|
225
|
+
test("trailing DOES stop click propagation to the card", () => {
|
|
226
|
+
const onCardClick = jest.fn();
|
|
227
|
+
const onAction = jest.fn();
|
|
226
228
|
render(/*#__PURE__*/_jsx("div", {
|
|
227
229
|
onClick: onCardClick,
|
|
228
230
|
children: /*#__PURE__*/_jsx(MobileRowCard, {
|
|
@@ -239,8 +241,8 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
239
241
|
expect(onAction).toHaveBeenCalledTimes(1);
|
|
240
242
|
expect(onCardClick).not.toHaveBeenCalled();
|
|
241
243
|
});
|
|
242
|
-
test("trailing stops keydown propagation too (keyboard parity)",
|
|
243
|
-
|
|
244
|
+
test("trailing stops keydown propagation too (keyboard parity)", () => {
|
|
245
|
+
const onCardKeyDown = jest.fn();
|
|
244
246
|
render(/*#__PURE__*/_jsx("div", {
|
|
245
247
|
onKeyDown: onCardKeyDown,
|
|
246
248
|
children: /*#__PURE__*/_jsx(MobileRowCard, {
|
|
@@ -257,15 +259,15 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
257
259
|
});
|
|
258
260
|
expect(onCardKeyDown).not.toHaveBeenCalled();
|
|
259
261
|
});
|
|
260
|
-
test("opening the kebab does not fire the card click",
|
|
261
|
-
|
|
262
|
+
test("opening the kebab does not fire the card click", () => {
|
|
263
|
+
const onCardClick = jest.fn();
|
|
262
264
|
render(/*#__PURE__*/_jsx("div", {
|
|
263
265
|
onClick: onCardClick,
|
|
264
266
|
children: /*#__PURE__*/_jsx(MobileRowCard, {
|
|
265
267
|
title: "ref",
|
|
266
268
|
actions: [{
|
|
267
269
|
label: "Détail",
|
|
268
|
-
onClick:
|
|
270
|
+
onClick: () => {}
|
|
269
271
|
}]
|
|
270
272
|
})
|
|
271
273
|
}));
|
|
@@ -275,8 +277,8 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
275
277
|
expect(onCardClick).not.toHaveBeenCalled();
|
|
276
278
|
});
|
|
277
279
|
});
|
|
278
|
-
describe("MobileRowCard — header composition",
|
|
279
|
-
test("trailing and the kebab coexist, trailing first",
|
|
280
|
+
describe("MobileRowCard — header composition", () => {
|
|
281
|
+
test("trailing and the kebab coexist, trailing first", () => {
|
|
280
282
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
281
283
|
title: "ref",
|
|
282
284
|
trailing: /*#__PURE__*/_jsx("button", {
|
|
@@ -284,14 +286,14 @@ describe("MobileRowCard — header composition", function () {
|
|
|
284
286
|
}),
|
|
285
287
|
actions: [{
|
|
286
288
|
label: "Supprimer",
|
|
287
|
-
onClick:
|
|
289
|
+
onClick: () => {}
|
|
288
290
|
}],
|
|
289
291
|
actionsAriaLabel: "Autres actions"
|
|
290
292
|
}));
|
|
291
|
-
|
|
293
|
+
const visualiser = screen.getByRole("button", {
|
|
292
294
|
name: "Visualiser"
|
|
293
295
|
});
|
|
294
|
-
|
|
296
|
+
const kebab = screen.getByRole("button", {
|
|
295
297
|
name: "Autres actions"
|
|
296
298
|
});
|
|
297
299
|
expect(visualiser).toBeInTheDocument();
|
|
@@ -300,7 +302,7 @@ describe("MobileRowCard — header composition", function () {
|
|
|
300
302
|
// Document order: trailing precedes the kebab in the header end cluster.
|
|
301
303
|
expect(visualiser.compareDocumentPosition(kebab) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy();
|
|
302
304
|
});
|
|
303
|
-
test("a card with ONLY trailing still renders its header",
|
|
305
|
+
test("a card with ONLY trailing still renders its header", () => {
|
|
304
306
|
// Regression guard: hasHeader must include hasTrailing, otherwise a
|
|
305
307
|
// title-less picker card would drop its action entirely.
|
|
306
308
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
@@ -312,7 +314,7 @@ describe("MobileRowCard — header composition", function () {
|
|
|
312
314
|
name: "Choisir"
|
|
313
315
|
})).toBeInTheDocument();
|
|
314
316
|
});
|
|
315
|
-
test("a card with ONLY leading still renders its header",
|
|
317
|
+
test("a card with ONLY leading still renders its header", () => {
|
|
316
318
|
render(/*#__PURE__*/_jsx(MobileRowCard, {
|
|
317
319
|
leading: /*#__PURE__*/_jsx("span", {
|
|
318
320
|
children: "star"
|
|
@@ -320,7 +322,7 @@ describe("MobileRowCard — header composition", function () {
|
|
|
320
322
|
}));
|
|
321
323
|
expect(screen.getByText("star")).toBeInTheDocument();
|
|
322
324
|
});
|
|
323
|
-
test("no props renders no header and does not throw",
|
|
325
|
+
test("no props renders no header and does not throw", () => {
|
|
324
326
|
/* `render` not throwing IS the second half of this assertion. The button
|
|
325
327
|
* check uses screen.queryByRole rather than container.querySelector
|
|
326
328
|
* (testing-library/no-container + no-node-access), matching the idiom the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileRowCard.test.js","names":["render","screen","fireEvent","MobileRowCard","jsx","_jsx","describe","test","title","subtitle","meta","expect","getByText","toBeInTheDocument","undefined","queryByText","not","_render","rerender","toHaveAttribute","children","queryByTitle","kv","label","value","getAllByText","toHaveLength","fallback","chips","_render2","actions","queryByRole","divider","onClick","actionsAriaLabel","getByRole","name","onCardClick","jest","fn","leading","click","toHaveBeenCalledTimes","onAction","trailing","toHaveBeenCalled","onCardKeyDown","onKeyDown","keyDown","key","visualiser","kebab","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","toBeTruthy"],"sources":["../../../../src/lib/v2/__tests__/MobileRowCard.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen, fireEvent } from \"@testing-library/react\";\r\nimport MobileRowCard from \"../components/MobileRowCard\";\r\n\r\n/**\r\n * MobileRowCard — slot contract tests.\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST — \"Snapshot Storybook + tests Jest/Testing-Library\" — was\r\n * unmet for THREE props added to this component across successive module\r\n * audits: `kv` and `leading` (ms-dfd-fe Area 5), then `trailing`\r\n * (ms-dfd-fe/ms-ti-fe A5-01). Each was shipped as \"additive, backward\r\n * compatible\", which is true and is not the same thing as verified. This\r\n * component is consumed by ten mobile-card sites across two certified modules,\r\n * so a silent change to any slot's behaviour regresses all of them at once.\r\n *\r\n * The PROPAGATION ASYMMETRY (see below) is the single most important thing\r\n * here. It is deliberate, it is counter-intuitive, and nothing but a test\r\n * stops a future reader from \"tidying\" it into consistency and breaking every\r\n * favourite-star and picker-button site in the fleet.\r\n *\r\n * NOT COVERED — and deliberately so: R-G.3 MUST (light + dark + compact +\r\n * responsive at 320/375/414) is a VISUAL contract. jsdom computes no layout,\r\n * so asserting it here would produce tests that pass while the cards are\r\n * broken on a phone — worse than no coverage, because it would look like\r\n * coverage. R-G.3 needs a browser (Storybook + visual regression) and remains\r\n * open for all three props.\r\n */\r\ndescribe(\"MobileRowCard — slot rendering\", () => {\r\n test(\"renders title, subtitle and meta, omitting lines with no content\", () => {\r\n render(\r\n <MobileRowCard\r\n title=\"2025-IM-0042\"\r\n subtitle=\"SOFRANE SA\"\r\n meta={[\"12/05/2026\", \"3 pièces\"]}\r\n />\r\n );\r\n\r\n expect(screen.getByText(\"2025-IM-0042\")).toBeInTheDocument();\r\n expect(screen.getByText(\"SOFRANE SA\")).toBeInTheDocument();\r\n // meta joins with \" · \" into a single node\r\n expect(screen.getByText(\"12/05/2026 · 3 pièces\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"meta drops null / empty entries rather than rendering stray separators\", () => {\r\n render(<MobileRowCard title=\"X\" meta={[\"Émise 01/01/2026\", null, \"\", undefined]} />);\r\n expect(screen.getByText(\"Émise 01/01/2026\")).toBeInTheDocument();\r\n expect(screen.queryByText(/·/)).not.toBeInTheDocument();\r\n });\r\n\r\n test(\"a string title gets a native tooltip; a node title does not stringify\", () => {\r\n const { rerender } = render(<MobileRowCard title=\"Long reference\" />);\r\n expect(screen.getByText(\"Long reference\")).toHaveAttribute(\"title\", \"Long reference\");\r\n\r\n rerender(<MobileRowCard title={<span>Node title</span>} />);\r\n expect(screen.getByText(\"Node title\")).toBeInTheDocument();\r\n /* The regression guarded here: wrapping a node yielded title=\"[object\r\n * Object]\". Asserted with queryByTitle rather than `.closest(\"[title]\")`\r\n * so it stays a Testing-Library query (testing-library/no-node-access).\r\n * `/./` = \"no element carries ANY non-empty title\", which is a STRONGER\r\n * assertion than the ancestor walk it replaces: MobileRowCard sets a title\r\n * attribute in exactly two places (the title Box and the subtitle Box) and\r\n * only when the value is a string, so with a node title and no subtitle the\r\n * whole tree must be title-less. */\r\n expect(screen.queryByTitle(/./)).not.toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"MobileRowCard — kv slot\", () => {\r\n test(\"renders each pair as a KV label/value unit\", () => {\r\n render(\r\n <MobileRowCard\r\n title=\"ref\"\r\n kv={[\r\n { label: \"Catégorie\", value: \"CONTINGENT\" },\r\n { label: \"Importateur\", value: \"SOFRANE SA\" },\r\n ]}\r\n />\r\n );\r\n\r\n expect(screen.getByText(\"Catégorie\")).toBeInTheDocument();\r\n expect(screen.getByText(\"CONTINGENT\")).toBeInTheDocument();\r\n expect(screen.getByText(\"Importateur\")).toBeInTheDocument();\r\n expect(screen.getByText(\"SOFRANE SA\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"an empty value KEEPS the pair and shows KV's own em-dash placeholder\", () => {\r\n // This is why every consuming site could drop its `?? \\\"-\\\"`: KV owns the\r\n // placeholder. Losing this behaviour would silently reintroduce ten local\r\n // fallbacks across the fleet.\r\n render(\r\n <MobileRowCard\r\n title=\"ref\"\r\n kv={[\r\n { label: \"Bureau douanier\", value: undefined },\r\n { label: \"Marchandise\", value: \"\" },\r\n { label: \"Devise\", value: null },\r\n ]}\r\n />\r\n );\r\n\r\n expect(screen.getByText(\"Bureau douanier\")).toBeInTheDocument();\r\n expect(screen.getByText(\"Marchandise\")).toBeInTheDocument();\r\n expect(screen.getByText(\"Devise\")).toBeInTheDocument();\r\n expect(screen.getAllByText(\"—\")).toHaveLength(3);\r\n });\r\n\r\n test(\"a custom fallback overrides the em dash\", () => {\r\n render(\r\n <MobileRowCard title=\"ref\" kv={[{ label: \"Banque\", fallback: \"Non assignée\" }]} />\r\n );\r\n expect(screen.getByText(\"Non assignée\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"pairs with no label are DROPPED (KV would emit a dangling aria-labelledby)\", () => {\r\n render(\r\n <MobileRowCard\r\n title=\"ref\"\r\n kv={[\r\n { label: \"\", value: \"orphan-empty\" },\r\n // `label` is required but its type (ReactNode) admits undefined, so\r\n // this is type-valid and exercises the runtime `!= null` guard.\r\n { label: undefined, value: \"orphan-missing\" },\r\n { label: \"Kept\", value: \"kept-value\" },\r\n ]}\r\n />\r\n );\r\n\r\n expect(screen.queryByText(\"orphan-empty\")).not.toBeInTheDocument();\r\n expect(screen.queryByText(\"orphan-missing\")).not.toBeInTheDocument();\r\n expect(screen.getByText(\"kept-value\")).toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"MobileRowCard — chips slot\", () => {\r\n test(\"renders chip nodes and filters falsy entries\", () => {\r\n render(\r\n <MobileRowCard\r\n title=\"ref\"\r\n chips={[<span key=\"a\">Approuvé</span>, null, false, <span key=\"b\">CO</span>]}\r\n />\r\n );\r\n expect(screen.getByText(\"Approuvé\")).toBeInTheDocument();\r\n expect(screen.getByText(\"CO\")).toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"MobileRowCard — actions (kebab)\", () => {\r\n test(\"kebab renders only when at least one non-divider action exists\", () => {\r\n const { rerender } = render(<MobileRowCard title=\"ref\" actions={[]} />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n\r\n rerender(<MobileRowCard title=\"ref\" actions={[{ divider: true }]} />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n\r\n rerender(\r\n <MobileRowCard\r\n title=\"ref\"\r\n actions={[{ label: \"Détail\", onClick: () => {} }]}\r\n actionsAriaLabel=\"Actions pour 2025-IM-0042\"\r\n />\r\n );\r\n expect(\r\n screen.getByRole(\"button\", { name: \"Actions pour 2025-IM-0042\" })\r\n ).toBeInTheDocument();\r\n });\r\n});\r\n\r\n/**\r\n * THE PROPAGATION CONTRACT — the reason this file matters most.\r\n *\r\n * DataGrid's mobile-card wrapper makes the whole card the click target\r\n * (role=button + onRowClick). Two slots therefore behave DIFFERENTLY on\r\n * purpose:\r\n *\r\n * leading — does NOT stop propagation. A decorative node (icon, avatar)\r\n * should still open the row like the rest of the card. Interactive\r\n * leading content is responsible for stopping propagation itself,\r\n * exactly as DataGrid's own FavoriteCell does. Get this wrong and\r\n * a tap both toggles the favourite star AND opens the drawer.\r\n *\r\n * trailing — DOES stop propagation (it shares the kebab's wrapper). Its\r\n * declared purpose is interactive actions, and a tap that both\r\n * fires the action and opens the row is the more damaging default.\r\n *\r\n * Making these two consistent — in either direction — is a breaking change for\r\n * the ten sites that depend on them.\r\n */\r\ndescribe(\"MobileRowCard — propagation asymmetry (deliberate)\", () => {\r\n test(\"leading does NOT stop click propagation to the card\", () => {\r\n const onCardClick = jest.fn();\r\n render(\r\n <div onClick={onCardClick}>\r\n <MobileRowCard title=\"ref\" leading={<span>star</span>} />\r\n </div>\r\n );\r\n\r\n fireEvent.click(screen.getByText(\"star\"));\r\n expect(onCardClick).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n test(\"trailing DOES stop click propagation to the card\", () => {\r\n const onCardClick = jest.fn();\r\n const onAction = jest.fn();\r\n render(\r\n <div onClick={onCardClick}>\r\n <MobileRowCard\r\n title=\"ref\"\r\n trailing={<button onClick={onAction}>Choisir</button>}\r\n />\r\n </div>\r\n );\r\n\r\n fireEvent.click(screen.getByRole(\"button\", { name: \"Choisir\" }));\r\n expect(onAction).toHaveBeenCalledTimes(1);\r\n expect(onCardClick).not.toHaveBeenCalled();\r\n });\r\n\r\n test(\"trailing stops keydown propagation too (keyboard parity)\", () => {\r\n const onCardKeyDown = jest.fn();\r\n render(\r\n <div onKeyDown={onCardKeyDown}>\r\n <MobileRowCard title=\"ref\" trailing={<button>Choisir</button>} />\r\n </div>\r\n );\r\n\r\n fireEvent.keyDown(screen.getByRole(\"button\", { name: \"Choisir\" }), { key: \"Enter\" });\r\n expect(onCardKeyDown).not.toHaveBeenCalled();\r\n });\r\n\r\n test(\"opening the kebab does not fire the card click\", () => {\r\n const onCardClick = jest.fn();\r\n render(\r\n <div onClick={onCardClick}>\r\n <MobileRowCard title=\"ref\" actions={[{ label: \"Détail\", onClick: () => {} }]} />\r\n </div>\r\n );\r\n\r\n fireEvent.click(screen.getByRole(\"button\", { name: \"Plus d'actions\" }));\r\n expect(onCardClick).not.toHaveBeenCalled();\r\n });\r\n});\r\n\r\ndescribe(\"MobileRowCard — header composition\", () => {\r\n test(\"trailing and the kebab coexist, trailing first\", () => {\r\n render(\r\n <MobileRowCard\r\n title=\"ref\"\r\n trailing={<button>Visualiser</button>}\r\n actions={[{ label: \"Supprimer\", onClick: () => {} }]}\r\n actionsAriaLabel=\"Autres actions\"\r\n />\r\n );\r\n\r\n const visualiser = screen.getByRole(\"button\", { name: \"Visualiser\" });\r\n const kebab = screen.getByRole(\"button\", { name: \"Autres actions\" });\r\n expect(visualiser).toBeInTheDocument();\r\n expect(kebab).toBeInTheDocument();\r\n\r\n // Document order: trailing precedes the kebab in the header end cluster.\r\n expect(\r\n visualiser.compareDocumentPosition(kebab) & Node.DOCUMENT_POSITION_FOLLOWING\r\n ).toBeTruthy();\r\n });\r\n\r\n test(\"a card with ONLY trailing still renders its header\", () => {\r\n // Regression guard: hasHeader must include hasTrailing, otherwise a\r\n // title-less picker card would drop its action entirely.\r\n render(<MobileRowCard trailing={<button>Choisir</button>} />);\r\n expect(screen.getByRole(\"button\", { name: \"Choisir\" })).toBeInTheDocument();\r\n });\r\n\r\n test(\"a card with ONLY leading still renders its header\", () => {\r\n render(<MobileRowCard leading={<span>star</span>} />);\r\n expect(screen.getByText(\"star\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"no props renders no header and does not throw\", () => {\r\n /* `render` not throwing IS the second half of this assertion. The button\r\n * check uses screen.queryByRole rather than container.querySelector\r\n * (testing-library/no-container + no-node-access), matching the idiom the\r\n * kebab test above already uses. */\r\n render(<MobileRowCard />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MobileRowCard.test.js","names":["render","screen","fireEvent","MobileRowCard","jsx","_jsx","describe","test","title","subtitle","meta","expect","getByText","toBeInTheDocument","undefined","queryByText","not","rerender","toHaveAttribute","children","queryByTitle","kv","label","value","getAllByText","toHaveLength","fallback","chips","actions","queryByRole","divider","onClick","actionsAriaLabel","getByRole","name","onCardClick","jest","fn","leading","click","toHaveBeenCalledTimes","onAction","trailing","toHaveBeenCalled","onCardKeyDown","onKeyDown","keyDown","key","visualiser","kebab","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","toBeTruthy"],"sources":["../../../../src/lib/v2/__tests__/MobileRowCard.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport { render, screen, fireEvent } from \"@testing-library/react\";\r\nimport MobileRowCard from \"../components/MobileRowCard\";\r\n\r\n/**\r\n * MobileRowCard — slot contract tests.\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * §10.3 R-G.6 MUST — \"Snapshot Storybook + tests Jest/Testing-Library\" — was\r\n * unmet for THREE props added to this component across successive module\r\n * audits: `kv` and `leading` (ms-dfd-fe Area 5), then `trailing`\r\n * (ms-dfd-fe/ms-ti-fe A5-01). Each was shipped as \"additive, backward\r\n * compatible\", which is true and is not the same thing as verified. This\r\n * component is consumed by ten mobile-card sites across two certified modules,\r\n * so a silent change to any slot's behaviour regresses all of them at once.\r\n *\r\n * The PROPAGATION ASYMMETRY (see below) is the single most important thing\r\n * here. It is deliberate, it is counter-intuitive, and nothing but a test\r\n * stops a future reader from \"tidying\" it into consistency and breaking every\r\n * favourite-star and picker-button site in the fleet.\r\n *\r\n * NOT COVERED — and deliberately so: R-G.3 MUST (light + dark + compact +\r\n * responsive at 320/375/414) is a VISUAL contract. jsdom computes no layout,\r\n * so asserting it here would produce tests that pass while the cards are\r\n * broken on a phone — worse than no coverage, because it would look like\r\n * coverage. R-G.3 needs a browser (Storybook + visual regression) and remains\r\n * open for all three props.\r\n */\r\ndescribe(\"MobileRowCard — slot rendering\", () => {\r\n test(\"renders title, subtitle and meta, omitting lines with no content\", () => {\r\n render(\r\n <MobileRowCard\r\n title=\"2025-IM-0042\"\r\n subtitle=\"SOFRANE SA\"\r\n meta={[\"12/05/2026\", \"3 pièces\"]}\r\n />\r\n );\r\n\r\n expect(screen.getByText(\"2025-IM-0042\")).toBeInTheDocument();\r\n expect(screen.getByText(\"SOFRANE SA\")).toBeInTheDocument();\r\n // meta joins with \" · \" into a single node\r\n expect(screen.getByText(\"12/05/2026 · 3 pièces\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"meta drops null / empty entries rather than rendering stray separators\", () => {\r\n render(<MobileRowCard title=\"X\" meta={[\"Émise 01/01/2026\", null, \"\", undefined]} />);\r\n expect(screen.getByText(\"Émise 01/01/2026\")).toBeInTheDocument();\r\n expect(screen.queryByText(/·/)).not.toBeInTheDocument();\r\n });\r\n\r\n test(\"a string title gets a native tooltip; a node title does not stringify\", () => {\r\n const { rerender } = render(<MobileRowCard title=\"Long reference\" />);\r\n expect(screen.getByText(\"Long reference\")).toHaveAttribute(\"title\", \"Long reference\");\r\n\r\n rerender(<MobileRowCard title={<span>Node title</span>} />);\r\n expect(screen.getByText(\"Node title\")).toBeInTheDocument();\r\n /* The regression guarded here: wrapping a node yielded title=\"[object\r\n * Object]\". Asserted with queryByTitle rather than `.closest(\"[title]\")`\r\n * so it stays a Testing-Library query (testing-library/no-node-access).\r\n * `/./` = \"no element carries ANY non-empty title\", which is a STRONGER\r\n * assertion than the ancestor walk it replaces: MobileRowCard sets a title\r\n * attribute in exactly two places (the title Box and the subtitle Box) and\r\n * only when the value is a string, so with a node title and no subtitle the\r\n * whole tree must be title-less. */\r\n expect(screen.queryByTitle(/./)).not.toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"MobileRowCard — kv slot\", () => {\r\n test(\"renders each pair as a KV label/value unit\", () => {\r\n render(\r\n <MobileRowCard\r\n title=\"ref\"\r\n kv={[\r\n { label: \"Catégorie\", value: \"CONTINGENT\" },\r\n { label: \"Importateur\", value: \"SOFRANE SA\" },\r\n ]}\r\n />\r\n );\r\n\r\n expect(screen.getByText(\"Catégorie\")).toBeInTheDocument();\r\n expect(screen.getByText(\"CONTINGENT\")).toBeInTheDocument();\r\n expect(screen.getByText(\"Importateur\")).toBeInTheDocument();\r\n expect(screen.getByText(\"SOFRANE SA\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"an empty value KEEPS the pair and shows KV's own em-dash placeholder\", () => {\r\n // This is why every consuming site could drop its `?? \\\"-\\\"`: KV owns the\r\n // placeholder. Losing this behaviour would silently reintroduce ten local\r\n // fallbacks across the fleet.\r\n render(\r\n <MobileRowCard\r\n title=\"ref\"\r\n kv={[\r\n { label: \"Bureau douanier\", value: undefined },\r\n { label: \"Marchandise\", value: \"\" },\r\n { label: \"Devise\", value: null },\r\n ]}\r\n />\r\n );\r\n\r\n expect(screen.getByText(\"Bureau douanier\")).toBeInTheDocument();\r\n expect(screen.getByText(\"Marchandise\")).toBeInTheDocument();\r\n expect(screen.getByText(\"Devise\")).toBeInTheDocument();\r\n expect(screen.getAllByText(\"—\")).toHaveLength(3);\r\n });\r\n\r\n test(\"a custom fallback overrides the em dash\", () => {\r\n render(\r\n <MobileRowCard title=\"ref\" kv={[{ label: \"Banque\", fallback: \"Non assignée\" }]} />\r\n );\r\n expect(screen.getByText(\"Non assignée\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"pairs with no label are DROPPED (KV would emit a dangling aria-labelledby)\", () => {\r\n render(\r\n <MobileRowCard\r\n title=\"ref\"\r\n kv={[\r\n { label: \"\", value: \"orphan-empty\" },\r\n // `label` is required but its type (ReactNode) admits undefined, so\r\n // this is type-valid and exercises the runtime `!= null` guard.\r\n { label: undefined, value: \"orphan-missing\" },\r\n { label: \"Kept\", value: \"kept-value\" },\r\n ]}\r\n />\r\n );\r\n\r\n expect(screen.queryByText(\"orphan-empty\")).not.toBeInTheDocument();\r\n expect(screen.queryByText(\"orphan-missing\")).not.toBeInTheDocument();\r\n expect(screen.getByText(\"kept-value\")).toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"MobileRowCard — chips slot\", () => {\r\n test(\"renders chip nodes and filters falsy entries\", () => {\r\n render(\r\n <MobileRowCard\r\n title=\"ref\"\r\n chips={[<span key=\"a\">Approuvé</span>, null, false, <span key=\"b\">CO</span>]}\r\n />\r\n );\r\n expect(screen.getByText(\"Approuvé\")).toBeInTheDocument();\r\n expect(screen.getByText(\"CO\")).toBeInTheDocument();\r\n });\r\n});\r\n\r\ndescribe(\"MobileRowCard — actions (kebab)\", () => {\r\n test(\"kebab renders only when at least one non-divider action exists\", () => {\r\n const { rerender } = render(<MobileRowCard title=\"ref\" actions={[]} />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n\r\n rerender(<MobileRowCard title=\"ref\" actions={[{ divider: true }]} />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n\r\n rerender(\r\n <MobileRowCard\r\n title=\"ref\"\r\n actions={[{ label: \"Détail\", onClick: () => {} }]}\r\n actionsAriaLabel=\"Actions pour 2025-IM-0042\"\r\n />\r\n );\r\n expect(\r\n screen.getByRole(\"button\", { name: \"Actions pour 2025-IM-0042\" })\r\n ).toBeInTheDocument();\r\n });\r\n});\r\n\r\n/**\r\n * THE PROPAGATION CONTRACT — the reason this file matters most.\r\n *\r\n * DataGrid's mobile-card wrapper makes the whole card the click target\r\n * (role=button + onRowClick). Two slots therefore behave DIFFERENTLY on\r\n * purpose:\r\n *\r\n * leading — does NOT stop propagation. A decorative node (icon, avatar)\r\n * should still open the row like the rest of the card. Interactive\r\n * leading content is responsible for stopping propagation itself,\r\n * exactly as DataGrid's own FavoriteCell does. Get this wrong and\r\n * a tap both toggles the favourite star AND opens the drawer.\r\n *\r\n * trailing — DOES stop propagation (it shares the kebab's wrapper). Its\r\n * declared purpose is interactive actions, and a tap that both\r\n * fires the action and opens the row is the more damaging default.\r\n *\r\n * Making these two consistent — in either direction — is a breaking change for\r\n * the ten sites that depend on them.\r\n */\r\ndescribe(\"MobileRowCard — propagation asymmetry (deliberate)\", () => {\r\n test(\"leading does NOT stop click propagation to the card\", () => {\r\n const onCardClick = jest.fn();\r\n render(\r\n <div onClick={onCardClick}>\r\n <MobileRowCard title=\"ref\" leading={<span>star</span>} />\r\n </div>\r\n );\r\n\r\n fireEvent.click(screen.getByText(\"star\"));\r\n expect(onCardClick).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n test(\"trailing DOES stop click propagation to the card\", () => {\r\n const onCardClick = jest.fn();\r\n const onAction = jest.fn();\r\n render(\r\n <div onClick={onCardClick}>\r\n <MobileRowCard\r\n title=\"ref\"\r\n trailing={<button onClick={onAction}>Choisir</button>}\r\n />\r\n </div>\r\n );\r\n\r\n fireEvent.click(screen.getByRole(\"button\", { name: \"Choisir\" }));\r\n expect(onAction).toHaveBeenCalledTimes(1);\r\n expect(onCardClick).not.toHaveBeenCalled();\r\n });\r\n\r\n test(\"trailing stops keydown propagation too (keyboard parity)\", () => {\r\n const onCardKeyDown = jest.fn();\r\n render(\r\n <div onKeyDown={onCardKeyDown}>\r\n <MobileRowCard title=\"ref\" trailing={<button>Choisir</button>} />\r\n </div>\r\n );\r\n\r\n fireEvent.keyDown(screen.getByRole(\"button\", { name: \"Choisir\" }), { key: \"Enter\" });\r\n expect(onCardKeyDown).not.toHaveBeenCalled();\r\n });\r\n\r\n test(\"opening the kebab does not fire the card click\", () => {\r\n const onCardClick = jest.fn();\r\n render(\r\n <div onClick={onCardClick}>\r\n <MobileRowCard title=\"ref\" actions={[{ label: \"Détail\", onClick: () => {} }]} />\r\n </div>\r\n );\r\n\r\n fireEvent.click(screen.getByRole(\"button\", { name: \"Plus d'actions\" }));\r\n expect(onCardClick).not.toHaveBeenCalled();\r\n });\r\n});\r\n\r\ndescribe(\"MobileRowCard — header composition\", () => {\r\n test(\"trailing and the kebab coexist, trailing first\", () => {\r\n render(\r\n <MobileRowCard\r\n title=\"ref\"\r\n trailing={<button>Visualiser</button>}\r\n actions={[{ label: \"Supprimer\", onClick: () => {} }]}\r\n actionsAriaLabel=\"Autres actions\"\r\n />\r\n );\r\n\r\n const visualiser = screen.getByRole(\"button\", { name: \"Visualiser\" });\r\n const kebab = screen.getByRole(\"button\", { name: \"Autres actions\" });\r\n expect(visualiser).toBeInTheDocument();\r\n expect(kebab).toBeInTheDocument();\r\n\r\n // Document order: trailing precedes the kebab in the header end cluster.\r\n expect(\r\n visualiser.compareDocumentPosition(kebab) & Node.DOCUMENT_POSITION_FOLLOWING\r\n ).toBeTruthy();\r\n });\r\n\r\n test(\"a card with ONLY trailing still renders its header\", () => {\r\n // Regression guard: hasHeader must include hasTrailing, otherwise a\r\n // title-less picker card would drop its action entirely.\r\n render(<MobileRowCard trailing={<button>Choisir</button>} />);\r\n expect(screen.getByRole(\"button\", { name: \"Choisir\" })).toBeInTheDocument();\r\n });\r\n\r\n test(\"a card with ONLY leading still renders its header\", () => {\r\n render(<MobileRowCard leading={<span>star</span>} />);\r\n expect(screen.getByText(\"star\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"no props renders no header and does not throw\", () => {\r\n /* `render` not throwing IS the second half of this assertion. The button\r\n * check uses screen.queryByRole rather than container.querySelector\r\n * (testing-library/no-container + no-node-access), matching the idiom the\r\n * kebab test above already uses. */\r\n render(<MobileRowCard />);\r\n expect(screen.queryByRole(\"button\")).not.toBeInTheDocument();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jest-environment jsdom
|
|
3
|
+
*/
|
|
4
|
+
import "@testing-library/jest-dom";
|
|
5
|
+
import { render, screen } from "@testing-library/react";
|
|
6
|
+
import PreviewDrawer from "../patterns/PreviewDrawer";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* PreviewDrawer (G-40) — promoted from `refonte-frontend` (Area 5).
|
|
10
|
+
*
|
|
11
|
+
* The assertions below are the CONTRACT the promotion rests on, not a render
|
|
12
|
+
* smoke test. Each one pins a decision the module's local ancestor had got
|
|
13
|
+
* wrong or had had to document as a hazard.
|
|
14
|
+
*/
|
|
15
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
|
+
const LIGNE = {
|
|
17
|
+
id: 1,
|
|
18
|
+
reference: "2025-IM-0042"
|
|
19
|
+
};
|
|
20
|
+
describe("PreviewDrawer", () => {
|
|
21
|
+
test("renders nothing without a row, so hosts can mount it unconditionally", () => {
|
|
22
|
+
render(/*#__PURE__*/_jsx(PreviewDrawer, {
|
|
23
|
+
open: true,
|
|
24
|
+
row: null,
|
|
25
|
+
subtitle: "D\xE9claration"
|
|
26
|
+
}));
|
|
27
|
+
expect(screen.queryByRole("dialog")).not.toBeInTheDocument();
|
|
28
|
+
});
|
|
29
|
+
test("renders the summary sheet as label/value pairs", () => {
|
|
30
|
+
render(/*#__PURE__*/_jsx(PreviewDrawer, {
|
|
31
|
+
open: true,
|
|
32
|
+
row: LIGNE,
|
|
33
|
+
title: "2025-IM-0042",
|
|
34
|
+
subtitle: "D\xE9claration",
|
|
35
|
+
items: [{
|
|
36
|
+
label: "Importateur",
|
|
37
|
+
value: "SOFRANE SA"
|
|
38
|
+
}, {
|
|
39
|
+
label: "Référence",
|
|
40
|
+
value: "2025-IM-0042",
|
|
41
|
+
mono: true
|
|
42
|
+
}]
|
|
43
|
+
}));
|
|
44
|
+
expect(screen.getByText("Importateur")).toBeInTheDocument();
|
|
45
|
+
expect(screen.getByText("SOFRANE SA")).toBeInTheDocument();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* THE DEFAULT THE ANCESTOR COULD NOT SAFELY HAVE. A generic drawer that
|
|
50
|
+
* computed its title from one business type's fields needed
|
|
51
|
+
* `as unknown as DemandeRow` to do it. Here a missing title degrades to a
|
|
52
|
+
* neutral fallback and nothing is asserted about the row's shape.
|
|
53
|
+
*/
|
|
54
|
+
test("falls back to a neutral title rather than reading the row", () => {
|
|
55
|
+
render(/*#__PURE__*/_jsx(PreviewDrawer, {
|
|
56
|
+
open: true,
|
|
57
|
+
row: LIGNE,
|
|
58
|
+
subtitle: "D\xE9claration"
|
|
59
|
+
}));
|
|
60
|
+
expect(screen.getByRole("heading", {
|
|
61
|
+
level: 2,
|
|
62
|
+
name: "Détail"
|
|
63
|
+
})).toBeInTheDocument();
|
|
64
|
+
});
|
|
65
|
+
test("no open action unless the host supplies onOpenItem", () => {
|
|
66
|
+
render(/*#__PURE__*/_jsx(PreviewDrawer, {
|
|
67
|
+
open: true,
|
|
68
|
+
row: LIGNE,
|
|
69
|
+
subtitle: "D\xE9claration"
|
|
70
|
+
}));
|
|
71
|
+
expect(screen.queryByRole("button", {
|
|
72
|
+
name: "Consulter"
|
|
73
|
+
})).not.toBeInTheDocument();
|
|
74
|
+
});
|
|
75
|
+
test("the open action is rendered, and labelled by the host", () => {
|
|
76
|
+
render(/*#__PURE__*/_jsx(PreviewDrawer, {
|
|
77
|
+
open: true,
|
|
78
|
+
row: LIGNE,
|
|
79
|
+
subtitle: "D\xE9claration",
|
|
80
|
+
onOpenItem: jest.fn(),
|
|
81
|
+
labels: {
|
|
82
|
+
open: "Consulter la demande"
|
|
83
|
+
}
|
|
84
|
+
}));
|
|
85
|
+
expect(screen.getByRole("button", {
|
|
86
|
+
name: "Consulter la demande"
|
|
87
|
+
})).toBeInTheDocument();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* `canOpenItem` defaults to ALLOWED, deliberately: this component knows no
|
|
92
|
+
* business status, so a masking rule it invented would be worse than none.
|
|
93
|
+
*/
|
|
94
|
+
test("canOpenItem gates the open action, and defaults to allowed", () => {
|
|
95
|
+
const {
|
|
96
|
+
unmount
|
|
97
|
+
} = render(/*#__PURE__*/_jsx(PreviewDrawer, {
|
|
98
|
+
open: true,
|
|
99
|
+
row: LIGNE,
|
|
100
|
+
subtitle: "D\xE9claration",
|
|
101
|
+
onOpenItem: jest.fn(),
|
|
102
|
+
canOpenItem: () => false
|
|
103
|
+
}));
|
|
104
|
+
expect(screen.queryByRole("button", {
|
|
105
|
+
name: "Consulter"
|
|
106
|
+
})).not.toBeInTheDocument();
|
|
107
|
+
unmount();
|
|
108
|
+
render(/*#__PURE__*/_jsx(PreviewDrawer, {
|
|
109
|
+
open: true,
|
|
110
|
+
row: LIGNE,
|
|
111
|
+
subtitle: "D\xE9claration",
|
|
112
|
+
onOpenItem: jest.fn()
|
|
113
|
+
}));
|
|
114
|
+
expect(screen.getByRole("button", {
|
|
115
|
+
name: "Consulter"
|
|
116
|
+
})).toBeInTheDocument();
|
|
117
|
+
});
|
|
118
|
+
test("children render under the summary sheet", () => {
|
|
119
|
+
render(/*#__PURE__*/_jsx(PreviewDrawer, {
|
|
120
|
+
open: true,
|
|
121
|
+
row: LIGNE,
|
|
122
|
+
subtitle: "D\xE9claration",
|
|
123
|
+
items: [{
|
|
124
|
+
label: "Importateur",
|
|
125
|
+
value: "SOFRANE SA"
|
|
126
|
+
}],
|
|
127
|
+
children: /*#__PURE__*/_jsx("p", {
|
|
128
|
+
children: "Pi\xE8ces jointes"
|
|
129
|
+
})
|
|
130
|
+
}));
|
|
131
|
+
expect(screen.getByText("Pièces jointes")).toBeInTheDocument();
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Item navigation stays opt-in at this level too: `Drawer` renders the
|
|
136
|
+
* prev/next cluster only when a handler is wired (its own D-A10.2 note), and
|
|
137
|
+
* a preview that navigates must still show the cluster DISABLED on a
|
|
138
|
+
* single-row result set — which is why presence of the handler, not of
|
|
139
|
+
* `hasPrev`, is what matters.
|
|
140
|
+
*/
|
|
141
|
+
test("no navigation cluster unless a handler is wired", () => {
|
|
142
|
+
const {
|
|
143
|
+
unmount
|
|
144
|
+
} = render(/*#__PURE__*/_jsx(PreviewDrawer, {
|
|
145
|
+
open: true,
|
|
146
|
+
row: LIGNE,
|
|
147
|
+
subtitle: "D\xE9claration"
|
|
148
|
+
}));
|
|
149
|
+
expect(screen.queryByRole("button", {
|
|
150
|
+
name: "Suivant"
|
|
151
|
+
})).not.toBeInTheDocument();
|
|
152
|
+
unmount();
|
|
153
|
+
render(/*#__PURE__*/_jsx(PreviewDrawer, {
|
|
154
|
+
open: true,
|
|
155
|
+
row: LIGNE,
|
|
156
|
+
subtitle: "D\xE9claration",
|
|
157
|
+
onNext: jest.fn(),
|
|
158
|
+
hasNext: false
|
|
159
|
+
}));
|
|
160
|
+
expect(screen.getByRole("button", {
|
|
161
|
+
name: "Suivant"
|
|
162
|
+
})).toBeDisabled();
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
//# sourceMappingURL=PreviewDrawer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewDrawer.test.js","names":["render","screen","PreviewDrawer","jsx","_jsx","LIGNE","id","reference","describe","test","open","row","subtitle","expect","queryByRole","not","toBeInTheDocument","title","items","label","value","mono","getByText","getByRole","level","name","onOpenItem","jest","fn","labels","unmount","canOpenItem","children","onNext","hasNext","toBeDisabled"],"sources":["../../../../src/lib/v2/__tests__/PreviewDrawer.test.tsx"],"sourcesContent":["/**\r\n * @jest-environment jsdom\r\n */\r\nimport \"@testing-library/jest-dom\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport PreviewDrawer from \"../patterns/PreviewDrawer\";\r\n\r\n/**\r\n * PreviewDrawer (G-40) — promoted from `refonte-frontend` (Area 5).\r\n *\r\n * The assertions below are the CONTRACT the promotion rests on, not a render\r\n * smoke test. Each one pins a decision the module's local ancestor had got\r\n * wrong or had had to document as a hazard.\r\n */\r\n\r\ninterface Ligne {\r\n id: number;\r\n reference: string;\r\n}\r\n\r\nconst LIGNE: Ligne = { id: 1, reference: \"2025-IM-0042\" };\r\n\r\ndescribe(\"PreviewDrawer\", () => {\r\n test(\"renders nothing without a row, so hosts can mount it unconditionally\", () => {\r\n render(<PreviewDrawer<Ligne> open row={null} subtitle=\"Déclaration\" />);\r\n expect(screen.queryByRole(\"dialog\")).not.toBeInTheDocument();\r\n });\r\n\r\n test(\"renders the summary sheet as label/value pairs\", () => {\r\n render(\r\n <PreviewDrawer<Ligne>\r\n open\r\n row={LIGNE}\r\n title=\"2025-IM-0042\"\r\n subtitle=\"Déclaration\"\r\n items={[\r\n { label: \"Importateur\", value: \"SOFRANE SA\" },\r\n { label: \"Référence\", value: \"2025-IM-0042\", mono: true },\r\n ]}\r\n />\r\n );\r\n expect(screen.getByText(\"Importateur\")).toBeInTheDocument();\r\n expect(screen.getByText(\"SOFRANE SA\")).toBeInTheDocument();\r\n });\r\n\r\n /**\r\n * THE DEFAULT THE ANCESTOR COULD NOT SAFELY HAVE. A generic drawer that\r\n * computed its title from one business type's fields needed\r\n * `as unknown as DemandeRow` to do it. Here a missing title degrades to a\r\n * neutral fallback and nothing is asserted about the row's shape.\r\n */\r\n test(\"falls back to a neutral title rather than reading the row\", () => {\r\n render(<PreviewDrawer<Ligne> open row={LIGNE} subtitle=\"Déclaration\" />);\r\n expect(\r\n screen.getByRole(\"heading\", { level: 2, name: \"Détail\" })\r\n ).toBeInTheDocument();\r\n });\r\n\r\n test(\"no open action unless the host supplies onOpenItem\", () => {\r\n render(<PreviewDrawer<Ligne> open row={LIGNE} subtitle=\"Déclaration\" />);\r\n expect(screen.queryByRole(\"button\", { name: \"Consulter\" })).not.toBeInTheDocument();\r\n });\r\n\r\n test(\"the open action is rendered, and labelled by the host\", () => {\r\n render(\r\n <PreviewDrawer<Ligne>\r\n open\r\n row={LIGNE}\r\n subtitle=\"Déclaration\"\r\n onOpenItem={jest.fn()}\r\n labels={{ open: \"Consulter la demande\" }}\r\n />\r\n );\r\n expect(\r\n screen.getByRole(\"button\", { name: \"Consulter la demande\" })\r\n ).toBeInTheDocument();\r\n });\r\n\r\n /**\r\n * `canOpenItem` defaults to ALLOWED, deliberately: this component knows no\r\n * business status, so a masking rule it invented would be worse than none.\r\n */\r\n test(\"canOpenItem gates the open action, and defaults to allowed\", () => {\r\n const { unmount } = render(\r\n <PreviewDrawer<Ligne>\r\n open\r\n row={LIGNE}\r\n subtitle=\"Déclaration\"\r\n onOpenItem={jest.fn()}\r\n canOpenItem={() => false}\r\n />\r\n );\r\n expect(screen.queryByRole(\"button\", { name: \"Consulter\" })).not.toBeInTheDocument();\r\n unmount();\r\n\r\n render(\r\n <PreviewDrawer<Ligne> open row={LIGNE} subtitle=\"Déclaration\" onOpenItem={jest.fn()} />\r\n );\r\n expect(screen.getByRole(\"button\", { name: \"Consulter\" })).toBeInTheDocument();\r\n });\r\n\r\n test(\"children render under the summary sheet\", () => {\r\n render(\r\n <PreviewDrawer<Ligne>\r\n open\r\n row={LIGNE}\r\n subtitle=\"Déclaration\"\r\n items={[{ label: \"Importateur\", value: \"SOFRANE SA\" }]}\r\n >\r\n <p>Pièces jointes</p>\r\n </PreviewDrawer>\r\n );\r\n expect(screen.getByText(\"Pièces jointes\")).toBeInTheDocument();\r\n });\r\n\r\n /**\r\n * Item navigation stays opt-in at this level too: `Drawer` renders the\r\n * prev/next cluster only when a handler is wired (its own D-A10.2 note), and\r\n * a preview that navigates must still show the cluster DISABLED on a\r\n * single-row result set — which is why presence of the handler, not of\r\n * `hasPrev`, is what matters.\r\n */\r\n test(\"no navigation cluster unless a handler is wired\", () => {\r\n const { unmount } = render(\r\n <PreviewDrawer<Ligne> open row={LIGNE} subtitle=\"Déclaration\" />\r\n );\r\n expect(screen.queryByRole(\"button\", { name: \"Suivant\" })).not.toBeInTheDocument();\r\n unmount();\r\n\r\n render(\r\n <PreviewDrawer<Ligne>\r\n open\r\n row={LIGNE}\r\n subtitle=\"Déclaration\"\r\n onNext={jest.fn()}\r\n hasNext={false}\r\n />\r\n );\r\n expect(screen.getByRole(\"button\", { name: \"Suivant\" })).toBeDisabled();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|