@portnet/ui 6.0.2 → 6.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +652 -0
- package/dist/esm/index.js +72 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
- package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldError.test.js +71 -38
- package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
- package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldWidth.test.js +11 -11
- package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FileCard.test.js +18 -17
- package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js +87 -179
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +32 -44
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +118 -199
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
- package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -42
- package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/esm/v2/__tests__/apiError.test.js +50 -69
- package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
- package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
- package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
- package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/esm/v2/__tests__/labels-merge.test.js +17 -21
- package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
- package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
- package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
- package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/esm/v2/components/Accordion.js +48 -70
- package/dist/esm/v2/components/Accordion.js.map +1 -1
- package/dist/esm/v2/components/ActionStrip.js +31 -43
- package/dist/esm/v2/components/ActionStrip.js.map +1 -1
- package/dist/esm/v2/components/Banner.js +25 -22
- package/dist/esm/v2/components/Banner.js.map +1 -1
- package/dist/esm/v2/components/Busy.js +14 -19
- package/dist/esm/v2/components/Busy.js.map +1 -1
- package/dist/esm/v2/components/Button.js +34 -45
- package/dist/esm/v2/components/Button.js.map +1 -1
- package/dist/esm/v2/components/CategoryTag.js +44 -27
- package/dist/esm/v2/components/CategoryTag.js.map +1 -1
- package/dist/esm/v2/components/Checkbox.js +32 -38
- package/dist/esm/v2/components/Checkbox.js.map +1 -1
- package/dist/esm/v2/components/Chip.js +23 -36
- package/dist/esm/v2/components/Chip.js.map +1 -1
- package/dist/esm/v2/components/Combobox.js +112 -136
- package/dist/esm/v2/components/Combobox.js.map +1 -1
- package/dist/esm/v2/components/CommandPalette.js +113 -198
- package/dist/esm/v2/components/CommandPalette.js.map +1 -1
- package/dist/esm/v2/components/ConfirmDialog.js +36 -45
- package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/esm/v2/components/DatePicker.js +78 -81
- package/dist/esm/v2/components/DatePicker.js.map +1 -1
- package/dist/esm/v2/components/DateRangePicker.js +63 -74
- package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
- package/dist/esm/v2/components/DateTimePicker.js +81 -86
- package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
- package/dist/esm/v2/components/Drawer.js +71 -65
- package/dist/esm/v2/components/Drawer.js.map +1 -1
- package/dist/esm/v2/components/Dropzone.js +130 -177
- package/dist/esm/v2/components/Dropzone.js.map +1 -1
- package/dist/esm/v2/components/EmptyState.js +9 -9
- package/dist/esm/v2/components/EmptyState.js.map +1 -1
- package/dist/esm/v2/components/FavoriteToggle.js +24 -33
- package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/esm/v2/components/Field.js +155 -59
- package/dist/esm/v2/components/Field.js.map +1 -1
- package/dist/esm/v2/components/FieldError.js +9 -13
- package/dist/esm/v2/components/FieldError.js.map +1 -1
- package/dist/esm/v2/components/FieldHelp.js +28 -49
- package/dist/esm/v2/components/FieldHelp.js.map +1 -1
- package/dist/esm/v2/components/FileCard.js +14 -19
- package/dist/esm/v2/components/FileCard.js.map +1 -1
- package/dist/esm/v2/components/FilterTab.js +22 -31
- package/dist/esm/v2/components/FilterTab.js.map +1 -1
- package/dist/esm/v2/components/ForbiddenPage.js +28 -8
- package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/esm/v2/components/FormGrid.js +48 -54
- package/dist/esm/v2/components/FormGrid.js.map +1 -1
- package/dist/esm/v2/components/FormikDisplay.js +98 -24
- package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
- package/dist/esm/v2/components/Input.js +75 -34
- package/dist/esm/v2/components/Input.js.map +1 -1
- package/dist/esm/v2/components/KPICard.js +42 -51
- package/dist/esm/v2/components/KPICard.js.map +1 -1
- package/dist/esm/v2/components/KPIStrip.js +9 -15
- package/dist/esm/v2/components/KPIStrip.js.map +1 -1
- package/dist/esm/v2/components/KV.js +16 -23
- package/dist/esm/v2/components/KV.js.map +1 -1
- package/dist/esm/v2/components/KVGrid.js +15 -23
- package/dist/esm/v2/components/KVGrid.js.map +1 -1
- package/dist/esm/v2/components/Layout.js +81 -117
- package/dist/esm/v2/components/Layout.js.map +1 -1
- package/dist/esm/v2/components/MobileRowCard.js +64 -75
- package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
- package/dist/esm/v2/components/Modal.js +44 -53
- package/dist/esm/v2/components/Modal.js.map +1 -1
- package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
- package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/esm/v2/components/NotFoundPage.js +28 -9
- package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
- package/dist/esm/v2/components/NumberInput.js +77 -107
- package/dist/esm/v2/components/NumberInput.js.map +1 -1
- package/dist/esm/v2/components/OverflowMenu.js +24 -42
- package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
- package/dist/esm/v2/components/PdfViewer.js +24 -33
- package/dist/esm/v2/components/PdfViewer.js.map +1 -1
- package/dist/esm/v2/components/ProgressBar.js +28 -36
- package/dist/esm/v2/components/ProgressBar.js.map +1 -1
- package/dist/esm/v2/components/Radio.js +49 -57
- package/dist/esm/v2/components/Radio.js.map +1 -1
- package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
- package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/esm/v2/components/SectionHeader.js +24 -31
- package/dist/esm/v2/components/SectionHeader.js.map +1 -1
- package/dist/esm/v2/components/Segmented.js +59 -84
- package/dist/esm/v2/components/Segmented.js.map +1 -1
- package/dist/esm/v2/components/Select.js +100 -138
- package/dist/esm/v2/components/Select.js.map +1 -1
- package/dist/esm/v2/components/ServerErrorPage.js +27 -10
- package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/esm/v2/components/Skeleton.js +81 -96
- package/dist/esm/v2/components/Skeleton.js.map +1 -1
- package/dist/esm/v2/components/SkipLink.js +6 -7
- package/dist/esm/v2/components/SkipLink.js.map +1 -1
- package/dist/esm/v2/components/Spinner.js +13 -22
- package/dist/esm/v2/components/Spinner.js.map +1 -1
- package/dist/esm/v2/components/Status.js +14 -25
- package/dist/esm/v2/components/Status.js.map +1 -1
- package/dist/esm/v2/components/Stepper.js +68 -71
- package/dist/esm/v2/components/Stepper.js.map +1 -1
- package/dist/esm/v2/components/Surface.js +25 -44
- package/dist/esm/v2/components/Surface.js.map +1 -1
- package/dist/esm/v2/components/Switch.js +21 -29
- package/dist/esm/v2/components/Switch.js.map +1 -1
- package/dist/esm/v2/components/TabPanel.js +84 -0
- package/dist/esm/v2/components/TabPanel.js.map +1 -0
- package/dist/esm/v2/components/Tabs.js +43 -19
- package/dist/esm/v2/components/Tabs.js.map +1 -1
- package/dist/esm/v2/components/TelInput.js +75 -108
- package/dist/esm/v2/components/TelInput.js.map +1 -1
- package/dist/esm/v2/components/Textarea.js +21 -30
- package/dist/esm/v2/components/Textarea.js.map +1 -1
- package/dist/esm/v2/components/TimePicker.js +59 -69
- package/dist/esm/v2/components/TimePicker.js.map +1 -1
- package/dist/esm/v2/components/Toast.js +109 -163
- package/dist/esm/v2/components/Toast.js.map +1 -1
- package/dist/esm/v2/components/Tooltip.js +18 -31
- package/dist/esm/v2/components/Tooltip.js.map +1 -1
- package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
- package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/esm/v2/components/_pickerShared.js +2 -2
- package/dist/esm/v2/components/_pickerShared.js.map +1 -1
- package/dist/esm/v2/components/index.js +37 -0
- package/dist/esm/v2/components/index.js.map +1 -1
- package/dist/esm/v2/hooks/index.js +62 -0
- package/dist/esm/v2/hooks/index.js.map +1 -1
- package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
- package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
- package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/esm/v2/hooks/useDensity.js +13 -17
- package/dist/esm/v2/hooks/useDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
- package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
- package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
- package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
- package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
- package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useSortedRows.js +3 -5
- package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/esm/v2/hooks/useTabLoading.js +6 -21
- package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/esm/v2/index.js +2 -3
- package/dist/esm/v2/index.js.map +1 -1
- package/dist/esm/v2/modalContext.js +2 -2
- package/dist/esm/v2/modalContext.js.map +1 -1
- package/dist/esm/v2/models/favorite.js.map +1 -1
- package/dist/esm/v2/models/personalization.js.map +1 -1
- package/dist/esm/v2/models/referentiel.js.map +1 -1
- package/dist/esm/v2/models/savedFilter.js.map +1 -1
- package/dist/esm/v2/patterns/ActionBar.js +115 -159
- package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/AppMain.js +108 -0
- package/dist/esm/v2/patterns/AppMain.js.map +1 -0
- package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
- package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/ChartFigure.js +151 -0
- package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
- package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/esm/v2/patterns/DataGrid.js +221 -255
- package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
- package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
- package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/esm/v2/patterns/DetailSplit.js +108 -0
- package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/esm/v2/patterns/FavoriteColumn.js +15 -17
- package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
- package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
- package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
- package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/esm/v2/patterns/FormPageShell.js +43 -41
- package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/FormSection.js +30 -38
- package/dist/esm/v2/patterns/FormSection.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCheckbox.js +29 -39
- package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCombobox.js +51 -69
- package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDatePicker.js +44 -58
- package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDateTimePicker.js +44 -58
- package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -1
- package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
- package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
- package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/esm/v2/patterns/FormikFile.js +94 -78
- package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
- package/dist/esm/v2/patterns/FormikInput.js +40 -53
- package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
- package/dist/esm/v2/patterns/FormikRadioGroup.js +39 -51
- package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -1
- package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
- package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/FormikSelect.js +64 -87
- package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/esm/v2/patterns/FormikTextarea.js +30 -46
- package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +53 -71
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
- package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/esm/v2/patterns/PageContent.js +10 -14
- package/dist/esm/v2/patterns/PageContent.js.map +1 -1
- package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
- package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/esm/v2/patterns/ReferentielField.js +327 -312
- package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/RowFavoriteToggle.js +27 -22
- package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -1
- package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
- package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
- package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
- package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/SortableHeader.js +22 -45
- package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/esm/v2/patterns/Tour.js +94 -120
- package/dist/esm/v2/patterns/Tour.js.map +1 -1
- package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
- package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/esm/v2/patterns/_pickerSerialisation.js +6 -8
- package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -1
- package/dist/esm/v2/patterns/_sort.js +17 -33
- package/dist/esm/v2/patterns/_sort.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
- package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
- package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/esm/v2/patterns/filterCriteria.js +102 -0
- package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/esm/v2/patterns/index.js +152 -0
- package/dist/esm/v2/patterns/index.js.map +1 -1
- package/dist/esm/v2/patterns/rowActions.js +223 -0
- package/dist/esm/v2/patterns/rowActions.js.map +1 -0
- package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
- package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
- package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
- package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js +28 -34
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
- package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
- package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/esm/v2/personalization/index.js +17 -0
- package/dist/esm/v2/personalization/index.js.map +1 -1
- package/dist/esm/v2/personalization/personalizationContext.js +9 -9
- package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/esm/v2/personalization/schema.js +8 -9
- package/dist/esm/v2/personalization/schema.js.map +1 -1
- package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
- package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/esm/v2/referentiel/types.js +2 -0
- package/dist/esm/v2/referentiel/types.js.map +1 -0
- package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
- package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
- package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
- package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/esm/v2/theme/_brand.js +8 -24
- package/dist/esm/v2/theme/_brand.js.map +1 -1
- package/dist/esm/v2/theme/_brandSecondary.js +8 -24
- package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
- package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/esm/v2/theme/cssVariables.js +62 -69
- package/dist/esm/v2/theme/cssVariables.js.map +1 -1
- package/dist/esm/v2/theme/index.js +5 -5
- package/dist/esm/v2/theme/index.js.map +1 -1
- package/dist/esm/v2/tokens/breakpoints.js +14 -14
- package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
- package/dist/esm/v2/tokens/chart.js +261 -0
- package/dist/esm/v2/tokens/chart.js.map +1 -0
- package/dist/esm/v2/tokens/colors.js +22 -22
- package/dist/esm/v2/tokens/colors.js.map +1 -1
- package/dist/esm/v2/tokens/density.js +62 -7
- package/dist/esm/v2/tokens/density.js.map +1 -1
- package/dist/esm/v2/tokens/index.js +49 -34
- package/dist/esm/v2/tokens/index.js.map +1 -1
- package/dist/esm/v2/tokens/motion.js +12 -20
- package/dist/esm/v2/tokens/motion.js.map +1 -1
- package/dist/esm/v2/tokens/radius.js +1 -1
- package/dist/esm/v2/tokens/radius.js.map +1 -1
- package/dist/esm/v2/tokens/shadows.js +6 -6
- package/dist/esm/v2/tokens/shadows.js.map +1 -1
- package/dist/esm/v2/tokens/spacing.js +2 -2
- package/dist/esm/v2/tokens/spacing.js.map +1 -1
- package/dist/esm/v2/tokens/state.js +1 -1
- package/dist/esm/v2/tokens/state.js.map +1 -1
- package/dist/esm/v2/tokens/statusPalette.js +17 -21
- package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
- package/dist/esm/v2/tokens/tokens.json +6 -1
- package/dist/esm/v2/tokens/typography.js +13 -13
- package/dist/esm/v2/tokens/typography.js.map +1 -1
- package/dist/esm/v2/tokens/zIndex.js +1 -1
- package/dist/esm/v2/tokens/zIndex.js.map +1 -1
- package/dist/esm/v2/types/datagrid.js.map +1 -1
- package/dist/esm/v2/utils/apiError.js +16 -37
- package/dist/esm/v2/utils/apiError.js.map +1 -1
- package/dist/esm/v2/utils/contrast.js +31 -32
- package/dist/esm/v2/utils/contrast.js.map +1 -1
- package/dist/esm/v2/utils/cx.js +5 -25
- package/dist/esm/v2/utils/cx.js.map +1 -1
- package/dist/esm/v2/utils/fileDownload.js +23 -26
- package/dist/esm/v2/utils/fileDownload.js.map +1 -1
- package/dist/esm/v2/utils/fileValidation.js +209 -0
- package/dist/esm/v2/utils/fileValidation.js.map +1 -0
- package/dist/esm/v2/utils/fmtDate.js +111 -0
- package/dist/esm/v2/utils/fmtDate.js.map +1 -0
- package/dist/esm/v2/utils/fmtMoney.js +8 -10
- package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
- package/dist/esm/v2/utils/formikErrors.js +78 -0
- package/dist/esm/v2/utils/formikErrors.js.map +1 -0
- package/dist/esm/v2/utils/index.js +35 -2
- package/dist/esm/v2/utils/index.js.map +1 -1
- package/dist/esm/v2/utils/mergeLabels.js +7 -12
- package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
- package/dist/esm/v2/utils/networkStatus.js +12 -12
- package/dist/esm/v2/utils/networkStatus.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +110 -49
- package/dist/index.js.map +1 -1
- package/dist/v2/__tests__/AppMain.test.js +133 -0
- package/dist/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/v2/__tests__/ChartFigure.test.js +183 -0
- package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/v2/__tests__/FieldError.test.js +82 -49
- package/dist/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/v2/__tests__/FieldNaming.test.js +161 -0
- package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/v2/__tests__/FieldWidth.test.js +23 -25
- package/dist/v2/__tests__/FieldWidth.test.js.map +1 -1
- package/dist/v2/__tests__/FileCard.test.js +29 -28
- package/dist/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/v2/__tests__/FormikCheckbox.test.js +90 -183
- package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -1
- package/dist/v2/__tests__/FormikDateTimePicker.test.js +38 -48
- package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
- package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
- package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/v2/__tests__/FormikRadioGroup.test.js +123 -204
- package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
- package/dist/v2/__tests__/MobileRowCard.test.js +63 -61
- package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
- package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
- package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/v2/__tests__/apiError.test.js +50 -69
- package/dist/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/v2/__tests__/banned-patterns.test.js +42 -123
- package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/v2/__tests__/chart-palette.test.js +205 -0
- package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/v2/__tests__/fileValidation.test.js +136 -0
- package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/v2/__tests__/filterCriteria.test.js +324 -0
- package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/fmtDate.test.js +69 -0
- package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/v2/__tests__/labels-merge.test.js +23 -27
- package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/v2/__tests__/locale-fallback.test.js +47 -52
- package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
- package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/rowActions.test.js +186 -0
- package/dist/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
- package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/v2/components/Accordion.js +60 -82
- package/dist/v2/components/Accordion.js.map +1 -1
- package/dist/v2/components/ActionStrip.js +40 -52
- package/dist/v2/components/ActionStrip.js.map +1 -1
- package/dist/v2/components/Banner.js +42 -41
- package/dist/v2/components/Banner.js.map +1 -1
- package/dist/v2/components/Busy.js +22 -27
- package/dist/v2/components/Busy.js.map +1 -1
- package/dist/v2/components/Button.js +39 -50
- package/dist/v2/components/Button.js.map +1 -1
- package/dist/v2/components/CategoryTag.d.ts.map +1 -1
- package/dist/v2/components/CategoryTag.js +49 -32
- package/dist/v2/components/CategoryTag.js.map +1 -1
- package/dist/v2/components/Checkbox.js +39 -45
- package/dist/v2/components/Checkbox.js.map +1 -1
- package/dist/v2/components/Chip.js +29 -42
- package/dist/v2/components/Chip.js.map +1 -1
- package/dist/v2/components/Combobox.js +122 -144
- package/dist/v2/components/Combobox.js.map +1 -1
- package/dist/v2/components/CommandPalette.js +138 -225
- package/dist/v2/components/CommandPalette.js.map +1 -1
- package/dist/v2/components/ConfirmDialog.js +46 -56
- package/dist/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/v2/components/DatePicker.js +81 -86
- package/dist/v2/components/DatePicker.js.map +1 -1
- package/dist/v2/components/DateRangePicker.js +77 -87
- package/dist/v2/components/DateRangePicker.js.map +1 -1
- package/dist/v2/components/DateTimePicker.js +84 -91
- package/dist/v2/components/DateTimePicker.js.map +1 -1
- package/dist/v2/components/Drawer.d.ts.map +1 -1
- package/dist/v2/components/Drawer.js +93 -88
- package/dist/v2/components/Drawer.js.map +1 -1
- package/dist/v2/components/Dropzone.js +150 -196
- package/dist/v2/components/Dropzone.js.map +1 -1
- package/dist/v2/components/EmptyState.js +18 -20
- package/dist/v2/components/EmptyState.js.map +1 -1
- package/dist/v2/components/FavoriteToggle.js +28 -39
- package/dist/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/v2/components/Field.d.ts +62 -4
- package/dist/v2/components/Field.d.ts.map +1 -1
- package/dist/v2/components/Field.js +169 -70
- package/dist/v2/components/Field.js.map +1 -1
- package/dist/v2/components/FieldError.js +18 -21
- package/dist/v2/components/FieldError.js.map +1 -1
- package/dist/v2/components/FieldHelp.js +40 -60
- package/dist/v2/components/FieldHelp.js.map +1 -1
- package/dist/v2/components/FileCard.js +27 -31
- package/dist/v2/components/FileCard.js.map +1 -1
- package/dist/v2/components/FilterTab.js +30 -38
- package/dist/v2/components/FilterTab.js.map +1 -1
- package/dist/v2/components/ForbiddenPage.d.ts +25 -1
- package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
- package/dist/v2/components/ForbiddenPage.js +37 -17
- package/dist/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/v2/components/FormGrid.js +53 -59
- package/dist/v2/components/FormGrid.js.map +1 -1
- package/dist/v2/components/FormikDisplay.d.ts +50 -1
- package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
- package/dist/v2/components/FormikDisplay.js +108 -33
- package/dist/v2/components/FormikDisplay.js.map +1 -1
- package/dist/v2/components/Input.d.ts +40 -0
- package/dist/v2/components/Input.d.ts.map +1 -1
- package/dist/v2/components/Input.js +81 -41
- package/dist/v2/components/Input.js.map +1 -1
- package/dist/v2/components/KPICard.js +57 -67
- package/dist/v2/components/KPICard.js.map +1 -1
- package/dist/v2/components/KPIStrip.js +16 -22
- package/dist/v2/components/KPIStrip.js.map +1 -1
- package/dist/v2/components/KV.js +25 -31
- package/dist/v2/components/KV.js.map +1 -1
- package/dist/v2/components/KVGrid.js +19 -26
- package/dist/v2/components/KVGrid.js.map +1 -1
- package/dist/v2/components/Layout.js +91 -120
- package/dist/v2/components/Layout.js.map +1 -1
- package/dist/v2/components/MobileRowCard.js +79 -91
- package/dist/v2/components/MobileRowCard.js.map +1 -1
- package/dist/v2/components/Modal.js +61 -69
- package/dist/v2/components/Modal.js.map +1 -1
- package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
- package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
- package/dist/v2/components/NetworkErrorPage.js +38 -21
- package/dist/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/v2/components/NotFoundPage.d.ts +17 -1
- package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
- package/dist/v2/components/NotFoundPage.js +37 -18
- package/dist/v2/components/NotFoundPage.js.map +1 -1
- package/dist/v2/components/NumberInput.js +88 -118
- package/dist/v2/components/NumberInput.js.map +1 -1
- package/dist/v2/components/OverflowMenu.js +38 -56
- package/dist/v2/components/OverflowMenu.js.map +1 -1
- package/dist/v2/components/PdfViewer.js +34 -45
- package/dist/v2/components/PdfViewer.js.map +1 -1
- package/dist/v2/components/ProgressBar.js +42 -49
- package/dist/v2/components/ProgressBar.js.map +1 -1
- package/dist/v2/components/Radio.js +59 -67
- package/dist/v2/components/Radio.js.map +1 -1
- package/dist/v2/components/SectionErrorBoundary.js +90 -135
- package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/v2/components/SectionHeader.js +34 -41
- package/dist/v2/components/SectionHeader.js.map +1 -1
- package/dist/v2/components/Segmented.js +69 -93
- package/dist/v2/components/Segmented.js.map +1 -1
- package/dist/v2/components/Select.d.ts +26 -2
- package/dist/v2/components/Select.d.ts.map +1 -1
- package/dist/v2/components/Select.js +120 -155
- package/dist/v2/components/Select.js.map +1 -1
- package/dist/v2/components/ServerErrorPage.d.ts +27 -1
- package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
- package/dist/v2/components/ServerErrorPage.js +37 -20
- package/dist/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/v2/components/Skeleton.js +86 -100
- package/dist/v2/components/Skeleton.js.map +1 -1
- package/dist/v2/components/SkipLink.js +9 -12
- package/dist/v2/components/SkipLink.js.map +1 -1
- package/dist/v2/components/Spinner.js +16 -25
- package/dist/v2/components/Spinner.js.map +1 -1
- package/dist/v2/components/Status.js +18 -29
- package/dist/v2/components/Status.js.map +1 -1
- package/dist/v2/components/Stepper.js +80 -82
- package/dist/v2/components/Stepper.js.map +1 -1
- package/dist/v2/components/Surface.js +34 -49
- package/dist/v2/components/Surface.js.map +1 -1
- package/dist/v2/components/Switch.js +29 -37
- package/dist/v2/components/Switch.js.map +1 -1
- package/dist/v2/components/TabPanel.d.ts +17 -0
- package/dist/v2/components/TabPanel.d.ts.map +1 -0
- package/dist/v2/components/TabPanel.js +90 -0
- package/dist/v2/components/TabPanel.js.map +1 -0
- package/dist/v2/components/Tabs.d.ts +25 -0
- package/dist/v2/components/Tabs.d.ts.map +1 -1
- package/dist/v2/components/Tabs.js +53 -29
- package/dist/v2/components/Tabs.js.map +1 -1
- package/dist/v2/components/TelInput.js +80 -115
- package/dist/v2/components/TelInput.js.map +1 -1
- package/dist/v2/components/Textarea.js +26 -35
- package/dist/v2/components/Textarea.js.map +1 -1
- package/dist/v2/components/TimePicker.js +62 -74
- package/dist/v2/components/TimePicker.js.map +1 -1
- package/dist/v2/components/Toast.js +119 -174
- package/dist/v2/components/Toast.js.map +1 -1
- package/dist/v2/components/Tooltip.js +23 -38
- package/dist/v2/components/Tooltip.js.map +1 -1
- package/dist/v2/components/_ErrorPageBody.js +15 -16
- package/dist/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/v2/components/_pickerShared.js +5 -5
- package/dist/v2/components/_pickerShared.js.map +1 -1
- package/dist/v2/components/index.d.ts +40 -1
- package/dist/v2/components/index.d.ts.map +1 -1
- package/dist/v2/components/index.js +153 -136
- package/dist/v2/components/index.js.map +1 -1
- package/dist/v2/hooks/index.d.ts +65 -0
- package/dist/v2/hooks/index.d.ts.map +1 -1
- package/dist/v2/hooks/index.js +63 -24
- package/dist/v2/hooks/index.js.map +1 -1
- package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
- package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
- package/dist/v2/hooks/useAppliedFilters.js +117 -0
- package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.js +87 -0
- package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/v2/hooks/useDelayedFlag.js +6 -20
- package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/v2/hooks/useDensity.d.ts.map +1 -1
- package/dist/v2/hooks/useDensity.js +14 -18
- package/dist/v2/hooks/useDensity.js.map +1 -1
- package/dist/v2/hooks/useFocusFirstError.js +26 -34
- package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/v2/hooks/useFocusTrap.js +20 -24
- package/dist/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
- package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.js +39 -54
- package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
- package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/v2/hooks/useResolvedDensity.js +5 -13
- package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/v2/hooks/useSortedRows.js +4 -6
- package/dist/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/v2/hooks/useTabLoading.js +7 -22
- package/dist/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/v2/index.js +143 -145
- package/dist/v2/index.js.map +1 -1
- package/dist/v2/modalContext.js +2 -2
- package/dist/v2/modalContext.js.map +1 -1
- package/dist/v2/models/favorite.d.ts +8 -9
- package/dist/v2/models/favorite.d.ts.map +1 -1
- package/dist/v2/models/favorite.js.map +1 -1
- package/dist/v2/models/index.js +4 -4
- package/dist/v2/models/index.js.map +1 -1
- package/dist/v2/models/personalization.d.ts +44 -48
- package/dist/v2/models/personalization.d.ts.map +1 -1
- package/dist/v2/models/personalization.js.map +1 -1
- package/dist/v2/models/referentiel.d.ts +32 -50
- package/dist/v2/models/referentiel.d.ts.map +1 -1
- package/dist/v2/models/referentiel.js.map +1 -1
- package/dist/v2/models/savedFilter.d.ts +8 -17
- package/dist/v2/models/savedFilter.d.ts.map +1 -1
- package/dist/v2/models/savedFilter.js.map +1 -1
- package/dist/v2/patterns/ActionBar.js +152 -187
- package/dist/v2/patterns/ActionBar.js.map +1 -1
- package/dist/v2/patterns/AppMain.d.ts +109 -0
- package/dist/v2/patterns/AppMain.d.ts.map +1 -0
- package/dist/v2/patterns/AppMain.js +115 -0
- package/dist/v2/patterns/AppMain.js.map +1 -0
- package/dist/v2/patterns/BulkActionBar.js +40 -42
- package/dist/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/v2/patterns/ChartFigure.d.ts +124 -0
- package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
- package/dist/v2/patterns/ChartFigure.js +159 -0
- package/dist/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
- package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/v2/patterns/ColumnsToggle.js +60 -94
- package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
- package/dist/v2/patterns/DataGrid.js +262 -297
- package/dist/v2/patterns/DataGrid.js.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
- package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/v2/patterns/DataGridToolbar.js +103 -106
- package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/v2/patterns/DataGridVirtualized.js +179 -217
- package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/v2/patterns/DetailSplit.d.ts +87 -0
- package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
- package/dist/v2/patterns/DetailSplit.js +116 -0
- package/dist/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/v2/patterns/FavoriteColumn.js +22 -23
- package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/v2/patterns/FavoritesFilter.js +36 -44
- package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
- package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
- package/dist/v2/patterns/FilterTabBar.js +120 -0
- package/dist/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/v2/patterns/FormErrorSummary.js +20 -23
- package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/v2/patterns/FormPageShell.js +53 -50
- package/dist/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/v2/patterns/FormSection.d.ts +8 -3
- package/dist/v2/patterns/FormSection.d.ts.map +1 -1
- package/dist/v2/patterns/FormSection.js +44 -51
- package/dist/v2/patterns/FormSection.js.map +1 -1
- package/dist/v2/patterns/FormikCheckbox.js +36 -45
- package/dist/v2/patterns/FormikCheckbox.js.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
- package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/v2/patterns/FormikCombobox.js +55 -72
- package/dist/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.js +50 -64
- package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/v2/patterns/FormikDateTimePicker.js +50 -64
- package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -1
- package/dist/v2/patterns/FormikErrorFocus.js +25 -26
- package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
- package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
- package/dist/v2/patterns/FormikErrorSummary.js +97 -0
- package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/v2/patterns/FormikFile.d.ts +14 -1
- package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
- package/dist/v2/patterns/FormikFile.js +99 -83
- package/dist/v2/patterns/FormikFile.js.map +1 -1
- package/dist/v2/patterns/FormikInput.js +45 -58
- package/dist/v2/patterns/FormikInput.js.map +1 -1
- package/dist/v2/patterns/FormikRadioGroup.js +45 -56
- package/dist/v2/patterns/FormikRadioGroup.js.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
- package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.js +54 -64
- package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/v2/patterns/FormikSelect.js +70 -92
- package/dist/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/v2/patterns/FormikTextarea.js +35 -51
- package/dist/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.js +60 -80
- package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
- package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/v2/patterns/PageContent.js +17 -20
- package/dist/v2/patterns/PageContent.js.map +1 -1
- package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
- package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
- package/dist/v2/patterns/PreviewDrawer.js +159 -0
- package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/v2/patterns/ReferentielField.d.ts +86 -2
- package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/ReferentielField.js +347 -327
- package/dist/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/v2/patterns/RowFavoriteToggle.d.ts +6 -0
- package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -1
- package/dist/v2/patterns/RowFavoriteToggle.js +38 -30
- package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -1
- package/dist/v2/patterns/SaveFilterDialog.js +50 -77
- package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
- package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/v2/patterns/SkeletonPageShell.js +122 -143
- package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/v2/patterns/SortableHeader.js +35 -57
- package/dist/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/v2/patterns/Tour.js +121 -142
- package/dist/v2/patterns/Tour.js.map +1 -1
- package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
- package/dist/v2/patterns/_dataGridShared.js +131 -147
- package/dist/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/v2/patterns/_pickerSerialisation.js +9 -10
- package/dist/v2/patterns/_pickerSerialisation.js.map +1 -1
- package/dist/v2/patterns/_sort.js +17 -33
- package/dist/v2/patterns/_sort.js.map +1 -1
- package/dist/v2/patterns/_useColumnReorder.js +124 -163
- package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/v2/patterns/_useColumnResize.js +80 -99
- package/dist/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/v2/patterns/filterCriteria.d.ts +78 -0
- package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
- package/dist/v2/patterns/filterCriteria.js +110 -0
- package/dist/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/v2/patterns/index.d.ts +160 -0
- package/dist/v2/patterns/index.d.ts.map +1 -1
- package/dist/v2/patterns/index.js +157 -79
- package/dist/v2/patterns/index.js.map +1 -1
- package/dist/v2/patterns/rowActions.d.ts +150 -0
- package/dist/v2/patterns/rowActions.d.ts.map +1 -0
- package/dist/v2/patterns/rowActions.js +232 -0
- package/dist/v2/patterns/rowActions.js.map +1 -0
- package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
- package/dist/v2/personalization/PersonalizationProvider.js +57 -53
- package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
- package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/index.js +5 -5
- package/dist/v2/personalization/adapters/index.js.map +1 -1
- package/dist/v2/personalization/capabilities/favorites.js +39 -62
- package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
- package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/v2/personalization/capabilities/gridPreferences.js +31 -36
- package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -1
- package/dist/v2/personalization/capabilities/index.js +12 -12
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
- package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.js +81 -182
- package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/v2/personalization/index.d.ts +16 -0
- package/dist/v2/personalization/index.d.ts.map +1 -1
- package/dist/v2/personalization/index.js +30 -23
- package/dist/v2/personalization/index.js.map +1 -1
- package/dist/v2/personalization/personalizationContext.js +10 -12
- package/dist/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/v2/personalization/schema.js +8 -9
- package/dist/v2/personalization/schema.js.map +1 -1
- package/dist/v2/referentiel/ReferentielProvider.js +31 -45
- package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/v2/referentiel/index.js +11 -13
- package/dist/v2/referentiel/index.js.map +1 -1
- package/dist/v2/referentiel/types.d.ts +105 -0
- package/dist/v2/referentiel/types.d.ts.map +1 -0
- package/dist/v2/referentiel/types.js +6 -0
- package/dist/v2/referentiel/types.js.map +1 -0
- package/dist/v2/referentiel/useReferentielClient.js +13 -16
- package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
- package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.js +63 -120
- package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
- package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.js +40 -95
- package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/v2/theme/_brand.js +12 -26
- package/dist/v2/theme/_brand.js.map +1 -1
- package/dist/v2/theme/_brandSecondary.js +12 -26
- package/dist/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/v2/theme/createPortnetTheme.js +41 -49
- package/dist/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/v2/theme/cssVariables.d.ts +3 -3
- package/dist/v2/theme/cssVariables.d.ts.map +1 -1
- package/dist/v2/theme/cssVariables.js +65 -70
- package/dist/v2/theme/cssVariables.js.map +1 -1
- package/dist/v2/theme/index.js +10 -10
- package/dist/v2/theme/index.js.map +1 -1
- package/dist/v2/tokens/breakpoints.js +16 -16
- package/dist/v2/tokens/breakpoints.js.map +1 -1
- package/dist/v2/tokens/chart.d.ts +103 -0
- package/dist/v2/tokens/chart.d.ts.map +1 -0
- package/dist/v2/tokens/chart.js +270 -0
- package/dist/v2/tokens/chart.js.map +1 -0
- package/dist/v2/tokens/colors.js +24 -24
- package/dist/v2/tokens/colors.js.map +1 -1
- package/dist/v2/tokens/density.d.ts +104 -0
- package/dist/v2/tokens/density.d.ts.map +1 -1
- package/dist/v2/tokens/density.js +67 -12
- package/dist/v2/tokens/density.js.map +1 -1
- package/dist/v2/tokens/index.d.ts +50 -1
- package/dist/v2/tokens/index.d.ts.map +1 -1
- package/dist/v2/tokens/index.js +116 -68
- package/dist/v2/tokens/index.js.map +1 -1
- package/dist/v2/tokens/motion.js +16 -22
- package/dist/v2/tokens/motion.js.map +1 -1
- package/dist/v2/tokens/radius.js +3 -3
- package/dist/v2/tokens/radius.js.map +1 -1
- package/dist/v2/tokens/shadows.js +8 -8
- package/dist/v2/tokens/shadows.js.map +1 -1
- package/dist/v2/tokens/spacing.js +4 -4
- package/dist/v2/tokens/spacing.js.map +1 -1
- package/dist/v2/tokens/state.js +3 -3
- package/dist/v2/tokens/state.js.map +1 -1
- package/dist/v2/tokens/statusPalette.js +21 -23
- package/dist/v2/tokens/statusPalette.js.map +1 -1
- package/dist/v2/tokens/tokens.json +6 -1
- package/dist/v2/tokens/typography.js +15 -15
- package/dist/v2/tokens/typography.js.map +1 -1
- package/dist/v2/tokens/zIndex.js +3 -3
- package/dist/v2/tokens/zIndex.js.map +1 -1
- package/dist/v2/types/datagrid.d.ts +9 -1
- package/dist/v2/types/datagrid.d.ts.map +1 -1
- package/dist/v2/types/datagrid.js.map +1 -1
- package/dist/v2/types/index.js +2 -2
- package/dist/v2/types/index.js.map +1 -1
- package/dist/v2/utils/apiError.js +16 -37
- package/dist/v2/utils/apiError.js.map +1 -1
- package/dist/v2/utils/contrast.js +31 -32
- package/dist/v2/utils/contrast.js.map +1 -1
- package/dist/v2/utils/cx.js +7 -27
- package/dist/v2/utils/cx.js.map +1 -1
- package/dist/v2/utils/fileDownload.js +25 -28
- package/dist/v2/utils/fileDownload.js.map +1 -1
- package/dist/v2/utils/fileValidation.d.ts +116 -0
- package/dist/v2/utils/fileValidation.d.ts.map +1 -0
- package/dist/v2/utils/fileValidation.js +220 -0
- package/dist/v2/utils/fileValidation.js.map +1 -0
- package/dist/v2/utils/fmtDate.d.ts +103 -0
- package/dist/v2/utils/fmtDate.d.ts.map +1 -0
- package/dist/v2/utils/fmtDate.js +119 -0
- package/dist/v2/utils/fmtDate.js.map +1 -0
- package/dist/v2/utils/fmtMoney.d.ts +3 -3
- package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
- package/dist/v2/utils/fmtMoney.js +9 -11
- package/dist/v2/utils/fmtMoney.js.map +1 -1
- package/dist/v2/utils/formikErrors.d.ts +67 -0
- package/dist/v2/utils/formikErrors.d.ts.map +1 -0
- package/dist/v2/utils/formikErrors.js +85 -0
- package/dist/v2/utils/formikErrors.js.map +1 -0
- package/dist/v2/utils/index.d.ts +5 -0
- package/dist/v2/utils/index.d.ts.map +1 -1
- package/dist/v2/utils/index.js +67 -18
- package/dist/v2/utils/index.js.map +1 -1
- package/dist/v2/utils/mergeLabels.js +9 -14
- package/dist/v2/utils/mergeLabels.js.map +1 -1
- package/dist/v2/utils/networkStatus.js +14 -14
- package/dist/v2/utils/networkStatus.js.map +1 -1
- package/package.json +26 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandPalette.js","names":["React","Dialog","Box","IconButton","SearchIcon","CloseIcon","useFocusTrap","mergeLabels","jsx","_jsx","jsxs","_jsxs","DEBOUNCE_MS","DEFAULT_LABELS","Object","freeze","title","footerHint","closeButton","resultsCount","n","concat","pinnedTitle","recentTitle","BACKDROP_SLOT_PROPS","sx","backgroundColor","useDebounced","value","ms","_React$useState","useState","_React$useState2","_slicedToArray","out","setOut","useEffect","t","setTimeout","clearTimeout","normalize","s","String","replace","toLowerCase","subsequenceRun","hay","token","i","consecutive","bestConsecutive","h","length","scoreToken","startsWith","wbIdx","indexOf","subIdx","Math","min","run","scoreQuery","haystack","query","tokens","split","filter","Boolean","total","_iterator","_createForOfIteratorHelper","_step","done","err","e","f","filterGroups","groups","q","trim","map","g","id","items","_iterator2","_step2","scored","_iterator3","_step3","it","label","keywords","push","item","score","sort","a","b","CommandPalette","_ref","open","onClose","_ref$groups","recentItems","pinnedItems","_ref$placeholder","placeholder","_ref$emptyState","emptyState","onQueryChange","labels","L","useMemo","_React$useState3","_React$useState4","setQuery","debouncedQuery","_React$useState5","_React$useState6","highlight","setHighlight","inputRef","useRef","listRef","titleId","useId","listId","inputId","paperRef","allGroups","hasPinned","Array","isArray","hasRecent","_toConsumableArray","visibleGroups","itemsOnly","flatMap","max","_listRef$current","node","current","querySelector","scrollIntoView","block","activate","index","_it$onSelect","onSelect","call","onInputKeyDown","key","preventDefault","onInputChange","target","activeItemId","undefined","slotProps","paper","ref","width","maxWidth","borderRadius","boxShadow","margin","overflow","backdrop","disableAutoFocus","disableEnforceFocus","disableRestoreFocus","children","className","display","alignItems","gap","padding","borderBottom","color","fontSize","component","type","role","autoFocus","onChange","onKeyDown","flex","border","outline","background","fontFamily","fontWeight","size","onClick","maxHeight","overflowY","textAlign","headerId","textTransform","letterSpacing","entry","isActive","idx","onMouseEnter","cursor","icon","minWidth","textOverflow","whiteSpace","shortcut","justifyContent","borderTop"],"sources":["../../../../src/lib/v2/components/CommandPalette.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport Box from \"@mui/material/Box\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport useFocusTrap from \"../hooks/useFocusTrap\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * CommandPalette - Portnet UI v2\r\n *\r\n * Charter §03 / §07 · ⌘K command palette. Keyboard-first launcher for pages\r\n * and actions across the app.\r\n *\r\n * const [open, setOpen] = useState(false);\r\n * useEffect(() => {\r\n * const onKey = (e) => {\r\n * if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"k\") {\r\n * e.preventDefault();\r\n * setOpen(true);\r\n * }\r\n * };\r\n * window.addEventListener(\"keydown\", onKey);\r\n * return () => window.removeEventListener(\"keydown\", onKey);\r\n * }, []);\r\n *\r\n * <CommandPalette\r\n * open={open}\r\n * onClose={() => setOpen(false)}\r\n * groups={[\r\n * { id: \"pages\", title: \"Pages\", items: [\r\n * { id: \"dashboard\", label: \"Tableau de bord\", icon: <DashboardIcon />, onSelect: () => nav(\"/\") },\r\n * { id: \"titres\", label: \"Titres d'importation\", onSelect: () => nav(\"/titres\") },\r\n * ]},\r\n * { id: \"actions\", title: \"Actions\", items: [\r\n * { id: \"new-titre\", label: \"Nouveau titre\", icon: <AddIcon />, shortcut: \"C\", onSelect: createTitre },\r\n * ]},\r\n * ]}\r\n * />\r\n *\r\n * Recent + Pinned items (Batch 16 / H4)\r\n * -------------------------------------\r\n * <CommandPalette\r\n * pinnedItems={[\r\n * { id: \"dashboard\", label: \"Tableau de bord\", icon: <DashboardIcon />, onSelect: () => nav(\"/\") },\r\n * ]}\r\n * recentItems={[\r\n * { id: \"titre-2025-IM-0042\", label: \"2025-IM-0042 (SOFRANE SA)\", onSelect: () => nav(\"/titres/2025-IM-0042\") },\r\n * ]}\r\n * groups={[ ... ]}\r\n * />\r\n *\r\n * Both extras are HOST-MANAGED. Lib does NOT track selections or\r\n * pinning state — track in your per-item onSelect handler and\r\n * persist to localStorage / server prefs as a host concern.\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <CommandPalette\r\n * placeholder=\"Search a page or action…\"\r\n * emptyState=\"No result.\"\r\n * labels={{\r\n * title: \"Command palette\",\r\n * footerHint: \"↑↓ to navigate · ↵ to select · Esc to close\",\r\n * closeButton: \"Close palette\",\r\n * resultsCount: (n) => `${n} result${n === 1 ? \"\" : \"s\"}`,\r\n * pinnedTitle: \"Pinned\",\r\n * recentTitle: \"Recent\",\r\n * }}\r\n * />\r\n *\r\n * `resultsCount` is a function so the host can plug in proper plural\r\n * rules (Intl.PluralRules, ICU MessageFormat, i18next, …).\r\n *\r\n * Matching behaviour (Batch 13 / D2):\r\n * The search is fuzzy. Each match is scored across four tiers\r\n * (prefix > word-boundary > substring > subsequence) and within\r\n * each group items are surfaced in descending score order.\r\n * Multi-token queries (\"tit imp\") split on whitespace and require\r\n * every token to hit somewhere; final score is the per-token\r\n * average. Diacritics are folded — \"Emile\" matches \"Émile\".\r\n *\r\n * Focus management (R-F.2):\r\n * Backed by the v2 useFocusTrap hook (Batch 3). The search <input>\r\n * declares `autoFocus`, so on open the trap's initial-focus rAF\r\n * lands directly on it. The input is a role=\"combobox\" and carries an\r\n * aria-label (CP-1) so screen readers announce a name, not just a role.\r\n */\r\n\r\nconst DEBOUNCE_MS = 80;\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n title: \"Palette de commandes\",\r\n footerHint: \"↑↓ pour naviguer · ↵ pour sélectionner · Esc pour fermer\",\r\n closeButton: \"Fermer la palette\",\r\n resultsCount: (n: number) => `${n} résultat${n > 1 ? \"s\" : \"\"}`,\r\n pinnedTitle: \"Épinglés\",\r\n recentTitle: \"Récents\",\r\n});\r\n\r\n// MUI v9: backdrop slot bag. Hoisted — its content (only an sx token)\r\n// is independent of any palette instance state.\r\nconst BACKDROP_SLOT_PROPS = Object.freeze({\r\n // R-G.2 / R-AI.1 - backdrop derived from the live --fg token (matches\r\n // Modal). Adapts to any future theme override.\r\n sx: { backgroundColor: \"color-mix(in srgb, var(--fg) 45%, transparent)\" },\r\n});\r\n\r\nexport interface CommandPaletteItem {\r\n id: string | number;\r\n label: React.ReactNode;\r\n icon?: React.ReactNode | undefined;\r\n shortcut?: React.ReactNode | undefined;\r\n keywords?: string | undefined;\r\n onSelect?: (() => void) | undefined;\r\n}\r\n\r\nexport interface CommandPaletteGroup {\r\n id: string;\r\n title?: React.ReactNode | undefined;\r\n items: CommandPaletteItem[];\r\n}\r\n\r\nexport interface CommandPaletteLabels {\r\n title?: string | undefined;\r\n footerHint?: string | undefined;\r\n closeButton?: string | undefined;\r\n resultsCount?: ((n: number) => React.ReactNode) | undefined;\r\n pinnedTitle?: React.ReactNode | undefined;\r\n recentTitle?: React.ReactNode | undefined;\r\n}\r\n\r\nexport interface CommandPaletteProps {\r\n open?: boolean | undefined;\r\n onClose?: (() => void) | undefined;\r\n groups?: CommandPaletteGroup[] | undefined;\r\n recentItems?: CommandPaletteItem[] | undefined;\r\n pinnedItems?: CommandPaletteItem[] | undefined;\r\n placeholder?: string | undefined;\r\n emptyState?: React.ReactNode | undefined;\r\n onQueryChange?: ((q: string) => void) | undefined;\r\n labels?: CommandPaletteLabels | undefined;\r\n}\r\n\r\nfunction useDebounced<T>(value: T, ms: number): T {\r\n const [out, setOut] = React.useState(value);\r\n React.useEffect(() => {\r\n const t = setTimeout(() => setOut(value), ms);\r\n return () => clearTimeout(t);\r\n }, [value, ms]);\r\n return out;\r\n}\r\n\r\n/* ── Fuzzy matching (D2) ───────────────────────────────────────────────\r\n * Module-level pure helpers. No external dep, no allocation per match\r\n * beyond the obligatory tokenisation Array.\r\n *\r\n * Score scale is conventional, NOT meaningful in absolute terms:\r\n * - 0 → no match (filtered out)\r\n * - higher → more relevant (sorted descending within each group)\r\n */\r\n\r\n/**\r\n * NFD-normalise + strip combining marks + lowercase. Folds diacritics\r\n * so \"Émile\" → \"emile\" and \"Café\" → \"cafe\", letting users search\r\n * without typing accents. The unicode range \\u0300-\\u036F covers the\r\n * Combining Diacritical Marks block (U+0300..U+036F).\r\n */\r\nfunction normalize(s: string): string {\r\n if (!s) return \"\";\r\n return String(s).normalize(\"NFD\").replace(/[\\u0300-\\u036F]/g, \"\").toLowerCase();\r\n}\r\n\r\n/**\r\n * Subsequence match score — how well does `token` appear (in order,\r\n * not necessarily contiguous) inside `hay`?\r\n *\r\n * - Returns 0 if any character is missing.\r\n * - Otherwise returns the longest CONSECUTIVE run divided by the\r\n * token length. So \"imp\" inside \"important\" gets ratio 1.0\r\n * (whole word matched contiguously), while \"imp\" inside\r\n * \"i_m_p\" (gaps) gets a low ratio.\r\n *\r\n * The contiguous-run heuristic is much cheaper than a full Smith-\r\n * Waterman and good enough for command-palette UX.\r\n */\r\nfunction subsequenceRun(hay: string, token: string): number {\r\n let i = 0;\r\n let consecutive = 0;\r\n let bestConsecutive = 0;\r\n for (let h = 0; h < hay.length && i < token.length; h += 1) {\r\n if (hay[h] === token[i]) {\r\n i += 1;\r\n consecutive += 1;\r\n if (consecutive > bestConsecutive) bestConsecutive = consecutive;\r\n } else {\r\n consecutive = 0;\r\n }\r\n }\r\n if (i < token.length) return 0;\r\n return bestConsecutive / token.length;\r\n}\r\n\r\n/**\r\n * Score a single token against a haystack. Four tiers, best wins.\r\n * Both inputs are assumed already normalised (lowercase, no diacritics).\r\n */\r\nfunction scoreToken(hay: string, token: string): number {\r\n if (hay.startsWith(token)) return 100;\r\n\r\n const wbIdx = hay.indexOf(\" \" + token);\r\n if (wbIdx >= 0) return 80;\r\n\r\n const subIdx = hay.indexOf(token);\r\n if (subIdx >= 0) {\r\n return 60 - Math.min(20, subIdx * 0.1);\r\n }\r\n\r\n const run = subsequenceRun(hay, token);\r\n if (run > 0) return 40 * run;\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * Score a multi-token query. Splits on whitespace; every token must hit\r\n * somewhere. Returns the average across tokens, or 0 if any token misses.\r\n */\r\nfunction scoreQuery(haystack: string, query: string): number {\r\n const hay = normalize(haystack);\r\n const tokens = normalize(query).split(/\\s+/).filter(Boolean);\r\n if (tokens.length === 0) return 1;\r\n if (!hay) return 0;\r\n\r\n let total = 0;\r\n for (const token of tokens) {\r\n const s = scoreToken(hay, token);\r\n if (s === 0) return 0;\r\n total += s;\r\n }\r\n return total / tokens.length;\r\n}\r\n\r\n/**\r\n * Filter `groups` against the query. Within each group, items are\r\n * surfaced in descending score order (most relevant first). Group\r\n * order itself is preserved — groups are author-defined categories,\r\n * not relevance buckets.\r\n *\r\n * Empty / whitespace-only query → return groups untouched (just drop\r\n * the empty ones). Preserves the original \"no query = browse\" UX.\r\n */\r\nfunction filterGroups(groups: CommandPaletteGroup[], query: string): CommandPaletteGroup[] {\r\n const q = query.trim();\r\n if (!q) {\r\n return groups\r\n .map((g) => ({ id: g.id, title: g.title, items: g.items }))\r\n .filter((g) => g.items.length > 0);\r\n }\r\n\r\n const out: CommandPaletteGroup[] = [];\r\n for (const g of groups) {\r\n const scored: Array<{ item: CommandPaletteItem; score: number }> = [];\r\n for (const it of g.items) {\r\n const hay = `${it.label} ${it.keywords || \"\"}`;\r\n const s = scoreQuery(hay, q);\r\n if (s > 0) scored.push({ item: it, score: s });\r\n }\r\n if (scored.length === 0) continue;\r\n scored.sort((a, b) => b.score - a.score);\r\n out.push({ id: g.id, title: g.title, items: scored.map((s) => s.item) });\r\n }\r\n return out;\r\n}\r\n\r\nfunction CommandPalette({\r\n open,\r\n onClose,\r\n groups = [],\r\n recentItems,\r\n pinnedItems,\r\n placeholder = \"Rechercher une page, une action…\",\r\n emptyState = \"Aucun résultat.\",\r\n onQueryChange,\r\n labels,\r\n}: CommandPaletteProps) {\r\n const L = React.useMemo(\r\n () => (mergeLabels(DEFAULT_LABELS, labels)),\r\n [labels]\r\n );\r\n\r\n const [query, setQuery] = React.useState(\"\");\r\n const debouncedQuery = useDebounced(query, DEBOUNCE_MS);\r\n const [highlight, setHighlight] = React.useState(0);\r\n const inputRef = React.useRef<HTMLInputElement>(null);\r\n const listRef = React.useRef<HTMLDivElement>(null);\r\n const titleId = React.useId();\r\n const listId = React.useId();\r\n const inputId = React.useId();\r\n\r\n // R-F.2 - the v2 trap is wired on the Dialog Paper element, activated\r\n // only while the palette is open. MUI's own trap is disabled below.\r\n const paperRef = React.useRef<HTMLDivElement>(null);\r\n useFocusTrap(paperRef as React.RefObject<HTMLDivElement>, !!open);\r\n\r\n // H4 — synthetic groups for pinnedItems / recentItems prepended to\r\n // the host's groups. Empty extras collapse the array to `groups`\r\n // verbatim — same reference when neither prop is set, so downstream\r\n // memoisation stays valid for the no-op case.\r\n const allGroups = React.useMemo<CommandPaletteGroup[]>(() => {\r\n const hasPinned = Array.isArray(pinnedItems) && pinnedItems.length > 0;\r\n const hasRecent = Array.isArray(recentItems) && recentItems.length > 0;\r\n if (!hasPinned && !hasRecent) return groups;\r\n const out: CommandPaletteGroup[] = [];\r\n if (hasPinned) {\r\n out.push({ id: \"_pinned\", title: L.pinnedTitle, items: pinnedItems ?? [] });\r\n }\r\n if (hasRecent) {\r\n out.push({ id: \"_recent\", title: L.recentTitle, items: recentItems ?? [] });\r\n }\r\n return [...out, ...groups];\r\n }, [pinnedItems, recentItems, groups, L.pinnedTitle, L.recentTitle]);\r\n\r\n const visibleGroups = React.useMemo(\r\n () => filterGroups(allGroups, debouncedQuery),\r\n [allGroups, debouncedQuery]\r\n );\r\n const itemsOnly = React.useMemo(\r\n () => visibleGroups.flatMap((g) => g.items),\r\n [visibleGroups]\r\n );\r\n\r\n // Reset state on (re)open. Initial focus on the input is handled by\r\n // useFocusTrap above (the input carries `autoFocus`).\r\n React.useEffect(() => {\r\n if (!open) return;\r\n setQuery(\"\");\r\n setHighlight(0);\r\n }, [open]);\r\n\r\n // Keep highlight valid when results shrink/grow\r\n React.useEffect(() => {\r\n if (highlight >= itemsOnly.length) {\r\n setHighlight(Math.max(0, itemsOnly.length - 1));\r\n }\r\n }, [itemsOnly.length, highlight]);\r\n\r\n // Scroll the highlighted item into view\r\n React.useEffect(() => {\r\n if (!open || itemsOnly.length === 0) return;\r\n const node = listRef.current?.querySelector(`[data-item-index=\"${highlight}\"]`);\r\n if (node) node.scrollIntoView({ block: \"nearest\" });\r\n }, [highlight, open, itemsOnly.length]);\r\n\r\n const activate = (index: number) => {\r\n const it = itemsOnly[index];\r\n if (!it) return;\r\n onClose?.();\r\n // Defer the action one tick so onClose can restore focus before any\r\n // navigation happens (consumer-side routing).\r\n setTimeout(() => it.onSelect?.(), 0);\r\n };\r\n\r\n const onInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"ArrowDown\") {\r\n e.preventDefault();\r\n setHighlight((h) => (itemsOnly.length === 0 ? 0 : (h + 1) % itemsOnly.length));\r\n } else if (e.key === \"ArrowUp\") {\r\n e.preventDefault();\r\n setHighlight((h) => (itemsOnly.length === 0 ? 0 : (h - 1 + itemsOnly.length) % itemsOnly.length));\r\n } else if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n activate(highlight);\r\n } else if (e.key === \"Home\") {\r\n e.preventDefault();\r\n setHighlight(0);\r\n } else if (e.key === \"End\") {\r\n e.preventDefault();\r\n setHighlight(Math.max(0, itemsOnly.length - 1));\r\n }\r\n };\r\n\r\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setQuery(e.target.value);\r\n onQueryChange?.(e.target.value);\r\n setHighlight(0);\r\n };\r\n\r\n const activeItemId = itemsOnly[highlight] ? `${listId}-opt-${highlight}` : undefined;\r\n\r\n // MUI v9: Dialog paper + backdrop bags forwarded through slotProps.\r\n // The paper slot embeds the per-instance focus-trap ref so we\r\n // useMemo it for reference stability across renders.\r\n const slotProps = React.useMemo(\r\n () => ({\r\n paper: {\r\n ref: paperRef,\r\n sx: {\r\n width: \"100%\",\r\n maxWidth: 640,\r\n borderRadius: \"var(--r-lg)\",\r\n boxShadow: \"var(--shadow-lg)\",\r\n margin: \"var(--s-3)\",\r\n overflow: \"hidden\",\r\n } satisfies SxProps<Theme>,\r\n },\r\n backdrop: BACKDROP_SLOT_PROPS,\r\n }),\r\n []\r\n );\r\n\r\n return (\r\n <Dialog\r\n open={!!open}\r\n onClose={onClose}\r\n maxWidth={false}\r\n aria-labelledby={titleId}\r\n // Hand over focus management to useFocusTrap above.\r\n disableAutoFocus\r\n disableEnforceFocus\r\n disableRestoreFocus\r\n slotProps={slotProps}\r\n >\r\n <Box className=\"pui-sr-only\" id={titleId}>\r\n {L.title}\r\n </Box>\r\n\r\n {/* Search input row */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n padding: \"var(--s-3) var(--s-4)\",\r\n borderBottom: \"1px solid var(--border)\",\r\n }}\r\n >\r\n <SearchIcon\r\n aria-hidden=\"true\"\r\n sx={{ color: \"var(--fg-subtle)\", fontSize: 20 }}\r\n />\r\n <Box\r\n component=\"input\"\r\n ref={inputRef}\r\n id={inputId}\r\n type=\"text\"\r\n role=\"combobox\"\r\n aria-expanded=\"true\"\r\n aria-controls={listId}\r\n aria-autocomplete=\"list\"\r\n aria-activedescendant={activeItemId}\r\n // CP-1 — accessible name for the combobox input. The sr-only title\r\n // labels the Dialog, not this input, and a placeholder is not a\r\n // reliable accessible name; expose the placeholder text as the name.\r\n aria-label={placeholder}\r\n autoFocus\r\n value={query}\r\n onChange={onInputChange}\r\n onKeyDown={onInputKeyDown}\r\n placeholder={placeholder}\r\n sx={{\r\n flex: 1,\r\n border: 0,\r\n outline: \"none\",\r\n background: \"transparent\",\r\n fontFamily: \"inherit\",\r\n fontSize: \"var(--text-body, 14px)\",\r\n color: \"var(--fg)\",\r\n \"&::placeholder\": { color: \"var(--fg-subtle)\" },\r\n }}\r\n />\r\n <Box\r\n component=\"kbd\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"1px var(--s-2)\",\r\n fontFamily: \"var(--font-mono)\",\r\n }}\r\n >\r\n ESC\r\n </Box>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onClose}\r\n aria-label={L.closeButton}\r\n sx={{ color: \"var(--fg-muted)\" }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Results listbox */}\r\n <Box\r\n ref={listRef}\r\n role=\"listbox\"\r\n id={listId}\r\n aria-labelledby={titleId}\r\n sx={{\r\n maxHeight: 360,\r\n overflowY: \"auto\",\r\n padding: \"var(--s-2) 0\",\r\n }}\r\n >\r\n {visibleGroups.length === 0 && (\r\n <Box\r\n sx={{\r\n padding: \"var(--s-5) var(--s-4)\",\r\n textAlign: \"center\",\r\n color: \"var(--fg-muted)\",\r\n fontSize: \"var(--text-sm)\",\r\n }}\r\n >\r\n {emptyState}\r\n </Box>\r\n )}\r\n {(() => {\r\n let i = -1;\r\n return visibleGroups.map((g) => {\r\n const headerId = `${listId}-h-${g.id}`;\r\n return (\r\n <Box\r\n key={g.id}\r\n role=\"group\"\r\n aria-labelledby={headerId}\r\n >\r\n <Box\r\n id={headerId}\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.06em\",\r\n padding: \"var(--s-2) var(--s-4) var(--s-1)\",\r\n }}\r\n >\r\n {g.title}\r\n </Box>\r\n {g.items.map((entry) => {\r\n i += 1;\r\n const isActive = i === highlight;\r\n const idx = i;\r\n return (\r\n <Box\r\n key={entry.id}\r\n role=\"option\"\r\n id={`${listId}-opt-${idx}`}\r\n aria-selected={isActive}\r\n data-item-index={idx}\r\n onMouseEnter={() => setHighlight(idx)}\r\n onClick={() => activate(idx)}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n padding: \"var(--s-2) var(--s-4)\",\r\n cursor: \"pointer\",\r\n background: isActive ? \"var(--accent-soft)\" : \"transparent\",\r\n color: isActive ? \"var(--accent)\" : \"var(--fg)\",\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-medium)\",\r\n }}\r\n >\r\n {entry.icon && (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n display: \"inline-flex\",\r\n color: isActive ? \"var(--accent)\" : \"var(--fg-muted)\",\r\n }}\r\n >\r\n {entry.icon}\r\n </Box>\r\n )}\r\n <Box sx={{ flex: 1, minWidth: 0, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\r\n {entry.label}\r\n </Box>\r\n {entry.shortcut && (\r\n <Box\r\n component=\"kbd\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"1px var(--s-2)\",\r\n fontFamily: \"var(--font-mono)\",\r\n }}\r\n >\r\n {entry.shortcut}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n });\r\n })()}\r\n </Box>\r\n\r\n {/* Footer */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: \"var(--s-3)\",\r\n padding: \"var(--s-2) var(--s-4)\",\r\n borderTop: \"1px solid var(--border)\",\r\n background: \"var(--bg-subtle)\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n }}\r\n >\r\n {/* Visual-only keyboard hints. Hidden from SR — the listbox already\r\n exposes navigation via aria-activedescendant + role semantics. */}\r\n <Box aria-hidden=\"true\">{L.footerHint}</Box>\r\n {/* R-A.1 — polite live region so SR users hear the result count\r\n change as they type. aria-atomic ensures the full sentence is\r\n re-read on update. C6 — aria-relevant explicit closes NVDA +\r\n Firefox cross-sibling pull-in quirks. */}\r\n <Box role=\"status\" aria-live=\"polite\" aria-relevant=\"additions text\" aria-atomic=\"true\">\r\n {L.resultsCount(itemsOnly.length)}\r\n </Box>\r\n </Box>\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport default CommandPalette;\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"CommandPalette.js","names":["React","Dialog","Box","IconButton","SearchIcon","CloseIcon","useFocusTrap","mergeLabels","jsx","_jsx","jsxs","_jsxs","DEBOUNCE_MS","DEFAULT_LABELS","Object","freeze","title","footerHint","closeButton","resultsCount","n","pinnedTitle","recentTitle","BACKDROP_SLOT_PROPS","sx","backgroundColor","useDebounced","value","ms","out","setOut","useState","useEffect","t","setTimeout","clearTimeout","normalize","s","String","replace","toLowerCase","subsequenceRun","hay","token","i","consecutive","bestConsecutive","h","length","scoreToken","startsWith","wbIdx","indexOf","subIdx","Math","min","run","scoreQuery","haystack","query","tokens","split","filter","Boolean","total","filterGroups","groups","q","trim","map","g","id","items","scored","it","label","keywords","push","item","score","sort","a","b","CommandPalette","open","onClose","recentItems","pinnedItems","placeholder","emptyState","onQueryChange","labels","L","useMemo","setQuery","debouncedQuery","highlight","setHighlight","inputRef","useRef","listRef","titleId","useId","listId","inputId","paperRef","allGroups","hasPinned","Array","isArray","hasRecent","visibleGroups","itemsOnly","flatMap","max","node","current","querySelector","scrollIntoView","block","activate","index","onSelect","onInputKeyDown","e","key","preventDefault","onInputChange","target","activeItemId","undefined","slotProps","paper","ref","width","maxWidth","borderRadius","boxShadow","margin","overflow","backdrop","disableAutoFocus","disableEnforceFocus","disableRestoreFocus","children","className","display","alignItems","gap","padding","borderBottom","color","fontSize","component","type","role","autoFocus","onChange","onKeyDown","flex","border","outline","background","fontFamily","fontWeight","size","onClick","maxHeight","overflowY","textAlign","headerId","textTransform","letterSpacing","entry","isActive","idx","onMouseEnter","cursor","icon","minWidth","textOverflow","whiteSpace","shortcut","justifyContent","borderTop"],"sources":["../../../../src/lib/v2/components/CommandPalette.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport Box from \"@mui/material/Box\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport useFocusTrap from \"../hooks/useFocusTrap\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * CommandPalette - Portnet UI v2\r\n *\r\n * Charter §03 / §07 · ⌘K command palette. Keyboard-first launcher for pages\r\n * and actions across the app.\r\n *\r\n * const [open, setOpen] = useState(false);\r\n * useEffect(() => {\r\n * const onKey = (e) => {\r\n * if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"k\") {\r\n * e.preventDefault();\r\n * setOpen(true);\r\n * }\r\n * };\r\n * window.addEventListener(\"keydown\", onKey);\r\n * return () => window.removeEventListener(\"keydown\", onKey);\r\n * }, []);\r\n *\r\n * <CommandPalette\r\n * open={open}\r\n * onClose={() => setOpen(false)}\r\n * groups={[\r\n * { id: \"pages\", title: \"Pages\", items: [\r\n * { id: \"dashboard\", label: \"Tableau de bord\", icon: <DashboardIcon />, onSelect: () => nav(\"/\") },\r\n * { id: \"titres\", label: \"Titres d'importation\", onSelect: () => nav(\"/titres\") },\r\n * ]},\r\n * { id: \"actions\", title: \"Actions\", items: [\r\n * { id: \"new-titre\", label: \"Nouveau titre\", icon: <AddIcon />, shortcut: \"C\", onSelect: createTitre },\r\n * ]},\r\n * ]}\r\n * />\r\n *\r\n * Recent + Pinned items (Batch 16 / H4)\r\n * -------------------------------------\r\n * <CommandPalette\r\n * pinnedItems={[\r\n * { id: \"dashboard\", label: \"Tableau de bord\", icon: <DashboardIcon />, onSelect: () => nav(\"/\") },\r\n * ]}\r\n * recentItems={[\r\n * { id: \"titre-2025-IM-0042\", label: \"2025-IM-0042 (SOFRANE SA)\", onSelect: () => nav(\"/titres/2025-IM-0042\") },\r\n * ]}\r\n * groups={[ ... ]}\r\n * />\r\n *\r\n * Both extras are HOST-MANAGED. Lib does NOT track selections or\r\n * pinning state — track in your per-item onSelect handler and\r\n * persist to localStorage / server prefs as a host concern.\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <CommandPalette\r\n * placeholder=\"Search a page or action…\"\r\n * emptyState=\"No result.\"\r\n * labels={{\r\n * title: \"Command palette\",\r\n * footerHint: \"↑↓ to navigate · ↵ to select · Esc to close\",\r\n * closeButton: \"Close palette\",\r\n * resultsCount: (n) => `${n} result${n === 1 ? \"\" : \"s\"}`,\r\n * pinnedTitle: \"Pinned\",\r\n * recentTitle: \"Recent\",\r\n * }}\r\n * />\r\n *\r\n * `resultsCount` is a function so the host can plug in proper plural\r\n * rules (Intl.PluralRules, ICU MessageFormat, i18next, …).\r\n *\r\n * Matching behaviour (Batch 13 / D2):\r\n * The search is fuzzy. Each match is scored across four tiers\r\n * (prefix > word-boundary > substring > subsequence) and within\r\n * each group items are surfaced in descending score order.\r\n * Multi-token queries (\"tit imp\") split on whitespace and require\r\n * every token to hit somewhere; final score is the per-token\r\n * average. Diacritics are folded — \"Emile\" matches \"Émile\".\r\n *\r\n * Focus management (R-F.2):\r\n * Backed by the v2 useFocusTrap hook (Batch 3). The search <input>\r\n * declares `autoFocus`, so on open the trap's initial-focus rAF\r\n * lands directly on it. The input is a role=\"combobox\" and carries an\r\n * aria-label (CP-1) so screen readers announce a name, not just a role.\r\n */\r\n\r\nconst DEBOUNCE_MS = 80;\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n title: \"Palette de commandes\",\r\n footerHint: \"↑↓ pour naviguer · ↵ pour sélectionner · Esc pour fermer\",\r\n closeButton: \"Fermer la palette\",\r\n resultsCount: (n: number) => `${n} résultat${n > 1 ? \"s\" : \"\"}`,\r\n pinnedTitle: \"Épinglés\",\r\n recentTitle: \"Récents\",\r\n});\r\n\r\n// MUI v9: backdrop slot bag. Hoisted — its content (only an sx token)\r\n// is independent of any palette instance state.\r\nconst BACKDROP_SLOT_PROPS = Object.freeze({\r\n // R-G.2 / R-AI.1 - backdrop derived from the live --fg token (matches\r\n // Modal). Adapts to any future theme override.\r\n sx: { backgroundColor: \"color-mix(in srgb, var(--fg) 45%, transparent)\" },\r\n});\r\n\r\nexport interface CommandPaletteItem {\r\n id: string | number;\r\n label: React.ReactNode;\r\n icon?: React.ReactNode | undefined;\r\n shortcut?: React.ReactNode | undefined;\r\n keywords?: string | undefined;\r\n onSelect?: (() => void) | undefined;\r\n}\r\n\r\nexport interface CommandPaletteGroup {\r\n id: string;\r\n title?: React.ReactNode | undefined;\r\n items: CommandPaletteItem[];\r\n}\r\n\r\nexport interface CommandPaletteLabels {\r\n title?: string | undefined;\r\n footerHint?: string | undefined;\r\n closeButton?: string | undefined;\r\n resultsCount?: ((n: number) => React.ReactNode) | undefined;\r\n pinnedTitle?: React.ReactNode | undefined;\r\n recentTitle?: React.ReactNode | undefined;\r\n}\r\n\r\nexport interface CommandPaletteProps {\r\n open?: boolean | undefined;\r\n onClose?: (() => void) | undefined;\r\n groups?: CommandPaletteGroup[] | undefined;\r\n recentItems?: CommandPaletteItem[] | undefined;\r\n pinnedItems?: CommandPaletteItem[] | undefined;\r\n placeholder?: string | undefined;\r\n emptyState?: React.ReactNode | undefined;\r\n onQueryChange?: ((q: string) => void) | undefined;\r\n labels?: CommandPaletteLabels | undefined;\r\n}\r\n\r\nfunction useDebounced<T>(value: T, ms: number): T {\r\n const [out, setOut] = React.useState(value);\r\n React.useEffect(() => {\r\n const t = setTimeout(() => setOut(value), ms);\r\n return () => clearTimeout(t);\r\n }, [value, ms]);\r\n return out;\r\n}\r\n\r\n/* ── Fuzzy matching (D2) ───────────────────────────────────────────────\r\n * Module-level pure helpers. No external dep, no allocation per match\r\n * beyond the obligatory tokenisation Array.\r\n *\r\n * Score scale is conventional, NOT meaningful in absolute terms:\r\n * - 0 → no match (filtered out)\r\n * - higher → more relevant (sorted descending within each group)\r\n */\r\n\r\n/**\r\n * NFD-normalise + strip combining marks + lowercase. Folds diacritics\r\n * so \"Émile\" → \"emile\" and \"Café\" → \"cafe\", letting users search\r\n * without typing accents. The unicode range \\u0300-\\u036F covers the\r\n * Combining Diacritical Marks block (U+0300..U+036F).\r\n */\r\nfunction normalize(s: string): string {\r\n if (!s) return \"\";\r\n return String(s).normalize(\"NFD\").replace(/[\\u0300-\\u036F]/g, \"\").toLowerCase();\r\n}\r\n\r\n/**\r\n * Subsequence match score — how well does `token` appear (in order,\r\n * not necessarily contiguous) inside `hay`?\r\n *\r\n * - Returns 0 if any character is missing.\r\n * - Otherwise returns the longest CONSECUTIVE run divided by the\r\n * token length. So \"imp\" inside \"important\" gets ratio 1.0\r\n * (whole word matched contiguously), while \"imp\" inside\r\n * \"i_m_p\" (gaps) gets a low ratio.\r\n *\r\n * The contiguous-run heuristic is much cheaper than a full Smith-\r\n * Waterman and good enough for command-palette UX.\r\n */\r\nfunction subsequenceRun(hay: string, token: string): number {\r\n let i = 0;\r\n let consecutive = 0;\r\n let bestConsecutive = 0;\r\n for (let h = 0; h < hay.length && i < token.length; h += 1) {\r\n if (hay[h] === token[i]) {\r\n i += 1;\r\n consecutive += 1;\r\n if (consecutive > bestConsecutive) bestConsecutive = consecutive;\r\n } else {\r\n consecutive = 0;\r\n }\r\n }\r\n if (i < token.length) return 0;\r\n return bestConsecutive / token.length;\r\n}\r\n\r\n/**\r\n * Score a single token against a haystack. Four tiers, best wins.\r\n * Both inputs are assumed already normalised (lowercase, no diacritics).\r\n */\r\nfunction scoreToken(hay: string, token: string): number {\r\n if (hay.startsWith(token)) return 100;\r\n\r\n const wbIdx = hay.indexOf(\" \" + token);\r\n if (wbIdx >= 0) return 80;\r\n\r\n const subIdx = hay.indexOf(token);\r\n if (subIdx >= 0) {\r\n return 60 - Math.min(20, subIdx * 0.1);\r\n }\r\n\r\n const run = subsequenceRun(hay, token);\r\n if (run > 0) return 40 * run;\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * Score a multi-token query. Splits on whitespace; every token must hit\r\n * somewhere. Returns the average across tokens, or 0 if any token misses.\r\n */\r\nfunction scoreQuery(haystack: string, query: string): number {\r\n const hay = normalize(haystack);\r\n const tokens = normalize(query).split(/\\s+/).filter(Boolean);\r\n if (tokens.length === 0) return 1;\r\n if (!hay) return 0;\r\n\r\n let total = 0;\r\n for (const token of tokens) {\r\n const s = scoreToken(hay, token);\r\n if (s === 0) return 0;\r\n total += s;\r\n }\r\n return total / tokens.length;\r\n}\r\n\r\n/**\r\n * Filter `groups` against the query. Within each group, items are\r\n * surfaced in descending score order (most relevant first). Group\r\n * order itself is preserved — groups are author-defined categories,\r\n * not relevance buckets.\r\n *\r\n * Empty / whitespace-only query → return groups untouched (just drop\r\n * the empty ones). Preserves the original \"no query = browse\" UX.\r\n */\r\nfunction filterGroups(groups: CommandPaletteGroup[], query: string): CommandPaletteGroup[] {\r\n const q = query.trim();\r\n if (!q) {\r\n return groups\r\n .map((g) => ({ id: g.id, title: g.title, items: g.items }))\r\n .filter((g) => g.items.length > 0);\r\n }\r\n\r\n const out: CommandPaletteGroup[] = [];\r\n for (const g of groups) {\r\n const scored: Array<{ item: CommandPaletteItem; score: number }> = [];\r\n for (const it of g.items) {\r\n const hay = `${it.label} ${it.keywords || \"\"}`;\r\n const s = scoreQuery(hay, q);\r\n if (s > 0) scored.push({ item: it, score: s });\r\n }\r\n if (scored.length === 0) continue;\r\n scored.sort((a, b) => b.score - a.score);\r\n out.push({ id: g.id, title: g.title, items: scored.map((s) => s.item) });\r\n }\r\n return out;\r\n}\r\n\r\nfunction CommandPalette({\r\n open,\r\n onClose,\r\n groups = [],\r\n recentItems,\r\n pinnedItems,\r\n placeholder = \"Rechercher une page, une action…\",\r\n emptyState = \"Aucun résultat.\",\r\n onQueryChange,\r\n labels,\r\n}: CommandPaletteProps) {\r\n const L = React.useMemo(\r\n () => (mergeLabels(DEFAULT_LABELS, labels)),\r\n [labels]\r\n );\r\n\r\n const [query, setQuery] = React.useState(\"\");\r\n const debouncedQuery = useDebounced(query, DEBOUNCE_MS);\r\n const [highlight, setHighlight] = React.useState(0);\r\n const inputRef = React.useRef<HTMLInputElement>(null);\r\n const listRef = React.useRef<HTMLDivElement>(null);\r\n const titleId = React.useId();\r\n const listId = React.useId();\r\n const inputId = React.useId();\r\n\r\n // R-F.2 - the v2 trap is wired on the Dialog Paper element, activated\r\n // only while the palette is open. MUI's own trap is disabled below.\r\n const paperRef = React.useRef<HTMLDivElement>(null);\r\n useFocusTrap(paperRef as React.RefObject<HTMLDivElement>, !!open);\r\n\r\n // H4 — synthetic groups for pinnedItems / recentItems prepended to\r\n // the host's groups. Empty extras collapse the array to `groups`\r\n // verbatim — same reference when neither prop is set, so downstream\r\n // memoisation stays valid for the no-op case.\r\n const allGroups = React.useMemo<CommandPaletteGroup[]>(() => {\r\n const hasPinned = Array.isArray(pinnedItems) && pinnedItems.length > 0;\r\n const hasRecent = Array.isArray(recentItems) && recentItems.length > 0;\r\n if (!hasPinned && !hasRecent) return groups;\r\n const out: CommandPaletteGroup[] = [];\r\n if (hasPinned) {\r\n out.push({ id: \"_pinned\", title: L.pinnedTitle, items: pinnedItems ?? [] });\r\n }\r\n if (hasRecent) {\r\n out.push({ id: \"_recent\", title: L.recentTitle, items: recentItems ?? [] });\r\n }\r\n return [...out, ...groups];\r\n }, [pinnedItems, recentItems, groups, L.pinnedTitle, L.recentTitle]);\r\n\r\n const visibleGroups = React.useMemo(\r\n () => filterGroups(allGroups, debouncedQuery),\r\n [allGroups, debouncedQuery]\r\n );\r\n const itemsOnly = React.useMemo(\r\n () => visibleGroups.flatMap((g) => g.items),\r\n [visibleGroups]\r\n );\r\n\r\n // Reset state on (re)open. Initial focus on the input is handled by\r\n // useFocusTrap above (the input carries `autoFocus`).\r\n React.useEffect(() => {\r\n if (!open) return;\r\n setQuery(\"\");\r\n setHighlight(0);\r\n }, [open]);\r\n\r\n // Keep highlight valid when results shrink/grow\r\n React.useEffect(() => {\r\n if (highlight >= itemsOnly.length) {\r\n setHighlight(Math.max(0, itemsOnly.length - 1));\r\n }\r\n }, [itemsOnly.length, highlight]);\r\n\r\n // Scroll the highlighted item into view\r\n React.useEffect(() => {\r\n if (!open || itemsOnly.length === 0) return;\r\n const node = listRef.current?.querySelector(`[data-item-index=\"${highlight}\"]`);\r\n if (node) node.scrollIntoView({ block: \"nearest\" });\r\n }, [highlight, open, itemsOnly.length]);\r\n\r\n const activate = (index: number) => {\r\n const it = itemsOnly[index];\r\n if (!it) return;\r\n onClose?.();\r\n // Defer the action one tick so onClose can restore focus before any\r\n // navigation happens (consumer-side routing).\r\n setTimeout(() => it.onSelect?.(), 0);\r\n };\r\n\r\n const onInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"ArrowDown\") {\r\n e.preventDefault();\r\n setHighlight((h) => (itemsOnly.length === 0 ? 0 : (h + 1) % itemsOnly.length));\r\n } else if (e.key === \"ArrowUp\") {\r\n e.preventDefault();\r\n setHighlight((h) => (itemsOnly.length === 0 ? 0 : (h - 1 + itemsOnly.length) % itemsOnly.length));\r\n } else if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n activate(highlight);\r\n } else if (e.key === \"Home\") {\r\n e.preventDefault();\r\n setHighlight(0);\r\n } else if (e.key === \"End\") {\r\n e.preventDefault();\r\n setHighlight(Math.max(0, itemsOnly.length - 1));\r\n }\r\n };\r\n\r\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setQuery(e.target.value);\r\n onQueryChange?.(e.target.value);\r\n setHighlight(0);\r\n };\r\n\r\n const activeItemId = itemsOnly[highlight] ? `${listId}-opt-${highlight}` : undefined;\r\n\r\n // MUI v9: Dialog paper + backdrop bags forwarded through slotProps.\r\n // The paper slot embeds the per-instance focus-trap ref so we\r\n // useMemo it for reference stability across renders.\r\n const slotProps = React.useMemo(\r\n () => ({\r\n paper: {\r\n ref: paperRef,\r\n sx: {\r\n width: \"100%\",\r\n maxWidth: 640,\r\n borderRadius: \"var(--r-lg)\",\r\n boxShadow: \"var(--shadow-lg)\",\r\n margin: \"var(--s-3)\",\r\n overflow: \"hidden\",\r\n } satisfies SxProps<Theme>,\r\n },\r\n backdrop: BACKDROP_SLOT_PROPS,\r\n }),\r\n []\r\n );\r\n\r\n return (\r\n <Dialog\r\n open={!!open}\r\n onClose={onClose}\r\n maxWidth={false}\r\n aria-labelledby={titleId}\r\n // Hand over focus management to useFocusTrap above.\r\n disableAutoFocus\r\n disableEnforceFocus\r\n disableRestoreFocus\r\n slotProps={slotProps}\r\n >\r\n <Box className=\"pui-sr-only\" id={titleId}>\r\n {L.title}\r\n </Box>\r\n\r\n {/* Search input row */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n padding: \"var(--s-3) var(--s-4)\",\r\n borderBottom: \"1px solid var(--border)\",\r\n }}\r\n >\r\n <SearchIcon\r\n aria-hidden=\"true\"\r\n sx={{ color: \"var(--fg-subtle)\", fontSize: 20 }}\r\n />\r\n <Box\r\n component=\"input\"\r\n ref={inputRef}\r\n id={inputId}\r\n type=\"text\"\r\n role=\"combobox\"\r\n aria-expanded=\"true\"\r\n aria-controls={listId}\r\n aria-autocomplete=\"list\"\r\n aria-activedescendant={activeItemId}\r\n // CP-1 — accessible name for the combobox input. The sr-only title\r\n // labels the Dialog, not this input, and a placeholder is not a\r\n // reliable accessible name; expose the placeholder text as the name.\r\n aria-label={placeholder}\r\n autoFocus\r\n value={query}\r\n onChange={onInputChange}\r\n onKeyDown={onInputKeyDown}\r\n placeholder={placeholder}\r\n sx={{\r\n flex: 1,\r\n border: 0,\r\n outline: \"none\",\r\n background: \"transparent\",\r\n fontFamily: \"inherit\",\r\n fontSize: \"var(--text-body, 14px)\",\r\n color: \"var(--fg)\",\r\n \"&::placeholder\": { color: \"var(--fg-subtle)\" },\r\n }}\r\n />\r\n <Box\r\n component=\"kbd\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"1px var(--s-2)\",\r\n fontFamily: \"var(--font-mono)\",\r\n }}\r\n >\r\n ESC\r\n </Box>\r\n <IconButton\r\n size=\"small\"\r\n onClick={onClose}\r\n aria-label={L.closeButton}\r\n sx={{ color: \"var(--fg-muted)\" }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n\r\n {/* Results listbox */}\r\n <Box\r\n ref={listRef}\r\n role=\"listbox\"\r\n id={listId}\r\n aria-labelledby={titleId}\r\n sx={{\r\n maxHeight: 360,\r\n overflowY: \"auto\",\r\n padding: \"var(--s-2) 0\",\r\n }}\r\n >\r\n {visibleGroups.length === 0 && (\r\n <Box\r\n sx={{\r\n padding: \"var(--s-5) var(--s-4)\",\r\n textAlign: \"center\",\r\n color: \"var(--fg-muted)\",\r\n fontSize: \"var(--text-sm)\",\r\n }}\r\n >\r\n {emptyState}\r\n </Box>\r\n )}\r\n {(() => {\r\n let i = -1;\r\n return visibleGroups.map((g) => {\r\n const headerId = `${listId}-h-${g.id}`;\r\n return (\r\n <Box\r\n key={g.id}\r\n role=\"group\"\r\n aria-labelledby={headerId}\r\n >\r\n <Box\r\n id={headerId}\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.06em\",\r\n padding: \"var(--s-2) var(--s-4) var(--s-1)\",\r\n }}\r\n >\r\n {g.title}\r\n </Box>\r\n {g.items.map((entry) => {\r\n i += 1;\r\n const isActive = i === highlight;\r\n const idx = i;\r\n return (\r\n <Box\r\n key={entry.id}\r\n role=\"option\"\r\n id={`${listId}-opt-${idx}`}\r\n aria-selected={isActive}\r\n data-item-index={idx}\r\n onMouseEnter={() => setHighlight(idx)}\r\n onClick={() => activate(idx)}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n padding: \"var(--s-2) var(--s-4)\",\r\n cursor: \"pointer\",\r\n background: isActive ? \"var(--accent-soft)\" : \"transparent\",\r\n color: isActive ? \"var(--accent)\" : \"var(--fg)\",\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-medium)\",\r\n }}\r\n >\r\n {entry.icon && (\r\n <Box\r\n aria-hidden=\"true\"\r\n sx={{\r\n display: \"inline-flex\",\r\n color: isActive ? \"var(--accent)\" : \"var(--fg-muted)\",\r\n }}\r\n >\r\n {entry.icon}\r\n </Box>\r\n )}\r\n <Box sx={{ flex: 1, minWidth: 0, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\r\n {entry.label}\r\n </Box>\r\n {entry.shortcut && (\r\n <Box\r\n component=\"kbd\"\r\n aria-hidden=\"true\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-subtle)\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"1px var(--s-2)\",\r\n fontFamily: \"var(--font-mono)\",\r\n }}\r\n >\r\n {entry.shortcut}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n });\r\n })()}\r\n </Box>\r\n\r\n {/* Footer */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: \"var(--s-3)\",\r\n padding: \"var(--s-2) var(--s-4)\",\r\n borderTop: \"1px solid var(--border)\",\r\n background: \"var(--bg-subtle)\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n }}\r\n >\r\n {/* Visual-only keyboard hints. Hidden from SR — the listbox already\r\n exposes navigation via aria-activedescendant + role semantics. */}\r\n <Box aria-hidden=\"true\">{L.footerHint}</Box>\r\n {/* R-A.1 — polite live region so SR users hear the result count\r\n change as they type. aria-atomic ensures the full sentence is\r\n re-read on update. C6 — aria-relevant explicit closes NVDA +\r\n Firefox cross-sibling pull-in quirks. */}\r\n <Box role=\"status\" aria-live=\"polite\" aria-relevant=\"additions text\" aria-atomic=\"true\">\r\n {L.resultsCount(itemsOnly.length)}\r\n </Box>\r\n </Box>\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport default CommandPalette;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
1
|
import * as React from "react";
|
|
8
2
|
import Modal from "./Modal";
|
|
9
3
|
import Button from "./Button";
|
|
@@ -41,33 +35,31 @@ import { mergeLabels } from "../utils/mergeLabels";
|
|
|
41
35
|
* <ConfirmDialog labels={{ impactHeading: "Consequences" }} ... />
|
|
42
36
|
*/
|
|
43
37
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
44
|
-
|
|
38
|
+
const DEFAULT_LABELS = Object.freeze({
|
|
45
39
|
impactHeading: "Conséquences"
|
|
46
40
|
});
|
|
47
|
-
function ConfirmDialog(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
children = _ref.children;
|
|
64
|
-
var L = mergeLabels(DEFAULT_LABELS, labels);
|
|
41
|
+
function ConfirmDialog({
|
|
42
|
+
open,
|
|
43
|
+
onClose,
|
|
44
|
+
onConfirm,
|
|
45
|
+
title,
|
|
46
|
+
description,
|
|
47
|
+
confirmLabel = "Confirmer",
|
|
48
|
+
cancelLabel = "Annuler",
|
|
49
|
+
confirmVariant = "primary",
|
|
50
|
+
loading = false,
|
|
51
|
+
impact,
|
|
52
|
+
// optional list of bullet-point consequences
|
|
53
|
+
labels,
|
|
54
|
+
children
|
|
55
|
+
}) {
|
|
56
|
+
const L = mergeLabels(DEFAULT_LABELS, labels);
|
|
65
57
|
|
|
66
58
|
// R-Ar.1 - stable id linking the impact heading to its <ul>
|
|
67
59
|
// so SR users hear the relationship as a single semantic unit.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return /*#__PURE__*/_jsxs(Modal,
|
|
60
|
+
const impactHeadingId = React.useId();
|
|
61
|
+
const hasImpact = !!(impact && impact.length > 0);
|
|
62
|
+
return /*#__PURE__*/_jsxs(Modal, {
|
|
71
63
|
title: title,
|
|
72
64
|
subtitle: description,
|
|
73
65
|
size: "sm",
|
|
@@ -83,12 +75,13 @@ function ConfirmDialog(_ref) {
|
|
|
83
75
|
onClick: onConfirm,
|
|
84
76
|
children: confirmLabel
|
|
85
77
|
})]
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
onClose
|
|
91
|
-
|
|
78
|
+
}),
|
|
79
|
+
...(open !== undefined ? {
|
|
80
|
+
open
|
|
81
|
+
} : {}),
|
|
82
|
+
...(onClose !== undefined ? {
|
|
83
|
+
onClose
|
|
84
|
+
} : {}),
|
|
92
85
|
children: [hasImpact && /*#__PURE__*/_jsxs(Box, {
|
|
93
86
|
sx: {
|
|
94
87
|
background: "var(--bg-subtle)",
|
|
@@ -126,19 +119,17 @@ function ConfirmDialog(_ref) {
|
|
|
126
119
|
fontSize: "var(--text-sm)",
|
|
127
120
|
color: "var(--fg)"
|
|
128
121
|
},
|
|
129
|
-
children: impact
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}, i);
|
|
138
|
-
})
|
|
122
|
+
children: impact?.map((item, i) => /*#__PURE__*/_jsx(Box, {
|
|
123
|
+
component: "li",
|
|
124
|
+
sx: {
|
|
125
|
+
marginBottom: "var(--s-1)",
|
|
126
|
+
lineHeight: "var(--lh-normal)"
|
|
127
|
+
},
|
|
128
|
+
children: item
|
|
129
|
+
}, i))
|
|
139
130
|
})]
|
|
140
131
|
}), children]
|
|
141
|
-
})
|
|
132
|
+
});
|
|
142
133
|
}
|
|
143
134
|
export default ConfirmDialog;
|
|
144
135
|
//# sourceMappingURL=ConfirmDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmDialog.js","names":["React","Modal","Button","Box","mergeLabels","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_LABELS","Object","freeze","impactHeading","ConfirmDialog","
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.js","names":["React","Modal","Button","Box","mergeLabels","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_LABELS","Object","freeze","impactHeading","ConfirmDialog","open","onClose","onConfirm","title","description","confirmLabel","cancelLabel","confirmVariant","loading","impact","labels","children","L","impactHeadingId","useId","hasImpact","length","subtitle","size","footer","variant","onClick","disabled","undefined","sx","background","border","borderRadius","padding","marginBottom","component","id","margin","fontSize","fontWeight","color","textTransform","letterSpacing","lineHeight","paddingInlineStart","map","item","i"],"sources":["../../../../src/lib/v2/components/ConfirmDialog.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Modal from \"./Modal\";\r\nimport Button from \"./Button\";\r\nimport type { ButtonProps } from \"./Button\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * ConfirmDialog - Portnet UI v2\r\n *\r\n * Charter §04.4 - confirmation pattern for irreversible actions.\r\n * Use whenever an action cannot be undone with a 5-s toast.\r\n *\r\n * R-5.1 - Action irréversible → ConfirmDialog avec récap des conséquences.\r\n * R-5.2 - Suppression multiple → forcer la saisie ou clic bouton danger.\r\n *\r\n * <ConfirmDialog\r\n * open={open}\r\n * onClose={close}\r\n * onConfirm={remove}\r\n * title=\"Supprimer ce titre ?\"\r\n * description=\"Cette action est définitive.\"\r\n * confirmLabel=\"Supprimer\"\r\n * confirmVariant=\"danger\"\r\n * impact={[\r\n * \"Le titre 2025-IM-0042 sera supprimé.\",\r\n * \"Les pièces jointes liées seront archivées.\",\r\n * ]}\r\n * />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * confirmLabel / cancelLabel are direct overrides on the props.\r\n * The \"Conséquences\" heading rendered above the impact list is\r\n * localised via the `labels` prop:\r\n *\r\n * <ConfirmDialog labels={{ impactHeading: \"Consequences\" }} ... />\r\n */\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n impactHeading: \"Conséquences\",\r\n});\r\n\r\nexport interface ConfirmDialogLabels {\r\n impactHeading?: React.ReactNode | undefined;\r\n}\r\n\r\nexport interface ConfirmDialogProps {\r\n open?: boolean | undefined;\r\n onClose?: (() => void) | undefined;\r\n onConfirm?: (() => void) | undefined;\r\n title?: React.ReactNode | undefined;\r\n description?: React.ReactNode | undefined;\r\n confirmLabel?: React.ReactNode | undefined;\r\n cancelLabel?: React.ReactNode | undefined;\r\n confirmVariant?: ButtonProps[\"variant\"] | undefined;\r\n loading?: boolean | undefined;\r\n impact?: React.ReactNode[] | undefined;\r\n labels?: ConfirmDialogLabels | undefined;\r\n children?: React.ReactNode | undefined;\r\n}\r\n\r\nfunction ConfirmDialog({\r\n open,\r\n onClose,\r\n onConfirm,\r\n title,\r\n description,\r\n confirmLabel = \"Confirmer\",\r\n cancelLabel = \"Annuler\",\r\n confirmVariant = \"primary\",\r\n loading = false,\r\n impact, // optional list of bullet-point consequences\r\n labels,\r\n children,\r\n}: ConfirmDialogProps) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n // R-Ar.1 - stable id linking the impact heading to its <ul>\r\n // so SR users hear the relationship as a single semantic unit.\r\n const impactHeadingId = React.useId();\r\n const hasImpact = !!(impact && impact.length > 0);\r\n\r\n return (\r\n <Modal\r\n title={title}\r\n subtitle={description}\r\n size=\"sm\"\r\n footer={\r\n <>\r\n <Button variant=\"ghost\" onClick={onClose} disabled={loading}>\r\n {cancelLabel}\r\n </Button>\r\n <Button variant={confirmVariant} loading={loading} onClick={onConfirm}>\r\n {confirmLabel}\r\n </Button>\r\n </>\r\n }\r\n {...(open !== undefined ? { open } : {})}\r\n {...(onClose !== undefined ? { onClose } : {})}\r\n >\r\n {hasImpact && (\r\n <Box\r\n sx={{\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderRadius: \"var(--r-md)\",\r\n padding: \"var(--s-3) var(--s-4)\",\r\n marginBottom: children ? 2 : 0,\r\n }}\r\n >\r\n <Box\r\n component=\"h3\"\r\n id={impactHeadingId}\r\n sx={{\r\n // Modal title is <h2>; this is the correct next level. Visual\r\n // styling (uppercase caption) overrides the default <h3>.\r\n margin: 0,\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg-muted)\",\r\n marginBottom: 1,\r\n textTransform: \"uppercase\",\r\n /* A7-02 — was a raw \"0.04em\"; now the promoted token. */\r\n letterSpacing: \"var(--ls-wide)\",\r\n lineHeight: \"var(--lh-snug)\",\r\n }}\r\n >\r\n {L.impactHeading}\r\n </Box>\r\n <Box\r\n component=\"ul\"\r\n aria-labelledby={impactHeadingId}\r\n sx={{\r\n margin: 0,\r\n // RTL-safe: paddingInlineStart resets correctly in both\r\n // LTR (left) and RTL (right). Was paddingLeft, which in\r\n // Arabic indented to the wrong side.\r\n paddingInlineStart: \"var(--s-5)\",\r\n fontSize: \"var(--text-sm)\",\r\n color: \"var(--fg)\",\r\n }}\r\n >\r\n {impact?.map((item, i) => (\r\n <Box\r\n component=\"li\"\r\n key={i}\r\n sx={{ marginBottom: \"var(--s-1)\", lineHeight: \"var(--lh-normal)\" }}\r\n >\r\n {item}\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n )}\r\n {children}\r\n </Modal>\r\n );\r\n}\r\n\r\nexport default ConfirmDialog;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
var _excluded = ["value", "onChange", "onBlur", "minDate", "maxDate", "disablePast", "disableFuture", "disabled", "readOnly", "error", "placeholder", "fullWidth", "inputProps", "adapterLocale", "sx"],
|
|
3
|
-
_excluded2 = ["id", "aria-describedby", "aria-invalid", "aria-required", "aria-labelledby"];
|
|
4
|
-
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; }
|
|
5
|
-
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; }
|
|
6
|
-
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; }
|
|
7
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
8
|
-
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); }
|
|
9
|
-
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
10
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
11
1
|
import * as React from "react";
|
|
12
2
|
import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
|
|
13
3
|
import { DatePicker as MuiDatePicker } from "@mui/x-date-pickers/DatePicker";
|
|
@@ -87,44 +77,39 @@ import { dateToMoment, momentToDate } from "./_pickerShared";
|
|
|
87
77
|
* wraps it).
|
|
88
78
|
*/
|
|
89
79
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
fullWidth = _ref$fullWidth === void 0 ? true : _ref$fullWidth,
|
|
110
|
-
inputProps = _ref.inputProps,
|
|
111
|
-
_ref$adapterLocale = _ref.adapterLocale,
|
|
112
|
-
adapterLocale = _ref$adapterLocale === void 0 ? "fr" : _ref$adapterLocale,
|
|
113
|
-
sx = _ref.sx,
|
|
114
|
-
rest = _objectWithoutProperties(_ref, _excluded);
|
|
80
|
+
const CHARTER_FORMAT = "YYYY-MM-DD";
|
|
81
|
+
const DatePicker = /*#__PURE__*/React.forwardRef(function DatePicker({
|
|
82
|
+
value,
|
|
83
|
+
onChange,
|
|
84
|
+
onBlur,
|
|
85
|
+
minDate,
|
|
86
|
+
maxDate,
|
|
87
|
+
disablePast = false,
|
|
88
|
+
disableFuture = false,
|
|
89
|
+
disabled = false,
|
|
90
|
+
readOnly = false,
|
|
91
|
+
error,
|
|
92
|
+
placeholder = "AAAA-MM-JJ",
|
|
93
|
+
fullWidth = true,
|
|
94
|
+
inputProps,
|
|
95
|
+
adapterLocale = "fr",
|
|
96
|
+
sx,
|
|
97
|
+
...rest
|
|
98
|
+
}, ref) {
|
|
115
99
|
// DP-1 — Field cloneElement-injects the label + hint/error association props
|
|
116
100
|
// onto this child; MUI X won't forward top-level aria/id to the field input,
|
|
117
101
|
// so intercept them (cast — they aren't part of MuiDatePickerProps) and route
|
|
118
102
|
// them onto the <input> via slotProps.htmlInput below. Everything else stays
|
|
119
103
|
// in domRest for MuiDatePicker (real picker props: views, openTo, etc.).
|
|
120
|
-
|
|
121
|
-
fieldId
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
domRest
|
|
127
|
-
|
|
104
|
+
const {
|
|
105
|
+
id: fieldId,
|
|
106
|
+
"aria-describedby": ariaDescribedby,
|
|
107
|
+
"aria-invalid": ariaInvalid,
|
|
108
|
+
"aria-required": ariaRequired,
|
|
109
|
+
"aria-labelledby": ariaLabelledby,
|
|
110
|
+
...domRest
|
|
111
|
+
} = rest;
|
|
112
|
+
const handleChange = next => {
|
|
128
113
|
if (!onChange) return;
|
|
129
114
|
onChange(momentToDate(next));
|
|
130
115
|
};
|
|
@@ -136,65 +121,77 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function DatePicker(_ref, ref) {
|
|
|
136
121
|
// Field-injected id + aria-* so the label / hint / error actually
|
|
137
122
|
// associate with the date input. Memoised on the deps so the slotProps
|
|
138
123
|
// object reference stays stable across renders.
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
124
|
+
const slotProps = React.useMemo(() => ({
|
|
125
|
+
textField: {
|
|
126
|
+
ref,
|
|
127
|
+
error: !!error,
|
|
128
|
+
fullWidth,
|
|
129
|
+
size: "small",
|
|
130
|
+
// onBlur: the textField slot types this as FocusEventHandler<HTMLDivElement>;
|
|
131
|
+
// our public onBlur is input-based. Cast (type-only) and include only
|
|
132
|
+
// when defined so no explicit undefined reaches the slot.
|
|
133
|
+
...(onBlur ? {
|
|
147
134
|
onBlur: onBlur
|
|
148
|
-
} : {}),
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
135
|
+
} : {}),
|
|
136
|
+
sx: {
|
|
137
|
+
"& .MuiOutlinedInput-input": {
|
|
138
|
+
fontVariantNumeric: "tabular-nums"
|
|
139
|
+
},
|
|
140
|
+
...sx
|
|
141
|
+
},
|
|
142
|
+
slotProps: {
|
|
143
|
+
htmlInput: {
|
|
144
|
+
placeholder,
|
|
145
|
+
// DP-1 — Field-injected association attrs land on the <input>.
|
|
146
|
+
...(fieldId != null ? {
|
|
158
147
|
id: fieldId
|
|
159
|
-
} : {}),
|
|
148
|
+
} : {}),
|
|
149
|
+
...(ariaDescribedby != null ? {
|
|
160
150
|
"aria-describedby": ariaDescribedby
|
|
161
|
-
} : {}),
|
|
151
|
+
} : {}),
|
|
152
|
+
...(ariaInvalid != null ? {
|
|
162
153
|
"aria-invalid": ariaInvalid
|
|
163
|
-
} : {}),
|
|
154
|
+
} : {}),
|
|
155
|
+
...(ariaRequired != null ? {
|
|
164
156
|
"aria-required": ariaRequired
|
|
165
|
-
} : {}),
|
|
157
|
+
} : {}),
|
|
158
|
+
...(ariaLabelledby != null ? {
|
|
166
159
|
"aria-labelledby": ariaLabelledby
|
|
167
|
-
} : {}),
|
|
160
|
+
} : {}),
|
|
161
|
+
// Explicit host inputProps win over the injected defaults.
|
|
162
|
+
...inputProps
|
|
168
163
|
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}, [ref, error, fullWidth, onBlur, sx, placeholder, inputProps, fieldId, ariaDescribedby, ariaInvalid, ariaRequired, ariaLabelledby]);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}), [ref, error, fullWidth, onBlur, sx, placeholder, inputProps, fieldId, ariaDescribedby, ariaInvalid, ariaRequired, ariaLabelledby]);
|
|
172
167
|
|
|
173
168
|
// exactOptionalPropertyTypes: MUI's minDate/maxDate are `Moment` (not
|
|
174
169
|
// `Moment | undefined`), so spread the key only when a bound is set
|
|
175
170
|
// rather than passing an explicit `undefined`.
|
|
176
|
-
|
|
177
|
-
|
|
171
|
+
const minDateM = minDate ? dateToMoment(minDate) : null;
|
|
172
|
+
const maxDateM = maxDate ? dateToMoment(maxDate) : null;
|
|
178
173
|
return /*#__PURE__*/_jsx(LocalizationProvider, {
|
|
179
174
|
dateAdapter: AdapterMoment,
|
|
180
175
|
adapterLocale: adapterLocale,
|
|
181
|
-
children: /*#__PURE__*/_jsx(MuiDatePicker,
|
|
176
|
+
children: /*#__PURE__*/_jsx(MuiDatePicker, {
|
|
182
177
|
value: dateToMoment(value),
|
|
183
|
-
onChange: handleChange
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
178
|
+
onChange: handleChange,
|
|
179
|
+
...(minDateM ? {
|
|
180
|
+
minDate: minDateM
|
|
181
|
+
} : {}),
|
|
182
|
+
...(maxDateM ? {
|
|
183
|
+
maxDate: maxDateM
|
|
184
|
+
} : {}),
|
|
189
185
|
disablePast: disablePast,
|
|
190
186
|
disableFuture: disableFuture,
|
|
191
187
|
disabled: disabled,
|
|
192
188
|
readOnly: readOnly,
|
|
193
189
|
format: CHARTER_FORMAT,
|
|
194
|
-
slotProps: slotProps
|
|
195
|
-
|
|
190
|
+
slotProps: slotProps,
|
|
191
|
+
...domRest
|
|
192
|
+
})
|
|
196
193
|
});
|
|
197
194
|
});
|
|
198
|
-
export
|
|
195
|
+
export const DATE_FORMAT_CHARTER = CHARTER_FORMAT;
|
|
199
196
|
export default DatePicker;
|
|
200
197
|
//# sourceMappingURL=DatePicker.js.map
|