@portnet/ui 6.0.1 → 6.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +737 -0
- package/dist/esm/index.js +90 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
- package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldError.test.js +71 -39
- package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
- package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldWidth.test.js +146 -0
- package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FileCard.test.js +18 -18
- package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js +173 -0
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +236 -0
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +299 -0
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
- package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -43
- package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/esm/v2/__tests__/apiError.test.js +50 -69
- package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
- package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
- package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
- package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/esm/v2/__tests__/labels-merge.test.js +17 -22
- package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
- package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
- package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
- package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/esm/v2/components/Accordion.js +48 -70
- package/dist/esm/v2/components/Accordion.js.map +1 -1
- package/dist/esm/v2/components/ActionStrip.js +31 -43
- package/dist/esm/v2/components/ActionStrip.js.map +1 -1
- package/dist/esm/v2/components/Banner.js +25 -22
- package/dist/esm/v2/components/Banner.js.map +1 -1
- package/dist/esm/v2/components/Busy.js +14 -19
- package/dist/esm/v2/components/Busy.js.map +1 -1
- package/dist/esm/v2/components/Button.js +34 -45
- package/dist/esm/v2/components/Button.js.map +1 -1
- package/dist/esm/v2/components/CategoryTag.js +44 -27
- package/dist/esm/v2/components/CategoryTag.js.map +1 -1
- package/dist/esm/v2/components/Checkbox.js +32 -38
- package/dist/esm/v2/components/Checkbox.js.map +1 -1
- package/dist/esm/v2/components/Chip.js +23 -36
- package/dist/esm/v2/components/Chip.js.map +1 -1
- package/dist/esm/v2/components/Combobox.js +112 -136
- package/dist/esm/v2/components/Combobox.js.map +1 -1
- package/dist/esm/v2/components/CommandPalette.js +113 -198
- package/dist/esm/v2/components/CommandPalette.js.map +1 -1
- package/dist/esm/v2/components/ConfirmDialog.js +36 -45
- package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/esm/v2/components/DatePicker.js +78 -81
- package/dist/esm/v2/components/DatePicker.js.map +1 -1
- package/dist/esm/v2/components/DateRangePicker.js +63 -74
- package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
- package/dist/esm/v2/components/DateTimePicker.js +118 -90
- package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
- package/dist/esm/v2/components/Drawer.js +71 -65
- package/dist/esm/v2/components/Drawer.js.map +1 -1
- package/dist/esm/v2/components/Dropzone.js +130 -177
- package/dist/esm/v2/components/Dropzone.js.map +1 -1
- package/dist/esm/v2/components/EmptyState.js +9 -9
- package/dist/esm/v2/components/EmptyState.js.map +1 -1
- package/dist/esm/v2/components/FavoriteToggle.js +24 -33
- package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/esm/v2/components/Field.js +210 -52
- package/dist/esm/v2/components/Field.js.map +1 -1
- package/dist/esm/v2/components/FieldError.js +9 -13
- package/dist/esm/v2/components/FieldError.js.map +1 -1
- package/dist/esm/v2/components/FieldHelp.js +28 -49
- package/dist/esm/v2/components/FieldHelp.js.map +1 -1
- package/dist/esm/v2/components/FileCard.js +14 -19
- package/dist/esm/v2/components/FileCard.js.map +1 -1
- package/dist/esm/v2/components/FilterTab.js +22 -31
- package/dist/esm/v2/components/FilterTab.js.map +1 -1
- package/dist/esm/v2/components/ForbiddenPage.js +28 -8
- package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/esm/v2/components/FormGrid.js +48 -54
- package/dist/esm/v2/components/FormGrid.js.map +1 -1
- package/dist/esm/v2/components/FormikDisplay.js +98 -24
- package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
- package/dist/esm/v2/components/Input.js +75 -34
- package/dist/esm/v2/components/Input.js.map +1 -1
- package/dist/esm/v2/components/KPICard.js +42 -51
- package/dist/esm/v2/components/KPICard.js.map +1 -1
- package/dist/esm/v2/components/KPIStrip.js +9 -15
- package/dist/esm/v2/components/KPIStrip.js.map +1 -1
- package/dist/esm/v2/components/KV.js +16 -23
- package/dist/esm/v2/components/KV.js.map +1 -1
- package/dist/esm/v2/components/KVGrid.js +15 -23
- package/dist/esm/v2/components/KVGrid.js.map +1 -1
- package/dist/esm/v2/components/Layout.js +81 -117
- package/dist/esm/v2/components/Layout.js.map +1 -1
- package/dist/esm/v2/components/MobileRowCard.js +64 -75
- package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
- package/dist/esm/v2/components/Modal.js +44 -53
- package/dist/esm/v2/components/Modal.js.map +1 -1
- package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
- package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/esm/v2/components/NotFoundPage.js +28 -9
- package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
- package/dist/esm/v2/components/NumberInput.js +77 -107
- package/dist/esm/v2/components/NumberInput.js.map +1 -1
- package/dist/esm/v2/components/OverflowMenu.js +24 -42
- package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
- package/dist/esm/v2/components/PdfViewer.js +24 -33
- package/dist/esm/v2/components/PdfViewer.js.map +1 -1
- package/dist/esm/v2/components/ProgressBar.js +28 -36
- package/dist/esm/v2/components/ProgressBar.js.map +1 -1
- package/dist/esm/v2/components/Radio.js +49 -57
- package/dist/esm/v2/components/Radio.js.map +1 -1
- package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
- package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/esm/v2/components/SectionHeader.js +24 -31
- package/dist/esm/v2/components/SectionHeader.js.map +1 -1
- package/dist/esm/v2/components/Segmented.js +59 -84
- package/dist/esm/v2/components/Segmented.js.map +1 -1
- package/dist/esm/v2/components/Select.js +100 -138
- package/dist/esm/v2/components/Select.js.map +1 -1
- package/dist/esm/v2/components/ServerErrorPage.js +27 -10
- package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/esm/v2/components/Skeleton.js +81 -96
- package/dist/esm/v2/components/Skeleton.js.map +1 -1
- package/dist/esm/v2/components/SkipLink.js +6 -7
- package/dist/esm/v2/components/SkipLink.js.map +1 -1
- package/dist/esm/v2/components/Spinner.js +13 -22
- package/dist/esm/v2/components/Spinner.js.map +1 -1
- package/dist/esm/v2/components/Status.js +14 -25
- package/dist/esm/v2/components/Status.js.map +1 -1
- package/dist/esm/v2/components/Stepper.js +68 -71
- package/dist/esm/v2/components/Stepper.js.map +1 -1
- package/dist/esm/v2/components/Surface.js +25 -44
- package/dist/esm/v2/components/Surface.js.map +1 -1
- package/dist/esm/v2/components/Switch.js +21 -29
- package/dist/esm/v2/components/Switch.js.map +1 -1
- package/dist/esm/v2/components/TabPanel.js +84 -0
- package/dist/esm/v2/components/TabPanel.js.map +1 -0
- package/dist/esm/v2/components/Tabs.js +43 -19
- package/dist/esm/v2/components/Tabs.js.map +1 -1
- package/dist/esm/v2/components/TelInput.js +75 -108
- package/dist/esm/v2/components/TelInput.js.map +1 -1
- package/dist/esm/v2/components/Textarea.js +21 -30
- package/dist/esm/v2/components/Textarea.js.map +1 -1
- package/dist/esm/v2/components/TimePicker.js +59 -69
- package/dist/esm/v2/components/TimePicker.js.map +1 -1
- package/dist/esm/v2/components/Toast.js +109 -163
- package/dist/esm/v2/components/Toast.js.map +1 -1
- package/dist/esm/v2/components/Tooltip.js +18 -31
- package/dist/esm/v2/components/Tooltip.js.map +1 -1
- package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
- package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/esm/v2/components/_pickerShared.js +2 -2
- package/dist/esm/v2/components/_pickerShared.js.map +1 -1
- package/dist/esm/v2/components/index.js +64 -0
- package/dist/esm/v2/components/index.js.map +1 -1
- package/dist/esm/v2/hooks/index.js +62 -0
- package/dist/esm/v2/hooks/index.js.map +1 -1
- package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
- package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
- package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/esm/v2/hooks/useDensity.js +13 -17
- package/dist/esm/v2/hooks/useDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
- package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
- package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
- package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
- package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
- package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useSortedRows.js +3 -5
- package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/esm/v2/hooks/useTabLoading.js +6 -21
- package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/esm/v2/index.js +14 -4
- package/dist/esm/v2/index.js.map +1 -1
- package/dist/esm/v2/modalContext.js +2 -2
- package/dist/esm/v2/modalContext.js.map +1 -1
- package/dist/esm/v2/models/favorite.js.map +1 -1
- package/dist/esm/v2/models/personalization.js.map +1 -1
- package/dist/esm/v2/models/referentiel.js.map +1 -1
- package/dist/esm/v2/models/savedFilter.js.map +1 -1
- package/dist/esm/v2/patterns/ActionBar.js +115 -159
- package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/AppMain.js +108 -0
- package/dist/esm/v2/patterns/AppMain.js.map +1 -0
- package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
- package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/ChartFigure.js +151 -0
- package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
- package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/esm/v2/patterns/DataGrid.js +221 -255
- package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
- package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
- package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/esm/v2/patterns/DetailSplit.js +108 -0
- package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/esm/v2/patterns/FavoriteColumn.js +26 -75
- package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
- package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
- package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
- package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/esm/v2/patterns/FormPageShell.js +43 -41
- package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/FormSection.js +30 -38
- package/dist/esm/v2/patterns/FormSection.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCheckbox.js +130 -0
- package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -0
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCombobox.js +51 -66
- package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDatePicker.js +51 -99
- package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDateTimePicker.js +136 -0
- package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -0
- package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
- package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
- package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/esm/v2/patterns/FormikFile.js +94 -78
- package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
- package/dist/esm/v2/patterns/FormikInput.js +40 -50
- package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
- package/dist/esm/v2/patterns/FormikRadioGroup.js +129 -0
- package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -0
- package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
- package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/FormikSelect.js +64 -84
- package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/esm/v2/patterns/FormikTextarea.js +30 -43
- package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +64 -65
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
- package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/esm/v2/patterns/PageContent.js +10 -14
- package/dist/esm/v2/patterns/PageContent.js.map +1 -1
- package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
- package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/esm/v2/patterns/ReferentielField.js +327 -312
- package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/RowFavoriteToggle.js +127 -0
- package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -0
- package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
- package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
- package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
- package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/SortableHeader.js +22 -45
- package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/esm/v2/patterns/Tour.js +94 -120
- package/dist/esm/v2/patterns/Tour.js.map +1 -1
- package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
- package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/esm/v2/patterns/_pickerSerialisation.js +72 -0
- package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -0
- package/dist/esm/v2/patterns/_sort.js +17 -33
- package/dist/esm/v2/patterns/_sort.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
- package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
- package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/esm/v2/patterns/filterCriteria.js +102 -0
- package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/esm/v2/patterns/index.js +235 -0
- package/dist/esm/v2/patterns/index.js.map +1 -1
- package/dist/esm/v2/patterns/rowActions.js +223 -0
- package/dist/esm/v2/patterns/rowActions.js.map +1 -0
- package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
- package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
- package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
- package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js +203 -0
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/index.js +5 -0
- package/dist/esm/v2/personalization/capabilities/index.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
- package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
- package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/esm/v2/personalization/index.js +35 -0
- package/dist/esm/v2/personalization/index.js.map +1 -1
- package/dist/esm/v2/personalization/personalizationContext.js +9 -9
- package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/esm/v2/personalization/schema.js +8 -9
- package/dist/esm/v2/personalization/schema.js.map +1 -1
- package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
- package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/esm/v2/referentiel/types.js +2 -0
- package/dist/esm/v2/referentiel/types.js.map +1 -0
- package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
- package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
- package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
- package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/esm/v2/theme/_brand.js +8 -24
- package/dist/esm/v2/theme/_brand.js.map +1 -1
- package/dist/esm/v2/theme/_brandSecondary.js +8 -24
- package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
- package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/esm/v2/theme/cssVariables.js +62 -69
- package/dist/esm/v2/theme/cssVariables.js.map +1 -1
- package/dist/esm/v2/theme/index.js +5 -5
- package/dist/esm/v2/theme/index.js.map +1 -1
- package/dist/esm/v2/tokens/breakpoints.js +14 -14
- package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
- package/dist/esm/v2/tokens/chart.js +261 -0
- package/dist/esm/v2/tokens/chart.js.map +1 -0
- package/dist/esm/v2/tokens/colors.js +22 -22
- package/dist/esm/v2/tokens/colors.js.map +1 -1
- package/dist/esm/v2/tokens/density.js +62 -7
- package/dist/esm/v2/tokens/density.js.map +1 -1
- package/dist/esm/v2/tokens/index.js +49 -34
- package/dist/esm/v2/tokens/index.js.map +1 -1
- package/dist/esm/v2/tokens/motion.js +12 -20
- package/dist/esm/v2/tokens/motion.js.map +1 -1
- package/dist/esm/v2/tokens/radius.js +1 -1
- package/dist/esm/v2/tokens/radius.js.map +1 -1
- package/dist/esm/v2/tokens/shadows.js +6 -6
- package/dist/esm/v2/tokens/shadows.js.map +1 -1
- package/dist/esm/v2/tokens/spacing.js +2 -2
- package/dist/esm/v2/tokens/spacing.js.map +1 -1
- package/dist/esm/v2/tokens/state.js +1 -1
- package/dist/esm/v2/tokens/state.js.map +1 -1
- package/dist/esm/v2/tokens/statusPalette.js +17 -21
- package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
- package/dist/esm/v2/tokens/tokens.json +6 -1
- package/dist/esm/v2/tokens/typography.js +13 -13
- package/dist/esm/v2/tokens/typography.js.map +1 -1
- package/dist/esm/v2/tokens/zIndex.js +1 -1
- package/dist/esm/v2/tokens/zIndex.js.map +1 -1
- package/dist/esm/v2/types/datagrid.js.map +1 -1
- package/dist/esm/v2/utils/apiError.js +16 -37
- package/dist/esm/v2/utils/apiError.js.map +1 -1
- package/dist/esm/v2/utils/contrast.js +31 -32
- package/dist/esm/v2/utils/contrast.js.map +1 -1
- package/dist/esm/v2/utils/cx.js +5 -25
- package/dist/esm/v2/utils/cx.js.map +1 -1
- package/dist/esm/v2/utils/fileDownload.js +23 -26
- package/dist/esm/v2/utils/fileDownload.js.map +1 -1
- package/dist/esm/v2/utils/fileValidation.js +209 -0
- package/dist/esm/v2/utils/fileValidation.js.map +1 -0
- package/dist/esm/v2/utils/fmtDate.js +111 -0
- package/dist/esm/v2/utils/fmtDate.js.map +1 -0
- package/dist/esm/v2/utils/fmtMoney.js +8 -10
- package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
- package/dist/esm/v2/utils/formikErrors.js +78 -0
- package/dist/esm/v2/utils/formikErrors.js.map +1 -0
- package/dist/esm/v2/utils/index.js +35 -2
- package/dist/esm/v2/utils/index.js.map +1 -1
- package/dist/esm/v2/utils/mergeLabels.js +7 -12
- package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
- package/dist/esm/v2/utils/networkStatus.js +12 -12
- package/dist/esm/v2/utils/networkStatus.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +122 -47
- package/dist/index.js.map +1 -1
- package/dist/v2/__tests__/AppMain.test.js +133 -0
- package/dist/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/v2/__tests__/ChartFigure.test.js +183 -0
- package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/v2/__tests__/FieldError.test.js +98 -69
- package/dist/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/v2/__tests__/FieldNaming.test.js +161 -0
- package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/v2/__tests__/FieldWidth.test.js +148 -0
- package/dist/v2/__tests__/FieldWidth.test.js.map +1 -0
- package/dist/v2/__tests__/FileCard.test.js +45 -48
- package/dist/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/v2/__tests__/FormikCheckbox.test.js +175 -0
- package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -0
- package/dist/v2/__tests__/FormikDateTimePicker.test.js +237 -0
- package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
- package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
- package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/v2/__tests__/FormikRadioGroup.test.js +300 -0
- package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
- package/dist/v2/__tests__/MobileRowCard.test.js +100 -102
- package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
- package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
- package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/v2/__tests__/apiError.test.js +50 -69
- package/dist/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/v2/__tests__/banned-patterns.test.js +42 -123
- package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/v2/__tests__/chart-palette.test.js +205 -0
- package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/v2/__tests__/fileValidation.test.js +136 -0
- package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/v2/__tests__/filterCriteria.test.js +324 -0
- package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/fmtDate.test.js +69 -0
- package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/v2/__tests__/labels-merge.test.js +38 -46
- package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/v2/__tests__/locale-fallback.test.js +47 -52
- package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
- package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/rowActions.test.js +186 -0
- package/dist/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
- package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/v2/components/Accordion.js +60 -82
- package/dist/v2/components/Accordion.js.map +1 -1
- package/dist/v2/components/ActionStrip.js +40 -52
- package/dist/v2/components/ActionStrip.js.map +1 -1
- package/dist/v2/components/Banner.js +42 -41
- package/dist/v2/components/Banner.js.map +1 -1
- package/dist/v2/components/Busy.js +22 -27
- package/dist/v2/components/Busy.js.map +1 -1
- package/dist/v2/components/Button.js +39 -50
- package/dist/v2/components/Button.js.map +1 -1
- package/dist/v2/components/CategoryTag.d.ts.map +1 -1
- package/dist/v2/components/CategoryTag.js +49 -32
- package/dist/v2/components/CategoryTag.js.map +1 -1
- package/dist/v2/components/Checkbox.js +39 -45
- package/dist/v2/components/Checkbox.js.map +1 -1
- package/dist/v2/components/Chip.js +29 -42
- package/dist/v2/components/Chip.js.map +1 -1
- package/dist/v2/components/Combobox.js +122 -144
- package/dist/v2/components/Combobox.js.map +1 -1
- package/dist/v2/components/CommandPalette.js +138 -225
- package/dist/v2/components/CommandPalette.js.map +1 -1
- package/dist/v2/components/ConfirmDialog.js +46 -56
- package/dist/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/v2/components/DatePicker.js +81 -86
- package/dist/v2/components/DatePicker.js.map +1 -1
- package/dist/v2/components/DateRangePicker.js +77 -87
- package/dist/v2/components/DateRangePicker.js.map +1 -1
- package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
- package/dist/v2/components/DateTimePicker.js +121 -95
- package/dist/v2/components/DateTimePicker.js.map +1 -1
- package/dist/v2/components/Drawer.d.ts.map +1 -1
- package/dist/v2/components/Drawer.js +93 -88
- package/dist/v2/components/Drawer.js.map +1 -1
- package/dist/v2/components/Dropzone.js +150 -196
- package/dist/v2/components/Dropzone.js.map +1 -1
- package/dist/v2/components/EmptyState.js +18 -20
- package/dist/v2/components/EmptyState.js.map +1 -1
- package/dist/v2/components/FavoriteToggle.js +28 -39
- package/dist/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/v2/components/Field.d.ts +121 -5
- package/dist/v2/components/Field.d.ts.map +1 -1
- package/dist/v2/components/Field.js +221 -62
- package/dist/v2/components/Field.js.map +1 -1
- package/dist/v2/components/FieldError.js +18 -21
- package/dist/v2/components/FieldError.js.map +1 -1
- package/dist/v2/components/FieldHelp.js +40 -60
- package/dist/v2/components/FieldHelp.js.map +1 -1
- package/dist/v2/components/FileCard.js +27 -31
- package/dist/v2/components/FileCard.js.map +1 -1
- package/dist/v2/components/FilterTab.js +30 -38
- package/dist/v2/components/FilterTab.js.map +1 -1
- package/dist/v2/components/ForbiddenPage.d.ts +25 -1
- package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
- package/dist/v2/components/ForbiddenPage.js +37 -17
- package/dist/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/v2/components/FormGrid.js +53 -59
- package/dist/v2/components/FormGrid.js.map +1 -1
- package/dist/v2/components/FormikDisplay.d.ts +50 -1
- package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
- package/dist/v2/components/FormikDisplay.js +108 -33
- package/dist/v2/components/FormikDisplay.js.map +1 -1
- package/dist/v2/components/Input.d.ts +40 -0
- package/dist/v2/components/Input.d.ts.map +1 -1
- package/dist/v2/components/Input.js +81 -41
- package/dist/v2/components/Input.js.map +1 -1
- package/dist/v2/components/KPICard.js +57 -67
- package/dist/v2/components/KPICard.js.map +1 -1
- package/dist/v2/components/KPIStrip.js +16 -22
- package/dist/v2/components/KPIStrip.js.map +1 -1
- package/dist/v2/components/KV.js +25 -31
- package/dist/v2/components/KV.js.map +1 -1
- package/dist/v2/components/KVGrid.js +19 -26
- package/dist/v2/components/KVGrid.js.map +1 -1
- package/dist/v2/components/Layout.js +91 -120
- package/dist/v2/components/Layout.js.map +1 -1
- package/dist/v2/components/MobileRowCard.js +79 -91
- package/dist/v2/components/MobileRowCard.js.map +1 -1
- package/dist/v2/components/Modal.js +61 -69
- package/dist/v2/components/Modal.js.map +1 -1
- package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
- package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
- package/dist/v2/components/NetworkErrorPage.js +38 -21
- package/dist/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/v2/components/NotFoundPage.d.ts +17 -1
- package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
- package/dist/v2/components/NotFoundPage.js +37 -18
- package/dist/v2/components/NotFoundPage.js.map +1 -1
- package/dist/v2/components/NumberInput.js +88 -118
- package/dist/v2/components/NumberInput.js.map +1 -1
- package/dist/v2/components/OverflowMenu.js +38 -56
- package/dist/v2/components/OverflowMenu.js.map +1 -1
- package/dist/v2/components/PdfViewer.js +34 -45
- package/dist/v2/components/PdfViewer.js.map +1 -1
- package/dist/v2/components/ProgressBar.js +42 -49
- package/dist/v2/components/ProgressBar.js.map +1 -1
- package/dist/v2/components/Radio.js +59 -67
- package/dist/v2/components/Radio.js.map +1 -1
- package/dist/v2/components/SectionErrorBoundary.js +90 -135
- package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/v2/components/SectionHeader.js +34 -41
- package/dist/v2/components/SectionHeader.js.map +1 -1
- package/dist/v2/components/Segmented.js +69 -93
- package/dist/v2/components/Segmented.js.map +1 -1
- package/dist/v2/components/Select.d.ts +26 -2
- package/dist/v2/components/Select.d.ts.map +1 -1
- package/dist/v2/components/Select.js +120 -155
- package/dist/v2/components/Select.js.map +1 -1
- package/dist/v2/components/ServerErrorPage.d.ts +27 -1
- package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
- package/dist/v2/components/ServerErrorPage.js +37 -20
- package/dist/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/v2/components/Skeleton.js +86 -100
- package/dist/v2/components/Skeleton.js.map +1 -1
- package/dist/v2/components/SkipLink.js +9 -12
- package/dist/v2/components/SkipLink.js.map +1 -1
- package/dist/v2/components/Spinner.js +16 -25
- package/dist/v2/components/Spinner.js.map +1 -1
- package/dist/v2/components/Status.js +18 -29
- package/dist/v2/components/Status.js.map +1 -1
- package/dist/v2/components/Stepper.js +80 -82
- package/dist/v2/components/Stepper.js.map +1 -1
- package/dist/v2/components/Surface.js +34 -49
- package/dist/v2/components/Surface.js.map +1 -1
- package/dist/v2/components/Switch.js +29 -37
- package/dist/v2/components/Switch.js.map +1 -1
- package/dist/v2/components/TabPanel.d.ts +17 -0
- package/dist/v2/components/TabPanel.d.ts.map +1 -0
- package/dist/v2/components/TabPanel.js +90 -0
- package/dist/v2/components/TabPanel.js.map +1 -0
- package/dist/v2/components/Tabs.d.ts +25 -0
- package/dist/v2/components/Tabs.d.ts.map +1 -1
- package/dist/v2/components/Tabs.js +53 -29
- package/dist/v2/components/Tabs.js.map +1 -1
- package/dist/v2/components/TelInput.js +80 -115
- package/dist/v2/components/TelInput.js.map +1 -1
- package/dist/v2/components/Textarea.js +26 -35
- package/dist/v2/components/Textarea.js.map +1 -1
- package/dist/v2/components/TimePicker.js +62 -74
- package/dist/v2/components/TimePicker.js.map +1 -1
- package/dist/v2/components/Toast.js +119 -174
- package/dist/v2/components/Toast.js.map +1 -1
- package/dist/v2/components/Tooltip.js +23 -38
- package/dist/v2/components/Tooltip.js.map +1 -1
- package/dist/v2/components/_ErrorPageBody.js +15 -16
- package/dist/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/v2/components/_pickerShared.js +5 -5
- package/dist/v2/components/_pickerShared.js.map +1 -1
- package/dist/v2/components/index.d.ts +67 -1
- package/dist/v2/components/index.d.ts.map +1 -1
- package/dist/v2/components/index.js +153 -136
- package/dist/v2/components/index.js.map +1 -1
- package/dist/v2/hooks/index.d.ts +65 -0
- package/dist/v2/hooks/index.d.ts.map +1 -1
- package/dist/v2/hooks/index.js +63 -24
- package/dist/v2/hooks/index.js.map +1 -1
- package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
- package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
- package/dist/v2/hooks/useAppliedFilters.js +117 -0
- package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.js +87 -0
- package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/v2/hooks/useDelayedFlag.js +6 -20
- package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/v2/hooks/useDensity.d.ts.map +1 -1
- package/dist/v2/hooks/useDensity.js +14 -18
- package/dist/v2/hooks/useDensity.js.map +1 -1
- package/dist/v2/hooks/useFocusFirstError.js +26 -34
- package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/v2/hooks/useFocusTrap.js +20 -24
- package/dist/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
- package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.js +39 -54
- package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
- package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/v2/hooks/useResolvedDensity.js +5 -13
- package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/v2/hooks/useSortedRows.js +4 -6
- package/dist/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/v2/hooks/useTabLoading.js +7 -22
- package/dist/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/v2/index.d.ts.map +1 -1
- package/dist/v2/index.js +143 -145
- package/dist/v2/index.js.map +1 -1
- package/dist/v2/modalContext.js +2 -2
- package/dist/v2/modalContext.js.map +1 -1
- package/dist/v2/models/favorite.d.ts +8 -9
- package/dist/v2/models/favorite.d.ts.map +1 -1
- package/dist/v2/models/favorite.js.map +1 -1
- package/dist/v2/models/index.js +4 -4
- package/dist/v2/models/index.js.map +1 -1
- package/dist/v2/models/personalization.d.ts +44 -48
- package/dist/v2/models/personalization.d.ts.map +1 -1
- package/dist/v2/models/personalization.js.map +1 -1
- package/dist/v2/models/referentiel.d.ts +32 -50
- package/dist/v2/models/referentiel.d.ts.map +1 -1
- package/dist/v2/models/referentiel.js.map +1 -1
- package/dist/v2/models/savedFilter.d.ts +8 -17
- package/dist/v2/models/savedFilter.d.ts.map +1 -1
- package/dist/v2/models/savedFilter.js.map +1 -1
- package/dist/v2/patterns/ActionBar.js +152 -187
- package/dist/v2/patterns/ActionBar.js.map +1 -1
- package/dist/v2/patterns/AppMain.d.ts +109 -0
- package/dist/v2/patterns/AppMain.d.ts.map +1 -0
- package/dist/v2/patterns/AppMain.js +115 -0
- package/dist/v2/patterns/AppMain.js.map +1 -0
- package/dist/v2/patterns/BulkActionBar.js +40 -42
- package/dist/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/v2/patterns/ChartFigure.d.ts +124 -0
- package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
- package/dist/v2/patterns/ChartFigure.js +159 -0
- package/dist/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
- package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/v2/patterns/ColumnsToggle.js +60 -94
- package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
- package/dist/v2/patterns/DataGrid.js +262 -297
- package/dist/v2/patterns/DataGrid.js.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
- package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/v2/patterns/DataGridToolbar.js +103 -106
- package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/v2/patterns/DataGridVirtualized.js +179 -217
- package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/v2/patterns/DetailSplit.d.ts +87 -0
- package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
- package/dist/v2/patterns/DetailSplit.js +116 -0
- package/dist/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/v2/patterns/FavoriteColumn.d.ts +9 -9
- package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
- package/dist/v2/patterns/FavoriteColumn.js +32 -80
- package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/v2/patterns/FavoritesFilter.js +36 -44
- package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
- package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
- package/dist/v2/patterns/FilterTabBar.js +120 -0
- package/dist/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/v2/patterns/FormErrorSummary.js +20 -23
- package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/v2/patterns/FormPageShell.js +53 -50
- package/dist/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/v2/patterns/FormSection.d.ts +8 -3
- package/dist/v2/patterns/FormSection.d.ts.map +1 -1
- package/dist/v2/patterns/FormSection.js +44 -51
- package/dist/v2/patterns/FormSection.js.map +1 -1
- package/dist/v2/patterns/FormikCheckbox.d.ts +77 -0
- package/dist/v2/patterns/FormikCheckbox.d.ts.map +1 -0
- package/dist/v2/patterns/FormikCheckbox.js +138 -0
- package/dist/v2/patterns/FormikCheckbox.js.map +1 -0
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
- package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/v2/patterns/FormikCombobox.d.ts +7 -1
- package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCombobox.js +55 -69
- package/dist/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.d.ts +13 -1
- package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.js +59 -106
- package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/v2/patterns/FormikDateTimePicker.d.ts +111 -0
- package/dist/v2/patterns/FormikDateTimePicker.d.ts.map +1 -0
- package/dist/v2/patterns/FormikDateTimePicker.js +144 -0
- package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -0
- package/dist/v2/patterns/FormikErrorFocus.js +25 -26
- package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
- package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
- package/dist/v2/patterns/FormikErrorSummary.js +97 -0
- package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/v2/patterns/FormikFile.d.ts +14 -1
- package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
- package/dist/v2/patterns/FormikFile.js +99 -83
- package/dist/v2/patterns/FormikFile.js.map +1 -1
- package/dist/v2/patterns/FormikInput.d.ts +11 -1
- package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
- package/dist/v2/patterns/FormikInput.js +45 -55
- package/dist/v2/patterns/FormikInput.js.map +1 -1
- package/dist/v2/patterns/FormikRadioGroup.d.ts +80 -0
- package/dist/v2/patterns/FormikRadioGroup.d.ts.map +1 -0
- package/dist/v2/patterns/FormikRadioGroup.js +137 -0
- package/dist/v2/patterns/FormikRadioGroup.js.map +1 -0
- package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
- package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.js +54 -64
- package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/v2/patterns/FormikSelect.d.ts +9 -1
- package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
- package/dist/v2/patterns/FormikSelect.js +70 -89
- package/dist/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/v2/patterns/FormikTextarea.d.ts +9 -1
- package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
- package/dist/v2/patterns/FormikTextarea.js +35 -48
- package/dist/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +14 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.js +71 -74
- package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
- package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/v2/patterns/PageContent.js +17 -20
- package/dist/v2/patterns/PageContent.js.map +1 -1
- package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
- package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
- package/dist/v2/patterns/PreviewDrawer.js +159 -0
- package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/v2/patterns/ReferentielField.d.ts +86 -2
- package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/ReferentielField.js +347 -327
- package/dist/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/v2/patterns/RowFavoriteToggle.d.ts +98 -0
- package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -0
- package/dist/v2/patterns/RowFavoriteToggle.js +135 -0
- package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -0
- package/dist/v2/patterns/SaveFilterDialog.js +50 -77
- package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
- package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/v2/patterns/SkeletonPageShell.js +122 -143
- package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/v2/patterns/SortableHeader.js +35 -57
- package/dist/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/v2/patterns/Tour.js +121 -142
- package/dist/v2/patterns/Tour.js.map +1 -1
- package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
- package/dist/v2/patterns/_dataGridShared.js +131 -147
- package/dist/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/v2/patterns/_pickerSerialisation.d.ts +44 -0
- package/dist/v2/patterns/_pickerSerialisation.d.ts.map +1 -0
- package/dist/v2/patterns/_pickerSerialisation.js +80 -0
- package/dist/v2/patterns/_pickerSerialisation.js.map +1 -0
- package/dist/v2/patterns/_sort.js +17 -33
- package/dist/v2/patterns/_sort.js.map +1 -1
- package/dist/v2/patterns/_useColumnReorder.js +124 -163
- package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/v2/patterns/_useColumnResize.js +80 -99
- package/dist/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/v2/patterns/filterCriteria.d.ts +78 -0
- package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
- package/dist/v2/patterns/filterCriteria.js +110 -0
- package/dist/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/v2/patterns/index.d.ts +247 -0
- package/dist/v2/patterns/index.d.ts.map +1 -1
- package/dist/v2/patterns/index.js +182 -70
- package/dist/v2/patterns/index.js.map +1 -1
- package/dist/v2/patterns/rowActions.d.ts +150 -0
- package/dist/v2/patterns/rowActions.d.ts.map +1 -0
- package/dist/v2/patterns/rowActions.js +232 -0
- package/dist/v2/patterns/rowActions.js.map +1 -0
- package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
- package/dist/v2/personalization/PersonalizationProvider.js +57 -53
- package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
- package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/index.js +5 -5
- package/dist/v2/personalization/adapters/index.js.map +1 -1
- package/dist/v2/personalization/capabilities/favorites.js +39 -62
- package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
- package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/v2/personalization/capabilities/gridPreferences.d.ts +100 -0
- package/dist/v2/personalization/capabilities/gridPreferences.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/gridPreferences.js +210 -0
- package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -0
- package/dist/v2/personalization/capabilities/index.d.ts +6 -0
- package/dist/v2/personalization/capabilities/index.d.ts.map +1 -1
- package/dist/v2/personalization/capabilities/index.js +23 -10
- package/dist/v2/personalization/capabilities/index.js.map +1 -1
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
- package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.js +81 -182
- package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/v2/personalization/index.d.ts +34 -0
- package/dist/v2/personalization/index.d.ts.map +1 -1
- package/dist/v2/personalization/index.js +41 -21
- package/dist/v2/personalization/index.js.map +1 -1
- package/dist/v2/personalization/personalizationContext.js +10 -12
- package/dist/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/v2/personalization/schema.js +8 -9
- package/dist/v2/personalization/schema.js.map +1 -1
- package/dist/v2/referentiel/ReferentielProvider.js +31 -45
- package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/v2/referentiel/index.js +11 -13
- package/dist/v2/referentiel/index.js.map +1 -1
- package/dist/v2/referentiel/types.d.ts +105 -0
- package/dist/v2/referentiel/types.d.ts.map +1 -0
- package/dist/v2/referentiel/types.js +6 -0
- package/dist/v2/referentiel/types.js.map +1 -0
- package/dist/v2/referentiel/useReferentielClient.js +13 -16
- package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
- package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.js +63 -120
- package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
- package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.js +40 -95
- package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/v2/theme/_brand.js +12 -26
- package/dist/v2/theme/_brand.js.map +1 -1
- package/dist/v2/theme/_brandSecondary.js +12 -26
- package/dist/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/v2/theme/createPortnetTheme.js +41 -49
- package/dist/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/v2/theme/cssVariables.d.ts +3 -3
- package/dist/v2/theme/cssVariables.d.ts.map +1 -1
- package/dist/v2/theme/cssVariables.js +65 -70
- package/dist/v2/theme/cssVariables.js.map +1 -1
- package/dist/v2/theme/index.js +10 -10
- package/dist/v2/theme/index.js.map +1 -1
- package/dist/v2/tokens/breakpoints.js +16 -16
- package/dist/v2/tokens/breakpoints.js.map +1 -1
- package/dist/v2/tokens/chart.d.ts +103 -0
- package/dist/v2/tokens/chart.d.ts.map +1 -0
- package/dist/v2/tokens/chart.js +270 -0
- package/dist/v2/tokens/chart.js.map +1 -0
- package/dist/v2/tokens/colors.js +24 -24
- package/dist/v2/tokens/colors.js.map +1 -1
- package/dist/v2/tokens/density.d.ts +104 -0
- package/dist/v2/tokens/density.d.ts.map +1 -1
- package/dist/v2/tokens/density.js +67 -12
- package/dist/v2/tokens/density.js.map +1 -1
- package/dist/v2/tokens/index.d.ts +50 -1
- package/dist/v2/tokens/index.d.ts.map +1 -1
- package/dist/v2/tokens/index.js +116 -68
- package/dist/v2/tokens/index.js.map +1 -1
- package/dist/v2/tokens/motion.js +16 -22
- package/dist/v2/tokens/motion.js.map +1 -1
- package/dist/v2/tokens/radius.js +3 -3
- package/dist/v2/tokens/radius.js.map +1 -1
- package/dist/v2/tokens/shadows.js +8 -8
- package/dist/v2/tokens/shadows.js.map +1 -1
- package/dist/v2/tokens/spacing.js +4 -4
- package/dist/v2/tokens/spacing.js.map +1 -1
- package/dist/v2/tokens/state.js +3 -3
- package/dist/v2/tokens/state.js.map +1 -1
- package/dist/v2/tokens/statusPalette.js +21 -23
- package/dist/v2/tokens/statusPalette.js.map +1 -1
- package/dist/v2/tokens/tokens.json +6 -1
- package/dist/v2/tokens/typography.js +15 -15
- package/dist/v2/tokens/typography.js.map +1 -1
- package/dist/v2/tokens/zIndex.js +3 -3
- package/dist/v2/tokens/zIndex.js.map +1 -1
- package/dist/v2/types/datagrid.d.ts +9 -1
- package/dist/v2/types/datagrid.d.ts.map +1 -1
- package/dist/v2/types/datagrid.js.map +1 -1
- package/dist/v2/types/index.js +2 -2
- package/dist/v2/types/index.js.map +1 -1
- package/dist/v2/utils/apiError.js +16 -37
- package/dist/v2/utils/apiError.js.map +1 -1
- package/dist/v2/utils/contrast.js +31 -32
- package/dist/v2/utils/contrast.js.map +1 -1
- package/dist/v2/utils/cx.js +7 -27
- package/dist/v2/utils/cx.js.map +1 -1
- package/dist/v2/utils/fileDownload.js +25 -28
- package/dist/v2/utils/fileDownload.js.map +1 -1
- package/dist/v2/utils/fileValidation.d.ts +116 -0
- package/dist/v2/utils/fileValidation.d.ts.map +1 -0
- package/dist/v2/utils/fileValidation.js +220 -0
- package/dist/v2/utils/fileValidation.js.map +1 -0
- package/dist/v2/utils/fmtDate.d.ts +103 -0
- package/dist/v2/utils/fmtDate.d.ts.map +1 -0
- package/dist/v2/utils/fmtDate.js +119 -0
- package/dist/v2/utils/fmtDate.js.map +1 -0
- package/dist/v2/utils/fmtMoney.d.ts +3 -3
- package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
- package/dist/v2/utils/fmtMoney.js +9 -11
- package/dist/v2/utils/fmtMoney.js.map +1 -1
- package/dist/v2/utils/formikErrors.d.ts +67 -0
- package/dist/v2/utils/formikErrors.d.ts.map +1 -0
- package/dist/v2/utils/formikErrors.js +85 -0
- package/dist/v2/utils/formikErrors.js.map +1 -0
- package/dist/v2/utils/index.d.ts +5 -0
- package/dist/v2/utils/index.d.ts.map +1 -1
- package/dist/v2/utils/index.js +67 -18
- package/dist/v2/utils/index.js.map +1 -1
- package/dist/v2/utils/mergeLabels.js +9 -14
- package/dist/v2/utils/mergeLabels.js.map +1 -1
- package/dist/v2/utils/networkStatus.js +14 -14
- package/dist/v2/utils/networkStatus.js.map +1 -1
- package/package.json +26 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.js","names":["React","MuiDrawer","IconButton","CloseIcon","KeyboardArrowUpIcon","KeyboardArrowDownIcon","Box","Typography","layout","zIndex","useFocusTrap","mergeLabels","jsx","_jsx","jsxs","_jsxs","DEFAULT_LABELS","Object","freeze","prev","next","close","DRAWER_ROOT_SX","drawer","HEADER_STICKY_SX","padding","borderBottom","position","top","background","HEADER_ACTIONS_SX","display","alignItems","gap","marginInlineStart","isEditableTarget","target","HTMLElement","tag","tagName","isContentEditable","innerCornerSx","anchor","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","Drawer","_ref","open","onClose","_ref$width","width","title","subtitle","ariaLabel","status","actions","onPrev","onNext","_ref$hasPrev","hasPrev","_ref$hasNext","hasNext","children","_ref$anchor","labels","L","hasItemNavigation","undefined","titleId","useId","paperRef","useRef","useEffect","handler","e","key","preventDefault","window","addEventListener","removeEventListener","slotProps","useMemo","paper","ref","sx","_objectSpread","maxWidth","backgroundColor","boxShadow","role","disableAutoFocus","disableEnforceFocus","disableRestoreFocus","justifyContent","marginBottom","size","onClick","disabled","color","fontSize","id","component","fontWeight","lineHeight","marginTop","overflowY","flex"],"sources":["../../../../src/lib/v2/components/Drawer.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport MuiDrawer from \"@mui/material/Drawer\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport KeyboardArrowUpIcon from \"@mui/icons-material/KeyboardArrowUp\";\r\nimport KeyboardArrowDownIcon from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport { layout, zIndex } from \"../tokens\";\r\nimport useFocusTrap from \"../hooks/useFocusTrap\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * Drawer - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Drawer\". Detail panel without leaving the list.\r\n *\r\n * R-DG.9 - Action de ligne = drawer/popup (pas full-page sauf édition).\r\n * R-M.1 - Esc ferme.\r\n * R-F.2 - Focus trap, restoration au déclencheur. Backed by the v2\r\n * useFocusTrap hook (Batch 3) - honours [autofocus] and\r\n * [data-autofocus] markers, coordinates with nested traps\r\n * via a module-level trapStack, and filters\r\n * disabled/hidden/inert subtrees.\r\n * R-K.2 - J/K/Arrow nav must NOT fire when an editable element has focus.\r\n * R-Ar.5 - aria-labelledby points at the rendered <h2> title so the\r\n * drawer is properly named to AT regardless of whether the\r\n * title is a string or a JSX node (audit Batch 5 / B5-1). When\r\n * no title is provided, pass `ariaLabel` to name the drawer.\r\n * J / K ou ↑ / ↓ → navigation entre items voisins.\r\n *\r\n * ── ITEM NAVIGATION IS OPT-IN (D-A10.2) ──────────────────────────────\r\n *\r\n * The prev/next cluster and its \"J / K\" hint render ONLY when `onPrev` or\r\n * `onNext` is supplied. This component serves two distinct jobs: item\r\n * preview, which navigates, and the charter's collapsible filter panel,\r\n * which does not. Rendering the cluster unconditionally gave every filter\r\n * drawer two permanently disabled buttons and a keyboard hint for a\r\n * shortcut with no effect — Guidance / Nielsen #8. A control that can\r\n * never become enabled is not a disabled control, it is noise.\r\n *\r\n * Preview callers pass both handlers and see no change.\r\n *\r\n * Stacking:\r\n * The drawer's portal layer uses the v2 `zIndex.drawer` token (80),\r\n * so it sits above sticky page chrome (sticky/topbar/overflow/\r\n * popover, all <= 60) and BELOW `modal` (100), `snackbar` (150),\r\n * `toast` (200) and `tooltip` (250). Sitting below the modal layer\r\n * is deliberate and load-bearing: MUI popups opened from INSIDE the\r\n * drawer (Combobox/Autocomplete listboxes and the X date-picker\r\n * calendars, which render at theme.zIndex.modal) and any nested\r\n * ConfirmDialog/Modal must stack ABOVE the drawer, not behind it.\r\n * (A previous build hardcoded 1300 here — a leftover from MUI's\r\n * default 1100..1500 scale before the v2 remap to 0..250 — which\r\n * buried those popups at 100 behind the drawer and made them look\r\n * unresponsive.)\r\n *\r\n * Multi-drawer assumption:\r\n * The J/K listener is attached to `window`; multiple simultaneously-\r\n * open drawers would all receive the keypress and call their own\r\n * onPrev/onNext. Product convention is ONE drawer at a time.\r\n */\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n prev: \"Précédent\",\r\n next: \"Suivant\",\r\n close: \"Fermer (Échap)\",\r\n});\r\n\r\nconst DRAWER_ROOT_SX = Object.freeze({\r\n // v2 z-index token (zIndex.js). drawer:80 sits above sticky page\r\n // chrome (<=60) and BELOW modal:100, so MUI popups opened from\r\n // inside the drawer (Combobox/Autocomplete listboxes, X date-picker\r\n // calendars — all rendered at theme.zIndex.modal) stack ABOVE it.\r\n // The previous hardcoded 1300 predated the v2 remap of MUI's\r\n // 1100..1500 scale down to 0..250 and left those popups (at 100)\r\n // buried behind the drawer (at 1300) — clicking them \"did nothing\".\r\n zIndex: zIndex.drawer,\r\n});\r\n\r\nconst HEADER_STICKY_SX = Object.freeze({\r\n padding: \"var(--s-4) var(--s-5)\",\r\n borderBottom: \"1px solid var(--border)\",\r\n position: \"sticky\",\r\n top: 0,\r\n background: \"var(--surface)\",\r\n // Drawer header sits ABOVE the drawer body content. The drawer\r\n // already establishes its own stacking context via the root\r\n // z-index, so this only competes within the drawer locally.\r\n zIndex: 1,\r\n} satisfies SxProps<Theme>);\r\n\r\n/*\r\n * Right-hand cluster (caller actions + close).\r\n *\r\n * marginInlineStart:\"auto\" pins it to the inline end REGARDLESS of whether\r\n * the navigation cluster is rendered. The row is space-between, so without\r\n * this the close button would slide to flex-start on a filter drawer, which\r\n * is where the nav cluster used to sit. Logical property so it holds in RTL\r\n * — the header already uses marginInlineStart for the J/K hint.\r\n */\r\nconst HEADER_ACTIONS_SX = Object.freeze({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-1)\",\r\n marginInlineStart: \"auto\",\r\n} satisfies SxProps<Theme>);\r\n\r\nfunction isEditableTarget(target: EventTarget | null): boolean {\r\n if (!(target instanceof HTMLElement)) return false;\r\n const tag = target.tagName;\r\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") return true;\r\n if (target.isContentEditable) return true;\r\n return false;\r\n}\r\n\r\nfunction innerCornerSx(anchor: DrawerAnchor) {\r\n if (anchor === \"right\") {\r\n return { borderTopLeftRadius: 0, borderBottomLeftRadius: 0 };\r\n }\r\n if (anchor === \"left\") {\r\n return { borderTopRightRadius: 0, borderBottomRightRadius: 0 };\r\n }\r\n return {};\r\n}\r\n\r\nexport type DrawerAnchor = \"left\" | \"right\" | \"top\" | \"bottom\";\r\n\r\nexport interface DrawerLabels {\r\n prev?: string | undefined;\r\n next?: string | undefined;\r\n close?: string | undefined;\r\n}\r\n\r\nexport interface DrawerProps {\r\n open?: boolean | undefined;\r\n onClose?: (() => void) | undefined;\r\n width?: number | string | undefined;\r\n title?: React.ReactNode | undefined;\r\n subtitle?: React.ReactNode | undefined;\r\n /** Accessible name for the drawer when no `title` is rendered (R-Ar.5). */\r\n ariaLabel?: string | undefined;\r\n status?: React.ReactNode | undefined;\r\n actions?: React.ReactNode | undefined;\r\n /**\r\n * Step to the previous item. Supplying either this or `onNext` is what\r\n * renders the navigation cluster at all — see the opt-in note in the\r\n * module docstring. Omit both on a filter panel.\r\n */\r\n onPrev?: (() => void) | undefined;\r\n /** Step to the next item. See `onPrev`. */\r\n onNext?: (() => void) | undefined;\r\n hasPrev?: boolean | undefined;\r\n hasNext?: boolean | undefined;\r\n children?: React.ReactNode | undefined;\r\n anchor?: DrawerAnchor | undefined;\r\n labels?: DrawerLabels | undefined;\r\n}\r\n\r\nfunction Drawer({\r\n open,\r\n onClose,\r\n width = layout.drawer,\r\n title,\r\n subtitle,\r\n ariaLabel,\r\n status,\r\n actions,\r\n onPrev,\r\n onNext,\r\n hasPrev = false,\r\n hasNext = false,\r\n children,\r\n anchor = \"right\",\r\n labels,\r\n}: DrawerProps) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n /*\r\n * D-A10.2 — does this drawer navigate between items at all?\r\n *\r\n * Presence of a HANDLER, not of hasPrev/hasNext. A preview drawer sitting\r\n * on a single-row result set has both flags false and must still show the\r\n * cluster disabled, because navigation is part of what that drawer is. A\r\n * filter panel supplies no handler and has no such affordance to disable.\r\n */\r\n const hasItemNavigation = onPrev !== undefined || onNext !== undefined;\r\n\r\n // R-Ar.5 - stable, per-instance, collision-safe id for aria-labelledby.\r\n // Points at the <h2> Typography that already renders {title}. Resolves\r\n // through the DOM regardless of whether `title` is a string or JSX —\r\n // aria-labelledby reads the rendered text content. Replaces the previous\r\n // `aria-label={typeof title === \"string\" ? title : undefined}` which\r\n // left JSX-titled drawers unlabelled (B5-1).\r\n const titleId = React.useId();\r\n\r\n const paperRef = React.useRef<HTMLDivElement>(null);\r\n useFocusTrap(paperRef, !!open);\r\n\r\n /*\r\n * Escape must close EVERY drawer, so this effect binds whether or not item\r\n * navigation is wired. The J/K branches are already gated on\r\n * hasNext/hasPrev, which a filter panel leaves false, so they are inert\r\n * there rather than needing their own guard.\r\n */\r\n React.useEffect(() => {\r\n if (!open) return undefined;\r\n const handler = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") { onClose?.(); return; }\r\n if (isEditableTarget(e.target)) return;\r\n if ((e.key === \"j\" || e.key === \"ArrowDown\") && hasNext) {\r\n e.preventDefault(); onNext?.();\r\n } else if ((e.key === \"k\" || e.key === \"ArrowUp\") && hasPrev) {\r\n e.preventDefault(); onPrev?.();\r\n }\r\n };\r\n window.addEventListener(\"keydown\", handler);\r\n return () => window.removeEventListener(\"keydown\", handler);\r\n }, [open, onClose, onNext, onPrev, hasNext, hasPrev]);\r\n\r\n // MUI v9: paper slot forwarded through slotProps.paper. Wired with a\r\n // useMemo so the ref + sx bag keeps reference stability across renders\r\n // where `width` and `anchor` don't change.\r\n const slotProps = React.useMemo(\r\n () => ({\r\n paper: {\r\n ref: paperRef,\r\n sx: {\r\n width,\r\n maxWidth: \"100vw\",\r\n ...innerCornerSx(anchor),\r\n backgroundColor: \"var(--surface)\",\r\n boxShadow: \"var(--shadow-lg)\",\r\n },\r\n },\r\n }),\r\n [width, anchor]\r\n );\r\n\r\n return (\r\n <MuiDrawer\r\n anchor={anchor}\r\n open={!!open}\r\n onClose={onClose}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n // Name = the <h2> title text (via titleId). Falls back to ariaLabel\r\n // when the drawer is rendered without a title.\r\n aria-labelledby={title != null ? titleId : undefined}\r\n aria-label={title == null ? ariaLabel : undefined}\r\n disableAutoFocus\r\n disableEnforceFocus\r\n disableRestoreFocus\r\n // Root sx anchors the whole drawer (including its portal-level\r\n // container) at the v2 zIndex.drawer token — see DRAWER_ROOT_SX.\r\n sx={DRAWER_ROOT_SX}\r\n slotProps={slotProps}\r\n >\r\n <Box sx={HEADER_STICKY_SX}>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: \"var(--s-2)\" }}>\r\n {/*\r\n Navigation cluster — opt-in (D-A10.2). Rendered only when the\r\n caller wired onPrev or onNext, so a filter panel does not carry\r\n two permanently disabled buttons and a J/K hint for a shortcut\r\n that cannot fire.\r\n */}\r\n {hasItemNavigation && (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"var(--s-1)\" }}>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onPrev}\r\n disabled={!hasPrev}\r\n aria-label={L.prev}\r\n sx={{ color: \"var(--fg-muted)\" }}\r\n >\r\n <KeyboardArrowUpIcon fontSize=\"small\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onNext}\r\n disabled={!hasNext}\r\n aria-label={L.next}\r\n sx={{ color: \"var(--fg-muted)\" }}\r\n >\r\n <KeyboardArrowDownIcon fontSize=\"small\" />\r\n </IconButton>\r\n <Typography\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n marginInlineStart: \"var(--s-1)\",\r\n }}\r\n >\r\n J / K\r\n </Typography>\r\n </Box>\r\n )}\r\n {/* marginInlineStart:auto keeps close pinned to the inline end\r\n whether or not the cluster above rendered — see\r\n HEADER_ACTIONS_SX. */}\r\n <Box sx={HEADER_ACTIONS_SX}>\r\n {actions}\r\n <IconButton\r\n size=\"small\"\r\n onClick={onClose}\r\n aria-label={L.close}\r\n sx={{ color: \"var(--fg-muted)\" }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n </Box>\r\n {status && <Box sx={{ marginBottom: \"var(--s-2)\" }}>{status}</Box>}\r\n <Typography\r\n id={titleId}\r\n component=\"h2\"\r\n sx={{ fontSize: \"var(--text-h3)\", fontWeight: \"var(--fw-bold)\", color: \"var(--fg)\", lineHeight: \"var(--lh-snug)\" }}\r\n >\r\n {title}\r\n </Typography>\r\n {subtitle && (\r\n <Typography sx={{ fontSize: \"var(--text-sm)\", color: \"var(--fg-muted)\", marginTop: \"var(--s-1)\" }}>\r\n {subtitle}\r\n </Typography>\r\n )}\r\n </Box>\r\n\r\n <Box sx={{ padding: \"var(--s-4) var(--s-5)\", overflowY: \"auto\", flex: 1 }}>\r\n {children}\r\n </Box>\r\n </MuiDrawer>\r\n );\r\n}\r\n\r\nexport default Drawer;\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Drawer.js","names":["React","MuiDrawer","IconButton","CloseIcon","KeyboardArrowUpIcon","KeyboardArrowDownIcon","Box","Typography","layout","zIndex","useFocusTrap","mergeLabels","jsx","_jsx","jsxs","_jsxs","DEFAULT_LABELS","Object","freeze","prev","next","close","DRAWER_ROOT_SX","drawer","HEADER_STICKY_SX","padding","borderBottom","position","top","background","HEADER_ACTIONS_SX","display","alignItems","gap","marginInlineStart","HEADER_ICON_BUTTON_SX","color","minWidth","tactileMin","minHeight","isEditableTarget","target","HTMLElement","tag","tagName","isContentEditable","innerCornerSx","anchor","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","Drawer","open","onClose","width","title","subtitle","ariaLabel","status","actions","onPrev","onNext","hasPrev","hasNext","children","labels","L","hasItemNavigation","undefined","titleId","useId","paperRef","useRef","useEffect","handler","e","key","preventDefault","window","addEventListener","removeEventListener","slotProps","useMemo","paper","ref","sx","maxWidth","backgroundColor","boxShadow","role","disableAutoFocus","disableEnforceFocus","disableRestoreFocus","justifyContent","marginBottom","size","onClick","disabled","fontSize","id","component","fontWeight","lineHeight","marginTop","overflowY","flex"],"sources":["../../../../src/lib/v2/components/Drawer.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport MuiDrawer from \"@mui/material/Drawer\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport KeyboardArrowUpIcon from \"@mui/icons-material/KeyboardArrowUp\";\r\nimport KeyboardArrowDownIcon from \"@mui/icons-material/KeyboardArrowDown\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport { layout, zIndex } from \"../tokens\";\r\nimport useFocusTrap from \"../hooks/useFocusTrap\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * Drawer - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Drawer\". Detail panel without leaving the list.\r\n *\r\n * R-DG.9 - Action de ligne = drawer/popup (pas full-page sauf édition).\r\n * R-M.1 - Esc ferme.\r\n * R-F.2 - Focus trap, restoration au déclencheur. Backed by the v2\r\n * useFocusTrap hook (Batch 3) - honours [autofocus] and\r\n * [data-autofocus] markers, coordinates with nested traps\r\n * via a module-level trapStack, and filters\r\n * disabled/hidden/inert subtrees.\r\n * R-K.2 - J/K/Arrow nav must NOT fire when an editable element has focus.\r\n * R-Ar.5 - aria-labelledby points at the rendered <h2> title so the\r\n * drawer is properly named to AT regardless of whether the\r\n * title is a string or a JSX node (audit Batch 5 / B5-1). When\r\n * no title is provided, pass `ariaLabel` to name the drawer.\r\n * J / K ou ↑ / ↓ → navigation entre items voisins.\r\n *\r\n * ── ITEM NAVIGATION IS OPT-IN (D-A10.2) ──────────────────────────────\r\n *\r\n * The prev/next cluster and its \"J / K\" hint render ONLY when `onPrev` or\r\n * `onNext` is supplied. This component serves two distinct jobs: item\r\n * preview, which navigates, and the charter's collapsible filter panel,\r\n * which does not. Rendering the cluster unconditionally gave every filter\r\n * drawer two permanently disabled buttons and a keyboard hint for a\r\n * shortcut with no effect — Guidance / Nielsen #8. A control that can\r\n * never become enabled is not a disabled control, it is noise.\r\n *\r\n * Preview callers pass both handlers and see no change.\r\n *\r\n * Stacking:\r\n * The drawer's portal layer uses the v2 `zIndex.drawer` token (80),\r\n * so it sits above sticky page chrome (sticky/topbar/overflow/\r\n * popover, all <= 60) and BELOW `modal` (100), `snackbar` (150),\r\n * `toast` (200) and `tooltip` (250). Sitting below the modal layer\r\n * is deliberate and load-bearing: MUI popups opened from INSIDE the\r\n * drawer (Combobox/Autocomplete listboxes and the X date-picker\r\n * calendars, which render at theme.zIndex.modal) and any nested\r\n * ConfirmDialog/Modal must stack ABOVE the drawer, not behind it.\r\n * (A previous build hardcoded 1300 here — a leftover from MUI's\r\n * default 1100..1500 scale before the v2 remap to 0..250 — which\r\n * buried those popups at 100 behind the drawer and made them look\r\n * unresponsive.)\r\n *\r\n * Multi-drawer assumption:\r\n * The J/K listener is attached to `window`; multiple simultaneously-\r\n * open drawers would all receive the keypress and call their own\r\n * onPrev/onNext. Product convention is ONE drawer at a time.\r\n */\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n prev: \"Précédent\",\r\n next: \"Suivant\",\r\n close: \"Fermer (Échap)\",\r\n});\r\n\r\nconst DRAWER_ROOT_SX = Object.freeze({\r\n // v2 z-index token (zIndex.js). drawer:80 sits above sticky page\r\n // chrome (<=60) and BELOW modal:100, so MUI popups opened from\r\n // inside the drawer (Combobox/Autocomplete listboxes, X date-picker\r\n // calendars — all rendered at theme.zIndex.modal) stack ABOVE it.\r\n // The previous hardcoded 1300 predated the v2 remap of MUI's\r\n // 1100..1500 scale down to 0..250 and left those popups (at 100)\r\n // buried behind the drawer (at 1300) — clicking them \"did nothing\".\r\n zIndex: zIndex.drawer,\r\n});\r\n\r\nconst HEADER_STICKY_SX = Object.freeze({\r\n padding: \"var(--s-4) var(--s-5)\",\r\n borderBottom: \"1px solid var(--border)\",\r\n position: \"sticky\",\r\n top: 0,\r\n background: \"var(--surface)\",\r\n // Drawer header sits ABOVE the drawer body content. The drawer\r\n // already establishes its own stacking context via the root\r\n // z-index, so this only competes within the drawer locally.\r\n zIndex: 1,\r\n} satisfies SxProps<Theme>);\r\n\r\n/*\r\n * Right-hand cluster (caller actions + close).\r\n *\r\n * marginInlineStart:\"auto\" pins it to the inline end REGARDLESS of whether\r\n * the navigation cluster is rendered. The row is space-between, so without\r\n * this the close button would slide to flex-start on a filter drawer, which\r\n * is where the nav cluster used to sit. Logical property so it holds in RTL\r\n * — the header already uses marginInlineStart for the J/K hint.\r\n */\r\nconst HEADER_ACTIONS_SX = Object.freeze({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-1)\",\r\n marginInlineStart: \"auto\",\r\n} satisfies SxProps<Theme>);\r\n\r\n/**\r\n * Cible tactile des boutons d'icône de l'en-tête (R-7.4 / WCAG 2.5.5).\r\n *\r\n * Le docblock de `tokens/density` énonce la règle sans ambiguïté : « Icon-only\r\n * buttons MUST set min-width/min-height to `tactileMin` », parce que la hauteur\r\n * VISUELLE d'un bouton peut descendre sous 44 px dans les paliers de densité\r\n * serrés sans que la zone d'appui le puisse. Les trois boutons de cet en-tête\r\n * — précédent, suivant, fermer — étaient des `IconButton size=\"small\"` sans\r\n * plancher : environ 34 px, soit dix de moins que le minimum que ce même socle\r\n * impose à ses hôtes.\r\n *\r\n * L'écart est resté invisible tant que la navigation entre items était peu\r\n * câblée : un tiroir de filtres ne rend que le bouton de fermeture. Un module\r\n * qui équipe ses aperçus de `onPrev`/`onNext` en expose trois par tiroir.\r\n *\r\n * `min*` et non `width`/`height` : la zone d'appui grandit, le dessin de\r\n * l'icône ne change pas — c'est exactement la distinction que fait la note de\r\n * `tokens/density`.\r\n */\r\nconst HEADER_ICON_BUTTON_SX = Object.freeze({\r\n color: \"var(--fg-muted)\",\r\n minWidth: layout.tactileMin,\r\n minHeight: layout.tactileMin,\r\n} satisfies SxProps<Theme>);\r\n\r\nfunction isEditableTarget(target: EventTarget | null): boolean {\r\n if (!(target instanceof HTMLElement)) return false;\r\n const tag = target.tagName;\r\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") return true;\r\n if (target.isContentEditable) return true;\r\n return false;\r\n}\r\n\r\nfunction innerCornerSx(anchor: DrawerAnchor) {\r\n if (anchor === \"right\") {\r\n return { borderTopLeftRadius: 0, borderBottomLeftRadius: 0 };\r\n }\r\n if (anchor === \"left\") {\r\n return { borderTopRightRadius: 0, borderBottomRightRadius: 0 };\r\n }\r\n return {};\r\n}\r\n\r\nexport type DrawerAnchor = \"left\" | \"right\" | \"top\" | \"bottom\";\r\n\r\nexport interface DrawerLabels {\r\n prev?: string | undefined;\r\n next?: string | undefined;\r\n close?: string | undefined;\r\n}\r\n\r\nexport interface DrawerProps {\r\n open?: boolean | undefined;\r\n onClose?: (() => void) | undefined;\r\n width?: number | string | undefined;\r\n title?: React.ReactNode | undefined;\r\n subtitle?: React.ReactNode | undefined;\r\n /** Accessible name for the drawer when no `title` is rendered (R-Ar.5). */\r\n ariaLabel?: string | undefined;\r\n status?: React.ReactNode | undefined;\r\n actions?: React.ReactNode | undefined;\r\n /**\r\n * Step to the previous item. Supplying either this or `onNext` is what\r\n * renders the navigation cluster at all — see the opt-in note in the\r\n * module docstring. Omit both on a filter panel.\r\n */\r\n onPrev?: (() => void) | undefined;\r\n /** Step to the next item. See `onPrev`. */\r\n onNext?: (() => void) | undefined;\r\n hasPrev?: boolean | undefined;\r\n hasNext?: boolean | undefined;\r\n children?: React.ReactNode | undefined;\r\n anchor?: DrawerAnchor | undefined;\r\n labels?: DrawerLabels | undefined;\r\n}\r\n\r\nfunction Drawer({\r\n open,\r\n onClose,\r\n width = layout.drawer,\r\n title,\r\n subtitle,\r\n ariaLabel,\r\n status,\r\n actions,\r\n onPrev,\r\n onNext,\r\n hasPrev = false,\r\n hasNext = false,\r\n children,\r\n anchor = \"right\",\r\n labels,\r\n}: DrawerProps) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n /*\r\n * D-A10.2 — does this drawer navigate between items at all?\r\n *\r\n * Presence of a HANDLER, not of hasPrev/hasNext. A preview drawer sitting\r\n * on a single-row result set has both flags false and must still show the\r\n * cluster disabled, because navigation is part of what that drawer is. A\r\n * filter panel supplies no handler and has no such affordance to disable.\r\n */\r\n const hasItemNavigation = onPrev !== undefined || onNext !== undefined;\r\n\r\n // R-Ar.5 - stable, per-instance, collision-safe id for aria-labelledby.\r\n // Points at the <h2> Typography that already renders {title}. Resolves\r\n // through the DOM regardless of whether `title` is a string or JSX —\r\n // aria-labelledby reads the rendered text content. Replaces the previous\r\n // `aria-label={typeof title === \"string\" ? title : undefined}` which\r\n // left JSX-titled drawers unlabelled (B5-1).\r\n const titleId = React.useId();\r\n\r\n const paperRef = React.useRef<HTMLDivElement>(null);\r\n useFocusTrap(paperRef, !!open);\r\n\r\n /*\r\n * Escape must close EVERY drawer, so this effect binds whether or not item\r\n * navigation is wired. The J/K branches are already gated on\r\n * hasNext/hasPrev, which a filter panel leaves false, so they are inert\r\n * there rather than needing their own guard.\r\n */\r\n React.useEffect(() => {\r\n if (!open) return undefined;\r\n const handler = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") { onClose?.(); return; }\r\n if (isEditableTarget(e.target)) return;\r\n if ((e.key === \"j\" || e.key === \"ArrowDown\") && hasNext) {\r\n e.preventDefault(); onNext?.();\r\n } else if ((e.key === \"k\" || e.key === \"ArrowUp\") && hasPrev) {\r\n e.preventDefault(); onPrev?.();\r\n }\r\n };\r\n window.addEventListener(\"keydown\", handler);\r\n return () => window.removeEventListener(\"keydown\", handler);\r\n }, [open, onClose, onNext, onPrev, hasNext, hasPrev]);\r\n\r\n // MUI v9: paper slot forwarded through slotProps.paper. Wired with a\r\n // useMemo so the ref + sx bag keeps reference stability across renders\r\n // where `width` and `anchor` don't change.\r\n const slotProps = React.useMemo(\r\n () => ({\r\n paper: {\r\n ref: paperRef,\r\n sx: {\r\n width,\r\n maxWidth: \"100vw\",\r\n ...innerCornerSx(anchor),\r\n backgroundColor: \"var(--surface)\",\r\n boxShadow: \"var(--shadow-lg)\",\r\n },\r\n },\r\n }),\r\n [width, anchor]\r\n );\r\n\r\n return (\r\n <MuiDrawer\r\n anchor={anchor}\r\n open={!!open}\r\n onClose={onClose}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n // Name = the <h2> title text (via titleId). Falls back to ariaLabel\r\n // when the drawer is rendered without a title.\r\n aria-labelledby={title != null ? titleId : undefined}\r\n aria-label={title == null ? ariaLabel : undefined}\r\n disableAutoFocus\r\n disableEnforceFocus\r\n disableRestoreFocus\r\n // Root sx anchors the whole drawer (including its portal-level\r\n // container) at the v2 zIndex.drawer token — see DRAWER_ROOT_SX.\r\n sx={DRAWER_ROOT_SX}\r\n slotProps={slotProps}\r\n >\r\n <Box sx={HEADER_STICKY_SX}>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: \"var(--s-2)\" }}>\r\n {/*\r\n Navigation cluster — opt-in (D-A10.2). Rendered only when the\r\n caller wired onPrev or onNext, so a filter panel does not carry\r\n two permanently disabled buttons and a J/K hint for a shortcut\r\n that cannot fire.\r\n */}\r\n {hasItemNavigation && (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: \"var(--s-1)\" }}>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onPrev}\r\n disabled={!hasPrev}\r\n aria-label={L.prev}\r\n sx={HEADER_ICON_BUTTON_SX}\r\n >\r\n <KeyboardArrowUpIcon fontSize=\"small\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onNext}\r\n disabled={!hasNext}\r\n aria-label={L.next}\r\n sx={HEADER_ICON_BUTTON_SX}\r\n >\r\n <KeyboardArrowDownIcon fontSize=\"small\" />\r\n </IconButton>\r\n <Typography\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n marginInlineStart: \"var(--s-1)\",\r\n }}\r\n >\r\n J / K\r\n </Typography>\r\n </Box>\r\n )}\r\n {/* marginInlineStart:auto keeps close pinned to the inline end\r\n whether or not the cluster above rendered — see\r\n HEADER_ACTIONS_SX. */}\r\n <Box sx={HEADER_ACTIONS_SX}>\r\n {actions}\r\n <IconButton\r\n size=\"small\"\r\n onClick={onClose}\r\n aria-label={L.close}\r\n sx={HEADER_ICON_BUTTON_SX}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n </Box>\r\n {status && <Box sx={{ marginBottom: \"var(--s-2)\" }}>{status}</Box>}\r\n <Typography\r\n id={titleId}\r\n component=\"h2\"\r\n sx={{ fontSize: \"var(--text-h3)\", fontWeight: \"var(--fw-bold)\", color: \"var(--fg)\", lineHeight: \"var(--lh-snug)\" }}\r\n >\r\n {title}\r\n </Typography>\r\n {subtitle && (\r\n <Typography sx={{ fontSize: \"var(--text-sm)\", color: \"var(--fg-muted)\", marginTop: \"var(--s-1)\" }}>\r\n {subtitle}\r\n </Typography>\r\n )}\r\n </Box>\r\n\r\n <Box sx={{ padding: \"var(--s-4) var(--s-5)\", overflowY: \"auto\", flex: 1 }}>\r\n {children}\r\n </Box>\r\n </MuiDrawer>\r\n );\r\n}\r\n\r\nexport default Drawer;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,16 +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
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
-
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
10
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
11
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
12
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
13
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
14
1
|
import * as React from "react";
|
|
15
2
|
import { mergeLabels } from "../utils/mergeLabels";
|
|
16
3
|
import Box from "@mui/material/Box";
|
|
@@ -94,11 +81,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
94
81
|
|
|
95
82
|
function defaultFormatBytes(n) {
|
|
96
83
|
if (!Number.isFinite(n)) return "—";
|
|
97
|
-
if (n < 1024) return
|
|
98
|
-
if (n < 1024 * 1024) return
|
|
99
|
-
return
|
|
84
|
+
if (n < 1024) return `${n} o`;
|
|
85
|
+
if (n < 1024 * 1024) return `${Math.round(n / 1024)} Ko`;
|
|
86
|
+
return `${(n / 1024 / 1024).toFixed(1)} Mo`;
|
|
100
87
|
}
|
|
101
|
-
|
|
88
|
+
const DEFAULT_REASONS = Object.freeze({
|
|
102
89
|
"max-size": "trop volumineux",
|
|
103
90
|
"type": "type non autorisé",
|
|
104
91
|
"max-files": "limite atteinte"
|
|
@@ -112,70 +99,48 @@ var DEFAULT_REASONS = Object.freeze({
|
|
|
112
99
|
* 2 type non autorisé."
|
|
113
100
|
*/
|
|
114
101
|
function defaultBuildRejectMessage(rejected, reasons) {
|
|
115
|
-
|
|
102
|
+
const total = rejected.length;
|
|
116
103
|
if (total === 0) return "";
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
var r = _step.value;
|
|
125
|
-
var label = reasons[r.reason];
|
|
126
|
-
if (!label) continue;
|
|
127
|
-
tally[label] = (tally[label] || 0) + 1;
|
|
128
|
-
}
|
|
129
|
-
} catch (err) {
|
|
130
|
-
_iterator.e(err);
|
|
131
|
-
} finally {
|
|
132
|
-
_iterator.f();
|
|
104
|
+
const noun = total > 1 ? "fichiers refusés" : "fichier refusé";
|
|
105
|
+
const head = `${total} ${noun}`;
|
|
106
|
+
const tally = {};
|
|
107
|
+
for (const r of rejected) {
|
|
108
|
+
const label = reasons[r.reason];
|
|
109
|
+
if (!label) continue;
|
|
110
|
+
tally[label] = (tally[label] || 0) + 1;
|
|
133
111
|
}
|
|
134
|
-
|
|
135
|
-
if (buckets.length === 0) return
|
|
112
|
+
const buckets = Object.entries(tally);
|
|
113
|
+
if (buckets.length === 0) return `${head}.`;
|
|
136
114
|
if (buckets.length === 1) {
|
|
137
|
-
|
|
138
|
-
return only ?
|
|
115
|
+
const only = buckets[0];
|
|
116
|
+
return only ? `${head} : ${only[0]}.` : `${head}.`;
|
|
139
117
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
label = _ref2[0],
|
|
143
|
-
n = _ref2[1];
|
|
144
|
-
return "".concat(n, " ").concat(label);
|
|
145
|
-
});
|
|
146
|
-
return "".concat(head, " : ").concat(parts.join(", "), ".");
|
|
118
|
+
const parts = buckets.map(([label, n]) => `${n} ${label}`);
|
|
119
|
+
return `${head} : ${parts.join(", ")}.`;
|
|
147
120
|
}
|
|
148
|
-
|
|
121
|
+
const DEFAULT_LABELS = Object.freeze({
|
|
149
122
|
label: "Glissez vos fichiers ici ou cliquez pour parcourir",
|
|
150
123
|
ariaLabel: "Zone de dépôt de fichiers",
|
|
151
124
|
formatBytes: defaultFormatBytes,
|
|
152
125
|
reasons: DEFAULT_REASONS,
|
|
153
126
|
buildRejectMessage: defaultBuildRejectMessage,
|
|
154
|
-
addedSingle:
|
|
155
|
-
|
|
156
|
-
}
|
|
157
|
-
addedMultiple: function addedMultiple(n) {
|
|
158
|
-
return "".concat(n, " fichiers ajout\xE9s");
|
|
159
|
-
},
|
|
160
|
-
removeItem: function removeItem(name) {
|
|
161
|
-
return "Retirer ".concat(name);
|
|
162
|
-
}
|
|
127
|
+
addedSingle: name => `Fichier ajouté : ${name}`,
|
|
128
|
+
addedMultiple: n => `${n} fichiers ajoutés`,
|
|
129
|
+
removeItem: name => `Retirer ${name}`
|
|
163
130
|
});
|
|
164
131
|
|
|
165
132
|
// ─── Helpers ──────────────────────────────────────────────────────────
|
|
166
133
|
|
|
167
134
|
function matchesAccept(file, accept) {
|
|
168
135
|
if (!accept) return true;
|
|
169
|
-
|
|
170
|
-
return t.trim();
|
|
171
|
-
}).filter(Boolean);
|
|
136
|
+
const tokens = accept.split(",").map(t => t.trim()).filter(Boolean);
|
|
172
137
|
if (tokens.length === 0) return true;
|
|
173
|
-
return tokens.some(
|
|
138
|
+
return tokens.some(t => {
|
|
174
139
|
if (t.startsWith(".")) {
|
|
175
140
|
return file.name.toLowerCase().endsWith(t.toLowerCase());
|
|
176
141
|
}
|
|
177
142
|
if (t.endsWith("/*")) {
|
|
178
|
-
|
|
143
|
+
const prefix = t.slice(0, -1); // "image/"
|
|
179
144
|
return file.type.startsWith(prefix);
|
|
180
145
|
}
|
|
181
146
|
return file.type === t;
|
|
@@ -184,32 +149,34 @@ function matchesAccept(file, accept) {
|
|
|
184
149
|
|
|
185
150
|
// ─── Component ────────────────────────────────────────────────────────
|
|
186
151
|
|
|
187
|
-
function Dropzone(
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
152
|
+
function Dropzone({
|
|
153
|
+
accept,
|
|
154
|
+
maxSize,
|
|
155
|
+
maxFiles,
|
|
156
|
+
multiple = false,
|
|
157
|
+
disabled = false,
|
|
158
|
+
value = [],
|
|
159
|
+
onAdd,
|
|
160
|
+
onRemove,
|
|
161
|
+
onReject,
|
|
162
|
+
// Legacy prop names: kept for back-compat. When the consumer passes
|
|
163
|
+
// either, it wins over labels.* with the same role.
|
|
164
|
+
label,
|
|
165
|
+
"aria-label": ariaLabelProp,
|
|
166
|
+
hint,
|
|
167
|
+
labels,
|
|
168
|
+
sx,
|
|
169
|
+
// Injected by Field (R-I.1 / R-I.3). Forwarded to the drop <button>
|
|
170
|
+
// below — see the "INSIDE A <Field>" note in the module docstring.
|
|
171
|
+
id,
|
|
172
|
+
error = false,
|
|
173
|
+
"aria-invalid": ariaInvalidProp,
|
|
174
|
+
"aria-describedby": ariaDescribedByProp
|
|
175
|
+
}) {
|
|
176
|
+
const L = React.useMemo(() => {
|
|
211
177
|
if (!labels) return DEFAULT_LABELS;
|
|
212
|
-
return mergeLabels(DEFAULT_LABELS,
|
|
178
|
+
return mergeLabels(DEFAULT_LABELS, {
|
|
179
|
+
...labels,
|
|
213
180
|
/*
|
|
214
181
|
* `reasons` is a NESTED dictionary and needs its own merge, at its own
|
|
215
182
|
* level. Merging only at the top would replace the whole sub-object, so a
|
|
@@ -218,25 +185,22 @@ function Dropzone(_ref3) {
|
|
|
218
185
|
* guarding its VALUES, which is the same hazard one level down.
|
|
219
186
|
*/
|
|
220
187
|
reasons: mergeLabels(DEFAULT_REASONS, labels.reasons)
|
|
221
|
-
})
|
|
188
|
+
});
|
|
222
189
|
}, [labels]);
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
229
|
-
dragOver = _React$useState2[0],
|
|
230
|
-
setDragOver = _React$useState2[1];
|
|
190
|
+
const dropLabel = label != null ? label : L.label;
|
|
191
|
+
const ariaLabel = ariaLabelProp != null ? ariaLabelProp : L.ariaLabel;
|
|
192
|
+
const inputRef = React.useRef(null);
|
|
193
|
+
const liveRef = React.useRef(null);
|
|
194
|
+
const [dragOver, setDragOver] = React.useState(false);
|
|
231
195
|
// Stable, per-instance, collision-safe id for the hint association.
|
|
232
|
-
|
|
196
|
+
const hintId = React.useId();
|
|
233
197
|
|
|
234
198
|
/*
|
|
235
199
|
* R-I.3 — invalid when Field said so via `error`, or when a host set the
|
|
236
200
|
* attribute directly. Either alone is sufficient; Field passes both, other
|
|
237
201
|
* callers may pass one.
|
|
238
202
|
*/
|
|
239
|
-
|
|
203
|
+
const isInvalid = error || ariaInvalidProp === true || ariaInvalidProp === "true";
|
|
240
204
|
|
|
241
205
|
/*
|
|
242
206
|
* MERGED, not replaced. Field's value points at its hint and/or its error
|
|
@@ -244,105 +208,94 @@ function Dropzone(_ref3) {
|
|
|
244
208
|
* button. Dropping either would lose a real description — which is what
|
|
245
209
|
* happened while this prop was not accepted at all.
|
|
246
210
|
*/
|
|
247
|
-
|
|
248
|
-
|
|
211
|
+
const describedBy = [ariaDescribedByProp, hint ? hintId : null].filter(Boolean).join(" ") || undefined;
|
|
212
|
+
const announce = msg => {
|
|
249
213
|
if (liveRef.current) {
|
|
250
214
|
// Setting via DOM (not state) avoids re-renders that would re-trigger
|
|
251
215
|
// SR announcements for unrelated UI updates.
|
|
252
216
|
liveRef.current.textContent = msg;
|
|
253
217
|
}
|
|
254
218
|
};
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
file: file,
|
|
281
|
-
reason: "type"
|
|
282
|
-
});
|
|
283
|
-
continue;
|
|
284
|
-
}
|
|
285
|
-
accepted.push(file);
|
|
286
|
-
if (!multiple) break; // single mode: only first valid
|
|
219
|
+
const validate = React.useCallback(incoming => {
|
|
220
|
+
const accepted = [];
|
|
221
|
+
const rejected = [];
|
|
222
|
+
const remainingSlots = maxFiles != null ? Math.max(0, maxFiles - value.length) : Infinity;
|
|
223
|
+
for (const file of incoming) {
|
|
224
|
+
if (accepted.length >= remainingSlots) {
|
|
225
|
+
rejected.push({
|
|
226
|
+
file,
|
|
227
|
+
reason: "max-files"
|
|
228
|
+
});
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
if (maxSize != null && file.size > maxSize) {
|
|
232
|
+
rejected.push({
|
|
233
|
+
file,
|
|
234
|
+
reason: "max-size"
|
|
235
|
+
});
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
if (!matchesAccept(file, accept)) {
|
|
239
|
+
rejected.push({
|
|
240
|
+
file,
|
|
241
|
+
reason: "type"
|
|
242
|
+
});
|
|
243
|
+
continue;
|
|
287
244
|
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
} finally {
|
|
291
|
-
_iterator2.f();
|
|
245
|
+
accepted.push(file);
|
|
246
|
+
if (!multiple) break; // single mode: only first valid
|
|
292
247
|
}
|
|
293
248
|
return {
|
|
294
|
-
accepted
|
|
295
|
-
rejected
|
|
249
|
+
accepted,
|
|
250
|
+
rejected
|
|
296
251
|
};
|
|
297
252
|
}, [accept, maxSize, maxFiles, multiple, value.length]);
|
|
298
|
-
|
|
253
|
+
const handleFiles = fileList => {
|
|
299
254
|
if (disabled) return;
|
|
300
|
-
|
|
255
|
+
const files = Array.from(fileList || []);
|
|
301
256
|
if (files.length === 0) return;
|
|
302
|
-
|
|
303
|
-
accepted
|
|
304
|
-
rejected
|
|
257
|
+
const {
|
|
258
|
+
accepted,
|
|
259
|
+
rejected
|
|
260
|
+
} = validate(files);
|
|
305
261
|
if (accepted.length > 0) {
|
|
306
|
-
onAdd
|
|
307
|
-
|
|
308
|
-
first = _accepted[0];
|
|
262
|
+
onAdd?.(accepted);
|
|
263
|
+
const [first] = accepted;
|
|
309
264
|
announce(accepted.length === 1 && first ? L.addedSingle(first.name) : L.addedMultiple(accepted.length));
|
|
310
265
|
}
|
|
311
266
|
if (rejected.length > 0) {
|
|
312
|
-
onReject
|
|
267
|
+
onReject?.(rejected);
|
|
313
268
|
announce(L.buildRejectMessage(rejected, L.reasons));
|
|
314
269
|
}
|
|
315
270
|
};
|
|
316
|
-
|
|
271
|
+
const onInputChange = e => {
|
|
317
272
|
handleFiles(e.target.files);
|
|
318
273
|
// reset so the same file can be re-added after removal
|
|
319
274
|
e.target.value = "";
|
|
320
275
|
};
|
|
321
|
-
|
|
322
|
-
var _inputRef$current;
|
|
276
|
+
const openPicker = () => {
|
|
323
277
|
if (disabled) return;
|
|
324
|
-
|
|
278
|
+
inputRef.current?.click();
|
|
325
279
|
};
|
|
326
|
-
|
|
280
|
+
const onDragOver = e => {
|
|
327
281
|
if (disabled) return;
|
|
328
282
|
e.preventDefault();
|
|
329
283
|
e.stopPropagation();
|
|
330
284
|
if (!dragOver) setDragOver(true);
|
|
331
285
|
};
|
|
332
|
-
|
|
286
|
+
const onDragLeave = e => {
|
|
333
287
|
e.preventDefault();
|
|
334
288
|
e.stopPropagation();
|
|
335
289
|
// Only clear when leaving the wrapper itself, not crossing a child.
|
|
336
290
|
if (e.currentTarget.contains(e.relatedTarget)) return;
|
|
337
291
|
setDragOver(false);
|
|
338
292
|
};
|
|
339
|
-
|
|
340
|
-
var _e$dataTransfer;
|
|
293
|
+
const onDrop = e => {
|
|
341
294
|
e.preventDefault();
|
|
342
295
|
e.stopPropagation();
|
|
343
296
|
setDragOver(false);
|
|
344
297
|
if (disabled) return;
|
|
345
|
-
handleFiles(
|
|
298
|
+
handleFiles(e.dataTransfer?.files);
|
|
346
299
|
};
|
|
347
300
|
|
|
348
301
|
/*
|
|
@@ -352,22 +305,23 @@ function Dropzone(_ref3) {
|
|
|
352
305
|
* user needs to know the drop will land, and the invalid state is about to
|
|
353
306
|
* be resolved by that very drop.
|
|
354
307
|
*/
|
|
355
|
-
|
|
308
|
+
const borderColor = dragOver ? "var(--accent)" : isInvalid ? "var(--danger)" : "var(--border-strong)";
|
|
356
309
|
return /*#__PURE__*/_jsxs(Box, {
|
|
357
|
-
sx:
|
|
358
|
-
width: "100%"
|
|
359
|
-
|
|
360
|
-
|
|
310
|
+
sx: {
|
|
311
|
+
width: "100%",
|
|
312
|
+
...sx
|
|
313
|
+
},
|
|
314
|
+
children: [/*#__PURE__*/_jsxs(Box, {
|
|
361
315
|
component: "button",
|
|
362
|
-
type: "button"
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
316
|
+
type: "button",
|
|
317
|
+
...(id !== undefined ? {
|
|
318
|
+
id
|
|
319
|
+
} : {}),
|
|
366
320
|
disabled: disabled,
|
|
367
|
-
"aria-label": ariaLabel
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
321
|
+
"aria-label": ariaLabel,
|
|
322
|
+
...(isInvalid ? {
|
|
323
|
+
"aria-invalid": true
|
|
324
|
+
} : {}),
|
|
371
325
|
"aria-describedby": describedBy,
|
|
372
326
|
onClick: openPicker,
|
|
373
327
|
onDragOver: onDragOver,
|
|
@@ -388,7 +342,7 @@ function Dropzone(_ref3) {
|
|
|
388
342
|
gap: 1,
|
|
389
343
|
padding: "var(--s-5) var(--s-4)",
|
|
390
344
|
background: dragOver ? "var(--accent-soft)" : "var(--bg-subtle)",
|
|
391
|
-
border:
|
|
345
|
+
border: `2px dashed ${borderColor}`,
|
|
392
346
|
borderRadius: "var(--r-lg)",
|
|
393
347
|
cursor: disabled ? "not-allowed" : "pointer",
|
|
394
348
|
opacity: disabled ? 0.55 : 1,
|
|
@@ -448,7 +402,7 @@ function Dropzone(_ref3) {
|
|
|
448
402
|
border: 0
|
|
449
403
|
}
|
|
450
404
|
})]
|
|
451
|
-
})
|
|
405
|
+
}), /*#__PURE__*/_jsx(Box, {
|
|
452
406
|
ref: liveRef,
|
|
453
407
|
role: "status",
|
|
454
408
|
"aria-live": "polite",
|
|
@@ -468,11 +422,10 @@ function Dropzone(_ref3) {
|
|
|
468
422
|
flexDirection: "column",
|
|
469
423
|
gap: "var(--s-1)"
|
|
470
424
|
},
|
|
471
|
-
children: value.map(
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
var color = status === "error" ? "var(--danger)" : status === "done" ? "var(--success)" : "var(--fg-muted)";
|
|
425
|
+
children: value.map((f, i) => {
|
|
426
|
+
const id = f.id ?? f.name ?? i;
|
|
427
|
+
const status = f.status || (f.error ? "error" : f.progress === 100 ? "done" : f.progress != null ? "uploading" : "ready");
|
|
428
|
+
const color = status === "error" ? "var(--danger)" : status === "done" ? "var(--success)" : "var(--fg-muted)";
|
|
476
429
|
return /*#__PURE__*/_jsxs(Box, {
|
|
477
430
|
component: "li",
|
|
478
431
|
role: "listitem",
|
|
@@ -488,7 +441,7 @@ function Dropzone(_ref3) {
|
|
|
488
441
|
children: [/*#__PURE__*/_jsx(Box, {
|
|
489
442
|
"aria-hidden": "true",
|
|
490
443
|
sx: {
|
|
491
|
-
color
|
|
444
|
+
color,
|
|
492
445
|
display: "inline-flex"
|
|
493
446
|
},
|
|
494
447
|
children: /*#__PURE__*/_jsx(InsertDriveFileIcon, {
|
|
@@ -515,11 +468,11 @@ function Dropzone(_ref3) {
|
|
|
515
468
|
color: status === "error" ? "var(--danger)" : "var(--fg-subtle)",
|
|
516
469
|
fontVariantNumeric: "tabular-nums"
|
|
517
470
|
},
|
|
518
|
-
children: status === "error" && f.error ? f.error :
|
|
471
|
+
children: status === "error" && f.error ? f.error : `${L.formatBytes(f.size ?? NaN)}${f.progress != null ? ` · ${Math.round(f.progress)}%` : ""}`
|
|
519
472
|
})]
|
|
520
473
|
}), onRemove && /*#__PURE__*/_jsx(IconButton, {
|
|
521
474
|
size: "small",
|
|
522
|
-
onClick:
|
|
475
|
+
onClick: e => {
|
|
523
476
|
e.stopPropagation();
|
|
524
477
|
onRemove(id);
|
|
525
478
|
},
|