@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
|
@@ -4,7 +4,7 @@ require("@testing-library/jest-dom");
|
|
|
4
4
|
var _react = require("@testing-library/react");
|
|
5
5
|
var _MobileRowCard = _interopRequireDefault(require("../components/MobileRowCard"));
|
|
6
6
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
7
|
-
function _interopRequireDefault(
|
|
7
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
8
|
/**
|
|
9
9
|
* MobileRowCard — slot contract tests.
|
|
10
10
|
*
|
|
@@ -29,9 +29,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
29
29
|
* broken on a phone — worse than no coverage, because it would look like
|
|
30
30
|
* coverage. R-G.3 needs a browser (Storybook + visual regression) and remains
|
|
31
31
|
* open for all three props.
|
|
32
|
-
*/describe("MobileRowCard — slot rendering",
|
|
33
|
-
test("renders title, subtitle and meta, omitting lines with no content",
|
|
34
|
-
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
32
|
+
*/describe("MobileRowCard — slot rendering", () => {
|
|
33
|
+
test("renders title, subtitle and meta, omitting lines with no content", () => {
|
|
34
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
35
35
|
title: "2025-IM-0042",
|
|
36
36
|
subtitle: "SOFRANE SA",
|
|
37
37
|
meta: ["12/05/2026", "3 pièces"]
|
|
@@ -41,21 +41,22 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
41
41
|
// meta joins with " · " into a single node
|
|
42
42
|
expect(_react.screen.getByText("12/05/2026 · 3 pièces")).toBeInTheDocument();
|
|
43
43
|
});
|
|
44
|
-
test("meta drops null / empty entries rather than rendering stray separators",
|
|
45
|
-
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
44
|
+
test("meta drops null / empty entries rather than rendering stray separators", () => {
|
|
45
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
46
46
|
title: "X",
|
|
47
47
|
meta: ["Émise 01/01/2026", null, "", undefined]
|
|
48
48
|
}));
|
|
49
49
|
expect(_react.screen.getByText("Émise 01/01/2026")).toBeInTheDocument();
|
|
50
50
|
expect(_react.screen.queryByText(/·/)).not.toBeInTheDocument();
|
|
51
51
|
});
|
|
52
|
-
test("a string title gets a native tooltip; a node title does not stringify",
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
test("a string title gets a native tooltip; a node title does not stringify", () => {
|
|
53
|
+
const {
|
|
54
|
+
rerender
|
|
55
|
+
} = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
56
|
+
title: "Long reference"
|
|
57
|
+
}));
|
|
57
58
|
expect(_react.screen.getByText("Long reference")).toHaveAttribute("title", "Long reference");
|
|
58
|
-
rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
59
|
+
rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
59
60
|
title: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
60
61
|
children: "Node title"
|
|
61
62
|
})
|
|
@@ -72,9 +73,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
72
73
|
expect(_react.screen.queryByTitle(/./)).not.toBeInTheDocument();
|
|
73
74
|
});
|
|
74
75
|
});
|
|
75
|
-
describe("MobileRowCard — kv slot",
|
|
76
|
-
test("renders each pair as a KV label/value unit",
|
|
77
|
-
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
76
|
+
describe("MobileRowCard — kv slot", () => {
|
|
77
|
+
test("renders each pair as a KV label/value unit", () => {
|
|
78
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
78
79
|
title: "ref",
|
|
79
80
|
kv: [{
|
|
80
81
|
label: "Catégorie",
|
|
@@ -89,11 +90,11 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
89
90
|
expect(_react.screen.getByText("Importateur")).toBeInTheDocument();
|
|
90
91
|
expect(_react.screen.getByText("SOFRANE SA")).toBeInTheDocument();
|
|
91
92
|
});
|
|
92
|
-
test("an empty value KEEPS the pair and shows KV's own em-dash placeholder",
|
|
93
|
+
test("an empty value KEEPS the pair and shows KV's own em-dash placeholder", () => {
|
|
93
94
|
// This is why every consuming site could drop its `?? \"-\"`: KV owns the
|
|
94
95
|
// placeholder. Losing this behaviour would silently reintroduce ten local
|
|
95
96
|
// fallbacks across the fleet.
|
|
96
|
-
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
97
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
97
98
|
title: "ref",
|
|
98
99
|
kv: [{
|
|
99
100
|
label: "Bureau douanier",
|
|
@@ -111,8 +112,8 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
111
112
|
expect(_react.screen.getByText("Devise")).toBeInTheDocument();
|
|
112
113
|
expect(_react.screen.getAllByText("—")).toHaveLength(3);
|
|
113
114
|
});
|
|
114
|
-
test("a custom fallback overrides the em dash",
|
|
115
|
-
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
115
|
+
test("a custom fallback overrides the em dash", () => {
|
|
116
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
116
117
|
title: "ref",
|
|
117
118
|
kv: [{
|
|
118
119
|
label: "Banque",
|
|
@@ -121,8 +122,8 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
121
122
|
}));
|
|
122
123
|
expect(_react.screen.getByText("Non assignée")).toBeInTheDocument();
|
|
123
124
|
});
|
|
124
|
-
test("pairs with no label are DROPPED (KV would emit a dangling aria-labelledby)",
|
|
125
|
-
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
125
|
+
test("pairs with no label are DROPPED (KV would emit a dangling aria-labelledby)", () => {
|
|
126
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
126
127
|
title: "ref",
|
|
127
128
|
kv: [{
|
|
128
129
|
label: "",
|
|
@@ -143,9 +144,9 @@ describe("MobileRowCard — kv slot", function () {
|
|
|
143
144
|
expect(_react.screen.getByText("kept-value")).toBeInTheDocument();
|
|
144
145
|
});
|
|
145
146
|
});
|
|
146
|
-
describe("MobileRowCard — chips slot",
|
|
147
|
-
test("renders chip nodes and filters falsy entries",
|
|
148
|
-
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
147
|
+
describe("MobileRowCard — chips slot", () => {
|
|
148
|
+
test("renders chip nodes and filters falsy entries", () => {
|
|
149
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
149
150
|
title: "ref",
|
|
150
151
|
chips: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
151
152
|
children: "Approuv\xE9"
|
|
@@ -157,26 +158,27 @@ describe("MobileRowCard — chips slot", function () {
|
|
|
157
158
|
expect(_react.screen.getByText("CO")).toBeInTheDocument();
|
|
158
159
|
});
|
|
159
160
|
});
|
|
160
|
-
describe("MobileRowCard — actions (kebab)",
|
|
161
|
-
test("kebab renders only when at least one non-divider action exists",
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
161
|
+
describe("MobileRowCard — actions (kebab)", () => {
|
|
162
|
+
test("kebab renders only when at least one non-divider action exists", () => {
|
|
163
|
+
const {
|
|
164
|
+
rerender
|
|
165
|
+
} = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
166
|
+
title: "ref",
|
|
167
|
+
actions: []
|
|
168
|
+
}));
|
|
167
169
|
expect(_react.screen.queryByRole("button")).not.toBeInTheDocument();
|
|
168
|
-
rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
170
|
+
rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
169
171
|
title: "ref",
|
|
170
172
|
actions: [{
|
|
171
173
|
divider: true
|
|
172
174
|
}]
|
|
173
175
|
}));
|
|
174
176
|
expect(_react.screen.queryByRole("button")).not.toBeInTheDocument();
|
|
175
|
-
rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
177
|
+
rerender(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
176
178
|
title: "ref",
|
|
177
179
|
actions: [{
|
|
178
180
|
label: "Détail",
|
|
179
|
-
onClick:
|
|
181
|
+
onClick: () => {}
|
|
180
182
|
}],
|
|
181
183
|
actionsAriaLabel: "Actions pour 2025-IM-0042"
|
|
182
184
|
}));
|
|
@@ -206,12 +208,12 @@ describe("MobileRowCard — actions (kebab)", function () {
|
|
|
206
208
|
* Making these two consistent — in either direction — is a breaking change for
|
|
207
209
|
* the ten sites that depend on them.
|
|
208
210
|
*/
|
|
209
|
-
describe("MobileRowCard — propagation asymmetry (deliberate)",
|
|
210
|
-
test("leading does NOT stop click propagation to the card",
|
|
211
|
-
|
|
211
|
+
describe("MobileRowCard — propagation asymmetry (deliberate)", () => {
|
|
212
|
+
test("leading does NOT stop click propagation to the card", () => {
|
|
213
|
+
const onCardClick = jest.fn();
|
|
212
214
|
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
213
215
|
onClick: onCardClick,
|
|
214
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
216
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
215
217
|
title: "ref",
|
|
216
218
|
leading: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
217
219
|
children: "star"
|
|
@@ -221,12 +223,12 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
221
223
|
_react.fireEvent.click(_react.screen.getByText("star"));
|
|
222
224
|
expect(onCardClick).toHaveBeenCalledTimes(1);
|
|
223
225
|
});
|
|
224
|
-
test("trailing DOES stop click propagation to the card",
|
|
225
|
-
|
|
226
|
-
|
|
226
|
+
test("trailing DOES stop click propagation to the card", () => {
|
|
227
|
+
const onCardClick = jest.fn();
|
|
228
|
+
const onAction = jest.fn();
|
|
227
229
|
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
228
230
|
onClick: onCardClick,
|
|
229
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
231
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
230
232
|
title: "ref",
|
|
231
233
|
trailing: /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
|
|
232
234
|
onClick: onAction,
|
|
@@ -240,11 +242,11 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
240
242
|
expect(onAction).toHaveBeenCalledTimes(1);
|
|
241
243
|
expect(onCardClick).not.toHaveBeenCalled();
|
|
242
244
|
});
|
|
243
|
-
test("trailing stops keydown propagation too (keyboard parity)",
|
|
244
|
-
|
|
245
|
+
test("trailing stops keydown propagation too (keyboard parity)", () => {
|
|
246
|
+
const onCardKeyDown = jest.fn();
|
|
245
247
|
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
246
248
|
onKeyDown: onCardKeyDown,
|
|
247
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
249
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
248
250
|
title: "ref",
|
|
249
251
|
trailing: /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
|
|
250
252
|
children: "Choisir"
|
|
@@ -258,15 +260,15 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
258
260
|
});
|
|
259
261
|
expect(onCardKeyDown).not.toHaveBeenCalled();
|
|
260
262
|
});
|
|
261
|
-
test("opening the kebab does not fire the card click",
|
|
262
|
-
|
|
263
|
+
test("opening the kebab does not fire the card click", () => {
|
|
264
|
+
const onCardClick = jest.fn();
|
|
263
265
|
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
264
266
|
onClick: onCardClick,
|
|
265
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
267
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
266
268
|
title: "ref",
|
|
267
269
|
actions: [{
|
|
268
270
|
label: "Détail",
|
|
269
|
-
onClick:
|
|
271
|
+
onClick: () => {}
|
|
270
272
|
}]
|
|
271
273
|
})
|
|
272
274
|
}));
|
|
@@ -276,23 +278,23 @@ describe("MobileRowCard — propagation asymmetry (deliberate)", function () {
|
|
|
276
278
|
expect(onCardClick).not.toHaveBeenCalled();
|
|
277
279
|
});
|
|
278
280
|
});
|
|
279
|
-
describe("MobileRowCard — header composition",
|
|
280
|
-
test("trailing and the kebab coexist, trailing first",
|
|
281
|
-
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
281
|
+
describe("MobileRowCard — header composition", () => {
|
|
282
|
+
test("trailing and the kebab coexist, trailing first", () => {
|
|
283
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
282
284
|
title: "ref",
|
|
283
285
|
trailing: /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
|
|
284
286
|
children: "Visualiser"
|
|
285
287
|
}),
|
|
286
288
|
actions: [{
|
|
287
289
|
label: "Supprimer",
|
|
288
|
-
onClick:
|
|
290
|
+
onClick: () => {}
|
|
289
291
|
}],
|
|
290
292
|
actionsAriaLabel: "Autres actions"
|
|
291
293
|
}));
|
|
292
|
-
|
|
294
|
+
const visualiser = _react.screen.getByRole("button", {
|
|
293
295
|
name: "Visualiser"
|
|
294
296
|
});
|
|
295
|
-
|
|
297
|
+
const kebab = _react.screen.getByRole("button", {
|
|
296
298
|
name: "Autres actions"
|
|
297
299
|
});
|
|
298
300
|
expect(visualiser).toBeInTheDocument();
|
|
@@ -301,10 +303,10 @@ describe("MobileRowCard — header composition", function () {
|
|
|
301
303
|
// Document order: trailing precedes the kebab in the header end cluster.
|
|
302
304
|
expect(visualiser.compareDocumentPosition(kebab) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy();
|
|
303
305
|
});
|
|
304
|
-
test("a card with ONLY trailing still renders its header",
|
|
306
|
+
test("a card with ONLY trailing still renders its header", () => {
|
|
305
307
|
// Regression guard: hasHeader must include hasTrailing, otherwise a
|
|
306
308
|
// title-less picker card would drop its action entirely.
|
|
307
|
-
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
309
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
308
310
|
trailing: /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
|
|
309
311
|
children: "Choisir"
|
|
310
312
|
})
|
|
@@ -313,20 +315,20 @@ describe("MobileRowCard — header composition", function () {
|
|
|
313
315
|
name: "Choisir"
|
|
314
316
|
})).toBeInTheDocument();
|
|
315
317
|
});
|
|
316
|
-
test("a card with ONLY leading still renders its header",
|
|
317
|
-
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
318
|
+
test("a card with ONLY leading still renders its header", () => {
|
|
319
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {
|
|
318
320
|
leading: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
319
321
|
children: "star"
|
|
320
322
|
})
|
|
321
323
|
}));
|
|
322
324
|
expect(_react.screen.getByText("star")).toBeInTheDocument();
|
|
323
325
|
});
|
|
324
|
-
test("no props renders no header and does not throw",
|
|
326
|
+
test("no props renders no header and does not throw", () => {
|
|
325
327
|
/* `render` not throwing IS the second half of this assertion. The button
|
|
326
328
|
* check uses screen.queryByRole rather than container.querySelector
|
|
327
329
|
* (testing-library/no-container + no-node-access), matching the idiom the
|
|
328
330
|
* kebab test above already uses. */
|
|
329
|
-
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard
|
|
331
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileRowCard.default, {}));
|
|
330
332
|
expect(_react.screen.queryByRole("button")).not.toBeInTheDocument();
|
|
331
333
|
});
|
|
332
334
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileRowCard.test.js","names":["require","_react","_MobileRowCard","_interopRequireDefault","_jsxRuntime","obj","__esModule","describe","test","render","jsx","title","subtitle","meta","expect","screen","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","fireEvent","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":["require","_react","_MobileRowCard","_interopRequireDefault","_jsxRuntime","e","__esModule","default","describe","test","render","jsx","title","subtitle","meta","expect","screen","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","fireEvent","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,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("@testing-library/jest-dom");
|
|
4
|
+
var _react = require("@testing-library/react");
|
|
5
|
+
var _PreviewDrawer = _interopRequireDefault(require("../patterns/PreviewDrawer"));
|
|
6
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
7
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
/**
|
|
9
|
+
* @jest-environment jsdom
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* PreviewDrawer (G-40) — promoted from `refonte-frontend` (Area 5).
|
|
14
|
+
*
|
|
15
|
+
* The assertions below are the CONTRACT the promotion rests on, not a render
|
|
16
|
+
* smoke test. Each one pins a decision the module's local ancestor had got
|
|
17
|
+
* wrong or had had to document as a hazard.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const LIGNE = {
|
|
21
|
+
id: 1,
|
|
22
|
+
reference: "2025-IM-0042"
|
|
23
|
+
};
|
|
24
|
+
describe("PreviewDrawer", () => {
|
|
25
|
+
test("renders nothing without a row, so hosts can mount it unconditionally", () => {
|
|
26
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_PreviewDrawer.default, {
|
|
27
|
+
open: true,
|
|
28
|
+
row: null,
|
|
29
|
+
subtitle: "D\xE9claration"
|
|
30
|
+
}));
|
|
31
|
+
expect(_react.screen.queryByRole("dialog")).not.toBeInTheDocument();
|
|
32
|
+
});
|
|
33
|
+
test("renders the summary sheet as label/value pairs", () => {
|
|
34
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_PreviewDrawer.default, {
|
|
35
|
+
open: true,
|
|
36
|
+
row: LIGNE,
|
|
37
|
+
title: "2025-IM-0042",
|
|
38
|
+
subtitle: "D\xE9claration",
|
|
39
|
+
items: [{
|
|
40
|
+
label: "Importateur",
|
|
41
|
+
value: "SOFRANE SA"
|
|
42
|
+
}, {
|
|
43
|
+
label: "Référence",
|
|
44
|
+
value: "2025-IM-0042",
|
|
45
|
+
mono: true
|
|
46
|
+
}]
|
|
47
|
+
}));
|
|
48
|
+
expect(_react.screen.getByText("Importateur")).toBeInTheDocument();
|
|
49
|
+
expect(_react.screen.getByText("SOFRANE SA")).toBeInTheDocument();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* THE DEFAULT THE ANCESTOR COULD NOT SAFELY HAVE. A generic drawer that
|
|
54
|
+
* computed its title from one business type's fields needed
|
|
55
|
+
* `as unknown as DemandeRow` to do it. Here a missing title degrades to a
|
|
56
|
+
* neutral fallback and nothing is asserted about the row's shape.
|
|
57
|
+
*/
|
|
58
|
+
test("falls back to a neutral title rather than reading the row", () => {
|
|
59
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_PreviewDrawer.default, {
|
|
60
|
+
open: true,
|
|
61
|
+
row: LIGNE,
|
|
62
|
+
subtitle: "D\xE9claration"
|
|
63
|
+
}));
|
|
64
|
+
expect(_react.screen.getByRole("heading", {
|
|
65
|
+
level: 2,
|
|
66
|
+
name: "Détail"
|
|
67
|
+
})).toBeInTheDocument();
|
|
68
|
+
});
|
|
69
|
+
test("no open action unless the host supplies onOpenItem", () => {
|
|
70
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_PreviewDrawer.default, {
|
|
71
|
+
open: true,
|
|
72
|
+
row: LIGNE,
|
|
73
|
+
subtitle: "D\xE9claration"
|
|
74
|
+
}));
|
|
75
|
+
expect(_react.screen.queryByRole("button", {
|
|
76
|
+
name: "Consulter"
|
|
77
|
+
})).not.toBeInTheDocument();
|
|
78
|
+
});
|
|
79
|
+
test("the open action is rendered, and labelled by the host", () => {
|
|
80
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_PreviewDrawer.default, {
|
|
81
|
+
open: true,
|
|
82
|
+
row: LIGNE,
|
|
83
|
+
subtitle: "D\xE9claration",
|
|
84
|
+
onOpenItem: jest.fn(),
|
|
85
|
+
labels: {
|
|
86
|
+
open: "Consulter la demande"
|
|
87
|
+
}
|
|
88
|
+
}));
|
|
89
|
+
expect(_react.screen.getByRole("button", {
|
|
90
|
+
name: "Consulter la demande"
|
|
91
|
+
})).toBeInTheDocument();
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* `canOpenItem` defaults to ALLOWED, deliberately: this component knows no
|
|
96
|
+
* business status, so a masking rule it invented would be worse than none.
|
|
97
|
+
*/
|
|
98
|
+
test("canOpenItem gates the open action, and defaults to allowed", () => {
|
|
99
|
+
const {
|
|
100
|
+
unmount
|
|
101
|
+
} = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_PreviewDrawer.default, {
|
|
102
|
+
open: true,
|
|
103
|
+
row: LIGNE,
|
|
104
|
+
subtitle: "D\xE9claration",
|
|
105
|
+
onOpenItem: jest.fn(),
|
|
106
|
+
canOpenItem: () => false
|
|
107
|
+
}));
|
|
108
|
+
expect(_react.screen.queryByRole("button", {
|
|
109
|
+
name: "Consulter"
|
|
110
|
+
})).not.toBeInTheDocument();
|
|
111
|
+
unmount();
|
|
112
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_PreviewDrawer.default, {
|
|
113
|
+
open: true,
|
|
114
|
+
row: LIGNE,
|
|
115
|
+
subtitle: "D\xE9claration",
|
|
116
|
+
onOpenItem: jest.fn()
|
|
117
|
+
}));
|
|
118
|
+
expect(_react.screen.getByRole("button", {
|
|
119
|
+
name: "Consulter"
|
|
120
|
+
})).toBeInTheDocument();
|
|
121
|
+
});
|
|
122
|
+
test("children render under the summary sheet", () => {
|
|
123
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_PreviewDrawer.default, {
|
|
124
|
+
open: true,
|
|
125
|
+
row: LIGNE,
|
|
126
|
+
subtitle: "D\xE9claration",
|
|
127
|
+
items: [{
|
|
128
|
+
label: "Importateur",
|
|
129
|
+
value: "SOFRANE SA"
|
|
130
|
+
}],
|
|
131
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
132
|
+
children: "Pi\xE8ces jointes"
|
|
133
|
+
})
|
|
134
|
+
}));
|
|
135
|
+
expect(_react.screen.getByText("Pièces jointes")).toBeInTheDocument();
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Item navigation stays opt-in at this level too: `Drawer` renders the
|
|
140
|
+
* prev/next cluster only when a handler is wired (its own D-A10.2 note), and
|
|
141
|
+
* a preview that navigates must still show the cluster DISABLED on a
|
|
142
|
+
* single-row result set — which is why presence of the handler, not of
|
|
143
|
+
* `hasPrev`, is what matters.
|
|
144
|
+
*/
|
|
145
|
+
test("no navigation cluster unless a handler is wired", () => {
|
|
146
|
+
const {
|
|
147
|
+
unmount
|
|
148
|
+
} = (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_PreviewDrawer.default, {
|
|
149
|
+
open: true,
|
|
150
|
+
row: LIGNE,
|
|
151
|
+
subtitle: "D\xE9claration"
|
|
152
|
+
}));
|
|
153
|
+
expect(_react.screen.queryByRole("button", {
|
|
154
|
+
name: "Suivant"
|
|
155
|
+
})).not.toBeInTheDocument();
|
|
156
|
+
unmount();
|
|
157
|
+
(0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_PreviewDrawer.default, {
|
|
158
|
+
open: true,
|
|
159
|
+
row: LIGNE,
|
|
160
|
+
subtitle: "D\xE9claration",
|
|
161
|
+
onNext: jest.fn(),
|
|
162
|
+
hasNext: false
|
|
163
|
+
}));
|
|
164
|
+
expect(_react.screen.getByRole("button", {
|
|
165
|
+
name: "Suivant"
|
|
166
|
+
})).toBeDisabled();
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=PreviewDrawer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewDrawer.test.js","names":["require","_react","_PreviewDrawer","_interopRequireDefault","_jsxRuntime","e","__esModule","default","LIGNE","id","reference","describe","test","render","jsx","open","row","subtitle","expect","screen","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":[]}
|