@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Status.js","names":["React","STATUS_KEYS","STATUS_LABELS_FR","jsx","_jsx","Status","
|
|
1
|
+
{"version":3,"file":"Status.js","names":["React","STATUS_KEYS","STATUS_LABELS_FR","jsx","_jsx","Status","kind","label","labels","className","rest","safe","includes","text","trim","children"],"sources":["../../../../src/lib/v2/components/Status.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { STATUS_KEYS, STATUS_LABELS_FR } from \"../tokens/statusPalette\";\r\n\r\n/**\r\n * Status - Portnet UI v2\r\n *\r\n * Charter §02.1 — workflow status chip. Six and only six kinds.\r\n * Any other business status MUST map onto one of these.\r\n *\r\n * <Status kind=\"approved\" /> // → \"Approuvé\" (FR fallback)\r\n * <Status kind=\"pending\" label=\"Custom\" /> // explicit override (single)\r\n * <Status kind=\"approved\"\r\n * labels={{ approved: t(\"status.approved\"),\r\n * rejected: t(\"status.rejected\"), ... }} />\r\n *\r\n * Label resolution (highest priority first)\r\n * 1. `label` prop — single explicit override.\r\n * 2. `labels[kind]` — i18n map provided by the host.\r\n * 3. STATUS_LABELS_FR[kind] — legacy FR fallback.\r\n *\r\n * A11y note (R-Ar.1, R-Ar.3):\r\n * This component renders a plain inline <span>. It does NOT carry\r\n * role=\"status\" / aria-live — those are reserved for status MESSAGES\r\n * (toasts, banners). A status pill is a styled label; promoting it\r\n * to a live region causes SRs to announce every chip on mount and on\r\n * each re-render (e.g., on every DataGrid pagination tick).\r\n *\r\n * When the chip's *value* changes (e.g., a workflow transition just\r\n * succeeded), it is the host's responsibility to surface that change\r\n * via the canonical feedback channel — toast (R-A.1) or row flash\r\n * (.pui-row-updated) — NOT by mutating the chip alone.\r\n *\r\n * Forbidden: ad-hoc colours. Use Chip for filter pills, not Status.\r\n */\r\n\r\nexport type StatusKind = keyof typeof STATUS_LABELS_FR;\r\n\r\nexport interface StatusProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n kind?: StatusKind | undefined;\r\n label?: React.ReactNode | undefined;\r\n labels?: Partial<Record<StatusKind, React.ReactNode>> | undefined;\r\n}\r\n\r\nfunction Status({ kind = \"neutral\", label, labels, className = \"\", ...rest }: StatusProps) {\r\n const safe = STATUS_KEYS.includes(kind) ? kind : \"neutral\";\r\n const text =\r\n label\r\n ?? (labels && labels[safe])\r\n ?? STATUS_LABELS_FR[safe];\r\n return (\r\n <span\r\n className={`pui-status ${className}`.trim()}\r\n data-kind={safe}\r\n {...rest}\r\n >\r\n {text}\r\n </span>\r\n );\r\n}\r\n\r\nexport default Status;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,WAAW,EAAEC,gBAAgB,QAAQ,yBAAyB;;AAEvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA9BA,SAAAC,GAAA,IAAAC,IAAA;AAwCA,SAASC,MAAMA,CAAC;EAAEC,IAAI,GAAG,SAAS;EAAEC,KAAK;EAAEC,MAAM;EAAEC,SAAS,GAAG,EAAE;EAAE,GAAGC;AAAkB,CAAC,EAAE;EACzF,MAAMC,IAAI,GAAGV,WAAW,CAACW,QAAQ,CAACN,IAAI,CAAC,GAAGA,IAAI,GAAG,SAAS;EAC1D,MAAMO,IAAI,GACRN,KAAK,KACCC,MAAM,IAAIA,MAAM,CAACG,IAAI,CAAC,CAAC,IACxBT,gBAAgB,CAACS,IAAI,CAAC;EAC7B,oBACEP,IAAA;IACEK,SAAS,EAAE,cAAcA,SAAS,EAAE,CAACK,IAAI,CAAC,CAAE;IAC5C,aAAWH,IAAK;IAAA,GACZD,IAAI;IAAAK,QAAA,EAEPF;EAAI,CACD,CAAC;AAEX;AAEA,eAAeR,MAAM","ignoreList":[]}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
1
|
import * as React from "react";
|
|
8
2
|
import CheckIcon from "@mui/icons-material/Check";
|
|
9
3
|
import Box from "@mui/material/Box";
|
|
@@ -78,14 +72,14 @@ import { mergeLabels } from "../utils/mergeLabels";
|
|
|
78
72
|
* `titleAs` so the page heading hierarchy stays consistent.
|
|
79
73
|
*/
|
|
80
74
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
81
|
-
|
|
75
|
+
const DEFAULT_H_LABELS = Object.freeze({
|
|
82
76
|
nav: "Étapes du formulaire",
|
|
83
|
-
item:
|
|
84
|
-
|
|
85
|
-
return
|
|
77
|
+
item: (n, label, state) => {
|
|
78
|
+
const suffix = state === "complete" ? " (complétée)" : state === "active" ? " (en cours)" : state === "disabled" ? " (verrouillée)" : " (à venir)";
|
|
79
|
+
return `Étape ${n} : ${label}${suffix}`;
|
|
86
80
|
}
|
|
87
81
|
});
|
|
88
|
-
|
|
82
|
+
const DEFAULT_V_LABELS = Object.freeze({
|
|
89
83
|
nav: "Historique des étapes",
|
|
90
84
|
state: Object.freeze({
|
|
91
85
|
complete: "Étape complétée. ",
|
|
@@ -101,7 +95,7 @@ var DEFAULT_V_LABELS = Object.freeze({
|
|
|
101
95
|
disabled: "Étape verrouillée. "
|
|
102
96
|
})
|
|
103
97
|
});
|
|
104
|
-
|
|
98
|
+
const dotBaseStyle = {
|
|
105
99
|
width: 24,
|
|
106
100
|
height: 24,
|
|
107
101
|
borderRadius: "50%",
|
|
@@ -113,7 +107,7 @@ var dotBaseStyle = {
|
|
|
113
107
|
border: "2px solid",
|
|
114
108
|
transition: "background var(--duration-base, 180ms), color var(--duration-base, 180ms), border-color var(--duration-base, 180ms)"
|
|
115
109
|
};
|
|
116
|
-
|
|
110
|
+
const stateStyle = state => {
|
|
117
111
|
if (state === "complete") {
|
|
118
112
|
return {
|
|
119
113
|
background: "var(--accent)",
|
|
@@ -143,13 +137,17 @@ var stateStyle = function stateStyle(state) {
|
|
|
143
137
|
};
|
|
144
138
|
// Inner content shared between the clickable <button> and the
|
|
145
139
|
// non-interactive <span> renderings of an HStepper step.
|
|
146
|
-
function StepInner(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
140
|
+
function StepInner({
|
|
141
|
+
index,
|
|
142
|
+
label,
|
|
143
|
+
state
|
|
144
|
+
}) {
|
|
150
145
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
151
146
|
children: [/*#__PURE__*/_jsx("span", {
|
|
152
|
-
style:
|
|
147
|
+
style: {
|
|
148
|
+
...dotBaseStyle,
|
|
149
|
+
...stateStyle(state)
|
|
150
|
+
},
|
|
153
151
|
children: state === "complete" ? /*#__PURE__*/_jsx(CheckIcon, {
|
|
154
152
|
fontSize: "inherit"
|
|
155
153
|
}) : index + 1
|
|
@@ -166,7 +164,7 @@ function StepInner(_ref) {
|
|
|
166
164
|
})]
|
|
167
165
|
});
|
|
168
166
|
}
|
|
169
|
-
|
|
167
|
+
const stepBoxSx = {
|
|
170
168
|
display: "flex",
|
|
171
169
|
alignItems: "center",
|
|
172
170
|
gap: 1,
|
|
@@ -190,7 +188,7 @@ var stepBoxSx = {
|
|
|
190
188
|
* for VStepper also carries title/meta/etc., so narrowing to
|
|
191
189
|
* HStepperRichStep here would hide those fields. */
|
|
192
190
|
function isRichStep(s) {
|
|
193
|
-
return s != null &&
|
|
191
|
+
return s != null && typeof s === "object" && !Array.isArray(s) && ! /*#__PURE__*/React.isValidElement(s) && ("label" in s || "status" in s);
|
|
194
192
|
}
|
|
195
193
|
function normaliseStatusToState(status) {
|
|
196
194
|
if (status === "current" || status === "active") return "active";
|
|
@@ -204,14 +202,13 @@ function normaliseStatusToState(status) {
|
|
|
204
202
|
function normaliseSteps(steps, current) {
|
|
205
203
|
if (steps.length === 0) return [];
|
|
206
204
|
if (isRichStep(steps[0])) {
|
|
207
|
-
return steps.map(
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
var state = normaliseStatusToState(rich.status);
|
|
205
|
+
return steps.map((s, i) => {
|
|
206
|
+
const rich = s;
|
|
207
|
+
const state = normaliseStatusToState(rich.status);
|
|
211
208
|
return {
|
|
212
|
-
key:
|
|
209
|
+
key: rich.id ?? i,
|
|
213
210
|
label: rich.label,
|
|
214
|
-
state
|
|
211
|
+
state,
|
|
215
212
|
// Disabled steps are never clickable. Other rich states
|
|
216
213
|
// remain clickable so the host can offer free navigation.
|
|
217
214
|
clickable: state !== "disabled"
|
|
@@ -219,27 +216,25 @@ function normaliseSteps(steps, current) {
|
|
|
219
216
|
});
|
|
220
217
|
}
|
|
221
218
|
// Legacy: plain labels driven by `current`.
|
|
222
|
-
return steps.map(
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
};
|
|
229
|
-
});
|
|
219
|
+
return steps.map((label, i) => ({
|
|
220
|
+
key: i,
|
|
221
|
+
label: label,
|
|
222
|
+
state: i < current ? "complete" : i === current ? "active" : "pending",
|
|
223
|
+
clickable: i <= current
|
|
224
|
+
}));
|
|
230
225
|
}
|
|
231
|
-
export function HStepper(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
226
|
+
export function HStepper({
|
|
227
|
+
steps,
|
|
228
|
+
current = 0,
|
|
229
|
+
onJump,
|
|
230
|
+
onStepClick,
|
|
231
|
+
ariaLabel,
|
|
232
|
+
labels
|
|
233
|
+
}) {
|
|
234
|
+
const L = mergeLabels(DEFAULT_H_LABELS, labels);
|
|
235
|
+
const navLabel = ariaLabel || L.nav;
|
|
236
|
+
const jumpHandler = onJump || onStepClick;
|
|
237
|
+
const normalised = normaliseSteps(steps, current);
|
|
243
238
|
return /*#__PURE__*/_jsx("nav", {
|
|
244
239
|
"aria-label": navLabel,
|
|
245
240
|
style: {
|
|
@@ -249,20 +244,19 @@ export function HStepper(_ref2) {
|
|
|
249
244
|
padding: "12px 0",
|
|
250
245
|
overflowX: "auto"
|
|
251
246
|
},
|
|
252
|
-
children: normalised.map(
|
|
253
|
-
|
|
247
|
+
children: normalised.map((step, i) => {
|
|
248
|
+
const a11yLabel = L.item(i + 1, step.label, step.state);
|
|
254
249
|
return /*#__PURE__*/_jsxs(React.Fragment, {
|
|
255
250
|
children: [step.clickable ? /*#__PURE__*/_jsx(Box, {
|
|
256
251
|
component: "button",
|
|
257
252
|
type: "button",
|
|
258
253
|
"aria-current": step.state === "active" ? "step" : undefined,
|
|
259
254
|
"aria-label": a11yLabel,
|
|
260
|
-
onClick:
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
sx: _objectSpread(_objectSpread({}, stepBoxSx), {}, {
|
|
255
|
+
onClick: () => jumpHandler?.(i),
|
|
256
|
+
sx: {
|
|
257
|
+
...stepBoxSx,
|
|
264
258
|
cursor: "pointer"
|
|
265
|
-
}
|
|
259
|
+
},
|
|
266
260
|
children: /*#__PURE__*/_jsx(StepInner, {
|
|
267
261
|
index: i,
|
|
268
262
|
label: step.label,
|
|
@@ -272,9 +266,10 @@ export function HStepper(_ref2) {
|
|
|
272
266
|
component: "span",
|
|
273
267
|
"aria-label": a11yLabel,
|
|
274
268
|
"aria-disabled": step.state === "disabled" ? "true" : undefined,
|
|
275
|
-
sx:
|
|
269
|
+
sx: {
|
|
270
|
+
...stepBoxSx,
|
|
276
271
|
cursor: "default"
|
|
277
|
-
}
|
|
272
|
+
},
|
|
278
273
|
children: /*#__PURE__*/_jsx(StepInner, {
|
|
279
274
|
index: i,
|
|
280
275
|
label: step.label,
|
|
@@ -308,12 +303,12 @@ export function HStepper(_ref2) {
|
|
|
308
303
|
* opt out of heading semantics entirely.
|
|
309
304
|
* @param labels - i18n overrides; see file header.
|
|
310
305
|
*/
|
|
311
|
-
export function VStepper(
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
306
|
+
export function VStepper({
|
|
307
|
+
items,
|
|
308
|
+
titleAs = "h4",
|
|
309
|
+
labels,
|
|
310
|
+
ariaLabel
|
|
311
|
+
}) {
|
|
317
312
|
/*
|
|
318
313
|
* Nested-dictionary merge, both levels through the shared undefined-safe helper
|
|
319
314
|
* (gap G-24, fourth instance after Dropzone.reasons and DataGridLabels.
|
|
@@ -331,19 +326,19 @@ export function VStepper(_ref3) {
|
|
|
331
326
|
* two explicit levels can be read, a recursive helper hides how deep it goes.
|
|
332
327
|
* Same convention as _dataGridShared.
|
|
333
328
|
*/
|
|
334
|
-
|
|
329
|
+
const L = labels ? mergeLabels(DEFAULT_V_LABELS, {
|
|
330
|
+
...labels,
|
|
335
331
|
state: mergeLabels(DEFAULT_V_LABELS.state, labels.state)
|
|
336
|
-
})
|
|
337
|
-
|
|
332
|
+
}) : DEFAULT_V_LABELS;
|
|
333
|
+
const navLabel = ariaLabel || L.nav;
|
|
338
334
|
|
|
339
335
|
/* Accept the same rich-step shape HStepper uses, so host modules
|
|
340
336
|
* can pass the same array to both steppers without re-mapping. */
|
|
341
|
-
|
|
337
|
+
const normalisedItems = items.map(it => {
|
|
342
338
|
if (isRichStep(it) && it.status !== undefined) {
|
|
343
|
-
var _it$title;
|
|
344
339
|
return {
|
|
345
340
|
state: normaliseStatusToState(it.status),
|
|
346
|
-
title:
|
|
341
|
+
title: it.title ?? it.label,
|
|
347
342
|
meta: it.meta,
|
|
348
343
|
timestamp: it.timestamp,
|
|
349
344
|
actor: it.actor
|
|
@@ -358,9 +353,8 @@ export function VStepper(_ref3) {
|
|
|
358
353
|
margin: 0
|
|
359
354
|
},
|
|
360
355
|
"aria-label": navLabel,
|
|
361
|
-
children: normalisedItems.map(
|
|
362
|
-
|
|
363
|
-
var st = (_it$state = it.state) !== null && _it$state !== void 0 ? _it$state : "pending";
|
|
356
|
+
children: normalisedItems.map((it, i) => {
|
|
357
|
+
const st = it.state ?? "pending";
|
|
364
358
|
return /*#__PURE__*/_jsxs("li", {
|
|
365
359
|
"aria-current": st === "active" ? "step" : undefined,
|
|
366
360
|
style: {
|
|
@@ -371,7 +365,10 @@ export function VStepper(_ref3) {
|
|
|
371
365
|
},
|
|
372
366
|
children: [/*#__PURE__*/_jsx("span", {
|
|
373
367
|
"aria-hidden": "true",
|
|
374
|
-
style:
|
|
368
|
+
style: {
|
|
369
|
+
...dotBaseStyle,
|
|
370
|
+
...stateStyle(st)
|
|
371
|
+
},
|
|
375
372
|
children: st === "complete" ? /*#__PURE__*/_jsx(CheckIcon, {
|
|
376
373
|
fontSize: "inherit"
|
|
377
374
|
}) : i + 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stepper.js","names":["React","CheckIcon","Box","mergeLabels","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_H_LABELS","Object","freeze","nav","item","n","label","state","suffix","concat","DEFAULT_V_LABELS","complete","active","pending","disabled","dotBaseStyle","width","height","borderRadius","display","placeItems","fontSize","fontWeight","flex","border","transition","stateStyle","background","borderColor","color","StepInner","_ref","index","children","style","_objectSpread","whiteSpace","stepBoxSx","alignItems","gap","padding","font","textAlign","outline","outlineOffset","isRichStep","s","_typeof","Array","isArray","isValidElement","normaliseStatusToState","status","normaliseSteps","steps","current","length","map","i","_rich$id","rich","key","id","clickable","HStepper","_ref2","_ref2$current","onJump","onStepClick","ariaLabel","labels","L","navLabel","jumpHandler","normalised","overflowX","step","a11yLabel","component","type","undefined","onClick","sx","cursor","minWidth","VStepper","_ref3","items","_ref3$titleAs","titleAs","normalisedItems","it","_it$title","title","meta","timestamp","actor","listStyle","margin","_it$state","st","paddingBottom","position","className","lineHeight","left","top","bottom"],"sources":["../../../../src/lib/v2/components/Stepper.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport CheckIcon from \"@mui/icons-material/Check\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * Stepper - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Stepper\". Required on flows ≥ 3 steps (R-3.4).\r\n *\r\n * Two ways to drive HStepper:\r\n *\r\n * 1. SIMPLE mode — plain labels + `current` index (Charter default):\r\n *\r\n * <HStepper\r\n * steps={[\"Identification\", \"Marchandise\", \"Banque\", \"Validation\"]}\r\n * current={1}\r\n * onJump={i => goTo(i)}\r\n * />\r\n *\r\n * 2. RICH mode — objects carry their own state, including a \"disabled\"\r\n * state for locked future steps (used by wizards where step N is\r\n * unavailable until step N-1 has been submitted):\r\n *\r\n * <HStepper\r\n * steps={[\r\n * { id: \"importateur\", label: \"Importateur\", status: \"completed\" },\r\n * { id: \"donneesTI\", label: \"Données\", status: \"current\" },\r\n * { id: \"marchandises\",label: \"Marchandises\", status: \"disabled\" },\r\n * { id: \"revision\", label: \"Révision\", status: \"pending\" },\r\n * ]}\r\n * onStepClick={i => goTo(i)}\r\n * ariaLabel=\"Étapes de création du titre\"\r\n * />\r\n *\r\n * status values: \"current\" | \"active\" | \"completed\" | \"complete\" |\r\n * \"pending\" | \"disabled\"\r\n * (\"current\"/\"active\" and \"completed\"/\"complete\" are accepted as\r\n * synonyms to ease migration from host modules.)\r\n *\r\n * VStepper — vertical history/progression timeline. Each item may carry\r\n * `timestamp` (date/time of the action) and `actor` (the user who did it);\r\n * they render as a muted \"timestamp · actor\" line under the title. `meta`\r\n * still works for free-form text (e.g. \"En cours\" on the active step):\r\n *\r\n * <VStepper items={[\r\n * { status: \"completed\", title: \"Titre d'importation créé\",\r\n * timestamp: \"27/03/2025 09:48\", actor: \"dsmoimp\" },\r\n * { status: \"completed\", title: \"Soumis à la banque (CITIBANK)\",\r\n * timestamp: \"27/03/2025 10:16\", actor: \"Transit Jebli\" },\r\n * { status: \"active\", title: \"En attente de réponse banque\", meta: \"En cours\" },\r\n * ]} />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <HStepper labels={{\r\n * nav: \"Form steps\",\r\n * item: (n, label, state) =>\r\n * `Step ${n}: ${label} (${\r\n * state === \"complete\" ? \"completed\" :\r\n * state === \"active\" ? \"in progress\" : \"upcoming\"\r\n * })`,\r\n * }} />\r\n *\r\n * <VStepper labels={{\r\n * nav: \"Step history\",\r\n * state: { complete: \"Completed step.\", active: \"Current step.\", pending: \"Upcoming step.\" },\r\n * }} />\r\n *\r\n * A11y note (R-Ar.1):\r\n * Clickable HStepper steps render as real <button> elements.\r\n * VStepper's per-item title element is host-configurable via\r\n * `titleAs` so the page heading hierarchy stays consistent.\r\n */\r\n\r\nexport type StepState = \"complete\" | \"active\" | \"pending\" | \"disabled\";\r\nexport type StepStatus =\r\n | \"current\"\r\n | \"active\"\r\n | \"completed\"\r\n | \"complete\"\r\n | \"pending\"\r\n | \"disabled\";\r\n\r\nexport interface HStepperRichStep {\r\n id?: string | number | undefined;\r\n label?: React.ReactNode | undefined;\r\n status?: StepStatus | undefined;\r\n}\r\n\r\nexport type HStepperStep = React.ReactNode | HStepperRichStep;\r\n\r\ninterface NormalisedStep {\r\n key: React.Key;\r\n label: React.ReactNode;\r\n state: StepState;\r\n clickable: boolean;\r\n}\r\n\r\nconst DEFAULT_H_LABELS = Object.freeze({\r\n nav: \"Étapes du formulaire\",\r\n item: (n: number, label: React.ReactNode, state: StepState): string => {\r\n const suffix =\r\n state === \"complete\" ? \" (complétée)\" :\r\n state === \"active\" ? \" (en cours)\" :\r\n state === \"disabled\" ? \" (verrouillée)\" : \" (à venir)\";\r\n return `Étape ${n} : ${label}${suffix}`;\r\n },\r\n});\r\n\r\nconst DEFAULT_V_LABELS: {\r\n nav: string;\r\n state: Partial<Record<StepState, string>>;\r\n} = Object.freeze({\r\n nav: \"Historique des étapes\",\r\n state: Object.freeze({\r\n complete: \"Étape complétée. \",\r\n active: \"Étape en cours. \",\r\n pending: \"Étape à venir. \",\r\n /* WCAG 1.4.1 — the fourth state was MISSING. VStepper accepts the same rich\r\n * item shape as HStepper (see normalisedItems below: \"so host modules can pass\r\n * the same array to both steppers\"), and HStepper documents\r\n * `status: \"disabled\"` for wizard steps locked until the previous one is\r\n * submitted. So a disabled step could reach VStepper and render an EMPTY\r\n * sr-only span — its state conveyed by colour alone, which is precisely what\r\n * the comment on that span forbids. No host had to do anything wrong. */\r\n disabled: \"Étape verrouillée. \",\r\n }),\r\n});\r\n\r\nconst dotBaseStyle: React.CSSProperties = {\r\n width: 24,\r\n height: 24,\r\n borderRadius: \"50%\",\r\n display: \"grid\",\r\n placeItems: \"center\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n flex: \"0 0 auto\",\r\n border: \"2px solid\",\r\n transition:\r\n \"background var(--duration-base, 180ms), color var(--duration-base, 180ms), border-color var(--duration-base, 180ms)\",\r\n};\r\n\r\nconst stateStyle = (state: StepState): React.CSSProperties => {\r\n if (state === \"complete\") {\r\n return { background: \"var(--accent)\", borderColor: \"var(--accent)\", color: \"var(--accent-fg)\" };\r\n }\r\n if (state === \"active\") {\r\n return { background: \"var(--surface)\", borderColor: \"var(--accent)\", color: \"var(--accent)\" };\r\n }\r\n if (state === \"disabled\") {\r\n return { background: \"var(--bg-subtle)\", borderColor: \"var(--border)\", color: \"var(--fg-subtle)\" };\r\n }\r\n return { background: \"var(--surface)\", borderColor: \"var(--border-strong)\", color: \"var(--fg-subtle)\" };\r\n};\r\n\r\ninterface StepInnerProps {\r\n index: number;\r\n label: React.ReactNode;\r\n state: StepState;\r\n}\r\n\r\n// Inner content shared between the clickable <button> and the\r\n// non-interactive <span> renderings of an HStepper step.\r\nfunction StepInner({ index, label, state }: StepInnerProps) {\r\n return (\r\n <>\r\n <span style={{ ...dotBaseStyle, ...stateStyle(state) }}>\r\n {state === \"complete\" ? <CheckIcon fontSize=\"inherit\" /> : index + 1}\r\n </span>\r\n <span\r\n style={{\r\n fontSize: \"var(--text-sm)\",\r\n // Was 650 (non-standard, banned by Batch 1 typography tokens).\r\n // var(--fw-semibold) (600) is the canonical \"emphasised\" weight.\r\n fontWeight: state === \"active\" ? \"var(--fw-semibold)\" : \"var(--fw-medium)\",\r\n color:\r\n state === \"pending\" ? \"var(--fg-subtle)\" :\r\n state === \"disabled\" ? \"var(--fg-muted)\" : \"var(--fg)\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n {label}\r\n </span>\r\n </>\r\n );\r\n}\r\n\r\nconst stepBoxSx = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 1,\r\n padding: \"var(--s-1) calc(var(--s-1) + 2px)\",\r\n borderRadius: \"var(--r-md)\",\r\n // Reset native <button> styling to match the previous Box look.\r\n background: \"transparent\",\r\n border: 0,\r\n font: \"inherit\",\r\n textAlign: \"left\",\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--accent)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n} satisfies SxProps<Theme>;\r\n\r\n/* Detect whether the `steps` array carries plain labels (legacy)\r\n * or rich {id, label, status} objects. ReactElements (icons,\r\n * fragments) and strings are treated as plain labels.\r\n * Plain boolean predicate (not a type guard): the rich object shape\r\n * for VStepper also carries title/meta/etc., so narrowing to\r\n * HStepperRichStep here would hide those fields. */\r\nfunction isRichStep(s: unknown): boolean {\r\n return (\r\n s != null &&\r\n typeof s === \"object\" &&\r\n !Array.isArray(s) &&\r\n !React.isValidElement(s) &&\r\n (\"label\" in s || \"status\" in s)\r\n );\r\n}\r\n\r\nfunction normaliseStatusToState(status: StepStatus | undefined): StepState {\r\n if (status === \"current\" || status === \"active\") return \"active\";\r\n if (status === \"completed\" || status === \"complete\") return \"complete\";\r\n if (status === \"disabled\") return \"disabled\";\r\n return \"pending\";\r\n}\r\n\r\n/* Convert rich steps to the legacy { label, state, clickable, key }\r\n * shape consumed by the rendering loop. */\r\nfunction normaliseSteps(steps: HStepperStep[], current: number): NormalisedStep[] {\r\n if (steps.length === 0) return [];\r\n if (isRichStep(steps[0])) {\r\n return steps.map((s, i): NormalisedStep => {\r\n const rich = s as HStepperRichStep;\r\n const state = normaliseStatusToState(rich.status);\r\n return {\r\n key: rich.id ?? i,\r\n label: rich.label,\r\n state,\r\n // Disabled steps are never clickable. Other rich states\r\n // remain clickable so the host can offer free navigation.\r\n clickable: state !== \"disabled\",\r\n };\r\n });\r\n }\r\n // Legacy: plain labels driven by `current`.\r\n return steps.map((label, i): NormalisedStep => ({\r\n key: i,\r\n label: label as React.ReactNode,\r\n state: i < current ? \"complete\" : i === current ? \"active\" : \"pending\",\r\n clickable: i <= current,\r\n }));\r\n}\r\n\r\nexport interface HStepperLabels {\r\n nav?: string | undefined;\r\n item?: ((n: number, label: React.ReactNode, state: StepState) => string) | undefined;\r\n}\r\n\r\nexport interface HStepperProps {\r\n /**\r\n * Either an array of plain labels (strings/nodes) driven by\r\n * `current`, or an array of `{ id?, label, status }` objects\r\n * where status carries the per-step state.\r\n */\r\n steps: HStepperStep[];\r\n /** Legacy: index of the active step. Ignored when `steps` are rich objects. */\r\n current?: number | undefined;\r\n /** Click handler. Receives the step index. */\r\n onJump?: ((index: number) => void) | undefined;\r\n /** Alias of `onJump` (some host modules used this name). */\r\n onStepClick?: ((index: number) => void) | undefined;\r\n /** Shortcut for `labels.nav`. */\r\n ariaLabel?: string | undefined;\r\n /** Full i18n override; see file header. */\r\n labels?: HStepperLabels | undefined;\r\n}\r\n\r\nexport function HStepper({\r\n steps,\r\n current = 0,\r\n onJump,\r\n onStepClick,\r\n ariaLabel,\r\n labels,\r\n}: HStepperProps) {\r\n const L = mergeLabels(DEFAULT_H_LABELS, labels);\r\n const navLabel = ariaLabel || L.nav;\r\n const jumpHandler = onJump || onStepClick;\r\n\r\n const normalised = normaliseSteps(steps, current);\r\n\r\n return (\r\n <nav\r\n aria-label={navLabel}\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 8,\r\n padding: \"12px 0\",\r\n overflowX: \"auto\",\r\n }}\r\n >\r\n {normalised.map((step, i) => {\r\n const a11yLabel = L.item(i + 1, step.label, step.state);\r\n return (\r\n <React.Fragment key={step.key}>\r\n {step.clickable ? (\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n aria-current={step.state === \"active\" ? \"step\" : undefined}\r\n aria-label={a11yLabel}\r\n onClick={() => jumpHandler?.(i)}\r\n sx={{ ...stepBoxSx, cursor: \"pointer\" }}\r\n >\r\n <StepInner index={i} label={step.label} state={step.state} />\r\n </Box>\r\n ) : (\r\n <Box\r\n component=\"span\"\r\n aria-label={a11yLabel}\r\n aria-disabled={step.state === \"disabled\" ? \"true\" : undefined}\r\n sx={{ ...stepBoxSx, cursor: \"default\" }}\r\n >\r\n <StepInner index={i} label={step.label} state={step.state} />\r\n </Box>\r\n )}\r\n {i < normalised.length - 1 && (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n flex: 1,\r\n minWidth: 24,\r\n height: 2,\r\n background: step.state === \"complete\" ? \"var(--accent)\" : \"var(--border)\",\r\n borderRadius: 1,\r\n }}\r\n />\r\n )}\r\n </React.Fragment>\r\n );\r\n })}\r\n </nav>\r\n );\r\n}\r\n\r\nexport interface VStepperItem {\r\n state?: StepState | undefined;\r\n status?: StepStatus | undefined;\r\n title?: React.ReactNode | undefined;\r\n label?: React.ReactNode | undefined;\r\n meta?: React.ReactNode | undefined;\r\n timestamp?: React.ReactNode | undefined;\r\n actor?: React.ReactNode | undefined;\r\n}\r\n\r\nexport interface VStepperLabels {\r\n nav?: string | undefined;\r\n /**\r\n * SR-only sentence per step state. Widened from the three visible states to the\r\n * full `StepState` union: `disabled` was unreachable for hosts even though\r\n * VStepper accepts disabled items, so its text alternative could not be\r\n * translated (WCAG 1.4.1 + R-Ar.3).\r\n */\r\n state?: Partial<Record<StepState, string>> | undefined;\r\n}\r\n\r\nexport interface VStepperProps {\r\n items: VStepperItem[];\r\n titleAs?: \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"div\" | \"span\" | \"p\" | undefined;\r\n ariaLabel?: string | undefined;\r\n labels?: VStepperLabels | undefined;\r\n}\r\n\r\n/**\r\n * VStepper - vertical historical / progression stepper.\r\n *\r\n * @param items - list of { state|status, title, meta?, timestamp?, actor? }.\r\n * `timestamp` (date/time) + `actor` (user) render as a\r\n * muted \"timestamp · actor\" line under the title; `meta`\r\n * renders on its own line (free-form, e.g. \"En cours\").\r\n * @param titleAs - element used for each step title. Defaults to \"h4\".\r\n * Hosts whose outline already used h2/h3 above the\r\n * stepper should pick the next level (e.g. titleAs=\"h3\"\r\n * after an h2 ActionBar title). Pass \"div\"/\"span\" to\r\n * opt out of heading semantics entirely.\r\n * @param labels - i18n overrides; see file header.\r\n */\r\nexport function VStepper({ items, titleAs = \"h4\", labels, ariaLabel }: VStepperProps) {\r\n /*\r\n * Nested-dictionary merge, both levels through the shared undefined-safe helper\r\n * (gap G-24, fourth instance after Dropzone.reasons and DataGridLabels.\r\n * pagination).\r\n *\r\n * The previous form spread `...labels` at the top level, so an explicitly-passed\r\n * `undefined` on `nav` DELETED the default and left the <ol> without an\r\n * accessible name (R-Ar.5). And the inner `|| {}` guarded the `state` sub-object\r\n * against being undefined without guarding its VALUES — so\r\n * `state: { complete: undefined }` emptied the sr-only span below and reduced the\r\n * step's state to colour alone, defeating the WCAG 1.4.1 rule its own comment\r\n * invokes.\r\n *\r\n * `state` is merged at its OWN level rather than through a recursive deep merge:\r\n * two explicit levels can be read, a recursive helper hides how deep it goes.\r\n * Same convention as _dataGridShared.\r\n */\r\n const L = labels\r\n ? mergeLabels(DEFAULT_V_LABELS, {\r\n ...labels,\r\n state: mergeLabels(DEFAULT_V_LABELS.state, labels.state),\r\n })\r\n : DEFAULT_V_LABELS;\r\n const navLabel = ariaLabel || L.nav;\r\n\r\n /* Accept the same rich-step shape HStepper uses, so host modules\r\n * can pass the same array to both steppers without re-mapping. */\r\n const normalisedItems = items.map((it) => {\r\n if (isRichStep(it) && it.status !== undefined) {\r\n return {\r\n state: normaliseStatusToState(it.status),\r\n title: it.title ?? it.label,\r\n meta: it.meta,\r\n timestamp: it.timestamp,\r\n actor: it.actor,\r\n };\r\n }\r\n return it;\r\n });\r\n\r\n return (\r\n <ol style={{ listStyle: \"none\", padding: 0, margin: 0 }} aria-label={navLabel}>\r\n {normalisedItems.map((it, i) => {\r\n const st: StepState = it.state ?? \"pending\";\r\n return (\r\n <li\r\n key={i}\r\n aria-current={st === \"active\" ? \"step\" : undefined}\r\n style={{\r\n display: \"flex\",\r\n gap: 12,\r\n paddingBottom: i < normalisedItems.length - 1 ? 16 : 0,\r\n position: \"relative\",\r\n }}\r\n >\r\n <span aria-hidden=\"true\" style={{ ...dotBaseStyle, ...stateStyle(st) }}>\r\n {st === \"complete\" ? <CheckIcon fontSize=\"inherit\" /> : i + 1}\r\n </span>\r\n {/* WCAG 1.4.1 - convey state in text, not only colour. */}\r\n <span className=\"pui-sr-only\">{L.state[st]}</span>\r\n <div style={{ flex: 1 }}>\r\n <Box\r\n component={titleAs}\r\n sx={{\r\n margin: 0,\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg)\",\r\n lineHeight: \"var(--lh-snug)\",\r\n }}\r\n >\r\n {it.title}\r\n </Box>\r\n {(it.timestamp != null || it.actor != null) && (\r\n <p\r\n style={{\r\n margin: \"2px 0 0\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n }}\r\n >\r\n {it.timestamp != null ? it.timestamp : null}\r\n {it.timestamp != null && it.actor != null ? \" · \" : null}\r\n {it.actor != null ? (\r\n <span style={{ color: \"var(--fg-muted)\", fontWeight: \"var(--fw-medium)\" }}>\r\n {it.actor}\r\n </span>\r\n ) : null}\r\n </p>\r\n )}\r\n {it.meta != null && it.meta !== \"\" && (\r\n <p\r\n style={{\r\n margin: \"2px 0 0\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n }}\r\n >\r\n {it.meta}\r\n </p>\r\n )}\r\n </div>\r\n {i < normalisedItems.length - 1 && (\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n position: \"absolute\",\r\n left: 11, top: 26, bottom: 0,\r\n width: 2,\r\n background: \"var(--border)\",\r\n }}\r\n />\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n );\r\n}\r\n\r\nexport default HStepper;\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Stepper.js","names":["React","CheckIcon","Box","mergeLabels","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_H_LABELS","Object","freeze","nav","item","n","label","state","suffix","DEFAULT_V_LABELS","complete","active","pending","disabled","dotBaseStyle","width","height","borderRadius","display","placeItems","fontSize","fontWeight","flex","border","transition","stateStyle","background","borderColor","color","StepInner","index","children","style","whiteSpace","stepBoxSx","alignItems","gap","padding","font","textAlign","outline","outlineOffset","isRichStep","s","Array","isArray","isValidElement","normaliseStatusToState","status","normaliseSteps","steps","current","length","map","i","rich","key","id","clickable","HStepper","onJump","onStepClick","ariaLabel","labels","L","navLabel","jumpHandler","normalised","overflowX","step","a11yLabel","component","type","undefined","onClick","sx","cursor","minWidth","VStepper","items","titleAs","normalisedItems","it","title","meta","timestamp","actor","listStyle","margin","st","paddingBottom","position","className","lineHeight","left","top","bottom"],"sources":["../../../../src/lib/v2/components/Stepper.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport CheckIcon from \"@mui/icons-material/Check\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * Stepper - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Stepper\". Required on flows ≥ 3 steps (R-3.4).\r\n *\r\n * Two ways to drive HStepper:\r\n *\r\n * 1. SIMPLE mode — plain labels + `current` index (Charter default):\r\n *\r\n * <HStepper\r\n * steps={[\"Identification\", \"Marchandise\", \"Banque\", \"Validation\"]}\r\n * current={1}\r\n * onJump={i => goTo(i)}\r\n * />\r\n *\r\n * 2. RICH mode — objects carry their own state, including a \"disabled\"\r\n * state for locked future steps (used by wizards where step N is\r\n * unavailable until step N-1 has been submitted):\r\n *\r\n * <HStepper\r\n * steps={[\r\n * { id: \"importateur\", label: \"Importateur\", status: \"completed\" },\r\n * { id: \"donneesTI\", label: \"Données\", status: \"current\" },\r\n * { id: \"marchandises\",label: \"Marchandises\", status: \"disabled\" },\r\n * { id: \"revision\", label: \"Révision\", status: \"pending\" },\r\n * ]}\r\n * onStepClick={i => goTo(i)}\r\n * ariaLabel=\"Étapes de création du titre\"\r\n * />\r\n *\r\n * status values: \"current\" | \"active\" | \"completed\" | \"complete\" |\r\n * \"pending\" | \"disabled\"\r\n * (\"current\"/\"active\" and \"completed\"/\"complete\" are accepted as\r\n * synonyms to ease migration from host modules.)\r\n *\r\n * VStepper — vertical history/progression timeline. Each item may carry\r\n * `timestamp` (date/time of the action) and `actor` (the user who did it);\r\n * they render as a muted \"timestamp · actor\" line under the title. `meta`\r\n * still works for free-form text (e.g. \"En cours\" on the active step):\r\n *\r\n * <VStepper items={[\r\n * { status: \"completed\", title: \"Titre d'importation créé\",\r\n * timestamp: \"27/03/2025 09:48\", actor: \"dsmoimp\" },\r\n * { status: \"completed\", title: \"Soumis à la banque (CITIBANK)\",\r\n * timestamp: \"27/03/2025 10:16\", actor: \"Transit Jebli\" },\r\n * { status: \"active\", title: \"En attente de réponse banque\", meta: \"En cours\" },\r\n * ]} />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <HStepper labels={{\r\n * nav: \"Form steps\",\r\n * item: (n, label, state) =>\r\n * `Step ${n}: ${label} (${\r\n * state === \"complete\" ? \"completed\" :\r\n * state === \"active\" ? \"in progress\" : \"upcoming\"\r\n * })`,\r\n * }} />\r\n *\r\n * <VStepper labels={{\r\n * nav: \"Step history\",\r\n * state: { complete: \"Completed step.\", active: \"Current step.\", pending: \"Upcoming step.\" },\r\n * }} />\r\n *\r\n * A11y note (R-Ar.1):\r\n * Clickable HStepper steps render as real <button> elements.\r\n * VStepper's per-item title element is host-configurable via\r\n * `titleAs` so the page heading hierarchy stays consistent.\r\n */\r\n\r\nexport type StepState = \"complete\" | \"active\" | \"pending\" | \"disabled\";\r\nexport type StepStatus =\r\n | \"current\"\r\n | \"active\"\r\n | \"completed\"\r\n | \"complete\"\r\n | \"pending\"\r\n | \"disabled\";\r\n\r\nexport interface HStepperRichStep {\r\n id?: string | number | undefined;\r\n label?: React.ReactNode | undefined;\r\n status?: StepStatus | undefined;\r\n}\r\n\r\nexport type HStepperStep = React.ReactNode | HStepperRichStep;\r\n\r\ninterface NormalisedStep {\r\n key: React.Key;\r\n label: React.ReactNode;\r\n state: StepState;\r\n clickable: boolean;\r\n}\r\n\r\nconst DEFAULT_H_LABELS = Object.freeze({\r\n nav: \"Étapes du formulaire\",\r\n item: (n: number, label: React.ReactNode, state: StepState): string => {\r\n const suffix =\r\n state === \"complete\" ? \" (complétée)\" :\r\n state === \"active\" ? \" (en cours)\" :\r\n state === \"disabled\" ? \" (verrouillée)\" : \" (à venir)\";\r\n return `Étape ${n} : ${label}${suffix}`;\r\n },\r\n});\r\n\r\nconst DEFAULT_V_LABELS: {\r\n nav: string;\r\n state: Partial<Record<StepState, string>>;\r\n} = Object.freeze({\r\n nav: \"Historique des étapes\",\r\n state: Object.freeze({\r\n complete: \"Étape complétée. \",\r\n active: \"Étape en cours. \",\r\n pending: \"Étape à venir. \",\r\n /* WCAG 1.4.1 — the fourth state was MISSING. VStepper accepts the same rich\r\n * item shape as HStepper (see normalisedItems below: \"so host modules can pass\r\n * the same array to both steppers\"), and HStepper documents\r\n * `status: \"disabled\"` for wizard steps locked until the previous one is\r\n * submitted. So a disabled step could reach VStepper and render an EMPTY\r\n * sr-only span — its state conveyed by colour alone, which is precisely what\r\n * the comment on that span forbids. No host had to do anything wrong. */\r\n disabled: \"Étape verrouillée. \",\r\n }),\r\n});\r\n\r\nconst dotBaseStyle: React.CSSProperties = {\r\n width: 24,\r\n height: 24,\r\n borderRadius: \"50%\",\r\n display: \"grid\",\r\n placeItems: \"center\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n flex: \"0 0 auto\",\r\n border: \"2px solid\",\r\n transition:\r\n \"background var(--duration-base, 180ms), color var(--duration-base, 180ms), border-color var(--duration-base, 180ms)\",\r\n};\r\n\r\nconst stateStyle = (state: StepState): React.CSSProperties => {\r\n if (state === \"complete\") {\r\n return { background: \"var(--accent)\", borderColor: \"var(--accent)\", color: \"var(--accent-fg)\" };\r\n }\r\n if (state === \"active\") {\r\n return { background: \"var(--surface)\", borderColor: \"var(--accent)\", color: \"var(--accent)\" };\r\n }\r\n if (state === \"disabled\") {\r\n return { background: \"var(--bg-subtle)\", borderColor: \"var(--border)\", color: \"var(--fg-subtle)\" };\r\n }\r\n return { background: \"var(--surface)\", borderColor: \"var(--border-strong)\", color: \"var(--fg-subtle)\" };\r\n};\r\n\r\ninterface StepInnerProps {\r\n index: number;\r\n label: React.ReactNode;\r\n state: StepState;\r\n}\r\n\r\n// Inner content shared between the clickable <button> and the\r\n// non-interactive <span> renderings of an HStepper step.\r\nfunction StepInner({ index, label, state }: StepInnerProps) {\r\n return (\r\n <>\r\n <span style={{ ...dotBaseStyle, ...stateStyle(state) }}>\r\n {state === \"complete\" ? <CheckIcon fontSize=\"inherit\" /> : index + 1}\r\n </span>\r\n <span\r\n style={{\r\n fontSize: \"var(--text-sm)\",\r\n // Was 650 (non-standard, banned by Batch 1 typography tokens).\r\n // var(--fw-semibold) (600) is the canonical \"emphasised\" weight.\r\n fontWeight: state === \"active\" ? \"var(--fw-semibold)\" : \"var(--fw-medium)\",\r\n color:\r\n state === \"pending\" ? \"var(--fg-subtle)\" :\r\n state === \"disabled\" ? \"var(--fg-muted)\" : \"var(--fg)\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n {label}\r\n </span>\r\n </>\r\n );\r\n}\r\n\r\nconst stepBoxSx = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 1,\r\n padding: \"var(--s-1) calc(var(--s-1) + 2px)\",\r\n borderRadius: \"var(--r-md)\",\r\n // Reset native <button> styling to match the previous Box look.\r\n background: \"transparent\",\r\n border: 0,\r\n font: \"inherit\",\r\n textAlign: \"left\",\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--accent)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n} satisfies SxProps<Theme>;\r\n\r\n/* Detect whether the `steps` array carries plain labels (legacy)\r\n * or rich {id, label, status} objects. ReactElements (icons,\r\n * fragments) and strings are treated as plain labels.\r\n * Plain boolean predicate (not a type guard): the rich object shape\r\n * for VStepper also carries title/meta/etc., so narrowing to\r\n * HStepperRichStep here would hide those fields. */\r\nfunction isRichStep(s: unknown): boolean {\r\n return (\r\n s != null &&\r\n typeof s === \"object\" &&\r\n !Array.isArray(s) &&\r\n !React.isValidElement(s) &&\r\n (\"label\" in s || \"status\" in s)\r\n );\r\n}\r\n\r\nfunction normaliseStatusToState(status: StepStatus | undefined): StepState {\r\n if (status === \"current\" || status === \"active\") return \"active\";\r\n if (status === \"completed\" || status === \"complete\") return \"complete\";\r\n if (status === \"disabled\") return \"disabled\";\r\n return \"pending\";\r\n}\r\n\r\n/* Convert rich steps to the legacy { label, state, clickable, key }\r\n * shape consumed by the rendering loop. */\r\nfunction normaliseSteps(steps: HStepperStep[], current: number): NormalisedStep[] {\r\n if (steps.length === 0) return [];\r\n if (isRichStep(steps[0])) {\r\n return steps.map((s, i): NormalisedStep => {\r\n const rich = s as HStepperRichStep;\r\n const state = normaliseStatusToState(rich.status);\r\n return {\r\n key: rich.id ?? i,\r\n label: rich.label,\r\n state,\r\n // Disabled steps are never clickable. Other rich states\r\n // remain clickable so the host can offer free navigation.\r\n clickable: state !== \"disabled\",\r\n };\r\n });\r\n }\r\n // Legacy: plain labels driven by `current`.\r\n return steps.map((label, i): NormalisedStep => ({\r\n key: i,\r\n label: label as React.ReactNode,\r\n state: i < current ? \"complete\" : i === current ? \"active\" : \"pending\",\r\n clickable: i <= current,\r\n }));\r\n}\r\n\r\nexport interface HStepperLabels {\r\n nav?: string | undefined;\r\n item?: ((n: number, label: React.ReactNode, state: StepState) => string) | undefined;\r\n}\r\n\r\nexport interface HStepperProps {\r\n /**\r\n * Either an array of plain labels (strings/nodes) driven by\r\n * `current`, or an array of `{ id?, label, status }` objects\r\n * where status carries the per-step state.\r\n */\r\n steps: HStepperStep[];\r\n /** Legacy: index of the active step. Ignored when `steps` are rich objects. */\r\n current?: number | undefined;\r\n /** Click handler. Receives the step index. */\r\n onJump?: ((index: number) => void) | undefined;\r\n /** Alias of `onJump` (some host modules used this name). */\r\n onStepClick?: ((index: number) => void) | undefined;\r\n /** Shortcut for `labels.nav`. */\r\n ariaLabel?: string | undefined;\r\n /** Full i18n override; see file header. */\r\n labels?: HStepperLabels | undefined;\r\n}\r\n\r\nexport function HStepper({\r\n steps,\r\n current = 0,\r\n onJump,\r\n onStepClick,\r\n ariaLabel,\r\n labels,\r\n}: HStepperProps) {\r\n const L = mergeLabels(DEFAULT_H_LABELS, labels);\r\n const navLabel = ariaLabel || L.nav;\r\n const jumpHandler = onJump || onStepClick;\r\n\r\n const normalised = normaliseSteps(steps, current);\r\n\r\n return (\r\n <nav\r\n aria-label={navLabel}\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 8,\r\n padding: \"12px 0\",\r\n overflowX: \"auto\",\r\n }}\r\n >\r\n {normalised.map((step, i) => {\r\n const a11yLabel = L.item(i + 1, step.label, step.state);\r\n return (\r\n <React.Fragment key={step.key}>\r\n {step.clickable ? (\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n aria-current={step.state === \"active\" ? \"step\" : undefined}\r\n aria-label={a11yLabel}\r\n onClick={() => jumpHandler?.(i)}\r\n sx={{ ...stepBoxSx, cursor: \"pointer\" }}\r\n >\r\n <StepInner index={i} label={step.label} state={step.state} />\r\n </Box>\r\n ) : (\r\n <Box\r\n component=\"span\"\r\n aria-label={a11yLabel}\r\n aria-disabled={step.state === \"disabled\" ? \"true\" : undefined}\r\n sx={{ ...stepBoxSx, cursor: \"default\" }}\r\n >\r\n <StepInner index={i} label={step.label} state={step.state} />\r\n </Box>\r\n )}\r\n {i < normalised.length - 1 && (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n flex: 1,\r\n minWidth: 24,\r\n height: 2,\r\n background: step.state === \"complete\" ? \"var(--accent)\" : \"var(--border)\",\r\n borderRadius: 1,\r\n }}\r\n />\r\n )}\r\n </React.Fragment>\r\n );\r\n })}\r\n </nav>\r\n );\r\n}\r\n\r\nexport interface VStepperItem {\r\n state?: StepState | undefined;\r\n status?: StepStatus | undefined;\r\n title?: React.ReactNode | undefined;\r\n label?: React.ReactNode | undefined;\r\n meta?: React.ReactNode | undefined;\r\n timestamp?: React.ReactNode | undefined;\r\n actor?: React.ReactNode | undefined;\r\n}\r\n\r\nexport interface VStepperLabels {\r\n nav?: string | undefined;\r\n /**\r\n * SR-only sentence per step state. Widened from the three visible states to the\r\n * full `StepState` union: `disabled` was unreachable for hosts even though\r\n * VStepper accepts disabled items, so its text alternative could not be\r\n * translated (WCAG 1.4.1 + R-Ar.3).\r\n */\r\n state?: Partial<Record<StepState, string>> | undefined;\r\n}\r\n\r\nexport interface VStepperProps {\r\n items: VStepperItem[];\r\n titleAs?: \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"div\" | \"span\" | \"p\" | undefined;\r\n ariaLabel?: string | undefined;\r\n labels?: VStepperLabels | undefined;\r\n}\r\n\r\n/**\r\n * VStepper - vertical historical / progression stepper.\r\n *\r\n * @param items - list of { state|status, title, meta?, timestamp?, actor? }.\r\n * `timestamp` (date/time) + `actor` (user) render as a\r\n * muted \"timestamp · actor\" line under the title; `meta`\r\n * renders on its own line (free-form, e.g. \"En cours\").\r\n * @param titleAs - element used for each step title. Defaults to \"h4\".\r\n * Hosts whose outline already used h2/h3 above the\r\n * stepper should pick the next level (e.g. titleAs=\"h3\"\r\n * after an h2 ActionBar title). Pass \"div\"/\"span\" to\r\n * opt out of heading semantics entirely.\r\n * @param labels - i18n overrides; see file header.\r\n */\r\nexport function VStepper({ items, titleAs = \"h4\", labels, ariaLabel }: VStepperProps) {\r\n /*\r\n * Nested-dictionary merge, both levels through the shared undefined-safe helper\r\n * (gap G-24, fourth instance after Dropzone.reasons and DataGridLabels.\r\n * pagination).\r\n *\r\n * The previous form spread `...labels` at the top level, so an explicitly-passed\r\n * `undefined` on `nav` DELETED the default and left the <ol> without an\r\n * accessible name (R-Ar.5). And the inner `|| {}` guarded the `state` sub-object\r\n * against being undefined without guarding its VALUES — so\r\n * `state: { complete: undefined }` emptied the sr-only span below and reduced the\r\n * step's state to colour alone, defeating the WCAG 1.4.1 rule its own comment\r\n * invokes.\r\n *\r\n * `state` is merged at its OWN level rather than through a recursive deep merge:\r\n * two explicit levels can be read, a recursive helper hides how deep it goes.\r\n * Same convention as _dataGridShared.\r\n */\r\n const L = labels\r\n ? mergeLabels(DEFAULT_V_LABELS, {\r\n ...labels,\r\n state: mergeLabels(DEFAULT_V_LABELS.state, labels.state),\r\n })\r\n : DEFAULT_V_LABELS;\r\n const navLabel = ariaLabel || L.nav;\r\n\r\n /* Accept the same rich-step shape HStepper uses, so host modules\r\n * can pass the same array to both steppers without re-mapping. */\r\n const normalisedItems = items.map((it) => {\r\n if (isRichStep(it) && it.status !== undefined) {\r\n return {\r\n state: normaliseStatusToState(it.status),\r\n title: it.title ?? it.label,\r\n meta: it.meta,\r\n timestamp: it.timestamp,\r\n actor: it.actor,\r\n };\r\n }\r\n return it;\r\n });\r\n\r\n return (\r\n <ol style={{ listStyle: \"none\", padding: 0, margin: 0 }} aria-label={navLabel}>\r\n {normalisedItems.map((it, i) => {\r\n const st: StepState = it.state ?? \"pending\";\r\n return (\r\n <li\r\n key={i}\r\n aria-current={st === \"active\" ? \"step\" : undefined}\r\n style={{\r\n display: \"flex\",\r\n gap: 12,\r\n paddingBottom: i < normalisedItems.length - 1 ? 16 : 0,\r\n position: \"relative\",\r\n }}\r\n >\r\n <span aria-hidden=\"true\" style={{ ...dotBaseStyle, ...stateStyle(st) }}>\r\n {st === \"complete\" ? <CheckIcon fontSize=\"inherit\" /> : i + 1}\r\n </span>\r\n {/* WCAG 1.4.1 - convey state in text, not only colour. */}\r\n <span className=\"pui-sr-only\">{L.state[st]}</span>\r\n <div style={{ flex: 1 }}>\r\n <Box\r\n component={titleAs}\r\n sx={{\r\n margin: 0,\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg)\",\r\n lineHeight: \"var(--lh-snug)\",\r\n }}\r\n >\r\n {it.title}\r\n </Box>\r\n {(it.timestamp != null || it.actor != null) && (\r\n <p\r\n style={{\r\n margin: \"2px 0 0\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n }}\r\n >\r\n {it.timestamp != null ? it.timestamp : null}\r\n {it.timestamp != null && it.actor != null ? \" · \" : null}\r\n {it.actor != null ? (\r\n <span style={{ color: \"var(--fg-muted)\", fontWeight: \"var(--fw-medium)\" }}>\r\n {it.actor}\r\n </span>\r\n ) : null}\r\n </p>\r\n )}\r\n {it.meta != null && it.meta !== \"\" && (\r\n <p\r\n style={{\r\n margin: \"2px 0 0\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n }}\r\n >\r\n {it.meta}\r\n </p>\r\n )}\r\n </div>\r\n {i < normalisedItems.length - 1 && (\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n position: \"absolute\",\r\n left: 11, top: 26, bottom: 0,\r\n width: 2,\r\n background: \"var(--border)\",\r\n }}\r\n />\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n );\r\n}\r\n\r\nexport default HStepper;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
var _excluded = ["component", "tone", "elevation", "radius", "padding", "clip", "sx", "children"];
|
|
3
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
5
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
8
|
-
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
9
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
12
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
13
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
14
|
-
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
15
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
16
1
|
import * as React from "react";
|
|
17
2
|
import Box from "@mui/material/Box";
|
|
18
3
|
|
|
@@ -85,46 +70,41 @@ import Box from "@mui/material/Box";
|
|
|
85
70
|
* full-width hero whose padding must shrink on a phone.
|
|
86
71
|
*/
|
|
87
72
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
88
|
-
|
|
73
|
+
const TONE = {
|
|
89
74
|
surface: "var(--surface)",
|
|
90
75
|
subtle: "var(--bg-subtle)"
|
|
91
76
|
};
|
|
92
|
-
|
|
77
|
+
const ELEVATION = {
|
|
93
78
|
none: "none",
|
|
94
79
|
xs: "var(--shadow-xs)",
|
|
95
80
|
sm: "var(--shadow-sm)"
|
|
96
81
|
};
|
|
97
|
-
|
|
82
|
+
const RADIUS = {
|
|
98
83
|
md: "var(--r-md)",
|
|
99
84
|
lg: "var(--r-lg)"
|
|
100
85
|
};
|
|
101
|
-
|
|
86
|
+
const PADDING = {
|
|
102
87
|
none: "0",
|
|
103
88
|
compact: "var(--s-3) var(--s-4)",
|
|
104
|
-
|
|
89
|
+
default: "var(--s-5)",
|
|
105
90
|
responsive: {
|
|
106
91
|
xs: "var(--s-4)",
|
|
107
92
|
sm: "var(--s-5)",
|
|
108
93
|
lg: "var(--s-6)"
|
|
109
94
|
}
|
|
110
95
|
};
|
|
111
|
-
function Surface(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
clip = _ref$clip === void 0 ? false : _ref$clip,
|
|
124
|
-
sx = _ref.sx,
|
|
125
|
-
children = _ref.children,
|
|
126
|
-
rest = _objectWithoutProperties(_ref, _excluded);
|
|
127
|
-
return /*#__PURE__*/_jsx(Box, _objectSpread(_objectSpread({
|
|
96
|
+
function Surface({
|
|
97
|
+
component = "div",
|
|
98
|
+
tone = "surface",
|
|
99
|
+
elevation = "none",
|
|
100
|
+
radius = "lg",
|
|
101
|
+
padding = "default",
|
|
102
|
+
clip = false,
|
|
103
|
+
sx,
|
|
104
|
+
children,
|
|
105
|
+
...rest
|
|
106
|
+
}) {
|
|
107
|
+
return /*#__PURE__*/_jsx(Box, {
|
|
128
108
|
component: component
|
|
129
109
|
/*
|
|
130
110
|
* ARRAY form, not an object spread (gap G-23). `SxProps<Theme>` admits an
|
|
@@ -138,7 +118,7 @@ function Surface(_ref) {
|
|
|
138
118
|
* `KPICard` already did this correctly; 33 other components in this library
|
|
139
119
|
* still spread. I wrote three of those before noticing, including this file.
|
|
140
120
|
*/,
|
|
141
|
-
sx: [
|
|
121
|
+
sx: [{
|
|
142
122
|
background: TONE[tone],
|
|
143
123
|
border: "1px solid var(--border)",
|
|
144
124
|
borderRadius: RADIUS[radius],
|
|
@@ -147,13 +127,14 @@ function Surface(_ref) {
|
|
|
147
127
|
// Guards a card whose child is a wide table or a long unbroken string:
|
|
148
128
|
// without it the flex/grid parent refuses to shrink and the page gains a
|
|
149
129
|
// horizontal scrollbar (WCAG 1.4.10 Reflow).
|
|
150
|
-
minWidth: 0
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
130
|
+
minWidth: 0,
|
|
131
|
+
...(clip ? {
|
|
132
|
+
overflow: "hidden"
|
|
133
|
+
} : null)
|
|
134
|
+
}, ...(Array.isArray(sx) ? sx : sx ? [sx] : [])],
|
|
135
|
+
...rest,
|
|
155
136
|
children: children
|
|
156
|
-
})
|
|
137
|
+
});
|
|
157
138
|
}
|
|
158
139
|
export default Surface;
|
|
159
140
|
//# sourceMappingURL=Surface.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Surface.js","names":["React","Box","jsx","_jsx","TONE","surface","subtle","ELEVATION","none","xs","sm","RADIUS","md","lg","PADDING","compact","responsive","Surface","_ref","_ref$component","component","_ref$tone","tone","_ref$elevation","elevation","_ref$radius","radius","_ref$padding","padding","_ref$clip","clip","sx","children","rest","_objectWithoutProperties","_excluded","_objectSpread","background","border","borderRadius","boxShadow","minWidth","overflow","concat","_toConsumableArray","Array","isArray"],"sources":["../../../../src/lib/v2/components/Surface.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\n/**\r\n * Surface — Portnet UI v2\r\n *\r\n * The bare card container. Charter §02.4 assigns `-r-lg` to « Cards, datagrid »\r\n * and §02.5 assigns `--shadow-xs` to « Inputs, KPI cards » / `--shadow-sm` to\r\n * « Default cards » — so the charter defines a card, in tokens, precisely.\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n * WHY THIS BELONGS IN THE LIBRARY (capability gap G-10)\r\n *\r\n * The card recipe existed in the library, but only WELDED INSIDE `FormSection`,\r\n * which also imposes a numbered heading, a description slot and an inner\r\n * `FormGrid`. A consumer needing just the container — a DataGrid shell, a hero\r\n * card, a sticky side rail, a nested file row — could not reach it and wrote the\r\n * four-line recipe again. In addpe-fe alone: `DATAGRID_CARD_SX`, `HERO_CARD_SX`,\r\n * `LIFECYCLE_CARD_SX`, and a document-card block repeated in three files.\r\n *\r\n * That is the failure mode a design system exists to prevent, and it is worse\r\n * than plain duplication: each copy picked its own elevation and its own radius\r\n * from memory, so cards that should be visually identical drifted apart within a\r\n * single page — and a charter change to `--shadow-sm` or `-r-lg` would have to\r\n * be chased across every module by hand.\r\n *\r\n * The variant axes below are DERIVED from those observed copies, not invented:\r\n * each one is a difference that really existed between two of them.\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n *\r\n * // DataGrid shell — the grid owns its own padding, and `clip` makes the\r\n * // rounded corner cut the table's first/last row borders.\r\n * <Surface padding=\"none\" elevation=\"xs\" clip>\r\n * <DataGrid … />\r\n * </Surface>\r\n *\r\n * // Detail hero — responsive padding ladder, default card elevation.\r\n * <Surface padding=\"responsive\" elevation=\"sm\">…</Surface>\r\n *\r\n * // Nested inset block (attached file, document row) — subtle tone, the\r\n * // smaller radius the charter assigns to inner blocks.\r\n * <Surface tone=\"subtle\" radius=\"md\" padding=\"compact\">…</Surface>\r\n *\r\n * Composition, not configuration: `Surface` deliberately has NO title, NO\r\n * actions and NO header. A titled section is `FormSection`; a metric tile is\r\n * `KPICard`; an attached file is `FileCard`. Those compose this. If you find\r\n * yourself wanting a `title` prop here, you want one of them instead.\r\n */\r\n\r\n/** Background token. `subtle` is for a block INSET INTO an existing surface. */\r\nexport type SurfaceTone = \"surface\" | \"subtle\";\r\n\r\n/**\r\n * Elevation, restricted to the two card levels of Charter §02.5.\r\n * `md` / `lg` are reserved for popovers and modals and are not offered here —\r\n * a card that needs them is a `Modal` or a `Drawer`.\r\n */\r\nexport type SurfaceElevation = \"none\" | \"xs\" | \"sm\";\r\n\r\n/**\r\n * Corner radius. `lg` = a card (charter §02.4 « Cards, datagrid »); `md` = a\r\n * block nested inside another surface, which reads wrong at the card radius.\r\n */\r\nexport type SurfaceRadius = \"md\" | \"lg\";\r\n\r\n/**\r\n * Inner padding.\r\n * none — the child owns it (DataGrid, a nested grid, a table).\r\n * compact — a single-row block. Asymmetric on purpose: a one-line row\r\n * needs more horizontal than vertical breathing space.\r\n * default — charter §2.3 « Padding card body » (--s-5).\r\n * responsive — the page-level ladder, aligned with `PageContent`'s, for a\r\n * full-width hero whose padding must shrink on a phone.\r\n */\r\nexport type SurfacePadding = \"none\" | \"compact\" | \"default\" | \"responsive\";\r\n\r\nconst TONE: Record<SurfaceTone, string> = {\r\n surface: \"var(--surface)\",\r\n subtle: \"var(--bg-subtle)\",\r\n};\r\n\r\nconst ELEVATION: Record<SurfaceElevation, string> = {\r\n none: \"none\",\r\n xs: \"var(--shadow-xs)\",\r\n sm: \"var(--shadow-sm)\",\r\n};\r\n\r\nconst RADIUS: Record<SurfaceRadius, string> = {\r\n md: \"var(--r-md)\",\r\n lg: \"var(--r-lg)\",\r\n};\r\n\r\ntype PaddingValue = string | Record<string, string>;\r\n\r\nconst PADDING: Record<SurfacePadding, PaddingValue> = {\r\n none: \"0\",\r\n compact: \"var(--s-3) var(--s-4)\",\r\n default: \"var(--s-5)\",\r\n responsive: { xs: \"var(--s-4)\", sm: \"var(--s-5)\", lg: \"var(--s-6)\" },\r\n};\r\n\r\nexport interface SurfaceProps\r\n extends Omit<React.HTMLAttributes<HTMLElement>, \"color\"> {\r\n /** Rendered element. @default \"div\" */\r\n component?: React.ElementType | undefined;\r\n /** @default \"surface\" */\r\n tone?: SurfaceTone | undefined;\r\n /** @default \"none\" */\r\n elevation?: SurfaceElevation | undefined;\r\n /** @default \"lg\" */\r\n radius?: SurfaceRadius | undefined;\r\n /** @default \"default\" */\r\n padding?: SurfacePadding | undefined;\r\n /**\r\n * `overflow: hidden`, so the rounded corner CLIPS a child that draws its own\r\n * edges — a DataGrid's sticky header and row borders, most commonly. Without\r\n * it the table's square corners poke through the card's radius.\r\n * @default false\r\n */\r\n clip?: boolean | undefined;\r\n sx?: SxProps<Theme> | undefined;\r\n children?: React.ReactNode | undefined;\r\n}\r\n\r\nfunction Surface({\r\n component = \"div\",\r\n tone = \"surface\",\r\n elevation = \"none\",\r\n radius = \"lg\",\r\n padding = \"default\",\r\n clip = false,\r\n sx,\r\n children,\r\n ...rest\r\n}: SurfaceProps) {\r\n return (\r\n <Box\r\n component={component}\r\n /*\r\n * ARRAY form, not an object spread (gap G-23). `SxProps<Theme>` admits an\r\n * object, an ARRAY or a FUNCTION, and spreading the last two destroys them\r\n * silently: `{...[a, b]}` yields `{0: a, 1: b}` and `{...fn}` yields `{}`.\r\n * So a host using MUI's own standard idiom —\r\n * `sx={[base, condition && override]}` — would lose every style, with no\r\n * error. The array form is what MUI documents for composition, and it\r\n * handles all three shapes plus null/undefined (falsy entries are ignored).\r\n *\r\n * `KPICard` already did this correctly; 33 other components in this library\r\n * still spread. I wrote three of those before noticing, including this file.\r\n */\r\n sx={[\r\n {\r\n background: TONE[tone],\r\n border: \"1px solid var(--border)\",\r\n borderRadius: RADIUS[radius],\r\n boxShadow: ELEVATION[elevation],\r\n padding: PADDING[padding],\r\n // Guards a card whose child is a wide table or a long unbroken string:\r\n // without it the flex/grid parent refuses to shrink and the page gains a\r\n // horizontal scrollbar (WCAG 1.4.10 Reflow).\r\n minWidth: 0,\r\n ...(clip ? { overflow: \"hidden\" } : null),\r\n },\r\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\r\n ]}\r\n {...rest}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default Surface;\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Surface.js","names":["React","Box","jsx","_jsx","TONE","surface","subtle","ELEVATION","none","xs","sm","RADIUS","md","lg","PADDING","compact","default","responsive","Surface","component","tone","elevation","radius","padding","clip","sx","children","rest","background","border","borderRadius","boxShadow","minWidth","overflow","Array","isArray"],"sources":["../../../../src/lib/v2/components/Surface.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\n\r\n/**\r\n * Surface — Portnet UI v2\r\n *\r\n * The bare card container. Charter §02.4 assigns `-r-lg` to « Cards, datagrid »\r\n * and §02.5 assigns `--shadow-xs` to « Inputs, KPI cards » / `--shadow-sm` to\r\n * « Default cards » — so the charter defines a card, in tokens, precisely.\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n * WHY THIS BELONGS IN THE LIBRARY (capability gap G-10)\r\n *\r\n * The card recipe existed in the library, but only WELDED INSIDE `FormSection`,\r\n * which also imposes a numbered heading, a description slot and an inner\r\n * `FormGrid`. A consumer needing just the container — a DataGrid shell, a hero\r\n * card, a sticky side rail, a nested file row — could not reach it and wrote the\r\n * four-line recipe again. In addpe-fe alone: `DATAGRID_CARD_SX`, `HERO_CARD_SX`,\r\n * `LIFECYCLE_CARD_SX`, and a document-card block repeated in three files.\r\n *\r\n * That is the failure mode a design system exists to prevent, and it is worse\r\n * than plain duplication: each copy picked its own elevation and its own radius\r\n * from memory, so cards that should be visually identical drifted apart within a\r\n * single page — and a charter change to `--shadow-sm` or `-r-lg` would have to\r\n * be chased across every module by hand.\r\n *\r\n * The variant axes below are DERIVED from those observed copies, not invented:\r\n * each one is a difference that really existed between two of them.\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n *\r\n * // DataGrid shell — the grid owns its own padding, and `clip` makes the\r\n * // rounded corner cut the table's first/last row borders.\r\n * <Surface padding=\"none\" elevation=\"xs\" clip>\r\n * <DataGrid … />\r\n * </Surface>\r\n *\r\n * // Detail hero — responsive padding ladder, default card elevation.\r\n * <Surface padding=\"responsive\" elevation=\"sm\">…</Surface>\r\n *\r\n * // Nested inset block (attached file, document row) — subtle tone, the\r\n * // smaller radius the charter assigns to inner blocks.\r\n * <Surface tone=\"subtle\" radius=\"md\" padding=\"compact\">…</Surface>\r\n *\r\n * Composition, not configuration: `Surface` deliberately has NO title, NO\r\n * actions and NO header. A titled section is `FormSection`; a metric tile is\r\n * `KPICard`; an attached file is `FileCard`. Those compose this. If you find\r\n * yourself wanting a `title` prop here, you want one of them instead.\r\n */\r\n\r\n/** Background token. `subtle` is for a block INSET INTO an existing surface. */\r\nexport type SurfaceTone = \"surface\" | \"subtle\";\r\n\r\n/**\r\n * Elevation, restricted to the two card levels of Charter §02.5.\r\n * `md` / `lg` are reserved for popovers and modals and are not offered here —\r\n * a card that needs them is a `Modal` or a `Drawer`.\r\n */\r\nexport type SurfaceElevation = \"none\" | \"xs\" | \"sm\";\r\n\r\n/**\r\n * Corner radius. `lg` = a card (charter §02.4 « Cards, datagrid »); `md` = a\r\n * block nested inside another surface, which reads wrong at the card radius.\r\n */\r\nexport type SurfaceRadius = \"md\" | \"lg\";\r\n\r\n/**\r\n * Inner padding.\r\n * none — the child owns it (DataGrid, a nested grid, a table).\r\n * compact — a single-row block. Asymmetric on purpose: a one-line row\r\n * needs more horizontal than vertical breathing space.\r\n * default — charter §2.3 « Padding card body » (--s-5).\r\n * responsive — the page-level ladder, aligned with `PageContent`'s, for a\r\n * full-width hero whose padding must shrink on a phone.\r\n */\r\nexport type SurfacePadding = \"none\" | \"compact\" | \"default\" | \"responsive\";\r\n\r\nconst TONE: Record<SurfaceTone, string> = {\r\n surface: \"var(--surface)\",\r\n subtle: \"var(--bg-subtle)\",\r\n};\r\n\r\nconst ELEVATION: Record<SurfaceElevation, string> = {\r\n none: \"none\",\r\n xs: \"var(--shadow-xs)\",\r\n sm: \"var(--shadow-sm)\",\r\n};\r\n\r\nconst RADIUS: Record<SurfaceRadius, string> = {\r\n md: \"var(--r-md)\",\r\n lg: \"var(--r-lg)\",\r\n};\r\n\r\ntype PaddingValue = string | Record<string, string>;\r\n\r\nconst PADDING: Record<SurfacePadding, PaddingValue> = {\r\n none: \"0\",\r\n compact: \"var(--s-3) var(--s-4)\",\r\n default: \"var(--s-5)\",\r\n responsive: { xs: \"var(--s-4)\", sm: \"var(--s-5)\", lg: \"var(--s-6)\" },\r\n};\r\n\r\nexport interface SurfaceProps\r\n extends Omit<React.HTMLAttributes<HTMLElement>, \"color\"> {\r\n /** Rendered element. @default \"div\" */\r\n component?: React.ElementType | undefined;\r\n /** @default \"surface\" */\r\n tone?: SurfaceTone | undefined;\r\n /** @default \"none\" */\r\n elevation?: SurfaceElevation | undefined;\r\n /** @default \"lg\" */\r\n radius?: SurfaceRadius | undefined;\r\n /** @default \"default\" */\r\n padding?: SurfacePadding | undefined;\r\n /**\r\n * `overflow: hidden`, so the rounded corner CLIPS a child that draws its own\r\n * edges — a DataGrid's sticky header and row borders, most commonly. Without\r\n * it the table's square corners poke through the card's radius.\r\n * @default false\r\n */\r\n clip?: boolean | undefined;\r\n sx?: SxProps<Theme> | undefined;\r\n children?: React.ReactNode | undefined;\r\n}\r\n\r\nfunction Surface({\r\n component = \"div\",\r\n tone = \"surface\",\r\n elevation = \"none\",\r\n radius = \"lg\",\r\n padding = \"default\",\r\n clip = false,\r\n sx,\r\n children,\r\n ...rest\r\n}: SurfaceProps) {\r\n return (\r\n <Box\r\n component={component}\r\n /*\r\n * ARRAY form, not an object spread (gap G-23). `SxProps<Theme>` admits an\r\n * object, an ARRAY or a FUNCTION, and spreading the last two destroys them\r\n * silently: `{...[a, b]}` yields `{0: a, 1: b}` and `{...fn}` yields `{}`.\r\n * So a host using MUI's own standard idiom —\r\n * `sx={[base, condition && override]}` — would lose every style, with no\r\n * error. The array form is what MUI documents for composition, and it\r\n * handles all three shapes plus null/undefined (falsy entries are ignored).\r\n *\r\n * `KPICard` already did this correctly; 33 other components in this library\r\n * still spread. I wrote three of those before noticing, including this file.\r\n */\r\n sx={[\r\n {\r\n background: TONE[tone],\r\n border: \"1px solid var(--border)\",\r\n borderRadius: RADIUS[radius],\r\n boxShadow: ELEVATION[elevation],\r\n padding: PADDING[padding],\r\n // Guards a card whose child is a wide table or a long unbroken string:\r\n // without it the flex/grid parent refuses to shrink and the page gains a\r\n // horizontal scrollbar (WCAG 1.4.10 Reflow).\r\n minWidth: 0,\r\n ...(clip ? { overflow: \"hidden\" } : null),\r\n },\r\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\r\n ]}\r\n {...rest}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default Surface;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,GAAG,MAAM,mBAAmB;;AAGnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAGA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA,SAAAC,GAAA,IAAAC,IAAA;AAWA,MAAMC,IAAiC,GAAG;EACxCC,OAAO,EAAE,gBAAgB;EACzBC,MAAM,EAAE;AACV,CAAC;AAED,MAAMC,SAA2C,GAAG;EAClDC,IAAI,EAAE,MAAM;EACZC,EAAE,EAAE,kBAAkB;EACtBC,EAAE,EAAE;AACN,CAAC;AAED,MAAMC,MAAqC,GAAG;EAC5CC,EAAE,EAAE,aAAa;EACjBC,EAAE,EAAE;AACN,CAAC;AAID,MAAMC,OAA6C,GAAG;EACpDN,IAAI,EAAE,GAAG;EACTO,OAAO,EAAE,uBAAuB;EAChCC,OAAO,EAAE,YAAY;EACrBC,UAAU,EAAE;IAAER,EAAE,EAAE,YAAY;IAAEC,EAAE,EAAE,YAAY;IAAEG,EAAE,EAAE;EAAa;AACrE,CAAC;AAyBD,SAASK,OAAOA,CAAC;EACfC,SAAS,GAAG,KAAK;EACjBC,IAAI,GAAG,SAAS;EAChBC,SAAS,GAAG,MAAM;EAClBC,MAAM,GAAG,IAAI;EACbC,OAAO,GAAG,SAAS;EACnBC,IAAI,GAAG,KAAK;EACZC,EAAE;EACFC,QAAQ;EACR,GAAGC;AACS,CAAC,EAAE;EACf,oBACExB,IAAA,CAACF,GAAG;IACFkB,SAAS,EAAEA;IACX;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAXM;IAYAM,EAAE,EAAE,CACF;MACEG,UAAU,EAAExB,IAAI,CAACgB,IAAI,CAAC;MACtBS,MAAM,EAAE,yBAAyB;MACjCC,YAAY,EAAEnB,MAAM,CAACW,MAAM,CAAC;MAC5BS,SAAS,EAAExB,SAAS,CAACc,SAAS,CAAC;MAC/BE,OAAO,EAAET,OAAO,CAACS,OAAO,CAAC;MACzB;MACA;MACA;MACAS,QAAQ,EAAE,CAAC;MACX,IAAIR,IAAI,GAAG;QAAES,QAAQ,EAAE;MAAS,CAAC,GAAG,IAAI;IAC1C,CAAC,EACD,IAAIC,KAAK,CAACC,OAAO,CAACV,EAAE,CAAC,GAAGA,EAAE,GAAGA,EAAE,GAAG,CAACA,EAAE,CAAC,GAAG,EAAE,CAAC,CAC5C;IAAA,GACEE,IAAI;IAAAD,QAAA,EAEPA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeR,OAAO","ignoreList":[]}
|