@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,12 +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 = ["back", "backLabel", "secondary", "primary", "align", "sx"];
|
|
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 _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; }
|
|
9
|
-
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; }
|
|
10
1
|
import * as React from "react";
|
|
11
2
|
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
|
|
12
3
|
import Box from "@mui/material/Box";
|
|
@@ -57,19 +48,17 @@ import Button from "./Button";
|
|
|
57
48
|
* container is column-reverse too, so Back sits at the very bottom.
|
|
58
49
|
*/
|
|
59
50
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
60
|
-
function ActionStrip(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return /*#__PURE__*/_jsxs(Box, _objectSpread(_objectSpread({
|
|
72
|
-
sx: _objectSpread({
|
|
51
|
+
function ActionStrip({
|
|
52
|
+
back,
|
|
53
|
+
backLabel = "Retour",
|
|
54
|
+
secondary = [],
|
|
55
|
+
primary,
|
|
56
|
+
align = "end",
|
|
57
|
+
sx,
|
|
58
|
+
...rest
|
|
59
|
+
}) {
|
|
60
|
+
return /*#__PURE__*/_jsxs(Box, {
|
|
61
|
+
sx: {
|
|
73
62
|
display: "flex",
|
|
74
63
|
flexDirection: {
|
|
75
64
|
xs: "column-reverse",
|
|
@@ -83,9 +72,10 @@ function ActionStrip(_ref) {
|
|
|
83
72
|
gap: "var(--s-3)",
|
|
84
73
|
marginTop: "var(--s-5)",
|
|
85
74
|
paddingTop: "var(--s-4)",
|
|
86
|
-
borderTop: "1px solid var(--border)"
|
|
87
|
-
|
|
88
|
-
|
|
75
|
+
borderTop: "1px solid var(--border)",
|
|
76
|
+
...sx
|
|
77
|
+
},
|
|
78
|
+
...rest,
|
|
89
79
|
children: [/*#__PURE__*/_jsx(Box, {
|
|
90
80
|
sx: {
|
|
91
81
|
display: "flex",
|
|
@@ -116,31 +106,29 @@ function ActionStrip(_ref) {
|
|
|
116
106
|
sm: "flex-end"
|
|
117
107
|
}
|
|
118
108
|
},
|
|
119
|
-
children: [secondary.map(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}, action.loading !== undefined ? {
|
|
109
|
+
children: [secondary.map((action, i) => /*#__PURE__*/_jsx(Button, {
|
|
110
|
+
variant: action.variant || "ghost",
|
|
111
|
+
icon: action.icon,
|
|
112
|
+
onClick: action.onClick,
|
|
113
|
+
disabled: action.disabled,
|
|
114
|
+
type: action.type,
|
|
115
|
+
...(action.loading !== undefined ? {
|
|
127
116
|
loading: action.loading
|
|
128
|
-
} : {}),
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}), primary && /*#__PURE__*/_jsx(Button, _objectSpread(_objectSpread({
|
|
117
|
+
} : {}),
|
|
118
|
+
children: action.label
|
|
119
|
+
}, action.id || `sec-${i}`)), primary && /*#__PURE__*/_jsx(Button, {
|
|
132
120
|
variant: primary.variant || "primary",
|
|
133
121
|
icon: primary.icon,
|
|
134
122
|
onClick: primary.onClick,
|
|
135
123
|
disabled: primary.disabled,
|
|
136
|
-
type: primary.type
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
124
|
+
type: primary.type,
|
|
125
|
+
...(primary.loading !== undefined ? {
|
|
126
|
+
loading: primary.loading
|
|
127
|
+
} : {}),
|
|
140
128
|
children: primary.label
|
|
141
|
-
})
|
|
129
|
+
})]
|
|
142
130
|
})]
|
|
143
|
-
})
|
|
131
|
+
});
|
|
144
132
|
}
|
|
145
133
|
export default ActionStrip;
|
|
146
134
|
//# sourceMappingURL=ActionStrip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionStrip.js","names":["React","ArrowBackIcon","Box","Button","jsx","_jsx","jsxs","_jsxs","ActionStrip","
|
|
1
|
+
{"version":3,"file":"ActionStrip.js","names":["React","ArrowBackIcon","Box","Button","jsx","_jsx","jsxs","_jsxs","ActionStrip","back","backLabel","secondary","primary","align","sx","rest","display","flexDirection","xs","sm","alignItems","justifyContent","gap","marginTop","paddingTop","borderTop","children","variant","icon","onClick","flexWrap","map","action","i","disabled","type","loading","undefined","label","id"],"sources":["../../../../src/lib/v2/components/ActionStrip.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport ArrowBackIcon from \"@mui/icons-material/ArrowBack\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { BoxProps } from \"@mui/material/Box\";\r\nimport Button from \"./Button\";\r\nimport type { ButtonProps } from \"./Button\";\r\n\r\n/**\r\n * ActionStrip — Portnet UI v2\r\n *\r\n * Charter §03 · footer-level action row. Distinct from ActionBar\r\n * (page header) and BulkActionBar (selection toolbar). Use this\r\n * primitive at the BOTTOM of a form or below a section's content\r\n * to anchor the principal CTAs.\r\n *\r\n * ┌─────────────────────────────────────────────────────────┐\r\n * │ ← Retour Annuler ✉ Envoyer │\r\n * └─────────────────────────────────────────────────────────┘\r\n *\r\n * Replaces:\r\n * - AppGlobalActions wrapper (audit Batch 2 M17)\r\n * - AppButtonsGroup wrapper (audit Batch 2 M13)\r\n * - inline `display:flex; justifyContent: flex-end; gap: var(--s-3)`\r\n * Box blocks in CreationTIMarchandises update dialog, etc.\r\n *\r\n * API:\r\n *\r\n * <ActionStrip\r\n * back={() => navigate(-1)} // omit if no Back affordance\r\n * backLabel=\"Retour\"\r\n * secondary={[\r\n * { label: \"Annuler\", variant: \"ghost\", onClick: cancel },\r\n * ]}\r\n * primary={{\r\n * label: \"Envoyer\",\r\n * icon: <SendIcon />,\r\n * onClick: submit,\r\n * loading: isSubmitting,\r\n * }}\r\n * />\r\n *\r\n * Single-CTA shortcut:\r\n *\r\n * <ActionStrip primary={{ label: \"Valider\", onClick: confirm }} />\r\n *\r\n * Responsive: on the `xs` breakpoint the strip becomes a vertical\r\n * stack of primary → secondary → back so the primary CTA stays\r\n * above the fold and reachable by thumb. The right cluster stacks\r\n * column-reverse with stretched (full-width) buttons; the outer\r\n * container is column-reverse too, so Back sits at the very bottom.\r\n */\r\n\r\nexport interface ActionStripAction {\r\n id?: string | undefined;\r\n label: React.ReactNode;\r\n onClick?: ButtonProps[\"onClick\"] | undefined;\r\n icon?: React.ReactNode | undefined;\r\n variant?: ButtonProps[\"variant\"] | undefined;\r\n loading?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n type?: \"button\" | \"submit\" | \"reset\" | undefined;\r\n}\r\n\r\nexport interface ActionStripProps extends BoxProps {\r\n back?: ButtonProps[\"onClick\"] | undefined;\r\n backLabel?: React.ReactNode | undefined;\r\n secondary?: ActionStripAction[] | undefined;\r\n primary?: ActionStripAction | undefined;\r\n align?: \"start\" | \"end\" | undefined;\r\n}\r\n\r\nfunction ActionStrip({\r\n back,\r\n backLabel = \"Retour\",\r\n secondary = [],\r\n primary,\r\n align = \"end\",\r\n sx,\r\n ...rest\r\n}: ActionStripProps) {\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: { xs: \"column-reverse\", sm: \"row\" },\r\n alignItems: { xs: \"stretch\", sm: \"center\" },\r\n justifyContent: align === \"start\" ? \"flex-start\" : \"space-between\",\r\n gap: \"var(--s-3)\",\r\n marginTop: \"var(--s-5)\",\r\n paddingTop: \"var(--s-4)\",\r\n borderTop: \"1px solid var(--border)\",\r\n ...sx,\r\n }}\r\n {...rest}\r\n >\r\n {/* Left cluster — Back affordance */}\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"var(--s-2)\" }}>\r\n {back && (\r\n <Button\r\n variant=\"ghost\"\r\n icon={<ArrowBackIcon />}\r\n onClick={back}\r\n >\r\n {backLabel}\r\n </Button>\r\n )}\r\n </Box>\r\n\r\n {/* Right cluster — secondary + primary.\r\n xs : column-reverse + stretch → full-width buttons, primary on\r\n top (primary → secondary), reachable by thumb.\r\n sm+ : single centred row, primary anchored to the right edge. */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: { xs: \"column-reverse\", sm: \"row\" },\r\n alignItems: { xs: \"stretch\", sm: \"center\" },\r\n gap: \"var(--s-3)\",\r\n flexWrap: \"wrap\",\r\n justifyContent: { xs: \"flex-start\", sm: \"flex-end\" },\r\n }}\r\n >\r\n {secondary.map((action, i) => (\r\n <Button\r\n key={action.id || `sec-${i}`}\r\n variant={action.variant || \"ghost\"}\r\n icon={action.icon}\r\n onClick={action.onClick}\r\n disabled={action.disabled}\r\n type={action.type}\r\n {...(action.loading !== undefined ? { loading: action.loading } : {})}\r\n >\r\n {action.label}\r\n </Button>\r\n ))}\r\n {primary && (\r\n <Button\r\n variant={primary.variant || \"primary\"}\r\n icon={primary.icon}\r\n onClick={primary.onClick}\r\n disabled={primary.disabled}\r\n type={primary.type}\r\n {...(primary.loading !== undefined ? { loading: primary.loading } : {})}\r\n >\r\n {primary.label}\r\n </Button>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n\r\nexport default ActionStrip;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,aAAa,MAAM,+BAA+B;AACzD,OAAOC,GAAG,MAAM,mBAAmB;AAEnC,OAAOC,MAAM,MAAM,UAAU;;AAG7B;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;AA3CA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAgEA,SAASC,WAAWA,CAAC;EACnBC,IAAI;EACJC,SAAS,GAAG,QAAQ;EACpBC,SAAS,GAAG,EAAE;EACdC,OAAO;EACPC,KAAK,GAAG,KAAK;EACbC,EAAE;EACF,GAAGC;AACa,CAAC,EAAE;EACnB,oBACER,KAAA,CAACL,GAAG;IACFY,EAAE,EAAE;MACFE,OAAO,EAAE,MAAM;MACfC,aAAa,EAAE;QAAEC,EAAE,EAAE,gBAAgB;QAAEC,EAAE,EAAE;MAAM,CAAC;MAClDC,UAAU,EAAE;QAAEF,EAAE,EAAE,SAAS;QAAEC,EAAE,EAAE;MAAS,CAAC;MAC3CE,cAAc,EAAER,KAAK,KAAK,OAAO,GAAG,YAAY,GAAG,eAAe;MAClES,GAAG,EAAE,YAAY;MACjBC,SAAS,EAAE,YAAY;MACvBC,UAAU,EAAE,YAAY;MACxBC,SAAS,EAAE,yBAAyB;MACpC,GAAGX;IACL,CAAE;IAAA,GACEC,IAAI;IAAAW,QAAA,gBAGRrB,IAAA,CAACH,GAAG;MAACY,EAAE,EAAE;QAAEE,OAAO,EAAE,MAAM;QAAEI,UAAU,EAAE,QAAQ;QAAEE,GAAG,EAAE;MAAa,CAAE;MAAAI,QAAA,EACnEjB,IAAI,iBACHJ,IAAA,CAACF,MAAM;QACLwB,OAAO,EAAC,OAAO;QACfC,IAAI,eAAEvB,IAAA,CAACJ,aAAa,IAAE,CAAE;QACxB4B,OAAO,EAAEpB,IAAK;QAAAiB,QAAA,EAEbhB;MAAS,CACJ;IACT,CACE,CAAC,eAMNH,KAAA,CAACL,GAAG;MACFY,EAAE,EAAE;QACFE,OAAO,EAAE,MAAM;QACfC,aAAa,EAAE;UAAEC,EAAE,EAAE,gBAAgB;UAAEC,EAAE,EAAE;QAAM,CAAC;QAClDC,UAAU,EAAE;UAAEF,EAAE,EAAE,SAAS;UAAEC,EAAE,EAAE;QAAS,CAAC;QAC3CG,GAAG,EAAE,YAAY;QACjBQ,QAAQ,EAAE,MAAM;QAChBT,cAAc,EAAE;UAAEH,EAAE,EAAE,YAAY;UAAEC,EAAE,EAAE;QAAW;MACrD,CAAE;MAAAO,QAAA,GAEDf,SAAS,CAACoB,GAAG,CAAC,CAACC,MAAM,EAAEC,CAAC,kBACvB5B,IAAA,CAACF,MAAM;QAELwB,OAAO,EAAEK,MAAM,CAACL,OAAO,IAAI,OAAQ;QACnCC,IAAI,EAAEI,MAAM,CAACJ,IAAK;QAClBC,OAAO,EAAEG,MAAM,CAACH,OAAQ;QACxBK,QAAQ,EAAEF,MAAM,CAACE,QAAS;QAC1BC,IAAI,EAAEH,MAAM,CAACG,IAAK;QAAA,IACbH,MAAM,CAACI,OAAO,KAAKC,SAAS,GAAG;UAAED,OAAO,EAAEJ,MAAM,CAACI;QAAQ,CAAC,GAAG,CAAC,CAAC;QAAAV,QAAA,EAEnEM,MAAM,CAACM;MAAK,GARRN,MAAM,CAACO,EAAE,IAAI,OAAON,CAAC,EASpB,CACT,CAAC,EACDrB,OAAO,iBACNP,IAAA,CAACF,MAAM;QACLwB,OAAO,EAAEf,OAAO,CAACe,OAAO,IAAI,SAAU;QACtCC,IAAI,EAAEhB,OAAO,CAACgB,IAAK;QACnBC,OAAO,EAAEjB,OAAO,CAACiB,OAAQ;QACzBK,QAAQ,EAAEtB,OAAO,CAACsB,QAAS;QAC3BC,IAAI,EAAEvB,OAAO,CAACuB,IAAK;QAAA,IACdvB,OAAO,CAACwB,OAAO,KAAKC,SAAS,GAAG;UAAED,OAAO,EAAExB,OAAO,CAACwB;QAAQ,CAAC,GAAG,CAAC,CAAC;QAAAV,QAAA,EAErEd,OAAO,CAAC0B;MAAK,CACR,CACT;IAAA,CACE,CAAC;EAAA,CACH,CAAC;AAEV;AAEA,eAAe9B,WAAW","ignoreList":[]}
|
|
@@ -67,7 +67,7 @@ import InfoIcon from "@mui/icons-material/InfoOutlined";
|
|
|
67
67
|
* Defense-in-depth.
|
|
68
68
|
*/
|
|
69
69
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
70
|
-
|
|
70
|
+
const VARIANT = {
|
|
71
71
|
info: {
|
|
72
72
|
bg: "var(--info-soft)",
|
|
73
73
|
fg: "var(--info)",
|
|
@@ -103,11 +103,12 @@ var VARIANT = {
|
|
|
103
103
|
* text and 1.4.11 (≥ 3:1) as a UI boundary on the soft background. Do not swap
|
|
104
104
|
* it for `cfg.fg`, which only clears the non-text threshold.
|
|
105
105
|
*/
|
|
106
|
-
function BannerActionButton(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
106
|
+
function BannerActionButton({
|
|
107
|
+
action,
|
|
108
|
+
color,
|
|
109
|
+
emphasis
|
|
110
|
+
}) {
|
|
111
|
+
const isPrimary = emphasis === "primary";
|
|
111
112
|
return /*#__PURE__*/_jsxs(Box, {
|
|
112
113
|
component: "button",
|
|
113
114
|
type: "button",
|
|
@@ -119,8 +120,8 @@ function BannerActionButton(_ref) {
|
|
|
119
120
|
background: "transparent",
|
|
120
121
|
/* Transparent border on the secondary keeps both buttons on the same
|
|
121
122
|
* baseline and the same height — without it the cluster jitters. */
|
|
122
|
-
border:
|
|
123
|
-
color
|
|
123
|
+
border: `1px solid ${isPrimary ? color : "transparent"}`,
|
|
124
|
+
color,
|
|
124
125
|
padding: "var(--s-1) var(--s-3)",
|
|
125
126
|
borderRadius: "var(--r-sm)",
|
|
126
127
|
fontSize: "var(--text-xs)",
|
|
@@ -155,19 +156,21 @@ function BannerActionButton(_ref) {
|
|
|
155
156
|
}), action.label]
|
|
156
157
|
});
|
|
157
158
|
}
|
|
158
|
-
function Banner(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
159
|
+
function Banner({
|
|
160
|
+
variant = "info",
|
|
161
|
+
children,
|
|
162
|
+
title,
|
|
163
|
+
action,
|
|
164
|
+
// { label, onClick, icon } — primary
|
|
165
|
+
secondaryAction,
|
|
166
|
+
// { label, onClick, icon } — subordinate (G-19)
|
|
167
|
+
onClose,
|
|
168
|
+
// optional dismissal (✕), distinct from an action
|
|
169
|
+
closeLabel = "Fermer"
|
|
170
|
+
}) {
|
|
171
|
+
const cfg = VARIANT[variant] || VARIANT.info;
|
|
172
|
+
const Icon = cfg.icon;
|
|
173
|
+
const isErr = variant === "error";
|
|
171
174
|
return /*#__PURE__*/_jsxs(Box, {
|
|
172
175
|
role: isErr ? "alert" : "status",
|
|
173
176
|
"aria-live": isErr ? "assertive" : "polite",
|
|
@@ -183,7 +186,7 @@ function Banner(_ref2) {
|
|
|
183
186
|
// maximum legibility (the soft bg is light, --fg is the darkest).
|
|
184
187
|
color: "var(--fg)",
|
|
185
188
|
// Border on the saturated variant colour - meets 1.4.11.
|
|
186
|
-
border:
|
|
189
|
+
border: `1px solid ${cfg.fg}`,
|
|
187
190
|
fontSize: "var(--text-sm)"
|
|
188
191
|
},
|
|
189
192
|
children: [/*#__PURE__*/_jsx(Icon, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.js","names":["React","Box","IconButton","CloseIcon","CheckIcon","ErrorIcon","WarningIcon","InfoIcon","jsx","_jsx","jsxs","_jsxs","VARIANT","info","bg","fg","text","icon","success","warning","error","BannerActionButton","_ref","action","color","emphasis","isPrimary","component","type","onClick","sx","display","alignItems","gap","background","border","concat","padding","borderRadius","fontSize","fontWeight","textDecoration","cursor","fontFamily","whiteSpace","transition","outline","outlineOffset","children","flexShrink","label","Banner","_ref2","_ref2$variant","variant","title","secondaryAction","onClose","_ref2$closeLabel","closeLabel","cfg","Icon","isErr","role","style","marginTop","flex","marginBottom","size","marginRight"],"sources":["../../../../src/lib/v2/components/Banner.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport type { SvgIconComponent } from \"@mui/icons-material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport CheckIcon from \"@mui/icons-material/Check\";\r\nimport ErrorIcon from \"@mui/icons-material/ErrorOutlined\";\r\nimport WarningIcon from \"@mui/icons-material/WarningAmberOutlined\";\r\nimport InfoIcon from \"@mui/icons-material/InfoOutlined\";\r\n\r\n/**\r\n * Banner - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Banner\". For persistent system-wide messages\r\n * (network error, maintenance, banner alerts on top of a section).\r\n *\r\n * R-A.2 - Erreur bloquante = role=\"alert\" aria-live=\"assertive\".\r\n * R-F.1 - Focus visible required on the action button.\r\n *\r\n * <Banner variant=\"error\" action={{ label: \"Réessayer\", onClick: retry }}>\r\n * Connexion perdue.\r\n * </Banner>\r\n *\r\n * Action cluster (capability gap G-19)\r\n * ------------------------------------\r\n * `action` is the primary affordance (outlined). `secondaryAction` is the\r\n * subordinate one (borderless + underlined), rendered to its LEFT per the\r\n * charter's R-M.6 ordering (« action principale à droite, secondaire à gauche »).\r\n * Both accept an optional leading `icon`.\r\n *\r\n * <Banner\r\n * variant=\"info\"\r\n * title=\"Brouillon trouvé\"\r\n * action={{ label: \"Restaurer\", onClick: restore }}\r\n * secondaryAction={{ label: \"Ignorer\", onClick: discard }}\r\n * >\r\n * Une saisie en cours a été détectée sur ce poste.\r\n * </Banner>\r\n *\r\n * WHY THIS WAS ADDED. Banner previously destructured a FIXED prop list with no\r\n * rest spread and supported neither `secondaryAction` nor `action.icon`. Every\r\n * audited module had nonetheless passed them — four dead props in addpe-fe alone\r\n * (its own comments record the discovery) — so the affordances silently did not\r\n * exist: a draft-restore banner offered \"Restaurer\" with NO way to dismiss, and\r\n * error banners lost their intended escape hatch. Props that look supported and\r\n * are dropped in silence are worse than absent ones, because a reviewer reading\r\n * the call site believes the affordance ships.\r\n *\r\n * `onClose` remains a distinct concern: it is DISMISSAL (an ✕ icon-button), not\r\n * an action. Use `secondaryAction` when the second choice carries business\r\n * meaning (\"Ignorer\" clears a draft; \"Retour à la liste\" navigates).\r\n *\r\n * Localisation (FR / EN / AR):\r\n * - `action.label` / `secondaryAction.label` are consumer-controlled.\r\n * - `closeLabel` overrides the dismiss button's aria-label\r\n * (default \"Fermer\").\r\n *\r\n * A11y note (WCAG 1.4.3):\r\n * Each variant carries TWO colours - a saturated one for icons + border\r\n * (passes 1.4.11 ≥ 3:1) and a darker -fg one for text (passes 1.4.3\r\n * ≥ 4.5:1) on the soft background. Don't collapse them.\r\n *\r\n * A11y note (live regions, R-A.1 / R-A.2):\r\n * aria-relevant=\"additions text\" is set explicitly. Per WAI-ARIA both\r\n * role=\"alert\" and role=\"status\" imply this default, but real-world\r\n * SR + browser combos (NVDA + Firefox especially) have shipped\r\n * announcement-skipping bugs in the absence of an explicit attribute.\r\n * Defense-in-depth.\r\n */\r\n\r\nexport type BannerVariant = \"info\" | \"success\" | \"warning\" | \"error\";\r\n\r\ninterface BannerVariantConfig {\r\n bg: string;\r\n fg: string;\r\n text: string;\r\n icon: SvgIconComponent;\r\n}\r\n\r\nconst VARIANT: Record<BannerVariant, BannerVariantConfig> = {\r\n info: { bg: \"var(--info-soft)\", fg: \"var(--info)\", text: \"var(--info-fg)\", icon: InfoIcon },\r\n success: { bg: \"var(--success-soft)\", fg: \"var(--success)\", text: \"var(--success-fg)\", icon: CheckIcon },\r\n warning: { bg: \"var(--warning-soft)\", fg: \"var(--warning)\", text: \"var(--warning-fg)\", icon: WarningIcon },\r\n error: { bg: \"var(--danger-soft)\", fg: \"var(--danger)\", text: \"var(--danger-fg)\", icon: ErrorIcon },\r\n};\r\n\r\nexport interface BannerAction {\r\n label: React.ReactNode;\r\n onClick?: (() => void) | undefined;\r\n /**\r\n * Optional leading icon. Rendered `aria-hidden` — the label carries the\r\n * accessible name (R-Ar.2), so an icon-only banner action is not supported by\r\n * design: a banner action must read as a verb+object CTA (§09.2).\r\n */\r\n icon?: React.ReactNode | undefined;\r\n}\r\n\r\nexport interface BannerProps {\r\n variant?: BannerVariant | undefined;\r\n children: React.ReactNode;\r\n title?: React.ReactNode | undefined;\r\n /** Primary affordance — outlined, rendered rightmost of the cluster. */\r\n action?: BannerAction | undefined;\r\n /** Subordinate affordance — borderless, rendered LEFT of `action` (R-M.6). */\r\n secondaryAction?: BannerAction | undefined;\r\n onClose?: (() => void) | undefined;\r\n closeLabel?: string | undefined;\r\n}\r\n\r\n/**\r\n * One button of the action cluster. Extracted rather than duplicated: the two\r\n * emphases differ only by border and underline, and a second inline copy of a\r\n * 25-line `sx` block is exactly how the focus-visible and contrast guarantees\r\n * below drift apart.\r\n *\r\n * Colour is `cfg.text` for BOTH border and label — it passes 1.4.3 (≥ 4.5:1) as\r\n * text and 1.4.11 (≥ 3:1) as a UI boundary on the soft background. Do not swap\r\n * it for `cfg.fg`, which only clears the non-text threshold.\r\n */\r\nfunction BannerActionButton({\r\n action,\r\n color,\r\n emphasis,\r\n}: {\r\n action: BannerAction;\r\n color: string;\r\n emphasis: \"primary\" | \"secondary\";\r\n}) {\r\n const isPrimary = emphasis === \"primary\";\r\n return (\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={action.onClick}\r\n sx={{\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-1)\",\r\n background: \"transparent\",\r\n /* Transparent border on the secondary keeps both buttons on the same\r\n * baseline and the same height — without it the cluster jitters. */\r\n border: `1px solid ${isPrimary ? color : \"transparent\"}`,\r\n color,\r\n padding: \"var(--s-1) var(--s-3)\",\r\n borderRadius: \"var(--r-sm)\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n textDecoration: isPrimary ? \"none\" : \"underline\",\r\n cursor: \"pointer\",\r\n fontFamily: \"inherit\",\r\n whiteSpace: \"nowrap\",\r\n transition: \"background var(--duration-fast) ease\",\r\n \"&:hover\": {\r\n background: \"color-mix(in srgb, currentColor 10%, transparent)\",\r\n },\r\n // R-F.1 - focus-visible required, charter §05.\r\n \"&:focus-visible\": {\r\n outline: \"2px solid currentColor\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n }}\r\n >\r\n {action.icon && (\r\n <Box\r\n component=\"span\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n display: \"inline-flex\",\r\n flexShrink: 0,\r\n /* Normalise a consumer-supplied MUI icon (24px by default) onto the\r\n * label's optical scale. --text-h3 is the 16px token. */\r\n \"& > *\": { fontSize: \"var(--text-h3)\" },\r\n }}\r\n >\r\n {action.icon}\r\n </Box>\r\n )}\r\n {action.label}\r\n </Box>\r\n );\r\n}\r\n\r\nfunction Banner({\r\n variant = \"info\",\r\n children,\r\n title,\r\n action, // { label, onClick, icon } — primary\r\n secondaryAction, // { label, onClick, icon } — subordinate (G-19)\r\n onClose, // optional dismissal (✕), distinct from an action\r\n closeLabel = \"Fermer\",\r\n}: BannerProps) {\r\n const cfg = VARIANT[variant] || VARIANT.info;\r\n const Icon = cfg.icon;\r\n const isErr = variant === \"error\";\r\n\r\n return (\r\n <Box\r\n role={isErr ? \"alert\" : \"status\"}\r\n aria-live={isErr ? \"assertive\" : \"polite\"}\r\n aria-relevant=\"additions text\"\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: \"var(--s-3)\",\r\n padding: \"var(--s-3) var(--s-4)\",\r\n borderRadius: \"var(--r-md)\",\r\n background: cfg.bg,\r\n // Body text inherits this colour - keep at standard --fg for\r\n // maximum legibility (the soft bg is light, --fg is the darkest).\r\n color: \"var(--fg)\",\r\n // Border on the saturated variant colour - meets 1.4.11.\r\n border: `1px solid ${cfg.fg}`,\r\n fontSize: \"var(--text-sm)\",\r\n }}\r\n >\r\n <Icon\r\n fontSize=\"small\"\r\n aria-hidden=\"true\"\r\n // Icon stays on cfg.fg - passes 1.4.11 (≥ 3:1) for non-text UI.\r\n sx={{ color: cfg.fg }}\r\n // Optical alignment of the icon with the first text line -\r\n // deliberate non-token value (not a spacing token concern).\r\n style={{ marginTop: 2, flexShrink: 0 }}\r\n />\r\n <Box sx={{ flex: 1 }}>\r\n {title && (\r\n // Title uses cfg.text - passes 1.4.3 (≥ 4.5:1) on cfg.bg.\r\n <Box sx={{ fontWeight: \"var(--fw-semibold)\", marginBottom: \"var(--s-1)\", color: cfg.text }}>\r\n {title}\r\n </Box>\r\n )}\r\n <Box>{children}</Box>\r\n </Box>\r\n {(action || secondaryAction) && (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n flexShrink: 0,\r\n }}\r\n >\r\n {/* R-M.6 — secondary on the LEFT, primary on the right. */}\r\n {secondaryAction && (\r\n <BannerActionButton\r\n action={secondaryAction}\r\n color={cfg.text}\r\n emphasis=\"secondary\"\r\n />\r\n )}\r\n {action && (\r\n <BannerActionButton\r\n action={action}\r\n color={cfg.text}\r\n emphasis=\"primary\"\r\n />\r\n )}\r\n </Box>\r\n )}\r\n {onClose && (\r\n <IconButton\r\n aria-label={closeLabel}\r\n size=\"small\"\r\n onClick={onClose}\r\n // Close icon is non-text UI - cfg.fg is fine (1.4.11).\r\n sx={{ color: cfg.fg, marginRight: \"calc(-1 * var(--s-1))\" }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default Banner;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,GAAG,MAAM,mBAAmB;AACnC,OAAOC,UAAU,MAAM,0BAA0B;AAEjD,OAAOC,SAAS,MAAM,2BAA2B;AACjD,OAAOC,SAAS,MAAM,2BAA2B;AACjD,OAAOC,SAAS,MAAM,mCAAmC;AACzD,OAAOC,WAAW,MAAM,0CAA0C;AAClE,OAAOC,QAAQ,MAAM,kCAAkC;;AAEvD;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA1DA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAqEA,IAAMC,OAAmD,GAAG;EAC1DC,IAAI,EAAK;IAAEC,EAAE,EAAE,kBAAkB;IAAKC,EAAE,EAAE,aAAa;IAAKC,IAAI,EAAE,gBAAgB;IAAKC,IAAI,EAAEV;EAAS,CAAC;EACvGW,OAAO,EAAE;IAAEJ,EAAE,EAAE,qBAAqB;IAAEC,EAAE,EAAE,gBAAgB;IAAEC,IAAI,EAAE,mBAAmB;IAAEC,IAAI,EAAEb;EAAU,CAAC;EACxGe,OAAO,EAAE;IAAEL,EAAE,EAAE,qBAAqB;IAAEC,EAAE,EAAE,gBAAgB;IAAEC,IAAI,EAAE,mBAAmB;IAAEC,IAAI,EAAEX;EAAY,CAAC;EAC1Gc,KAAK,EAAI;IAAEN,EAAE,EAAE,oBAAoB;IAAGC,EAAE,EAAE,eAAe;IAAGC,IAAI,EAAE,kBAAkB;IAAGC,IAAI,EAAEZ;EAAU;AACzG,CAAC;AAyBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASgB,kBAAkBA,CAAAC,IAAA,EAQxB;EAAA,IAPDC,MAAM,GAAAD,IAAA,CAANC,MAAM;IACNC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACLC,QAAQ,GAAAH,IAAA,CAARG,QAAQ;EAMR,IAAMC,SAAS,GAAGD,QAAQ,KAAK,SAAS;EACxC,oBACEd,KAAA,CAACV,GAAG;IACF0B,SAAS,EAAC,QAAQ;IAClBC,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAEN,MAAM,CAACM,OAAQ;IACxBC,EAAE,EAAE;MACFC,OAAO,EAAE,aAAa;MACtBC,UAAU,EAAE,QAAQ;MACpBC,GAAG,EAAE,YAAY;MACjBC,UAAU,EAAE,aAAa;MACzB;AACR;MACQC,MAAM,eAAAC,MAAA,CAAeV,SAAS,GAAGF,KAAK,GAAG,aAAa,CAAE;MACxDA,KAAK,EAALA,KAAK;MACLa,OAAO,EAAE,uBAAuB;MAChCC,YAAY,EAAE,aAAa;MAC3BC,QAAQ,EAAE,gBAAgB;MAC1BC,UAAU,EAAE,oBAAoB;MAChCC,cAAc,EAAEf,SAAS,GAAG,MAAM,GAAG,WAAW;MAChDgB,MAAM,EAAE,SAAS;MACjBC,UAAU,EAAE,SAAS;MACrBC,UAAU,EAAE,QAAQ;MACpBC,UAAU,EAAE,sCAAsC;MAClD,SAAS,EAAE;QACTX,UAAU,EAAE;MACd,CAAC;MACD;MACA,iBAAiB,EAAE;QACjBY,OAAO,EAAE,wBAAwB;QACjCC,aAAa,EAAE;MACjB;IACF,CAAE;IAAAC,QAAA,GAEDzB,MAAM,CAACN,IAAI,iBACVR,IAAA,CAACR,GAAG;MACF0B,SAAS,EAAC,MAAM;MAChB,eAAY,MAAM;MAClBG,EAAE,EAAE;QACFC,OAAO,EAAE,aAAa;QACtBkB,UAAU,EAAE,CAAC;QACb;AACZ;QACY,OAAO,EAAE;UAAEV,QAAQ,EAAE;QAAiB;MACxC,CAAE;MAAAS,QAAA,EAEDzB,MAAM,CAACN;IAAI,CACT,CACN,EACAM,MAAM,CAAC2B,KAAK;EAAA,CACV,CAAC;AAEV;AAEA,SAASC,MAAMA,CAAAC,KAAA,EAQC;EAAA,IAAAC,aAAA,GAAAD,KAAA,CAPdE,OAAO;IAAPA,OAAO,GAAAD,aAAA,cAAG,MAAM,GAAAA,aAAA;IAChBL,QAAQ,GAAAI,KAAA,CAARJ,QAAQ;IACRO,KAAK,GAAAH,KAAA,CAALG,KAAK;IACLhC,MAAM,GAAA6B,KAAA,CAAN7B,MAAM;IACNiC,eAAe,GAAAJ,KAAA,CAAfI,eAAe;IACfC,OAAO,GAAAL,KAAA,CAAPK,OAAO;IAAAC,gBAAA,GAAAN,KAAA,CACPO,UAAU;IAAVA,UAAU,GAAAD,gBAAA,cAAG,QAAQ,GAAAA,gBAAA;EAErB,IAAME,GAAG,GAAGhD,OAAO,CAAC0C,OAAO,CAAC,IAAI1C,OAAO,CAACC,IAAI;EAC5C,IAAMgD,IAAI,GAAGD,GAAG,CAAC3C,IAAI;EACrB,IAAM6C,KAAK,GAAGR,OAAO,KAAK,OAAO;EAEjC,oBACE3C,KAAA,CAACV,GAAG;IACF8D,IAAI,EAAED,KAAK,GAAG,OAAO,GAAG,QAAS;IACjC,aAAWA,KAAK,GAAG,WAAW,GAAG,QAAS;IAC1C,iBAAc,gBAAgB;IAC9BhC,EAAE,EAAE;MACFC,OAAO,EAAE,MAAM;MACfC,UAAU,EAAE,YAAY;MACxBC,GAAG,EAAE,YAAY;MACjBI,OAAO,EAAE,uBAAuB;MAChCC,YAAY,EAAE,aAAa;MAC3BJ,UAAU,EAAE0B,GAAG,CAAC9C,EAAE;MAClB;MACA;MACAU,KAAK,EAAE,WAAW;MAClB;MACAW,MAAM,eAAAC,MAAA,CAAewB,GAAG,CAAC7C,EAAE,CAAE;MAC7BwB,QAAQ,EAAE;IACZ,CAAE;IAAAS,QAAA,gBAEFvC,IAAA,CAACoD,IAAI;MACHtB,QAAQ,EAAC,OAAO;MAChB,eAAY;MACZ;MAAA;MACAT,EAAE,EAAE;QAAEN,KAAK,EAAEoC,GAAG,CAAC7C;MAAG;MACpB;MACA;MAAA;MACAiD,KAAK,EAAE;QAAEC,SAAS,EAAE,CAAC;QAAEhB,UAAU,EAAE;MAAE;IAAE,CACxC,CAAC,eACFtC,KAAA,CAACV,GAAG;MAAC6B,EAAE,EAAE;QAAEoC,IAAI,EAAE;MAAE,CAAE;MAAAlB,QAAA,GAClBO,KAAK;MAAA;MACJ;MACA9C,IAAA,CAACR,GAAG;QAAC6B,EAAE,EAAE;UAAEU,UAAU,EAAE,oBAAoB;UAAE2B,YAAY,EAAE,YAAY;UAAE3C,KAAK,EAAEoC,GAAG,CAAC5C;QAAK,CAAE;QAAAgC,QAAA,EACxFO;MAAK,CACH,CACN,eACD9C,IAAA,CAACR,GAAG;QAAA+C,QAAA,EAAEA;MAAQ,CAAM,CAAC;IAAA,CAClB,CAAC,EACL,CAACzB,MAAM,IAAIiC,eAAe,kBACzB7C,KAAA,CAACV,GAAG;MACF6B,EAAE,EAAE;QACFC,OAAO,EAAE,MAAM;QACfC,UAAU,EAAE,QAAQ;QACpBC,GAAG,EAAE,YAAY;QACjBgB,UAAU,EAAE;MACd,CAAE;MAAAD,QAAA,GAGDQ,eAAe,iBACd/C,IAAA,CAACY,kBAAkB;QACjBE,MAAM,EAAEiC,eAAgB;QACxBhC,KAAK,EAAEoC,GAAG,CAAC5C,IAAK;QAChBS,QAAQ,EAAC;MAAW,CACrB,CACF,EACAF,MAAM,iBACLd,IAAA,CAACY,kBAAkB;QACjBE,MAAM,EAAEA,MAAO;QACfC,KAAK,EAAEoC,GAAG,CAAC5C,IAAK;QAChBS,QAAQ,EAAC;MAAS,CACnB,CACF;IAAA,CACE,CACN,EACAgC,OAAO,iBACNhD,IAAA,CAACP,UAAU;MACT,cAAYyD,UAAW;MACvBS,IAAI,EAAC,OAAO;MACZvC,OAAO,EAAE4B;MACT;MAAA;MACA3B,EAAE,EAAE;QAAEN,KAAK,EAAEoC,GAAG,CAAC7C,EAAE;QAAEsD,WAAW,EAAE;MAAwB,CAAE;MAAArB,QAAA,eAE5DvC,IAAA,CAACN,SAAS;QAACoC,QAAQ,EAAC;MAAO,CAAE;IAAC,CACpB,CACb;EAAA,CACE,CAAC;AAEV;AAEA,eAAeY,MAAM","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Banner.js","names":["React","Box","IconButton","CloseIcon","CheckIcon","ErrorIcon","WarningIcon","InfoIcon","jsx","_jsx","jsxs","_jsxs","VARIANT","info","bg","fg","text","icon","success","warning","error","BannerActionButton","action","color","emphasis","isPrimary","component","type","onClick","sx","display","alignItems","gap","background","border","padding","borderRadius","fontSize","fontWeight","textDecoration","cursor","fontFamily","whiteSpace","transition","outline","outlineOffset","children","flexShrink","label","Banner","variant","title","secondaryAction","onClose","closeLabel","cfg","Icon","isErr","role","style","marginTop","flex","marginBottom","size","marginRight"],"sources":["../../../../src/lib/v2/components/Banner.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport type { SvgIconComponent } from \"@mui/icons-material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport CheckIcon from \"@mui/icons-material/Check\";\r\nimport ErrorIcon from \"@mui/icons-material/ErrorOutlined\";\r\nimport WarningIcon from \"@mui/icons-material/WarningAmberOutlined\";\r\nimport InfoIcon from \"@mui/icons-material/InfoOutlined\";\r\n\r\n/**\r\n * Banner - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Banner\". For persistent system-wide messages\r\n * (network error, maintenance, banner alerts on top of a section).\r\n *\r\n * R-A.2 - Erreur bloquante = role=\"alert\" aria-live=\"assertive\".\r\n * R-F.1 - Focus visible required on the action button.\r\n *\r\n * <Banner variant=\"error\" action={{ label: \"Réessayer\", onClick: retry }}>\r\n * Connexion perdue.\r\n * </Banner>\r\n *\r\n * Action cluster (capability gap G-19)\r\n * ------------------------------------\r\n * `action` is the primary affordance (outlined). `secondaryAction` is the\r\n * subordinate one (borderless + underlined), rendered to its LEFT per the\r\n * charter's R-M.6 ordering (« action principale à droite, secondaire à gauche »).\r\n * Both accept an optional leading `icon`.\r\n *\r\n * <Banner\r\n * variant=\"info\"\r\n * title=\"Brouillon trouvé\"\r\n * action={{ label: \"Restaurer\", onClick: restore }}\r\n * secondaryAction={{ label: \"Ignorer\", onClick: discard }}\r\n * >\r\n * Une saisie en cours a été détectée sur ce poste.\r\n * </Banner>\r\n *\r\n * WHY THIS WAS ADDED. Banner previously destructured a FIXED prop list with no\r\n * rest spread and supported neither `secondaryAction` nor `action.icon`. Every\r\n * audited module had nonetheless passed them — four dead props in addpe-fe alone\r\n * (its own comments record the discovery) — so the affordances silently did not\r\n * exist: a draft-restore banner offered \"Restaurer\" with NO way to dismiss, and\r\n * error banners lost their intended escape hatch. Props that look supported and\r\n * are dropped in silence are worse than absent ones, because a reviewer reading\r\n * the call site believes the affordance ships.\r\n *\r\n * `onClose` remains a distinct concern: it is DISMISSAL (an ✕ icon-button), not\r\n * an action. Use `secondaryAction` when the second choice carries business\r\n * meaning (\"Ignorer\" clears a draft; \"Retour à la liste\" navigates).\r\n *\r\n * Localisation (FR / EN / AR):\r\n * - `action.label` / `secondaryAction.label` are consumer-controlled.\r\n * - `closeLabel` overrides the dismiss button's aria-label\r\n * (default \"Fermer\").\r\n *\r\n * A11y note (WCAG 1.4.3):\r\n * Each variant carries TWO colours - a saturated one for icons + border\r\n * (passes 1.4.11 ≥ 3:1) and a darker -fg one for text (passes 1.4.3\r\n * ≥ 4.5:1) on the soft background. Don't collapse them.\r\n *\r\n * A11y note (live regions, R-A.1 / R-A.2):\r\n * aria-relevant=\"additions text\" is set explicitly. Per WAI-ARIA both\r\n * role=\"alert\" and role=\"status\" imply this default, but real-world\r\n * SR + browser combos (NVDA + Firefox especially) have shipped\r\n * announcement-skipping bugs in the absence of an explicit attribute.\r\n * Defense-in-depth.\r\n */\r\n\r\nexport type BannerVariant = \"info\" | \"success\" | \"warning\" | \"error\";\r\n\r\ninterface BannerVariantConfig {\r\n bg: string;\r\n fg: string;\r\n text: string;\r\n icon: SvgIconComponent;\r\n}\r\n\r\nconst VARIANT: Record<BannerVariant, BannerVariantConfig> = {\r\n info: { bg: \"var(--info-soft)\", fg: \"var(--info)\", text: \"var(--info-fg)\", icon: InfoIcon },\r\n success: { bg: \"var(--success-soft)\", fg: \"var(--success)\", text: \"var(--success-fg)\", icon: CheckIcon },\r\n warning: { bg: \"var(--warning-soft)\", fg: \"var(--warning)\", text: \"var(--warning-fg)\", icon: WarningIcon },\r\n error: { bg: \"var(--danger-soft)\", fg: \"var(--danger)\", text: \"var(--danger-fg)\", icon: ErrorIcon },\r\n};\r\n\r\nexport interface BannerAction {\r\n label: React.ReactNode;\r\n onClick?: (() => void) | undefined;\r\n /**\r\n * Optional leading icon. Rendered `aria-hidden` — the label carries the\r\n * accessible name (R-Ar.2), so an icon-only banner action is not supported by\r\n * design: a banner action must read as a verb+object CTA (§09.2).\r\n */\r\n icon?: React.ReactNode | undefined;\r\n}\r\n\r\nexport interface BannerProps {\r\n variant?: BannerVariant | undefined;\r\n children: React.ReactNode;\r\n title?: React.ReactNode | undefined;\r\n /** Primary affordance — outlined, rendered rightmost of the cluster. */\r\n action?: BannerAction | undefined;\r\n /** Subordinate affordance — borderless, rendered LEFT of `action` (R-M.6). */\r\n secondaryAction?: BannerAction | undefined;\r\n onClose?: (() => void) | undefined;\r\n closeLabel?: string | undefined;\r\n}\r\n\r\n/**\r\n * One button of the action cluster. Extracted rather than duplicated: the two\r\n * emphases differ only by border and underline, and a second inline copy of a\r\n * 25-line `sx` block is exactly how the focus-visible and contrast guarantees\r\n * below drift apart.\r\n *\r\n * Colour is `cfg.text` for BOTH border and label — it passes 1.4.3 (≥ 4.5:1) as\r\n * text and 1.4.11 (≥ 3:1) as a UI boundary on the soft background. Do not swap\r\n * it for `cfg.fg`, which only clears the non-text threshold.\r\n */\r\nfunction BannerActionButton({\r\n action,\r\n color,\r\n emphasis,\r\n}: {\r\n action: BannerAction;\r\n color: string;\r\n emphasis: \"primary\" | \"secondary\";\r\n}) {\r\n const isPrimary = emphasis === \"primary\";\r\n return (\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={action.onClick}\r\n sx={{\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-1)\",\r\n background: \"transparent\",\r\n /* Transparent border on the secondary keeps both buttons on the same\r\n * baseline and the same height — without it the cluster jitters. */\r\n border: `1px solid ${isPrimary ? color : \"transparent\"}`,\r\n color,\r\n padding: \"var(--s-1) var(--s-3)\",\r\n borderRadius: \"var(--r-sm)\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n textDecoration: isPrimary ? \"none\" : \"underline\",\r\n cursor: \"pointer\",\r\n fontFamily: \"inherit\",\r\n whiteSpace: \"nowrap\",\r\n transition: \"background var(--duration-fast) ease\",\r\n \"&:hover\": {\r\n background: \"color-mix(in srgb, currentColor 10%, transparent)\",\r\n },\r\n // R-F.1 - focus-visible required, charter §05.\r\n \"&:focus-visible\": {\r\n outline: \"2px solid currentColor\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n }}\r\n >\r\n {action.icon && (\r\n <Box\r\n component=\"span\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n display: \"inline-flex\",\r\n flexShrink: 0,\r\n /* Normalise a consumer-supplied MUI icon (24px by default) onto the\r\n * label's optical scale. --text-h3 is the 16px token. */\r\n \"& > *\": { fontSize: \"var(--text-h3)\" },\r\n }}\r\n >\r\n {action.icon}\r\n </Box>\r\n )}\r\n {action.label}\r\n </Box>\r\n );\r\n}\r\n\r\nfunction Banner({\r\n variant = \"info\",\r\n children,\r\n title,\r\n action, // { label, onClick, icon } — primary\r\n secondaryAction, // { label, onClick, icon } — subordinate (G-19)\r\n onClose, // optional dismissal (✕), distinct from an action\r\n closeLabel = \"Fermer\",\r\n}: BannerProps) {\r\n const cfg = VARIANT[variant] || VARIANT.info;\r\n const Icon = cfg.icon;\r\n const isErr = variant === \"error\";\r\n\r\n return (\r\n <Box\r\n role={isErr ? \"alert\" : \"status\"}\r\n aria-live={isErr ? \"assertive\" : \"polite\"}\r\n aria-relevant=\"additions text\"\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: \"var(--s-3)\",\r\n padding: \"var(--s-3) var(--s-4)\",\r\n borderRadius: \"var(--r-md)\",\r\n background: cfg.bg,\r\n // Body text inherits this colour - keep at standard --fg for\r\n // maximum legibility (the soft bg is light, --fg is the darkest).\r\n color: \"var(--fg)\",\r\n // Border on the saturated variant colour - meets 1.4.11.\r\n border: `1px solid ${cfg.fg}`,\r\n fontSize: \"var(--text-sm)\",\r\n }}\r\n >\r\n <Icon\r\n fontSize=\"small\"\r\n aria-hidden=\"true\"\r\n // Icon stays on cfg.fg - passes 1.4.11 (≥ 3:1) for non-text UI.\r\n sx={{ color: cfg.fg }}\r\n // Optical alignment of the icon with the first text line -\r\n // deliberate non-token value (not a spacing token concern).\r\n style={{ marginTop: 2, flexShrink: 0 }}\r\n />\r\n <Box sx={{ flex: 1 }}>\r\n {title && (\r\n // Title uses cfg.text - passes 1.4.3 (≥ 4.5:1) on cfg.bg.\r\n <Box sx={{ fontWeight: \"var(--fw-semibold)\", marginBottom: \"var(--s-1)\", color: cfg.text }}>\r\n {title}\r\n </Box>\r\n )}\r\n <Box>{children}</Box>\r\n </Box>\r\n {(action || secondaryAction) && (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n flexShrink: 0,\r\n }}\r\n >\r\n {/* R-M.6 — secondary on the LEFT, primary on the right. */}\r\n {secondaryAction && (\r\n <BannerActionButton\r\n action={secondaryAction}\r\n color={cfg.text}\r\n emphasis=\"secondary\"\r\n />\r\n )}\r\n {action && (\r\n <BannerActionButton\r\n action={action}\r\n color={cfg.text}\r\n emphasis=\"primary\"\r\n />\r\n )}\r\n </Box>\r\n )}\r\n {onClose && (\r\n <IconButton\r\n aria-label={closeLabel}\r\n size=\"small\"\r\n onClick={onClose}\r\n // Close icon is non-text UI - cfg.fg is fine (1.4.11).\r\n sx={{ color: cfg.fg, marginRight: \"calc(-1 * var(--s-1))\" }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default Banner;\r\n"],"mappings":"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","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 Box from "@mui/material/Box";
|
|
8
2
|
import Spinner from "./Spinner";
|
|
9
3
|
|
|
@@ -47,46 +41,47 @@ import Spinner from "./Spinner";
|
|
|
47
41
|
* {isPageLoading && <PageBusy label="Création en cours" />}
|
|
48
42
|
*/
|
|
49
43
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
50
|
-
|
|
44
|
+
const SHARED_OVERLAY_SX = Object.freeze({
|
|
51
45
|
display: "grid",
|
|
52
46
|
placeItems: "center",
|
|
53
47
|
background: "color-mix(in srgb, var(--bg) 70%, transparent)",
|
|
54
48
|
pointerEvents: "auto"
|
|
55
49
|
});
|
|
56
|
-
export function SectionBusy(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
surface = _ref$surface === void 0 ? true : _ref$surface;
|
|
50
|
+
export function SectionBusy({
|
|
51
|
+
label = "Chargement en cours",
|
|
52
|
+
surface = true
|
|
53
|
+
}) {
|
|
61
54
|
return /*#__PURE__*/_jsx(Box, {
|
|
62
55
|
role: "status",
|
|
63
56
|
"aria-live": "polite",
|
|
64
57
|
"aria-busy": "true",
|
|
65
|
-
sx:
|
|
58
|
+
sx: {
|
|
59
|
+
...SHARED_OVERLAY_SX,
|
|
66
60
|
position: "absolute",
|
|
67
61
|
inset: 0,
|
|
68
62
|
background: surface ? SHARED_OVERLAY_SX.background : "transparent",
|
|
69
63
|
borderRadius: "var(--r-lg)",
|
|
70
64
|
zIndex: 1
|
|
71
|
-
}
|
|
65
|
+
},
|
|
72
66
|
children: /*#__PURE__*/_jsx(Spinner, {
|
|
73
67
|
size: 20,
|
|
74
68
|
label: label
|
|
75
69
|
})
|
|
76
70
|
});
|
|
77
71
|
}
|
|
78
|
-
export function PageBusy(
|
|
79
|
-
|
|
80
|
-
|
|
72
|
+
export function PageBusy({
|
|
73
|
+
label = "Chargement en cours"
|
|
74
|
+
}) {
|
|
81
75
|
return /*#__PURE__*/_jsx(Box, {
|
|
82
76
|
role: "status",
|
|
83
77
|
"aria-live": "polite",
|
|
84
78
|
"aria-busy": "true",
|
|
85
|
-
sx:
|
|
79
|
+
sx: {
|
|
80
|
+
...SHARED_OVERLAY_SX,
|
|
86
81
|
position: "fixed",
|
|
87
82
|
inset: 0,
|
|
88
83
|
zIndex: "var(--z-modal, 9999)"
|
|
89
|
-
}
|
|
84
|
+
},
|
|
90
85
|
children: /*#__PURE__*/_jsx(Spinner, {
|
|
91
86
|
size: 28,
|
|
92
87
|
label: label
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Busy.js","names":["Box","Spinner","jsx","_jsx","SHARED_OVERLAY_SX","Object","freeze","display","placeItems","background","pointerEvents","SectionBusy","
|
|
1
|
+
{"version":3,"file":"Busy.js","names":["Box","Spinner","jsx","_jsx","SHARED_OVERLAY_SX","Object","freeze","display","placeItems","background","pointerEvents","SectionBusy","label","surface","role","sx","position","inset","borderRadius","zIndex","children","size","PageBusy"],"sources":["../../../../src/lib/v2/components/Busy.tsx"],"sourcesContent":["import Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport Spinner from \"./Spinner\";\r\n\r\n/**\r\n * Busy — Portnet UI v2\r\n *\r\n * Charter §04.4 · canonical loading-overlay primitive. Replaces the\r\n * inline PAGE_OVERLAY_SX block that host modules previously froze\r\n * in 15+ feature pages (cf. ms-ti-fe VALIDATION_REPORT §6 — uplift\r\n * pattern catalogued under \"Spinner overlay block\").\r\n *\r\n * Two variants:\r\n *\r\n * <SectionBusy />\r\n * covers the nearest positioned ancestor (parent must have\r\n * `position: relative`). Use when a section/card is waiting on\r\n * data but the rest of the page is still usable.\r\n *\r\n * <PageBusy />\r\n * fixed full-viewport variant. Use when the whole page is\r\n * blocked (e.g. initial fetch, submit-in-flight on a wizard).\r\n *\r\n * Both expose role=\"status\" + aria-live=\"polite\" + aria-busy=\"true\"\r\n * so screen-reader users hear the loading state, and they forward\r\n * the `label` prop to the inner Spinner — that text is announced\r\n * via aria-label on the SVG (R-Ar.1).\r\n *\r\n * Reduced-motion: the Spinner's CSS animation is suppressed under\r\n * `prefers-reduced-motion: reduce` (handled in pui-spinner base\r\n * stylesheet — no per-component duplication).\r\n *\r\n * Usage:\r\n *\r\n * // Section-level (parent has position: relative):\r\n * <Box sx={{ position: \"relative\" }}>\r\n * <ContentThatCanLoad />\r\n * {isLoading && <SectionBusy label=\"Chargement des marchandises\" />}\r\n * </Box>\r\n *\r\n * // Full-page (e.g. wizard during create+navigate):\r\n * {isPageLoading && <PageBusy label=\"Création en cours\" />}\r\n */\r\n\r\nconst SHARED_OVERLAY_SX = Object.freeze({\r\n display: \"grid\",\r\n placeItems: \"center\",\r\n background: \"color-mix(in srgb, var(--bg) 70%, transparent)\",\r\n pointerEvents: \"auto\",\r\n} satisfies SxProps<Theme>);\r\n\r\nexport interface SectionBusyProps {\r\n /** SR announcement; appears as aria-label on the inner SVG. */\r\n label?: string | undefined;\r\n /**\r\n * If false, the overlay backdrop is transparent (still blocks\r\n * clicks, still announces busy). Use when the section already\r\n * has a subtle bg and you don't want a double scrim.\r\n */\r\n surface?: boolean | undefined;\r\n}\r\n\r\nexport function SectionBusy({ label = \"Chargement en cours\", surface = true }: SectionBusyProps) {\r\n return (\r\n <Box\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n aria-busy=\"true\"\r\n sx={{\r\n ...SHARED_OVERLAY_SX,\r\n position: \"absolute\",\r\n inset: 0,\r\n background: surface\r\n ? SHARED_OVERLAY_SX.background\r\n : \"transparent\",\r\n borderRadius: \"var(--r-lg)\",\r\n zIndex: 1,\r\n }}\r\n >\r\n <Spinner size={20} label={label} />\r\n </Box>\r\n );\r\n}\r\n\r\nexport interface PageBusyProps {\r\n /** SR announcement; appears as aria-label on the inner SVG. */\r\n label?: string | undefined;\r\n}\r\n\r\nexport function PageBusy({ label = \"Chargement en cours\" }: PageBusyProps) {\r\n return (\r\n <Box\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n aria-busy=\"true\"\r\n sx={{\r\n ...SHARED_OVERLAY_SX,\r\n position: \"fixed\",\r\n inset: 0,\r\n zIndex: \"var(--z-modal, 9999)\",\r\n }}\r\n >\r\n <Spinner size={28} label={label} />\r\n </Box>\r\n );\r\n}\r\n\r\nexport default SectionBusy;\r\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,mBAAmB;AAEnC,OAAOC,OAAO,MAAM,WAAW;;AAE/B;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;AAtCA,SAAAC,GAAA,IAAAC,IAAA;AAwCA,MAAMC,iBAAiB,GAAGC,MAAM,CAACC,MAAM,CAAC;EACtCC,OAAO,EAAQ,MAAM;EACrBC,UAAU,EAAK,QAAQ;EACvBC,UAAU,EAAK,gDAAgD;EAC/DC,aAAa,EAAE;AACjB,CAA0B,CAAC;AAa3B,OAAO,SAASC,WAAWA,CAAC;EAAEC,KAAK,GAAG,qBAAqB;EAAEC,OAAO,GAAG;AAAuB,CAAC,EAAE;EAC/F,oBACEV,IAAA,CAACH,GAAG;IACFc,IAAI,EAAC,QAAQ;IACb,aAAU,QAAQ;IAClB,aAAU,MAAM;IAChBC,EAAE,EAAE;MACF,GAAGX,iBAAiB;MACpBY,QAAQ,EAAM,UAAU;MACxBC,KAAK,EAAS,CAAC;MACfR,UAAU,EAAII,OAAO,GACjBT,iBAAiB,CAACK,UAAU,GAC5B,aAAa;MACjBS,YAAY,EAAE,aAAa;MAC3BC,MAAM,EAAQ;IAChB,CAAE;IAAAC,QAAA,eAEFjB,IAAA,CAACF,OAAO;MAACoB,IAAI,EAAE,EAAG;MAACT,KAAK,EAAEA;IAAM,CAAE;EAAC,CAChC,CAAC;AAEV;AAOA,OAAO,SAASU,QAAQA,CAAC;EAAEV,KAAK,GAAG;AAAqC,CAAC,EAAE;EACzE,oBACET,IAAA,CAACH,GAAG;IACFc,IAAI,EAAC,QAAQ;IACb,aAAU,QAAQ;IAClB,aAAU,MAAM;IAChBC,EAAE,EAAE;MACF,GAAGX,iBAAiB;MACpBY,QAAQ,EAAE,OAAO;MACjBC,KAAK,EAAK,CAAC;MACXE,MAAM,EAAI;IACZ,CAAE;IAAAC,QAAA,eAEFjB,IAAA,CAACF,OAAO;MAACoB,IAAI,EAAE,EAAG;MAACT,KAAK,EAAEA;IAAM,CAAE;EAAC,CAChC,CAAC;AAEV;AAEA,eAAeD,WAAW","ignoreList":[]}
|
|
@@ -1,12 +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 = ["variant", "size", "icon", "iconRight", "iconOnly", "loading", "disabled", "children", "sx", "type"];
|
|
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 _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; }
|
|
9
|
-
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; }
|
|
10
1
|
import * as React from "react";
|
|
11
2
|
import MuiButton from "@mui/material/Button";
|
|
12
3
|
import Spinner from "./Spinner";
|
|
@@ -28,7 +19,7 @@ import { layout, density } from "../tokens";
|
|
|
28
19
|
* Sizes: "md" (40px visual) | "sm" (32px visual), tactile min 44px.
|
|
29
20
|
*/
|
|
30
21
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
31
|
-
|
|
22
|
+
const VARIANT_TO_MUI = {
|
|
32
23
|
primary: {
|
|
33
24
|
variant: "contained",
|
|
34
25
|
color: "primary"
|
|
@@ -46,41 +37,37 @@ var VARIANT_TO_MUI = {
|
|
|
46
37
|
color: "error"
|
|
47
38
|
}
|
|
48
39
|
};
|
|
49
|
-
|
|
40
|
+
const VISUAL_HEIGHT_BY_SIZE = {
|
|
50
41
|
md: density.comfortable.btn,
|
|
51
42
|
// 40
|
|
52
43
|
sm: density.compact.btn // 32
|
|
53
44
|
};
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
type = _ref$type === void 0 ? "button" : _ref$type,
|
|
70
|
-
rest = _objectWithoutProperties(_ref, _excluded);
|
|
71
|
-
var muiProps = VARIANT_TO_MUI[variant] || VARIANT_TO_MUI.secondary;
|
|
72
|
-
var muiSize = size === "sm" ? "small" : "medium";
|
|
45
|
+
const Button = /*#__PURE__*/React.forwardRef(function Button({
|
|
46
|
+
variant = "secondary",
|
|
47
|
+
size = "md",
|
|
48
|
+
icon,
|
|
49
|
+
iconRight,
|
|
50
|
+
iconOnly = false,
|
|
51
|
+
loading = false,
|
|
52
|
+
disabled,
|
|
53
|
+
children,
|
|
54
|
+
sx,
|
|
55
|
+
type = "button",
|
|
56
|
+
...rest
|
|
57
|
+
}, ref) {
|
|
58
|
+
const muiProps = VARIANT_TO_MUI[variant] || VARIANT_TO_MUI.secondary;
|
|
59
|
+
const muiSize = size === "sm" ? "small" : "medium";
|
|
73
60
|
if (process.env["NODE_ENV"] !== "production" && iconOnly && !rest["aria-label"]) {
|
|
74
61
|
// eslint-disable-next-line no-console
|
|
75
62
|
console.warn("[@portnet/ui v2] <Button iconOnly> is missing required `aria-label` (charter R-B.5).");
|
|
76
63
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return /*#__PURE__*/_jsx(MuiButton,
|
|
64
|
+
const isLoading = !!loading;
|
|
65
|
+
const startNode = isLoading ? /*#__PURE__*/_jsx(Spinner, {}) : icon;
|
|
66
|
+
const endNode = isLoading ? null : iconRight;
|
|
67
|
+
const visualSize = VISUAL_HEIGHT_BY_SIZE[size] || VISUAL_HEIGHT_BY_SIZE.md;
|
|
68
|
+
const tactile = layout.tactileMin;
|
|
69
|
+
const extension = Math.max(0, (tactile - visualSize) / 2);
|
|
70
|
+
return /*#__PURE__*/_jsx(MuiButton, {
|
|
84
71
|
ref: ref,
|
|
85
72
|
type: type,
|
|
86
73
|
disabled: isLoading || disabled,
|
|
@@ -90,7 +77,7 @@ var Button = /*#__PURE__*/React.forwardRef(function Button(_ref, ref) {
|
|
|
90
77
|
color: muiProps.color,
|
|
91
78
|
startIcon: iconOnly ? undefined : startNode,
|
|
92
79
|
endIcon: iconOnly ? undefined : endNode,
|
|
93
|
-
sx:
|
|
80
|
+
sx: {
|
|
94
81
|
minHeight: visualSize,
|
|
95
82
|
position: "relative",
|
|
96
83
|
"&::before": {
|
|
@@ -101,14 +88,16 @@ var Button = /*#__PURE__*/React.forwardRef(function Button(_ref, ref) {
|
|
|
101
88
|
left: -extension,
|
|
102
89
|
right: -extension,
|
|
103
90
|
pointerEvents: "auto"
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
91
|
+
},
|
|
92
|
+
...(iconOnly && {
|
|
93
|
+
minWidth: visualSize,
|
|
94
|
+
padding: 0
|
|
95
|
+
}),
|
|
96
|
+
...sx
|
|
97
|
+
},
|
|
98
|
+
...rest,
|
|
110
99
|
children: iconOnly ? startNode || children : children
|
|
111
|
-
})
|
|
100
|
+
});
|
|
112
101
|
});
|
|
113
102
|
export default Button;
|
|
114
103
|
//# sourceMappingURL=Button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","names":["React","MuiButton","Spinner","layout","density","jsx","_jsx","VARIANT_TO_MUI","primary","variant","color","secondary","ghost","danger","VISUAL_HEIGHT_BY_SIZE","md","comfortable","btn","sm","compact","Button","forwardRef","
|
|
1
|
+
{"version":3,"file":"Button.js","names":["React","MuiButton","Spinner","layout","density","jsx","_jsx","VARIANT_TO_MUI","primary","variant","color","secondary","ghost","danger","VISUAL_HEIGHT_BY_SIZE","md","comfortable","btn","sm","compact","Button","forwardRef","size","icon","iconRight","iconOnly","loading","disabled","children","sx","type","rest","ref","muiProps","muiSize","process","env","console","warn","isLoading","startNode","endNode","visualSize","tactile","tactileMin","extension","Math","max","undefined","startIcon","endIcon","minHeight","position","content","top","bottom","left","right","pointerEvents","minWidth","padding"],"sources":["../../../../src/lib/v2/components/Button.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport MuiButton from \"@mui/material/Button\";\r\nimport type { ButtonProps as MuiButtonProps } from \"@mui/material/Button\";\r\nimport Spinner from \"./Spinner\";\r\nimport { layout, density } from \"../tokens\";\r\n\r\n/**\r\n * Button - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Button\". DS-aligned MUI wrapper.\r\n *\r\n * R-B.1 - Only ONE primary per screen (host-enforced).\r\n * R-B.2 - Charter target visual height 40 / 32 px.\r\n * R-B.3 - Label = verb + object (\"Créer un titre\"), never \"OK\" alone.\r\n * R-B.4 - `loading` disables interaction and shows inline spinner.\r\n * R-B.5 - Icon-only requires `aria-label`.\r\n * R-B.6 - Destructive action → variant=\"danger\", never primary.\r\n *\r\n * Variants: \"primary\" | \"secondary\" | \"ghost\" | \"danger\"\r\n * Sizes: \"md\" (40px visual) | \"sm\" (32px visual), tactile min 44px.\r\n */\r\ntype ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\r\ntype ButtonSize = \"sm\" | \"md\";\r\n\r\nconst VARIANT_TO_MUI: Record<\r\n ButtonVariant,\r\n { variant: MuiButtonProps[\"variant\"]; color: MuiButtonProps[\"color\"] }\r\n> = {\r\n primary: { variant: \"contained\", color: \"primary\" },\r\n secondary: { variant: \"outlined\", color: \"primary\" },\r\n ghost: { variant: \"text\", color: \"primary\" },\r\n danger: { variant: \"contained\", color: \"error\" },\r\n};\r\n\r\nconst VISUAL_HEIGHT_BY_SIZE: Record<ButtonSize, number> = {\r\n md: density.comfortable.btn, // 40\r\n sm: density.compact.btn, // 32\r\n};\r\n\r\nexport interface ButtonProps extends Omit<MuiButtonProps, \"variant\" | \"size\"> {\r\n /** Visual variant. @default \"secondary\" */\r\n variant?: ButtonVariant | undefined;\r\n /** Charter size — \"md\" (40px visual) or \"sm\" (32px visual). @default \"md\" */\r\n size?: ButtonSize | undefined;\r\n /** Leading icon (start adornment). */\r\n icon?: React.ReactNode | undefined;\r\n /** Trailing icon (end adornment). */\r\n iconRight?: React.ReactNode | undefined;\r\n /** Icon-only button — requires `aria-label` (charter R-B.5). @default false */\r\n iconOnly?: boolean | undefined;\r\n /** Show an inline spinner and disable interaction. @default false */\r\n loading?: boolean | undefined;\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\r\n {\r\n variant = \"secondary\",\r\n size = \"md\",\r\n icon,\r\n iconRight,\r\n iconOnly = false,\r\n loading = false,\r\n disabled,\r\n children,\r\n sx,\r\n type = \"button\",\r\n ...rest\r\n },\r\n ref,\r\n) {\r\n const muiProps = VARIANT_TO_MUI[variant] || VARIANT_TO_MUI.secondary;\r\n const muiSize = size === \"sm\" ? \"small\" : \"medium\";\r\n\r\n if (process.env[\"NODE_ENV\"] !== \"production\" && iconOnly && !rest[\"aria-label\"]) {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n \"[@portnet/ui v2] <Button iconOnly> is missing required `aria-label` (charter R-B.5).\",\r\n );\r\n }\r\n\r\n const isLoading = !!loading;\r\n const startNode = isLoading ? <Spinner /> : icon;\r\n const endNode = isLoading ? null : iconRight;\r\n\r\n const visualSize = VISUAL_HEIGHT_BY_SIZE[size] || VISUAL_HEIGHT_BY_SIZE.md;\r\n const tactile = layout.tactileMin;\r\n const extension = Math.max(0, (tactile - visualSize) / 2);\r\n\r\n return (\r\n <MuiButton\r\n ref={ref}\r\n type={type}\r\n disabled={isLoading || disabled}\r\n aria-busy={isLoading || undefined}\r\n size={muiSize}\r\n variant={muiProps.variant}\r\n color={muiProps.color}\r\n startIcon={iconOnly ? undefined : startNode}\r\n endIcon={iconOnly ? undefined : endNode}\r\n sx={{\r\n minHeight: visualSize,\r\n position: \"relative\",\r\n \"&::before\": {\r\n content: '\"\"',\r\n position: \"absolute\",\r\n top: -extension,\r\n bottom: -extension,\r\n left: -extension,\r\n right: -extension,\r\n pointerEvents: \"auto\",\r\n },\r\n ...(iconOnly && {\r\n minWidth: visualSize,\r\n padding: 0,\r\n }),\r\n ...sx,\r\n }}\r\n {...rest}\r\n >\r\n {iconOnly ? (startNode || children) : children}\r\n </MuiButton>\r\n );\r\n});\r\n\r\nexport default Button;\r\n"],"mappings":"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","ignoreList":[]}
|