@portnet/ui 6.0.2 → 6.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +652 -0
- package/dist/esm/index.js +72 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
- package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldError.test.js +71 -38
- package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
- package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldWidth.test.js +11 -11
- package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FileCard.test.js +18 -17
- package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js +87 -179
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +32 -44
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +118 -199
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
- package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -42
- package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/esm/v2/__tests__/apiError.test.js +50 -69
- package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
- package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
- package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
- package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/esm/v2/__tests__/labels-merge.test.js +17 -21
- package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
- package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
- package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
- package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/esm/v2/components/Accordion.js +48 -70
- package/dist/esm/v2/components/Accordion.js.map +1 -1
- package/dist/esm/v2/components/ActionStrip.js +31 -43
- package/dist/esm/v2/components/ActionStrip.js.map +1 -1
- package/dist/esm/v2/components/Banner.js +25 -22
- package/dist/esm/v2/components/Banner.js.map +1 -1
- package/dist/esm/v2/components/Busy.js +14 -19
- package/dist/esm/v2/components/Busy.js.map +1 -1
- package/dist/esm/v2/components/Button.js +34 -45
- package/dist/esm/v2/components/Button.js.map +1 -1
- package/dist/esm/v2/components/CategoryTag.js +44 -27
- package/dist/esm/v2/components/CategoryTag.js.map +1 -1
- package/dist/esm/v2/components/Checkbox.js +32 -38
- package/dist/esm/v2/components/Checkbox.js.map +1 -1
- package/dist/esm/v2/components/Chip.js +23 -36
- package/dist/esm/v2/components/Chip.js.map +1 -1
- package/dist/esm/v2/components/Combobox.js +112 -136
- package/dist/esm/v2/components/Combobox.js.map +1 -1
- package/dist/esm/v2/components/CommandPalette.js +113 -198
- package/dist/esm/v2/components/CommandPalette.js.map +1 -1
- package/dist/esm/v2/components/ConfirmDialog.js +36 -45
- package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/esm/v2/components/DatePicker.js +78 -81
- package/dist/esm/v2/components/DatePicker.js.map +1 -1
- package/dist/esm/v2/components/DateRangePicker.js +63 -74
- package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
- package/dist/esm/v2/components/DateTimePicker.js +81 -86
- package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
- package/dist/esm/v2/components/Drawer.js +71 -65
- package/dist/esm/v2/components/Drawer.js.map +1 -1
- package/dist/esm/v2/components/Dropzone.js +130 -177
- package/dist/esm/v2/components/Dropzone.js.map +1 -1
- package/dist/esm/v2/components/EmptyState.js +9 -9
- package/dist/esm/v2/components/EmptyState.js.map +1 -1
- package/dist/esm/v2/components/FavoriteToggle.js +24 -33
- package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/esm/v2/components/Field.js +155 -59
- package/dist/esm/v2/components/Field.js.map +1 -1
- package/dist/esm/v2/components/FieldError.js +9 -13
- package/dist/esm/v2/components/FieldError.js.map +1 -1
- package/dist/esm/v2/components/FieldHelp.js +28 -49
- package/dist/esm/v2/components/FieldHelp.js.map +1 -1
- package/dist/esm/v2/components/FileCard.js +14 -19
- package/dist/esm/v2/components/FileCard.js.map +1 -1
- package/dist/esm/v2/components/FilterTab.js +22 -31
- package/dist/esm/v2/components/FilterTab.js.map +1 -1
- package/dist/esm/v2/components/ForbiddenPage.js +28 -8
- package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/esm/v2/components/FormGrid.js +48 -54
- package/dist/esm/v2/components/FormGrid.js.map +1 -1
- package/dist/esm/v2/components/FormikDisplay.js +98 -24
- package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
- package/dist/esm/v2/components/Input.js +75 -34
- package/dist/esm/v2/components/Input.js.map +1 -1
- package/dist/esm/v2/components/KPICard.js +42 -51
- package/dist/esm/v2/components/KPICard.js.map +1 -1
- package/dist/esm/v2/components/KPIStrip.js +9 -15
- package/dist/esm/v2/components/KPIStrip.js.map +1 -1
- package/dist/esm/v2/components/KV.js +16 -23
- package/dist/esm/v2/components/KV.js.map +1 -1
- package/dist/esm/v2/components/KVGrid.js +15 -23
- package/dist/esm/v2/components/KVGrid.js.map +1 -1
- package/dist/esm/v2/components/Layout.js +81 -117
- package/dist/esm/v2/components/Layout.js.map +1 -1
- package/dist/esm/v2/components/MobileRowCard.js +64 -75
- package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
- package/dist/esm/v2/components/Modal.js +44 -53
- package/dist/esm/v2/components/Modal.js.map +1 -1
- package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
- package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/esm/v2/components/NotFoundPage.js +28 -9
- package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
- package/dist/esm/v2/components/NumberInput.js +77 -107
- package/dist/esm/v2/components/NumberInput.js.map +1 -1
- package/dist/esm/v2/components/OverflowMenu.js +24 -42
- package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
- package/dist/esm/v2/components/PdfViewer.js +24 -33
- package/dist/esm/v2/components/PdfViewer.js.map +1 -1
- package/dist/esm/v2/components/ProgressBar.js +28 -36
- package/dist/esm/v2/components/ProgressBar.js.map +1 -1
- package/dist/esm/v2/components/Radio.js +49 -57
- package/dist/esm/v2/components/Radio.js.map +1 -1
- package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
- package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/esm/v2/components/SectionHeader.js +24 -31
- package/dist/esm/v2/components/SectionHeader.js.map +1 -1
- package/dist/esm/v2/components/Segmented.js +59 -84
- package/dist/esm/v2/components/Segmented.js.map +1 -1
- package/dist/esm/v2/components/Select.js +100 -138
- package/dist/esm/v2/components/Select.js.map +1 -1
- package/dist/esm/v2/components/ServerErrorPage.js +27 -10
- package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/esm/v2/components/Skeleton.js +81 -96
- package/dist/esm/v2/components/Skeleton.js.map +1 -1
- package/dist/esm/v2/components/SkipLink.js +6 -7
- package/dist/esm/v2/components/SkipLink.js.map +1 -1
- package/dist/esm/v2/components/Spinner.js +13 -22
- package/dist/esm/v2/components/Spinner.js.map +1 -1
- package/dist/esm/v2/components/Status.js +14 -25
- package/dist/esm/v2/components/Status.js.map +1 -1
- package/dist/esm/v2/components/Stepper.js +68 -71
- package/dist/esm/v2/components/Stepper.js.map +1 -1
- package/dist/esm/v2/components/Surface.js +25 -44
- package/dist/esm/v2/components/Surface.js.map +1 -1
- package/dist/esm/v2/components/Switch.js +21 -29
- package/dist/esm/v2/components/Switch.js.map +1 -1
- package/dist/esm/v2/components/TabPanel.js +84 -0
- package/dist/esm/v2/components/TabPanel.js.map +1 -0
- package/dist/esm/v2/components/Tabs.js +43 -19
- package/dist/esm/v2/components/Tabs.js.map +1 -1
- package/dist/esm/v2/components/TelInput.js +75 -108
- package/dist/esm/v2/components/TelInput.js.map +1 -1
- package/dist/esm/v2/components/Textarea.js +21 -30
- package/dist/esm/v2/components/Textarea.js.map +1 -1
- package/dist/esm/v2/components/TimePicker.js +59 -69
- package/dist/esm/v2/components/TimePicker.js.map +1 -1
- package/dist/esm/v2/components/Toast.js +109 -163
- package/dist/esm/v2/components/Toast.js.map +1 -1
- package/dist/esm/v2/components/Tooltip.js +18 -31
- package/dist/esm/v2/components/Tooltip.js.map +1 -1
- package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
- package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/esm/v2/components/_pickerShared.js +2 -2
- package/dist/esm/v2/components/_pickerShared.js.map +1 -1
- package/dist/esm/v2/components/index.js +37 -0
- package/dist/esm/v2/components/index.js.map +1 -1
- package/dist/esm/v2/hooks/index.js +62 -0
- package/dist/esm/v2/hooks/index.js.map +1 -1
- package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
- package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
- package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/esm/v2/hooks/useDensity.js +13 -17
- package/dist/esm/v2/hooks/useDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
- package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
- package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
- package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
- package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
- package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useSortedRows.js +3 -5
- package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/esm/v2/hooks/useTabLoading.js +6 -21
- package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/esm/v2/index.js +2 -3
- package/dist/esm/v2/index.js.map +1 -1
- package/dist/esm/v2/modalContext.js +2 -2
- package/dist/esm/v2/modalContext.js.map +1 -1
- package/dist/esm/v2/models/favorite.js.map +1 -1
- package/dist/esm/v2/models/personalization.js.map +1 -1
- package/dist/esm/v2/models/referentiel.js.map +1 -1
- package/dist/esm/v2/models/savedFilter.js.map +1 -1
- package/dist/esm/v2/patterns/ActionBar.js +115 -159
- package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/AppMain.js +108 -0
- package/dist/esm/v2/patterns/AppMain.js.map +1 -0
- package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
- package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/ChartFigure.js +151 -0
- package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
- package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/esm/v2/patterns/DataGrid.js +221 -255
- package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
- package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
- package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/esm/v2/patterns/DetailSplit.js +108 -0
- package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/esm/v2/patterns/FavoriteColumn.js +15 -17
- package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
- package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
- package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
- package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/esm/v2/patterns/FormPageShell.js +43 -41
- package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/FormSection.js +30 -38
- package/dist/esm/v2/patterns/FormSection.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCheckbox.js +29 -39
- package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCombobox.js +51 -69
- package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDatePicker.js +44 -58
- package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDateTimePicker.js +44 -58
- package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -1
- package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
- package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
- package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/esm/v2/patterns/FormikFile.js +94 -78
- package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
- package/dist/esm/v2/patterns/FormikInput.js +40 -53
- package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
- package/dist/esm/v2/patterns/FormikRadioGroup.js +39 -51
- package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -1
- package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
- package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/FormikSelect.js +64 -87
- package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/esm/v2/patterns/FormikTextarea.js +30 -46
- package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +53 -71
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
- package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/esm/v2/patterns/PageContent.js +10 -14
- package/dist/esm/v2/patterns/PageContent.js.map +1 -1
- package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
- package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/esm/v2/patterns/ReferentielField.js +327 -312
- package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/RowFavoriteToggle.js +27 -22
- package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -1
- package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
- package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
- package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
- package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/SortableHeader.js +22 -45
- package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/esm/v2/patterns/Tour.js +94 -120
- package/dist/esm/v2/patterns/Tour.js.map +1 -1
- package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
- package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/esm/v2/patterns/_pickerSerialisation.js +6 -8
- package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -1
- package/dist/esm/v2/patterns/_sort.js +17 -33
- package/dist/esm/v2/patterns/_sort.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
- package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
- package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/esm/v2/patterns/filterCriteria.js +102 -0
- package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/esm/v2/patterns/index.js +152 -0
- package/dist/esm/v2/patterns/index.js.map +1 -1
- package/dist/esm/v2/patterns/rowActions.js +223 -0
- package/dist/esm/v2/patterns/rowActions.js.map +1 -0
- package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
- package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
- package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
- package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js +28 -34
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
- package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
- package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/esm/v2/personalization/index.js +17 -0
- package/dist/esm/v2/personalization/index.js.map +1 -1
- package/dist/esm/v2/personalization/personalizationContext.js +9 -9
- package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/esm/v2/personalization/schema.js +8 -9
- package/dist/esm/v2/personalization/schema.js.map +1 -1
- package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
- package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/esm/v2/referentiel/types.js +2 -0
- package/dist/esm/v2/referentiel/types.js.map +1 -0
- package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
- package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
- package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
- package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/esm/v2/theme/_brand.js +8 -24
- package/dist/esm/v2/theme/_brand.js.map +1 -1
- package/dist/esm/v2/theme/_brandSecondary.js +8 -24
- package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
- package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/esm/v2/theme/cssVariables.js +62 -69
- package/dist/esm/v2/theme/cssVariables.js.map +1 -1
- package/dist/esm/v2/theme/index.js +5 -5
- package/dist/esm/v2/theme/index.js.map +1 -1
- package/dist/esm/v2/tokens/breakpoints.js +14 -14
- package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
- package/dist/esm/v2/tokens/chart.js +261 -0
- package/dist/esm/v2/tokens/chart.js.map +1 -0
- package/dist/esm/v2/tokens/colors.js +22 -22
- package/dist/esm/v2/tokens/colors.js.map +1 -1
- package/dist/esm/v2/tokens/density.js +62 -7
- package/dist/esm/v2/tokens/density.js.map +1 -1
- package/dist/esm/v2/tokens/index.js +49 -34
- package/dist/esm/v2/tokens/index.js.map +1 -1
- package/dist/esm/v2/tokens/motion.js +12 -20
- package/dist/esm/v2/tokens/motion.js.map +1 -1
- package/dist/esm/v2/tokens/radius.js +1 -1
- package/dist/esm/v2/tokens/radius.js.map +1 -1
- package/dist/esm/v2/tokens/shadows.js +6 -6
- package/dist/esm/v2/tokens/shadows.js.map +1 -1
- package/dist/esm/v2/tokens/spacing.js +2 -2
- package/dist/esm/v2/tokens/spacing.js.map +1 -1
- package/dist/esm/v2/tokens/state.js +1 -1
- package/dist/esm/v2/tokens/state.js.map +1 -1
- package/dist/esm/v2/tokens/statusPalette.js +17 -21
- package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
- package/dist/esm/v2/tokens/tokens.json +6 -1
- package/dist/esm/v2/tokens/typography.js +13 -13
- package/dist/esm/v2/tokens/typography.js.map +1 -1
- package/dist/esm/v2/tokens/zIndex.js +1 -1
- package/dist/esm/v2/tokens/zIndex.js.map +1 -1
- package/dist/esm/v2/types/datagrid.js.map +1 -1
- package/dist/esm/v2/utils/apiError.js +16 -37
- package/dist/esm/v2/utils/apiError.js.map +1 -1
- package/dist/esm/v2/utils/contrast.js +31 -32
- package/dist/esm/v2/utils/contrast.js.map +1 -1
- package/dist/esm/v2/utils/cx.js +5 -25
- package/dist/esm/v2/utils/cx.js.map +1 -1
- package/dist/esm/v2/utils/fileDownload.js +23 -26
- package/dist/esm/v2/utils/fileDownload.js.map +1 -1
- package/dist/esm/v2/utils/fileValidation.js +209 -0
- package/dist/esm/v2/utils/fileValidation.js.map +1 -0
- package/dist/esm/v2/utils/fmtDate.js +111 -0
- package/dist/esm/v2/utils/fmtDate.js.map +1 -0
- package/dist/esm/v2/utils/fmtMoney.js +8 -10
- package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
- package/dist/esm/v2/utils/formikErrors.js +78 -0
- package/dist/esm/v2/utils/formikErrors.js.map +1 -0
- package/dist/esm/v2/utils/index.js +35 -2
- package/dist/esm/v2/utils/index.js.map +1 -1
- package/dist/esm/v2/utils/mergeLabels.js +7 -12
- package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
- package/dist/esm/v2/utils/networkStatus.js +12 -12
- package/dist/esm/v2/utils/networkStatus.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +110 -49
- package/dist/index.js.map +1 -1
- package/dist/v2/__tests__/AppMain.test.js +133 -0
- package/dist/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/v2/__tests__/ChartFigure.test.js +183 -0
- package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/v2/__tests__/FieldError.test.js +82 -49
- package/dist/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/v2/__tests__/FieldNaming.test.js +161 -0
- package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/v2/__tests__/FieldWidth.test.js +23 -25
- package/dist/v2/__tests__/FieldWidth.test.js.map +1 -1
- package/dist/v2/__tests__/FileCard.test.js +29 -28
- package/dist/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/v2/__tests__/FormikCheckbox.test.js +90 -183
- package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -1
- package/dist/v2/__tests__/FormikDateTimePicker.test.js +38 -48
- package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
- package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
- package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/v2/__tests__/FormikRadioGroup.test.js +123 -204
- package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
- package/dist/v2/__tests__/MobileRowCard.test.js +63 -61
- package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
- package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
- package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/v2/__tests__/apiError.test.js +50 -69
- package/dist/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/v2/__tests__/banned-patterns.test.js +42 -123
- package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/v2/__tests__/chart-palette.test.js +205 -0
- package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/v2/__tests__/fileValidation.test.js +136 -0
- package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/v2/__tests__/filterCriteria.test.js +324 -0
- package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/fmtDate.test.js +69 -0
- package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/v2/__tests__/labels-merge.test.js +23 -27
- package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/v2/__tests__/locale-fallback.test.js +47 -52
- package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
- package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/rowActions.test.js +186 -0
- package/dist/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
- package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/v2/components/Accordion.js +60 -82
- package/dist/v2/components/Accordion.js.map +1 -1
- package/dist/v2/components/ActionStrip.js +40 -52
- package/dist/v2/components/ActionStrip.js.map +1 -1
- package/dist/v2/components/Banner.js +42 -41
- package/dist/v2/components/Banner.js.map +1 -1
- package/dist/v2/components/Busy.js +22 -27
- package/dist/v2/components/Busy.js.map +1 -1
- package/dist/v2/components/Button.js +39 -50
- package/dist/v2/components/Button.js.map +1 -1
- package/dist/v2/components/CategoryTag.d.ts.map +1 -1
- package/dist/v2/components/CategoryTag.js +49 -32
- package/dist/v2/components/CategoryTag.js.map +1 -1
- package/dist/v2/components/Checkbox.js +39 -45
- package/dist/v2/components/Checkbox.js.map +1 -1
- package/dist/v2/components/Chip.js +29 -42
- package/dist/v2/components/Chip.js.map +1 -1
- package/dist/v2/components/Combobox.js +122 -144
- package/dist/v2/components/Combobox.js.map +1 -1
- package/dist/v2/components/CommandPalette.js +138 -225
- package/dist/v2/components/CommandPalette.js.map +1 -1
- package/dist/v2/components/ConfirmDialog.js +46 -56
- package/dist/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/v2/components/DatePicker.js +81 -86
- package/dist/v2/components/DatePicker.js.map +1 -1
- package/dist/v2/components/DateRangePicker.js +77 -87
- package/dist/v2/components/DateRangePicker.js.map +1 -1
- package/dist/v2/components/DateTimePicker.js +84 -91
- package/dist/v2/components/DateTimePicker.js.map +1 -1
- package/dist/v2/components/Drawer.d.ts.map +1 -1
- package/dist/v2/components/Drawer.js +93 -88
- package/dist/v2/components/Drawer.js.map +1 -1
- package/dist/v2/components/Dropzone.js +150 -196
- package/dist/v2/components/Dropzone.js.map +1 -1
- package/dist/v2/components/EmptyState.js +18 -20
- package/dist/v2/components/EmptyState.js.map +1 -1
- package/dist/v2/components/FavoriteToggle.js +28 -39
- package/dist/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/v2/components/Field.d.ts +62 -4
- package/dist/v2/components/Field.d.ts.map +1 -1
- package/dist/v2/components/Field.js +169 -70
- package/dist/v2/components/Field.js.map +1 -1
- package/dist/v2/components/FieldError.js +18 -21
- package/dist/v2/components/FieldError.js.map +1 -1
- package/dist/v2/components/FieldHelp.js +40 -60
- package/dist/v2/components/FieldHelp.js.map +1 -1
- package/dist/v2/components/FileCard.js +27 -31
- package/dist/v2/components/FileCard.js.map +1 -1
- package/dist/v2/components/FilterTab.js +30 -38
- package/dist/v2/components/FilterTab.js.map +1 -1
- package/dist/v2/components/ForbiddenPage.d.ts +25 -1
- package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
- package/dist/v2/components/ForbiddenPage.js +37 -17
- package/dist/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/v2/components/FormGrid.js +53 -59
- package/dist/v2/components/FormGrid.js.map +1 -1
- package/dist/v2/components/FormikDisplay.d.ts +50 -1
- package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
- package/dist/v2/components/FormikDisplay.js +108 -33
- package/dist/v2/components/FormikDisplay.js.map +1 -1
- package/dist/v2/components/Input.d.ts +40 -0
- package/dist/v2/components/Input.d.ts.map +1 -1
- package/dist/v2/components/Input.js +81 -41
- package/dist/v2/components/Input.js.map +1 -1
- package/dist/v2/components/KPICard.js +57 -67
- package/dist/v2/components/KPICard.js.map +1 -1
- package/dist/v2/components/KPIStrip.js +16 -22
- package/dist/v2/components/KPIStrip.js.map +1 -1
- package/dist/v2/components/KV.js +25 -31
- package/dist/v2/components/KV.js.map +1 -1
- package/dist/v2/components/KVGrid.js +19 -26
- package/dist/v2/components/KVGrid.js.map +1 -1
- package/dist/v2/components/Layout.js +91 -120
- package/dist/v2/components/Layout.js.map +1 -1
- package/dist/v2/components/MobileRowCard.js +79 -91
- package/dist/v2/components/MobileRowCard.js.map +1 -1
- package/dist/v2/components/Modal.js +61 -69
- package/dist/v2/components/Modal.js.map +1 -1
- package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
- package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
- package/dist/v2/components/NetworkErrorPage.js +38 -21
- package/dist/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/v2/components/NotFoundPage.d.ts +17 -1
- package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
- package/dist/v2/components/NotFoundPage.js +37 -18
- package/dist/v2/components/NotFoundPage.js.map +1 -1
- package/dist/v2/components/NumberInput.js +88 -118
- package/dist/v2/components/NumberInput.js.map +1 -1
- package/dist/v2/components/OverflowMenu.js +38 -56
- package/dist/v2/components/OverflowMenu.js.map +1 -1
- package/dist/v2/components/PdfViewer.js +34 -45
- package/dist/v2/components/PdfViewer.js.map +1 -1
- package/dist/v2/components/ProgressBar.js +42 -49
- package/dist/v2/components/ProgressBar.js.map +1 -1
- package/dist/v2/components/Radio.js +59 -67
- package/dist/v2/components/Radio.js.map +1 -1
- package/dist/v2/components/SectionErrorBoundary.js +90 -135
- package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/v2/components/SectionHeader.js +34 -41
- package/dist/v2/components/SectionHeader.js.map +1 -1
- package/dist/v2/components/Segmented.js +69 -93
- package/dist/v2/components/Segmented.js.map +1 -1
- package/dist/v2/components/Select.d.ts +26 -2
- package/dist/v2/components/Select.d.ts.map +1 -1
- package/dist/v2/components/Select.js +120 -155
- package/dist/v2/components/Select.js.map +1 -1
- package/dist/v2/components/ServerErrorPage.d.ts +27 -1
- package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
- package/dist/v2/components/ServerErrorPage.js +37 -20
- package/dist/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/v2/components/Skeleton.js +86 -100
- package/dist/v2/components/Skeleton.js.map +1 -1
- package/dist/v2/components/SkipLink.js +9 -12
- package/dist/v2/components/SkipLink.js.map +1 -1
- package/dist/v2/components/Spinner.js +16 -25
- package/dist/v2/components/Spinner.js.map +1 -1
- package/dist/v2/components/Status.js +18 -29
- package/dist/v2/components/Status.js.map +1 -1
- package/dist/v2/components/Stepper.js +80 -82
- package/dist/v2/components/Stepper.js.map +1 -1
- package/dist/v2/components/Surface.js +34 -49
- package/dist/v2/components/Surface.js.map +1 -1
- package/dist/v2/components/Switch.js +29 -37
- package/dist/v2/components/Switch.js.map +1 -1
- package/dist/v2/components/TabPanel.d.ts +17 -0
- package/dist/v2/components/TabPanel.d.ts.map +1 -0
- package/dist/v2/components/TabPanel.js +90 -0
- package/dist/v2/components/TabPanel.js.map +1 -0
- package/dist/v2/components/Tabs.d.ts +25 -0
- package/dist/v2/components/Tabs.d.ts.map +1 -1
- package/dist/v2/components/Tabs.js +53 -29
- package/dist/v2/components/Tabs.js.map +1 -1
- package/dist/v2/components/TelInput.js +80 -115
- package/dist/v2/components/TelInput.js.map +1 -1
- package/dist/v2/components/Textarea.js +26 -35
- package/dist/v2/components/Textarea.js.map +1 -1
- package/dist/v2/components/TimePicker.js +62 -74
- package/dist/v2/components/TimePicker.js.map +1 -1
- package/dist/v2/components/Toast.js +119 -174
- package/dist/v2/components/Toast.js.map +1 -1
- package/dist/v2/components/Tooltip.js +23 -38
- package/dist/v2/components/Tooltip.js.map +1 -1
- package/dist/v2/components/_ErrorPageBody.js +15 -16
- package/dist/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/v2/components/_pickerShared.js +5 -5
- package/dist/v2/components/_pickerShared.js.map +1 -1
- package/dist/v2/components/index.d.ts +40 -1
- package/dist/v2/components/index.d.ts.map +1 -1
- package/dist/v2/components/index.js +153 -136
- package/dist/v2/components/index.js.map +1 -1
- package/dist/v2/hooks/index.d.ts +65 -0
- package/dist/v2/hooks/index.d.ts.map +1 -1
- package/dist/v2/hooks/index.js +63 -24
- package/dist/v2/hooks/index.js.map +1 -1
- package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
- package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
- package/dist/v2/hooks/useAppliedFilters.js +117 -0
- package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.js +87 -0
- package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/v2/hooks/useDelayedFlag.js +6 -20
- package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/v2/hooks/useDensity.d.ts.map +1 -1
- package/dist/v2/hooks/useDensity.js +14 -18
- package/dist/v2/hooks/useDensity.js.map +1 -1
- package/dist/v2/hooks/useFocusFirstError.js +26 -34
- package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/v2/hooks/useFocusTrap.js +20 -24
- package/dist/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
- package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.js +39 -54
- package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
- package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/v2/hooks/useResolvedDensity.js +5 -13
- package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/v2/hooks/useSortedRows.js +4 -6
- package/dist/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/v2/hooks/useTabLoading.js +7 -22
- package/dist/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/v2/index.js +143 -145
- package/dist/v2/index.js.map +1 -1
- package/dist/v2/modalContext.js +2 -2
- package/dist/v2/modalContext.js.map +1 -1
- package/dist/v2/models/favorite.d.ts +8 -9
- package/dist/v2/models/favorite.d.ts.map +1 -1
- package/dist/v2/models/favorite.js.map +1 -1
- package/dist/v2/models/index.js +4 -4
- package/dist/v2/models/index.js.map +1 -1
- package/dist/v2/models/personalization.d.ts +44 -48
- package/dist/v2/models/personalization.d.ts.map +1 -1
- package/dist/v2/models/personalization.js.map +1 -1
- package/dist/v2/models/referentiel.d.ts +32 -50
- package/dist/v2/models/referentiel.d.ts.map +1 -1
- package/dist/v2/models/referentiel.js.map +1 -1
- package/dist/v2/models/savedFilter.d.ts +8 -17
- package/dist/v2/models/savedFilter.d.ts.map +1 -1
- package/dist/v2/models/savedFilter.js.map +1 -1
- package/dist/v2/patterns/ActionBar.js +152 -187
- package/dist/v2/patterns/ActionBar.js.map +1 -1
- package/dist/v2/patterns/AppMain.d.ts +109 -0
- package/dist/v2/patterns/AppMain.d.ts.map +1 -0
- package/dist/v2/patterns/AppMain.js +115 -0
- package/dist/v2/patterns/AppMain.js.map +1 -0
- package/dist/v2/patterns/BulkActionBar.js +40 -42
- package/dist/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/v2/patterns/ChartFigure.d.ts +124 -0
- package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
- package/dist/v2/patterns/ChartFigure.js +159 -0
- package/dist/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
- package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/v2/patterns/ColumnsToggle.js +60 -94
- package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
- package/dist/v2/patterns/DataGrid.js +262 -297
- package/dist/v2/patterns/DataGrid.js.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
- package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/v2/patterns/DataGridToolbar.js +103 -106
- package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/v2/patterns/DataGridVirtualized.js +179 -217
- package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/v2/patterns/DetailSplit.d.ts +87 -0
- package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
- package/dist/v2/patterns/DetailSplit.js +116 -0
- package/dist/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/v2/patterns/FavoriteColumn.js +22 -23
- package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/v2/patterns/FavoritesFilter.js +36 -44
- package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
- package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
- package/dist/v2/patterns/FilterTabBar.js +120 -0
- package/dist/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/v2/patterns/FormErrorSummary.js +20 -23
- package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/v2/patterns/FormPageShell.js +53 -50
- package/dist/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/v2/patterns/FormSection.d.ts +8 -3
- package/dist/v2/patterns/FormSection.d.ts.map +1 -1
- package/dist/v2/patterns/FormSection.js +44 -51
- package/dist/v2/patterns/FormSection.js.map +1 -1
- package/dist/v2/patterns/FormikCheckbox.js +36 -45
- package/dist/v2/patterns/FormikCheckbox.js.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
- package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/v2/patterns/FormikCombobox.js +55 -72
- package/dist/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.js +50 -64
- package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/v2/patterns/FormikDateTimePicker.js +50 -64
- package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -1
- package/dist/v2/patterns/FormikErrorFocus.js +25 -26
- package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
- package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
- package/dist/v2/patterns/FormikErrorSummary.js +97 -0
- package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/v2/patterns/FormikFile.d.ts +14 -1
- package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
- package/dist/v2/patterns/FormikFile.js +99 -83
- package/dist/v2/patterns/FormikFile.js.map +1 -1
- package/dist/v2/patterns/FormikInput.js +45 -58
- package/dist/v2/patterns/FormikInput.js.map +1 -1
- package/dist/v2/patterns/FormikRadioGroup.js +45 -56
- package/dist/v2/patterns/FormikRadioGroup.js.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
- package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.js +54 -64
- package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/v2/patterns/FormikSelect.js +70 -92
- package/dist/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/v2/patterns/FormikTextarea.js +35 -51
- package/dist/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.js +60 -80
- package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
- package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/v2/patterns/PageContent.js +17 -20
- package/dist/v2/patterns/PageContent.js.map +1 -1
- package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
- package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
- package/dist/v2/patterns/PreviewDrawer.js +159 -0
- package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/v2/patterns/ReferentielField.d.ts +86 -2
- package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/ReferentielField.js +347 -327
- package/dist/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/v2/patterns/RowFavoriteToggle.d.ts +6 -0
- package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -1
- package/dist/v2/patterns/RowFavoriteToggle.js +38 -30
- package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -1
- package/dist/v2/patterns/SaveFilterDialog.js +50 -77
- package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
- package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/v2/patterns/SkeletonPageShell.js +122 -143
- package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/v2/patterns/SortableHeader.js +35 -57
- package/dist/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/v2/patterns/Tour.js +121 -142
- package/dist/v2/patterns/Tour.js.map +1 -1
- package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
- package/dist/v2/patterns/_dataGridShared.js +131 -147
- package/dist/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/v2/patterns/_pickerSerialisation.js +9 -10
- package/dist/v2/patterns/_pickerSerialisation.js.map +1 -1
- package/dist/v2/patterns/_sort.js +17 -33
- package/dist/v2/patterns/_sort.js.map +1 -1
- package/dist/v2/patterns/_useColumnReorder.js +124 -163
- package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/v2/patterns/_useColumnResize.js +80 -99
- package/dist/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/v2/patterns/filterCriteria.d.ts +78 -0
- package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
- package/dist/v2/patterns/filterCriteria.js +110 -0
- package/dist/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/v2/patterns/index.d.ts +160 -0
- package/dist/v2/patterns/index.d.ts.map +1 -1
- package/dist/v2/patterns/index.js +157 -79
- package/dist/v2/patterns/index.js.map +1 -1
- package/dist/v2/patterns/rowActions.d.ts +150 -0
- package/dist/v2/patterns/rowActions.d.ts.map +1 -0
- package/dist/v2/patterns/rowActions.js +232 -0
- package/dist/v2/patterns/rowActions.js.map +1 -0
- package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
- package/dist/v2/personalization/PersonalizationProvider.js +57 -53
- package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
- package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/index.js +5 -5
- package/dist/v2/personalization/adapters/index.js.map +1 -1
- package/dist/v2/personalization/capabilities/favorites.js +39 -62
- package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
- package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/v2/personalization/capabilities/gridPreferences.js +31 -36
- package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -1
- package/dist/v2/personalization/capabilities/index.js +12 -12
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
- package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.js +81 -182
- package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/v2/personalization/index.d.ts +16 -0
- package/dist/v2/personalization/index.d.ts.map +1 -1
- package/dist/v2/personalization/index.js +30 -23
- package/dist/v2/personalization/index.js.map +1 -1
- package/dist/v2/personalization/personalizationContext.js +10 -12
- package/dist/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/v2/personalization/schema.js +8 -9
- package/dist/v2/personalization/schema.js.map +1 -1
- package/dist/v2/referentiel/ReferentielProvider.js +31 -45
- package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/v2/referentiel/index.js +11 -13
- package/dist/v2/referentiel/index.js.map +1 -1
- package/dist/v2/referentiel/types.d.ts +105 -0
- package/dist/v2/referentiel/types.d.ts.map +1 -0
- package/dist/v2/referentiel/types.js +6 -0
- package/dist/v2/referentiel/types.js.map +1 -0
- package/dist/v2/referentiel/useReferentielClient.js +13 -16
- package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
- package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.js +63 -120
- package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
- package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.js +40 -95
- package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/v2/theme/_brand.js +12 -26
- package/dist/v2/theme/_brand.js.map +1 -1
- package/dist/v2/theme/_brandSecondary.js +12 -26
- package/dist/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/v2/theme/createPortnetTheme.js +41 -49
- package/dist/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/v2/theme/cssVariables.d.ts +3 -3
- package/dist/v2/theme/cssVariables.d.ts.map +1 -1
- package/dist/v2/theme/cssVariables.js +65 -70
- package/dist/v2/theme/cssVariables.js.map +1 -1
- package/dist/v2/theme/index.js +10 -10
- package/dist/v2/theme/index.js.map +1 -1
- package/dist/v2/tokens/breakpoints.js +16 -16
- package/dist/v2/tokens/breakpoints.js.map +1 -1
- package/dist/v2/tokens/chart.d.ts +103 -0
- package/dist/v2/tokens/chart.d.ts.map +1 -0
- package/dist/v2/tokens/chart.js +270 -0
- package/dist/v2/tokens/chart.js.map +1 -0
- package/dist/v2/tokens/colors.js +24 -24
- package/dist/v2/tokens/colors.js.map +1 -1
- package/dist/v2/tokens/density.d.ts +104 -0
- package/dist/v2/tokens/density.d.ts.map +1 -1
- package/dist/v2/tokens/density.js +67 -12
- package/dist/v2/tokens/density.js.map +1 -1
- package/dist/v2/tokens/index.d.ts +50 -1
- package/dist/v2/tokens/index.d.ts.map +1 -1
- package/dist/v2/tokens/index.js +116 -68
- package/dist/v2/tokens/index.js.map +1 -1
- package/dist/v2/tokens/motion.js +16 -22
- package/dist/v2/tokens/motion.js.map +1 -1
- package/dist/v2/tokens/radius.js +3 -3
- package/dist/v2/tokens/radius.js.map +1 -1
- package/dist/v2/tokens/shadows.js +8 -8
- package/dist/v2/tokens/shadows.js.map +1 -1
- package/dist/v2/tokens/spacing.js +4 -4
- package/dist/v2/tokens/spacing.js.map +1 -1
- package/dist/v2/tokens/state.js +3 -3
- package/dist/v2/tokens/state.js.map +1 -1
- package/dist/v2/tokens/statusPalette.js +21 -23
- package/dist/v2/tokens/statusPalette.js.map +1 -1
- package/dist/v2/tokens/tokens.json +6 -1
- package/dist/v2/tokens/typography.js +15 -15
- package/dist/v2/tokens/typography.js.map +1 -1
- package/dist/v2/tokens/zIndex.js +3 -3
- package/dist/v2/tokens/zIndex.js.map +1 -1
- package/dist/v2/types/datagrid.d.ts +9 -1
- package/dist/v2/types/datagrid.d.ts.map +1 -1
- package/dist/v2/types/datagrid.js.map +1 -1
- package/dist/v2/types/index.js +2 -2
- package/dist/v2/types/index.js.map +1 -1
- package/dist/v2/utils/apiError.js +16 -37
- package/dist/v2/utils/apiError.js.map +1 -1
- package/dist/v2/utils/contrast.js +31 -32
- package/dist/v2/utils/contrast.js.map +1 -1
- package/dist/v2/utils/cx.js +7 -27
- package/dist/v2/utils/cx.js.map +1 -1
- package/dist/v2/utils/fileDownload.js +25 -28
- package/dist/v2/utils/fileDownload.js.map +1 -1
- package/dist/v2/utils/fileValidation.d.ts +116 -0
- package/dist/v2/utils/fileValidation.d.ts.map +1 -0
- package/dist/v2/utils/fileValidation.js +220 -0
- package/dist/v2/utils/fileValidation.js.map +1 -0
- package/dist/v2/utils/fmtDate.d.ts +103 -0
- package/dist/v2/utils/fmtDate.d.ts.map +1 -0
- package/dist/v2/utils/fmtDate.js +119 -0
- package/dist/v2/utils/fmtDate.js.map +1 -0
- package/dist/v2/utils/fmtMoney.d.ts +3 -3
- package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
- package/dist/v2/utils/fmtMoney.js +9 -11
- package/dist/v2/utils/fmtMoney.js.map +1 -1
- package/dist/v2/utils/formikErrors.d.ts +67 -0
- package/dist/v2/utils/formikErrors.d.ts.map +1 -0
- package/dist/v2/utils/formikErrors.js +85 -0
- package/dist/v2/utils/formikErrors.js.map +1 -0
- package/dist/v2/utils/index.d.ts +5 -0
- package/dist/v2/utils/index.d.ts.map +1 -1
- package/dist/v2/utils/index.js +67 -18
- package/dist/v2/utils/index.js.map +1 -1
- package/dist/v2/utils/mergeLabels.js +9 -14
- package/dist/v2/utils/mergeLabels.js.map +1 -1
- package/dist/v2/utils/networkStatus.js +14 -14
- package/dist/v2/utils/networkStatus.js.map +1 -1
- package/package.json +26 -9
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var _excluded = ["value", "onChange", "options", "multiple", "freeSolo", "placeholder", "disabled", "error", "fullWidth", "loading", "groupBy", "getOptionLabel", "isOptionEqualToValue", "filterOptions", "renderOption", "onInputChange", "labels", "sx", "aria-describedby", "aria-invalid", "aria-required"];
|
|
2
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
|
-
function _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); }
|
|
8
|
-
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
9
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
10
1
|
import * as React from "react";
|
|
11
2
|
import MuiAutocomplete from "@mui/material/Autocomplete";
|
|
12
3
|
import TextField from "@mui/material/TextField";
|
|
@@ -129,8 +120,8 @@ import { createElement as _createElement } from "react";
|
|
|
129
120
|
* React unmount/remount the Autocomplete on every parent re-render and drop
|
|
130
121
|
* focus/open-state.
|
|
131
122
|
*/
|
|
132
|
-
|
|
133
|
-
|
|
123
|
+
const AutocompleteWithTags = MuiAutocomplete;
|
|
124
|
+
const DEFAULT_LABELS = Object.freeze({
|
|
134
125
|
noOptions: "Aucun résultat",
|
|
135
126
|
loading: "Chargement…",
|
|
136
127
|
clear: "Effacer",
|
|
@@ -138,144 +129,122 @@ var DEFAULT_LABELS = Object.freeze({
|
|
|
138
129
|
open: "Ouvrir",
|
|
139
130
|
placeholder: "Sélectionner…"
|
|
140
131
|
});
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
ariaInvalid = _ref["aria-invalid"],
|
|
173
|
-
ariaRequired = _ref["aria-required"],
|
|
174
|
-
rest = _objectWithoutProperties(_ref, _excluded);
|
|
175
|
-
var L = mergeLabels(DEFAULT_LABELS, labels);
|
|
132
|
+
const normaliseOption = o => typeof o === "string" ? {
|
|
133
|
+
value: o,
|
|
134
|
+
label: o
|
|
135
|
+
} : o;
|
|
136
|
+
const Combobox = /*#__PURE__*/React.forwardRef(function Combobox({
|
|
137
|
+
value,
|
|
138
|
+
onChange,
|
|
139
|
+
options = [],
|
|
140
|
+
multiple = false,
|
|
141
|
+
freeSolo = false,
|
|
142
|
+
placeholder,
|
|
143
|
+
disabled,
|
|
144
|
+
error,
|
|
145
|
+
fullWidth = true,
|
|
146
|
+
loading = false,
|
|
147
|
+
groupBy,
|
|
148
|
+
getOptionLabel,
|
|
149
|
+
isOptionEqualToValue,
|
|
150
|
+
filterOptions,
|
|
151
|
+
renderOption,
|
|
152
|
+
onInputChange,
|
|
153
|
+
labels,
|
|
154
|
+
sx,
|
|
155
|
+
// COMBO-1 — pulled out of ...rest so they DON'T land on the Autocomplete
|
|
156
|
+
// root; threaded onto the native <input> in renderInput below.
|
|
157
|
+
"aria-describedby": ariaDescribedBy,
|
|
158
|
+
"aria-invalid": ariaInvalid,
|
|
159
|
+
"aria-required": ariaRequired,
|
|
160
|
+
...rest
|
|
161
|
+
}, ref) {
|
|
162
|
+
const L = mergeLabels(DEFAULT_LABELS, labels);
|
|
176
163
|
// Legacy `placeholder` prop wins over labels.placeholder.
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
return options.map(normaliseOption);
|
|
180
|
-
}, [options]);
|
|
164
|
+
const effectivePlaceholder = placeholder ?? L.placeholder;
|
|
165
|
+
const normalised = React.useMemo(() => options.map(normaliseOption), [options]);
|
|
181
166
|
|
|
182
167
|
// Default groupBy — uses option.group if any option has one.
|
|
183
|
-
|
|
168
|
+
const autoGroupBy = React.useMemo(() => {
|
|
184
169
|
if (groupBy) return groupBy;
|
|
185
|
-
if (normalised.some(
|
|
186
|
-
return o &&
|
|
187
|
-
})) {
|
|
188
|
-
return function (o) {
|
|
189
|
-
return o && _typeof(o) === "object" ? o.group || "" : "";
|
|
190
|
-
};
|
|
170
|
+
if (normalised.some(o => o && typeof o === "object" && o.group)) {
|
|
171
|
+
return o => o && typeof o === "object" ? o.group || "" : "";
|
|
191
172
|
}
|
|
192
173
|
return undefined;
|
|
193
174
|
}, [normalised, groupBy]);
|
|
194
|
-
|
|
195
|
-
var _ref2, _obj$label;
|
|
175
|
+
const labelOf = React.useCallback(o => {
|
|
196
176
|
if (getOptionLabel) return getOptionLabel(o);
|
|
197
177
|
if (o == null) return "";
|
|
198
178
|
if (typeof o === "string") return o;
|
|
199
|
-
|
|
200
|
-
return String(
|
|
179
|
+
const obj = o;
|
|
180
|
+
return String(obj.label ?? obj.value ?? "");
|
|
201
181
|
}, [getOptionLabel]);
|
|
202
|
-
|
|
182
|
+
const eqOf = React.useCallback((opt, val) => {
|
|
203
183
|
if (isOptionEqualToValue) return isOptionEqualToValue(opt, val);
|
|
204
184
|
if (opt == null || val == null) return opt === val;
|
|
205
|
-
|
|
185
|
+
const a = typeof opt === "string" ? opt : opt.value;
|
|
206
186
|
// B-eq: primitives (numbers, booleans) are compared as-is.
|
|
207
187
|
// Previously `val.value` for a non-string, non-object value
|
|
208
188
|
// (e.g. a numeric id stored by FormikCombobox via setFieldValue)
|
|
209
189
|
// resolved to undefined, so the lookup never matched and the
|
|
210
190
|
// selected option was never visually reflected after picking.
|
|
211
|
-
|
|
191
|
+
const b = typeof val === "string" ? val : val !== null && typeof val === "object" ? val.value : val; // number, boolean, etc. — use the primitive directly
|
|
212
192
|
return a === b;
|
|
213
193
|
}, [isOptionEqualToValue]);
|
|
214
|
-
|
|
194
|
+
const handleChange = (_event, next) => {
|
|
215
195
|
if (!onChange) return;
|
|
216
196
|
// Re-emit raw value(s) — strings stay strings, objects get unwrapped to
|
|
217
197
|
// their `.value` so callers don't have to deal with the option shape.
|
|
218
198
|
if (multiple) {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
var _value;
|
|
222
|
-
return typeof n === "string" ? n : (_value = n.value) !== null && _value !== void 0 ? _value : n;
|
|
223
|
-
});
|
|
199
|
+
const arr = Array.isArray(next) ? next : [];
|
|
200
|
+
const out = arr.map(n => typeof n === "string" ? n : n.value ?? n);
|
|
224
201
|
onChange(out);
|
|
225
202
|
return;
|
|
226
203
|
}
|
|
227
204
|
if (next == null) {
|
|
228
205
|
onChange(null);
|
|
229
206
|
} else {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
onChange(typeof single === "string" ? single : (_value2 = single.value) !== null && _value2 !== void 0 ? _value2 : single);
|
|
207
|
+
const single = next;
|
|
208
|
+
onChange(typeof single === "string" ? single : single.value ?? single);
|
|
233
209
|
}
|
|
234
210
|
};
|
|
235
211
|
|
|
236
212
|
// Resolve raw value(s) back to option objects so MUI Autocomplete can
|
|
237
213
|
// display labels properly.
|
|
238
|
-
|
|
214
|
+
const resolvedValue = React.useMemo(() => {
|
|
239
215
|
if (multiple) {
|
|
240
|
-
|
|
241
|
-
return arr.map(
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
value: v,
|
|
246
|
-
label: v
|
|
247
|
-
} : v);
|
|
248
|
-
});
|
|
216
|
+
const arr = Array.isArray(value) ? value : [];
|
|
217
|
+
return arr.map(v => normalised.find(o => eqOf(o, v)) || (typeof v === "string" ? {
|
|
218
|
+
value: v,
|
|
219
|
+
label: v
|
|
220
|
+
} : v));
|
|
249
221
|
}
|
|
250
222
|
if (value == null || value === "") return null;
|
|
251
|
-
return normalised.find(
|
|
252
|
-
|
|
253
|
-
}) || (typeof value === "string" ? {
|
|
254
|
-
value: value,
|
|
223
|
+
return normalised.find(o => eqOf(o, value)) || (typeof value === "string" ? {
|
|
224
|
+
value,
|
|
255
225
|
label: value
|
|
256
226
|
} : value);
|
|
257
227
|
}, [value, normalised, multiple, eqOf]);
|
|
258
228
|
|
|
259
229
|
// Auto-render helper text when at least one option has one. Hosts can
|
|
260
230
|
// override entirely by passing their own renderOption.
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
});
|
|
264
|
-
var effectiveRenderOption = React.useMemo(function () {
|
|
231
|
+
const anyHelper = normalised.some(o => o && typeof o === "object" && o.helper != null && o.helper !== "");
|
|
232
|
+
const effectiveRenderOption = React.useMemo(() => {
|
|
265
233
|
if (renderOption) return renderOption;
|
|
266
234
|
if (!anyHelper) return undefined;
|
|
267
235
|
// MUI Autocomplete passes (props, option, state) — `props` already
|
|
268
236
|
// carries the correct <li> role/id/aria-selected. We render the
|
|
269
237
|
// option content inside it; the helper line is in-flow text so it
|
|
270
238
|
// becomes part of the option's accessible name automatically.
|
|
271
|
-
return
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
return /*#__PURE__*/_createElement("li",
|
|
239
|
+
return (props, option) => {
|
|
240
|
+
const label = labelOf(option);
|
|
241
|
+
const helper = option && typeof option === "object" ? option.helper : null;
|
|
242
|
+
const optValue = typeof option === "object" && option !== null ? option.value : undefined;
|
|
243
|
+
const optionKey = optValue == null ? label : typeof optValue === "boolean" ? String(optValue) : optValue;
|
|
244
|
+
return /*#__PURE__*/_createElement("li", {
|
|
245
|
+
...props,
|
|
277
246
|
key: optionKey
|
|
278
|
-
}
|
|
247
|
+
}, /*#__PURE__*/_jsxs(Box, {
|
|
279
248
|
sx: {
|
|
280
249
|
display: "flex",
|
|
281
250
|
flexDirection: "column",
|
|
@@ -301,7 +270,7 @@ var Combobox = /*#__PURE__*/React.forwardRef(function Combobox(_ref, ref) {
|
|
|
301
270
|
}));
|
|
302
271
|
};
|
|
303
272
|
}, [renderOption, anyHelper, labelOf]);
|
|
304
|
-
return /*#__PURE__*/_jsx(AutocompleteWithTags,
|
|
273
|
+
return /*#__PURE__*/_jsx(AutocompleteWithTags, {
|
|
305
274
|
ref: ref,
|
|
306
275
|
multiple: multiple,
|
|
307
276
|
freeSolo: freeSolo,
|
|
@@ -323,28 +292,26 @@ var Combobox = /*#__PURE__*/React.forwardRef(function Combobox(_ref, ref) {
|
|
|
323
292
|
closeText: L.close,
|
|
324
293
|
openText: L.open,
|
|
325
294
|
size: "small",
|
|
326
|
-
renderTags:
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
index
|
|
332
|
-
})
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
}
|
|
295
|
+
renderTags: (values, getTagProps) => values.map((option, index) => {
|
|
296
|
+
const rawVal = typeof option === "object" && option !== null ? option.value : option;
|
|
297
|
+
const tagKey = rawVal == null ? index : typeof rawVal === "boolean" ? String(rawVal) : rawVal;
|
|
298
|
+
return /*#__PURE__*/_createElement(MuiChip, {
|
|
299
|
+
...getTagProps({
|
|
300
|
+
index
|
|
301
|
+
}),
|
|
302
|
+
key: tagKey,
|
|
303
|
+
size: "small",
|
|
304
|
+
label: labelOf(option),
|
|
305
|
+
sx: {
|
|
306
|
+
height: 22,
|
|
307
|
+
"& .MuiChip-label": {
|
|
308
|
+
paddingInline: 1,
|
|
309
|
+
fontSize: 12
|
|
342
310
|
}
|
|
343
|
-
}
|
|
311
|
+
}
|
|
344
312
|
});
|
|
345
|
-
},
|
|
346
|
-
renderInput:
|
|
347
|
-
var _params$slotProps, _params$slotProps$inp, _params$slotProps2, _params$slotProps$htm, _params$slotProps3;
|
|
313
|
+
}),
|
|
314
|
+
renderInput: params => {
|
|
348
315
|
// MUI v9: the bag passed to renderInput carries the input slot props
|
|
349
316
|
// at `params.slotProps.input` AND — crucially — the input element ref
|
|
350
317
|
// at `params.slotProps.htmlInput.ref`, which MUI's Autocomplete
|
|
@@ -355,24 +322,32 @@ var Combobox = /*#__PURE__*/React.forwardRef(function Combobox(_ref, ref) {
|
|
|
355
322
|
// as { endAdornment? } so the runtime spread still forwards htmlInput.
|
|
356
323
|
// params.InputProps was the pre-v9 TextField prop, fully replaced by
|
|
357
324
|
// params.slotProps.input — no longer exists on AutocompleteRenderInputParams.
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
return /*#__PURE__*/_jsx(TextField,
|
|
325
|
+
const paramsSlotProps = params.slotProps ?? {};
|
|
326
|
+
const inputSlot = params.slotProps?.input ?? {};
|
|
327
|
+
return /*#__PURE__*/_jsx(TextField, {
|
|
328
|
+
...params,
|
|
361
329
|
placeholder: effectivePlaceholder,
|
|
362
330
|
error: !!error,
|
|
363
|
-
slotProps:
|
|
331
|
+
slotProps: {
|
|
332
|
+
...paramsSlotProps,
|
|
364
333
|
// COMBO-1 — merge Field's aria onto the native <input>. Spread
|
|
365
334
|
// MUI's existing htmlInput FIRST to keep its ref + combobox aria
|
|
366
335
|
// (role/aria-expanded/aria-controls/aria-activedescendant); add
|
|
367
336
|
// ours only when defined (exactOptionalPropertyTypes-safe).
|
|
368
|
-
htmlInput:
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
337
|
+
htmlInput: {
|
|
338
|
+
...(params.slotProps?.htmlInput ?? {}),
|
|
339
|
+
...(ariaDescribedBy != null ? {
|
|
340
|
+
"aria-describedby": ariaDescribedBy
|
|
341
|
+
} : {}),
|
|
342
|
+
...(ariaInvalid != null ? {
|
|
343
|
+
"aria-invalid": ariaInvalid
|
|
344
|
+
} : {}),
|
|
345
|
+
...(ariaRequired != null ? {
|
|
346
|
+
"aria-required": ariaRequired
|
|
347
|
+
} : {})
|
|
348
|
+
},
|
|
349
|
+
input: {
|
|
350
|
+
...inputSlot,
|
|
376
351
|
endAdornment: /*#__PURE__*/_jsxs(_Fragment, {
|
|
377
352
|
children: [loading ? /*#__PURE__*/_jsx(CircularProgress, {
|
|
378
353
|
size: 14,
|
|
@@ -383,12 +358,13 @@ var Combobox = /*#__PURE__*/React.forwardRef(function Combobox(_ref, ref) {
|
|
|
383
358
|
}
|
|
384
359
|
}) : null, inputSlot.endAdornment]
|
|
385
360
|
})
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
})
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
});
|
|
389
364
|
},
|
|
390
|
-
sx: sx
|
|
391
|
-
|
|
365
|
+
sx: sx,
|
|
366
|
+
...rest
|
|
367
|
+
});
|
|
392
368
|
});
|
|
393
369
|
export default Combobox;
|
|
394
370
|
//# sourceMappingURL=Combobox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.js","names":["React","MuiAutocomplete","TextField","MuiChip","CircularProgress","Box","mergeLabels","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","createElement","_createElement","AutocompleteWithTags","DEFAULT_LABELS","Object","freeze","noOptions","loading","clear","close","open","placeholder","normaliseOption","o","value","label","Combobox","forwardRef","_ref","ref","onChange","_ref$options","options","_ref$multiple","multiple","_ref$freeSolo","freeSolo","disabled","error","_ref$fullWidth","fullWidth","_ref$loading","groupBy","getOptionLabel","isOptionEqualToValue","filterOptions","renderOption","onInputChange","labels","sx","ariaDescribedBy","ariaInvalid","ariaRequired","rest","_objectWithoutProperties","_excluded","L","effectivePlaceholder","normalised","useMemo","map","autoGroupBy","some","_typeof","group","undefined","labelOf","useCallback","_ref2","_obj$label","obj","String","eqOf","opt","val","a","b","handleChange","_event","next","arr","Array","isArray","out","n","_value","_value2","single","resolvedValue","v","find","anyHelper","helper","effectiveRenderOption","props","option","optValue","optionKey","_objectSpread","key","display","flexDirection","paddingY","minWidth","children","component","fontSize","color","lineHeight","noOptionsText","loadingText","clearText","closeText","openText","size","renderTags","values","getTagProps","index","rawVal","tagKey","height","paddingInline","renderInput","params","_params$slotProps","_params$slotProps$inp","_params$slotProps2","_params$slotProps$htm","_params$slotProps3","paramsSlotProps","slotProps","inputSlot","input","htmlInput","endAdornment","role","marginRight"],"sources":["../../../../src/lib/v2/components/Combobox.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport MuiAutocomplete from \"@mui/material/Autocomplete\";\r\nimport type { AutocompleteProps, AutocompleteRenderGetTagProps } from \"@mui/material/Autocomplete\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport MuiChip from \"@mui/material/Chip\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * Combobox — Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Combobox / Autocomplete\". Required by R-Sel.1\r\n * for any Select with > 30 options.\r\n *\r\n * Single:\r\n * <Field label=\"Pays\">\r\n * <Combobox\r\n * value={country}\r\n * onChange={setCountry}\r\n * options={countries} // strings or {value,label}\r\n * />\r\n * </Field>\r\n *\r\n * Multi (with helper text per option):\r\n * <Field label=\"Régime\">\r\n * <Combobox\r\n * value={regime}\r\n * onChange={setRegime}\r\n * options={[\r\n * { value: \"atpa\", label: \"ATPA\",\r\n * helper: \"Admission Temporaire avec Paiement\" },\r\n * { value: \"atpf\", label: \"ATPF\",\r\n * helper: \"Admission Temporaire en Franchise\" },\r\n * ]}\r\n * />\r\n * </Field>\r\n *\r\n * Async (server-side filter):\r\n * const [input, setInput] = useState(\"\");\r\n * const [opts, setOpts] = useState([]);\r\n * const [loading, setLoading] = useState(false);\r\n * useEffect(() => {\r\n * const t = setTimeout(() => {\r\n * setLoading(true);\r\n * fetch(`/api/companies?q=${input}`)\r\n * .then(r => r.json()).then(setOpts)\r\n * .finally(() => setLoading(false));\r\n * }, 250);\r\n * return () => clearTimeout(t);\r\n * }, [input]);\r\n *\r\n * <Combobox\r\n * value={company}\r\n * onChange={setCompany}\r\n * onInputChange={(_, v) => setInput(v)}\r\n * options={opts}\r\n * loading={loading}\r\n * filterOptions={(x) => x} // disable client-side filter\r\n * />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <Combobox labels={{\r\n * noOptions: \"No results\",\r\n * loading: \"Loading…\",\r\n * clear: \"Clear\",\r\n * close: \"Close\",\r\n * open: \"Open\",\r\n * placeholder: \"Select…\",\r\n * }} />\r\n *\r\n * Defaults are French; partial overrides are merged onto the defaults.\r\n *\r\n * A11y:\r\n * - Built on MuiAutocomplete (full WAI-ARIA combobox pattern).\r\n * - When option.helper is present, it is rendered visually AND\r\n * becomes part of the option's accessible name (so screen-reader\r\n * users hear \"ATPA, Admission Temporaire avec Paiement\" when\r\n * navigating).\r\n * - Loading spinner is decorative (aria-hidden); the listbox already\r\n * announces \"Chargement…\" via the loadingText prop.\r\n * - COMBO-1: Field-injected aria-describedby / aria-invalid / aria-required\r\n * are threaded onto the native <input> via renderInput's htmlInput slot.\r\n * MUI spreads unknown top-level props onto the Autocomplete ROOT, so\r\n * without this the error association / invalid state would never reach\r\n * the combobox input for screen-reader users.\r\n */\r\n\r\nexport type ComboboxOptionValue = string | number | boolean;\r\n\r\nexport interface ComboboxOption {\r\n value: ComboboxOptionValue;\r\n label?: React.ReactNode | undefined;\r\n group?: string | undefined;\r\n helper?: React.ReactNode | undefined;\r\n}\r\n\r\n/**\r\n * Loose-but-honest value union used for BOTH the `value` input and the\r\n * `onChange` output, matching the any-based JS: callers may pass bare\r\n * values or option objects (single or array), and onChange re-emits bare\r\n * values (objects unwrapped to their `.value`).\r\n */\r\nexport type ComboboxValue =\r\n | ComboboxOptionValue\r\n | ComboboxOption\r\n | null\r\n | Array<ComboboxOptionValue | ComboboxOption>;\r\n\r\nexport interface ComboboxLabels {\r\n noOptions?: string | undefined;\r\n loading?: string | undefined;\r\n clear?: string | undefined;\r\n close?: string | undefined;\r\n open?: string | undefined;\r\n placeholder?: string | undefined;\r\n}\r\n\r\n/**\r\n * The option generic handed to MUI Autocomplete. It must admit raw\r\n * primitive values (not just option objects) because resolvedValue and\r\n * handleChange deliberately round-trip bare values (a numeric id stored\r\n * by FormikCombobox, a freeSolo string, etc.).\r\n */\r\ntype ComboboxItem = ComboboxOption | ComboboxOptionValue;\r\ntype MuiACProps = AutocompleteProps<ComboboxItem, boolean, false, boolean>;\r\n\r\n/**\r\n * MuiAutocomplete instantiated with `Multiple: boolean` (not a literal) lets\r\n * value/onChange's conditional types distribute naturally into `T | T[]`,\r\n * which is exactly what this component needs to handle both modes at\r\n * runtime from one implementation. MUI's `renderTags`, however, disappears\r\n * from the props type entirely under this instantiation (TS2339) — and,\r\n * per this MUI version, doesn't reappear even when explicitly instantiated\r\n * with the literal `Multiple = true` (TS2344: \"renderTags\" doesn't satisfy\r\n * `keyof AutocompleteProps<..., true, ...>` either). Rather than depend on\r\n * MUI's exact (apparently unstable across instantiations) type surface for\r\n * this one field, declare its shape ourselves — it matches exactly how the\r\n * callback is invoked below (values.map + getTagProps({ index })), and the\r\n * real runtime Autocomplete accepts renderTags regardless of the Multiple\r\n * type param.\r\n *\r\n * Defined once at module scope (not inside the component) so the cast\r\n * doesn't mint a new component identity on every render — that would make\r\n * React unmount/remount the Autocomplete on every parent re-render and drop\r\n * focus/open-state.\r\n */\r\nconst AutocompleteWithTags = MuiAutocomplete as unknown as React.ForwardRefExoticComponent<\r\n MuiACProps & {\r\n renderTags?: (\r\n value: ComboboxItem[],\r\n getTagProps: AutocompleteRenderGetTagProps\r\n ) => React.ReactNode;\r\n } & React.RefAttributes<HTMLDivElement>\r\n>;\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n noOptions: \"Aucun résultat\",\r\n loading: \"Chargement…\",\r\n clear: \"Effacer\",\r\n close: \"Fermer\",\r\n open: \"Ouvrir\",\r\n placeholder: \"Sélectionner…\",\r\n});\r\n\r\nconst normaliseOption = (o: string | ComboboxOption): ComboboxOption =>\r\n typeof o === \"string\" ? { value: o, label: o } : o;\r\n\r\nexport interface ComboboxProps\r\n extends Omit<\r\n MuiACProps,\r\n | \"value\"\r\n | \"onChange\"\r\n | \"options\"\r\n | \"multiple\"\r\n | \"freeSolo\"\r\n | \"renderInput\"\r\n | \"renderTags\"\r\n | \"renderOption\"\r\n | \"getOptionLabel\"\r\n | \"isOptionEqualToValue\"\r\n | \"groupBy\"\r\n | \"filterOptions\"\r\n | \"onInputChange\"\r\n | \"loading\"\r\n | \"disabled\"\r\n | \"fullWidth\"\r\n | \"sx\"\r\n // AutocompleteProps carries its own loosely-typed `ref` (Ref<unknown>,\r\n // for its polymorphic root support) that isn't the \"real\" ref for this\r\n // component. Exclude it here so it never enters ComboboxProps as an\r\n // inherited field — the actual ref (RefAttributes<HTMLDivElement>) comes\r\n // from this component's own React.forwardRef below. Without this,\r\n // Omit<ComboboxProps, ...>-based prop types (e.g. FormikComboboxProps)\r\n // silently carry the stray ref through into their ...rest spreads.\r\n | \"ref\"\r\n > {\r\n value?: ComboboxValue | undefined;\r\n onChange?: ((value: ComboboxValue) => void) | undefined;\r\n options?: Array<string | ComboboxOption> | undefined;\r\n multiple?: boolean | undefined;\r\n freeSolo?: boolean | undefined;\r\n placeholder?: string | undefined;\r\n disabled?: boolean | undefined;\r\n error?: boolean | undefined;\r\n fullWidth?: boolean | undefined;\r\n loading?: boolean | undefined;\r\n groupBy?: ((option: ComboboxItem) => string) | undefined;\r\n getOptionLabel?: ((option: ComboboxItem) => string) | undefined;\r\n isOptionEqualToValue?: ((option: ComboboxItem, value: ComboboxItem) => boolean) | undefined;\r\n filterOptions?: MuiACProps[\"filterOptions\"] | undefined;\r\n renderOption?: MuiACProps[\"renderOption\"] | undefined;\r\n onInputChange?: MuiACProps[\"onInputChange\"] | undefined;\r\n labels?: ComboboxLabels | undefined;\r\n sx?: SxProps<Theme> | undefined;\r\n}\r\n\r\nconst Combobox = React.forwardRef<HTMLDivElement, ComboboxProps>(function Combobox(\r\n {\r\n value,\r\n onChange,\r\n options = [],\r\n multiple = false,\r\n freeSolo = false,\r\n placeholder,\r\n disabled,\r\n error,\r\n fullWidth = true,\r\n loading = false,\r\n groupBy,\r\n getOptionLabel,\r\n isOptionEqualToValue,\r\n filterOptions,\r\n renderOption,\r\n onInputChange,\r\n labels,\r\n sx,\r\n // COMBO-1 — pulled out of ...rest so they DON'T land on the Autocomplete\r\n // root; threaded onto the native <input> in renderInput below.\r\n \"aria-describedby\": ariaDescribedBy,\r\n \"aria-invalid\": ariaInvalid,\r\n \"aria-required\": ariaRequired,\r\n ...rest\r\n },\r\n ref\r\n) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n // Legacy `placeholder` prop wins over labels.placeholder.\r\n const effectivePlaceholder = placeholder ?? L.placeholder;\r\n\r\n const normalised = React.useMemo(() => options.map(normaliseOption), [options]);\r\n\r\n // Default groupBy — uses option.group if any option has one.\r\n const autoGroupBy = React.useMemo((): ((option: ComboboxItem) => string) | undefined => {\r\n if (groupBy) return groupBy;\r\n if (normalised.some((o) => o && typeof o === \"object\" && o.group)) {\r\n return (o: ComboboxItem): string => (o && typeof o === \"object\" ? o.group || \"\" : \"\");\r\n }\r\n return undefined;\r\n }, [normalised, groupBy]);\r\n\r\n const labelOf = React.useCallback(\r\n (o: ComboboxItem): string => {\r\n if (getOptionLabel) return getOptionLabel(o);\r\n if (o == null) return \"\";\r\n if (typeof o === \"string\") return o;\r\n const obj = o as ComboboxOption;\r\n return String(obj.label ?? obj.value ?? \"\");\r\n },\r\n [getOptionLabel]\r\n );\r\n\r\n const eqOf = React.useCallback(\r\n (opt: ComboboxItem, val: unknown): boolean => {\r\n if (isOptionEqualToValue) return isOptionEqualToValue(opt, val as ComboboxItem);\r\n if (opt == null || val == null) return opt === val;\r\n const a = typeof opt === \"string\" ? opt : (opt as ComboboxOption).value;\r\n // B-eq: primitives (numbers, booleans) are compared as-is.\r\n // Previously `val.value` for a non-string, non-object value\r\n // (e.g. a numeric id stored by FormikCombobox via setFieldValue)\r\n // resolved to undefined, so the lookup never matched and the\r\n // selected option was never visually reflected after picking.\r\n const b =\r\n typeof val === \"string\" ? val\r\n : (val !== null && typeof val === \"object\") ? (val as { value?: unknown }).value\r\n : val; // number, boolean, etc. — use the primitive directly\r\n return a === b;\r\n },\r\n [isOptionEqualToValue]\r\n );\r\n\r\n const handleChange = (\r\n _event: React.SyntheticEvent,\r\n next: ComboboxItem | ComboboxItem[] | null\r\n ): void => {\r\n if (!onChange) return;\r\n // Re-emit raw value(s) — strings stay strings, objects get unwrapped to\r\n // their `.value` so callers don't have to deal with the option shape.\r\n if (multiple) {\r\n const arr = Array.isArray(next) ? next : [];\r\n const out = arr.map((n) => (typeof n === \"string\" ? n : (n as ComboboxOption).value ?? n));\r\n onChange(out);\r\n return;\r\n }\r\n if (next == null) {\r\n onChange(null);\r\n } else {\r\n const single = next as ComboboxItem;\r\n onChange(typeof single === \"string\" ? single : (single as ComboboxOption).value ?? single);\r\n }\r\n };\r\n\r\n // Resolve raw value(s) back to option objects so MUI Autocomplete can\r\n // display labels properly.\r\n const resolvedValue = React.useMemo(() => {\r\n if (multiple) {\r\n const arr = Array.isArray(value) ? value : [];\r\n return arr.map(\r\n (v) =>\r\n normalised.find((o) => eqOf(o, v)) ||\r\n (typeof v === \"string\" ? { value: v, label: v } : v)\r\n );\r\n }\r\n if (value == null || value === \"\") return null;\r\n return (\r\n normalised.find((o) => eqOf(o, value)) ||\r\n (typeof value === \"string\" ? { value, label: value } : (value as ComboboxItem))\r\n );\r\n }, [value, normalised, multiple, eqOf]);\r\n\r\n // Auto-render helper text when at least one option has one. Hosts can\r\n // override entirely by passing their own renderOption.\r\n const anyHelper = normalised.some(\r\n (o) => o && typeof o === \"object\" && o.helper != null && o.helper !== \"\"\r\n );\r\n const effectiveRenderOption: MuiACProps[\"renderOption\"] = React.useMemo(() => {\r\n if (renderOption) return renderOption;\r\n if (!anyHelper) return undefined;\r\n // MUI Autocomplete passes (props, option, state) — `props` already\r\n // carries the correct <li> role/id/aria-selected. We render the\r\n // option content inside it; the helper line is in-flow text so it\r\n // becomes part of the option's accessible name automatically.\r\n return (props: React.HTMLAttributes<HTMLLIElement>, option: ComboboxItem): React.ReactNode => {\r\n const label = labelOf(option);\r\n const helper = option && typeof option === \"object\" ? option.helper : null;\r\n const optValue = typeof option === \"object\" && option !== null ? option.value : undefined;\r\n const optionKey: React.Key =\r\n optValue == null ? label\r\n : typeof optValue === \"boolean\" ? String(optValue)\r\n : optValue;\r\n return (\r\n <li {...props} key={optionKey}>\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", paddingY: 0.25, minWidth: 0 }}>\r\n <Box component=\"span\" sx={{ fontSize: \"var(--text-sm)\", color: \"var(--fg)\" }}>\r\n {label}\r\n </Box>\r\n {helper && (\r\n <Box\r\n component=\"span\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n lineHeight: \"var(--lh-snug)\",\r\n }}\r\n >\r\n {helper}\r\n </Box>\r\n )}\r\n </Box>\r\n </li>\r\n );\r\n };\r\n }, [renderOption, anyHelper, labelOf]);\r\n\r\n return (\r\n <AutocompleteWithTags\r\n ref={ref}\r\n multiple={multiple}\r\n freeSolo={freeSolo}\r\n disabled={disabled}\r\n fullWidth={fullWidth}\r\n value={resolvedValue}\r\n onChange={handleChange}\r\n onInputChange={onInputChange}\r\n options={normalised}\r\n loading={loading}\r\n groupBy={autoGroupBy}\r\n getOptionLabel={labelOf}\r\n isOptionEqualToValue={eqOf}\r\n filterOptions={filterOptions}\r\n renderOption={effectiveRenderOption}\r\n noOptionsText={L.noOptions}\r\n loadingText={L.loading}\r\n clearText={L.clear}\r\n closeText={L.close}\r\n openText={L.open}\r\n size=\"small\"\r\n renderTags={(values: ComboboxItem[], getTagProps: AutocompleteRenderGetTagProps) =>\r\n values.map((option: ComboboxItem, index: number) => {\r\n const rawVal =\r\n typeof option === \"object\" && option !== null ? option.value : option;\r\n const tagKey: React.Key =\r\n rawVal == null ? index\r\n : typeof rawVal === \"boolean\" ? String(rawVal)\r\n : rawVal;\r\n return (\r\n <MuiChip\r\n {...getTagProps({ index })}\r\n key={tagKey}\r\n size=\"small\"\r\n label={labelOf(option)}\r\n sx={{\r\n height: 22,\r\n \"& .MuiChip-label\": { paddingInline: 1, fontSize: 12 },\r\n }}\r\n />\r\n );\r\n })\r\n }\r\n renderInput={(params) => {\r\n // MUI v9: the bag passed to renderInput carries the input slot props\r\n // at `params.slotProps.input` AND — crucially — the input element ref\r\n // at `params.slotProps.htmlInput.ref`, which MUI's Autocomplete\r\n // focuses on click. We must NOT rebuild slotProps from scratch (that\r\n // drops htmlInput → MUI focuses null → \"Cannot read properties of null\r\n // (reading 'focus')\"). Instead, spread the whole params.slotProps and\r\n // only override the input slot's endAdornment. inputSlot is annotated\r\n // as { endAdornment? } so the runtime spread still forwards htmlInput.\r\n // params.InputProps was the pre-v9 TextField prop, fully replaced by\r\n // params.slotProps.input — no longer exists on AutocompleteRenderInputParams.\r\n const paramsSlotProps = params.slotProps ?? {};\r\n const inputSlot: { endAdornment?: React.ReactNode } =\r\n params.slotProps?.input ?? {};\r\n return (\r\n <TextField\r\n {...params}\r\n placeholder={effectivePlaceholder}\r\n error={!!error}\r\n slotProps={{\r\n ...paramsSlotProps,\r\n // COMBO-1 — merge Field's aria onto the native <input>. Spread\r\n // MUI's existing htmlInput FIRST to keep its ref + combobox aria\r\n // (role/aria-expanded/aria-controls/aria-activedescendant); add\r\n // ours only when defined (exactOptionalPropertyTypes-safe).\r\n htmlInput: {\r\n ...(params.slotProps?.htmlInput ?? {}),\r\n ...(ariaDescribedBy != null ? { \"aria-describedby\": ariaDescribedBy } : {}),\r\n ...(ariaInvalid != null ? { \"aria-invalid\": ariaInvalid } : {}),\r\n ...(ariaRequired != null ? { \"aria-required\": ariaRequired } : {}),\r\n },\r\n input: {\r\n ...inputSlot,\r\n endAdornment: (\r\n <>\r\n {/* R-Ar.3 — decorative spinner. The listbox already announces\r\n via the loadingText prop; making the spinner a second\r\n progressbar in the AT tree would just create duplicate\r\n noise. */}\r\n {loading ? (\r\n <CircularProgress\r\n size={14}\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n sx={{ marginRight: 0.5 }}\r\n />\r\n ) : null}\r\n {inputSlot.endAdornment}\r\n </>\r\n ),\r\n },\r\n }}\r\n />\r\n );\r\n }}\r\n sx={sx}\r\n {...rest}\r\n />\r\n );\r\n});\r\n\r\nexport default Combobox;\r\n"],"mappings":";;;;;;;;;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,eAAe,MAAM,4BAA4B;AAExD,OAAOC,SAAS,MAAM,yBAAyB;AAC/C,OAAOC,OAAO,MAAM,oBAAoB;AACxC,OAAOC,gBAAgB,MAAM,gCAAgC;AAC7D,OAAOC,GAAG,MAAM,mBAAmB;AAEnC,SAASC,WAAW,QAAQ,sBAAsB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAWA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AALA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAAA,SAAAC,aAAA,IAAAC,cAAA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,oBAAoB,GAAGd,eAO5B;AAED,IAAMe,cAAc,GAAGC,MAAM,CAACC,MAAM,CAAC;EACnCC,SAAS,EAAI,gBAAgB;EAC7BC,OAAO,EAAM,aAAa;EAC1BC,KAAK,EAAQ,SAAS;EACtBC,KAAK,EAAQ,QAAQ;EACrBC,IAAI,EAAS,QAAQ;EACrBC,WAAW,EAAE;AACf,CAAC,CAAC;AAEF,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,CAA0B;EAAA,OACjD,OAAOA,CAAC,KAAK,QAAQ,GAAG;IAAEC,KAAK,EAAED,CAAC;IAAEE,KAAK,EAAEF;EAAE,CAAC,GAAGA,CAAC;AAAA;AAmDpD,IAAMG,QAAQ,gBAAG7B,KAAK,CAAC8B,UAAU,CAAgC,SAASD,QAAQA,CAAAE,IAAA,EA2BhFC,GAAG,EACH;EAAA,IA1BEL,KAAK,GAAAI,IAAA,CAALJ,KAAK;IACLM,QAAQ,GAAAF,IAAA,CAARE,QAAQ;IAAAC,YAAA,GAAAH,IAAA,CACRI,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAG,EAAE,GAAAA,YAAA;IAAAE,aAAA,GAAAL,IAAA,CACZM,QAAQ;IAARA,QAAQ,GAAAD,aAAA,cAAG,KAAK,GAAAA,aAAA;IAAAE,aAAA,GAAAP,IAAA,CAChBQ,QAAQ;IAARA,QAAQ,GAAAD,aAAA,cAAG,KAAK,GAAAA,aAAA;IAChBd,WAAW,GAAAO,IAAA,CAAXP,WAAW;IACXgB,QAAQ,GAAAT,IAAA,CAARS,QAAQ;IACRC,KAAK,GAAAV,IAAA,CAALU,KAAK;IAAAC,cAAA,GAAAX,IAAA,CACLY,SAAS;IAATA,SAAS,GAAAD,cAAA,cAAG,IAAI,GAAAA,cAAA;IAAAE,YAAA,GAAAb,IAAA,CAChBX,OAAO;IAAPA,OAAO,GAAAwB,YAAA,cAAG,KAAK,GAAAA,YAAA;IACfC,OAAO,GAAAd,IAAA,CAAPc,OAAO;IACPC,cAAc,GAAAf,IAAA,CAAde,cAAc;IACdC,oBAAoB,GAAAhB,IAAA,CAApBgB,oBAAoB;IACpBC,aAAa,GAAAjB,IAAA,CAAbiB,aAAa;IACbC,YAAY,GAAAlB,IAAA,CAAZkB,YAAY;IACZC,aAAa,GAAAnB,IAAA,CAAbmB,aAAa;IACbC,MAAM,GAAApB,IAAA,CAANoB,MAAM;IACNC,EAAE,GAAArB,IAAA,CAAFqB,EAAE;IAGkBC,eAAe,GAAAtB,IAAA,CAAnC,kBAAkB;IACFuB,WAAW,GAAAvB,IAAA,CAA3B,cAAc;IACGwB,YAAY,GAAAxB,IAAA,CAA7B,eAAe;IACZyB,IAAI,GAAAC,wBAAA,CAAA1B,IAAA,EAAA2B,SAAA;EAIT,IAAMC,CAAC,GAAGrD,WAAW,CAACU,cAAc,EAAEmC,MAAM,CAAC;EAC7C;EACA,IAAMS,oBAAoB,GAAGpC,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAImC,CAAC,CAACnC,WAAW;EAEzD,IAAMqC,UAAU,GAAG7D,KAAK,CAAC8D,OAAO,CAAC;IAAA,OAAM3B,OAAO,CAAC4B,GAAG,CAACtC,eAAe,CAAC;EAAA,GAAE,CAACU,OAAO,CAAC,CAAC;;EAE/E;EACA,IAAM6B,WAAW,GAAGhE,KAAK,CAAC8D,OAAO,CAAC,YAAsD;IACtF,IAAIjB,OAAO,EAAE,OAAOA,OAAO;IAC3B,IAAIgB,UAAU,CAACI,IAAI,CAAC,UAACvC,CAAC;MAAA,OAAKA,CAAC,IAAIwC,OAAA,CAAOxC,CAAC,MAAK,QAAQ,IAAIA,CAAC,CAACyC,KAAK;IAAA,EAAC,EAAE;MACjE,OAAO,UAACzC,CAAe;QAAA,OAAcA,CAAC,IAAIwC,OAAA,CAAOxC,CAAC,MAAK,QAAQ,GAAGA,CAAC,CAACyC,KAAK,IAAI,EAAE,GAAG,EAAE;MAAA,CAAC;IACvF;IACA,OAAOC,SAAS;EAClB,CAAC,EAAE,CAACP,UAAU,EAAEhB,OAAO,CAAC,CAAC;EAEzB,IAAMwB,OAAO,GAAGrE,KAAK,CAACsE,WAAW,CAC/B,UAAC5C,CAAe,EAAa;IAAA,IAAA6C,KAAA,EAAAC,UAAA;IAC3B,IAAI1B,cAAc,EAAE,OAAOA,cAAc,CAACpB,CAAC,CAAC;IAC5C,IAAIA,CAAC,IAAI,IAAI,EAAE,OAAO,EAAE;IACxB,IAAI,OAAOA,CAAC,KAAK,QAAQ,EAAE,OAAOA,CAAC;IACnC,IAAM+C,GAAG,GAAG/C,CAAmB;IAC/B,OAAOgD,MAAM,EAAAH,KAAA,IAAAC,UAAA,GAACC,GAAG,CAAC7C,KAAK,cAAA4C,UAAA,cAAAA,UAAA,GAAIC,GAAG,CAAC9C,KAAK,cAAA4C,KAAA,cAAAA,KAAA,GAAI,EAAE,CAAC;EAC7C,CAAC,EACD,CAACzB,cAAc,CACjB,CAAC;EAED,IAAM6B,IAAI,GAAG3E,KAAK,CAACsE,WAAW,CAC5B,UAACM,GAAiB,EAAEC,GAAY,EAAc;IAC5C,IAAI9B,oBAAoB,EAAE,OAAOA,oBAAoB,CAAC6B,GAAG,EAAEC,GAAmB,CAAC;IAC/E,IAAID,GAAG,IAAI,IAAI,IAAIC,GAAG,IAAI,IAAI,EAAE,OAAOD,GAAG,KAAKC,GAAG;IAClD,IAAMC,CAAC,GAAG,OAAOF,GAAG,KAAK,QAAQ,GAAGA,GAAG,GAAIA,GAAG,CAAoBjD,KAAK;IACvE;IACA;IACA;IACA;IACA;IACA,IAAMoD,CAAC,GACL,OAAOF,GAAG,KAAK,QAAQ,GAAGA,GAAG,GAC1BA,GAAG,KAAK,IAAI,IAAIX,OAAA,CAAOW,GAAG,MAAK,QAAQ,GAAKA,GAAG,CAAyBlD,KAAK,GAC9EkD,GAAG,CAAC,CAAC;IACT,OAAOC,CAAC,KAAKC,CAAC;EAChB,CAAC,EACD,CAAChC,oBAAoB,CACvB,CAAC;EAED,IAAMiC,YAAY,GAAG,SAAfA,YAAYA,CAChBC,MAA4B,EAC5BC,IAA0C,EACjC;IACT,IAAI,CAACjD,QAAQ,EAAE;IACf;IACA;IACA,IAAII,QAAQ,EAAE;MACZ,IAAM8C,GAAG,GAAGC,KAAK,CAACC,OAAO,CAACH,IAAI,CAAC,GAAGA,IAAI,GAAG,EAAE;MAC3C,IAAMI,GAAG,GAAGH,GAAG,CAACpB,GAAG,CAAC,UAACwB,CAAC;QAAA,IAAAC,MAAA;QAAA,OAAM,OAAOD,CAAC,KAAK,QAAQ,GAAGA,CAAC,IAAAC,MAAA,GAAID,CAAC,CAAoB5D,KAAK,cAAA6D,MAAA,cAAAA,MAAA,GAAID,CAAC;MAAA,CAAC,CAAC;MAC1FtD,QAAQ,CAACqD,GAAG,CAAC;MACb;IACF;IACA,IAAIJ,IAAI,IAAI,IAAI,EAAE;MAChBjD,QAAQ,CAAC,IAAI,CAAC;IAChB,CAAC,MAAM;MAAA,IAAAwD,OAAA;MACL,IAAMC,MAAM,GAAGR,IAAoB;MACnCjD,QAAQ,CAAC,OAAOyD,MAAM,KAAK,QAAQ,GAAGA,MAAM,IAAAD,OAAA,GAAIC,MAAM,CAAoB/D,KAAK,cAAA8D,OAAA,cAAAA,OAAA,GAAIC,MAAM,CAAC;IAC5F;EACF,CAAC;;EAED;EACA;EACA,IAAMC,aAAa,GAAG3F,KAAK,CAAC8D,OAAO,CAAC,YAAM;IACxC,IAAIzB,QAAQ,EAAE;MACZ,IAAM8C,GAAG,GAAGC,KAAK,CAACC,OAAO,CAAC1D,KAAK,CAAC,GAAGA,KAAK,GAAG,EAAE;MAC7C,OAAOwD,GAAG,CAACpB,GAAG,CACZ,UAAC6B,CAAC;QAAA,OACA/B,UAAU,CAACgC,IAAI,CAAC,UAACnE,CAAC;UAAA,OAAKiD,IAAI,CAACjD,CAAC,EAAEkE,CAAC,CAAC;QAAA,EAAC,KACjC,OAAOA,CAAC,KAAK,QAAQ,GAAG;UAAEjE,KAAK,EAAEiE,CAAC;UAAEhE,KAAK,EAAEgE;QAAE,CAAC,GAAGA,CAAC,CAAC;MAAA,CACxD,CAAC;IACH;IACA,IAAIjE,KAAK,IAAI,IAAI,IAAIA,KAAK,KAAK,EAAE,EAAE,OAAO,IAAI;IAC9C,OACEkC,UAAU,CAACgC,IAAI,CAAC,UAACnE,CAAC;MAAA,OAAKiD,IAAI,CAACjD,CAAC,EAAEC,KAAK,CAAC;IAAA,EAAC,KACrC,OAAOA,KAAK,KAAK,QAAQ,GAAG;MAAEA,KAAK,EAALA,KAAK;MAAEC,KAAK,EAAED;IAAM,CAAC,GAAIA,KAAsB,CAAC;EAEnF,CAAC,EAAE,CAACA,KAAK,EAAEkC,UAAU,EAAExB,QAAQ,EAAEsC,IAAI,CAAC,CAAC;;EAEvC;EACA;EACA,IAAMmB,SAAS,GAAGjC,UAAU,CAACI,IAAI,CAC/B,UAACvC,CAAC;IAAA,OAAKA,CAAC,IAAIwC,OAAA,CAAOxC,CAAC,MAAK,QAAQ,IAAIA,CAAC,CAACqE,MAAM,IAAI,IAAI,IAAIrE,CAAC,CAACqE,MAAM,KAAK,EAAE;EAAA,CAC1E,CAAC;EACD,IAAMC,qBAAiD,GAAGhG,KAAK,CAAC8D,OAAO,CAAC,YAAM;IAC5E,IAAIb,YAAY,EAAE,OAAOA,YAAY;IACrC,IAAI,CAAC6C,SAAS,EAAE,OAAO1B,SAAS;IAChC;IACA;IACA;IACA;IACA,OAAO,UAAC6B,KAA0C,EAAEC,MAAoB,EAAsB;MAC5F,IAAMtE,KAAK,GAAGyC,OAAO,CAAC6B,MAAM,CAAC;MAC7B,IAAMH,MAAM,GAAGG,MAAM,IAAIhC,OAAA,CAAOgC,MAAM,MAAK,QAAQ,GAAGA,MAAM,CAACH,MAAM,GAAG,IAAI;MAC1E,IAAMI,QAAQ,GAAGjC,OAAA,CAAOgC,MAAM,MAAK,QAAQ,IAAIA,MAAM,KAAK,IAAI,GAAGA,MAAM,CAACvE,KAAK,GAAGyC,SAAS;MACzF,IAAMgC,SAAoB,GACxBD,QAAQ,IAAI,IAAI,GAAGvE,KAAK,GACtB,OAAOuE,QAAQ,KAAK,SAAS,GAAGzB,MAAM,CAACyB,QAAQ,CAAC,GAChDA,QAAQ;MACZ,oBACErF,cAAA,OAAAuF,aAAA,CAAAA,aAAA,KAAQJ,KAAK;QAAEK,GAAG,EAAEF;MAAU,iBAC5B1F,KAAA,CAACL,GAAG;QAAC+C,EAAE,EAAE;UAAEmD,OAAO,EAAE,MAAM;UAAEC,aAAa,EAAE,QAAQ;UAAEC,QAAQ,EAAE,IAAI;UAAEC,QAAQ,EAAE;QAAE,CAAE;QAAAC,QAAA,gBACjFnG,IAAA,CAACH,GAAG;UAACuG,SAAS,EAAC,MAAM;UAACxD,EAAE,EAAE;YAAEyD,QAAQ,EAAE,gBAAgB;YAAEC,KAAK,EAAE;UAAY,CAAE;UAAAH,QAAA,EAC1E/E;QAAK,CACH,CAAC,EACLmE,MAAM,iBACLvF,IAAA,CAACH,GAAG;UACFuG,SAAS,EAAC,MAAM;UAChBxD,EAAE,EAAE;YACFyD,QAAQ,EAAE,gBAAgB;YAC1BC,KAAK,EAAE,kBAAkB;YACzBC,UAAU,EAAE;UACd,CAAE;UAAAJ,QAAA,EAEDZ;QAAM,CACJ,CACN;MAAA,CACE,CACH,CAAC;IAET,CAAC;EACH,CAAC,EAAE,CAAC9C,YAAY,EAAE6C,SAAS,EAAEzB,OAAO,CAAC,CAAC;EAEtC,oBACE7D,IAAA,CAACO,oBAAoB,EAAAsF,aAAA;IACnBrE,GAAG,EAAEA,GAAI;IACTK,QAAQ,EAAEA,QAAS;IACnBE,QAAQ,EAAEA,QAAS;IACnBC,QAAQ,EAAEA,QAAS;IACnBG,SAAS,EAAEA,SAAU;IACrBhB,KAAK,EAAEgE,aAAc;IACrB1D,QAAQ,EAAE+C,YAAa;IACvB9B,aAAa,EAAEA,aAAc;IAC7Bf,OAAO,EAAE0B,UAAW;IACpBzC,OAAO,EAAEA,OAAQ;IACjByB,OAAO,EAAEmB,WAAY;IACrBlB,cAAc,EAAEuB,OAAQ;IACxBtB,oBAAoB,EAAE4B,IAAK;IAC3B3B,aAAa,EAAEA,aAAc;IAC7BC,YAAY,EAAE+C,qBAAsB;IACpCgB,aAAa,EAAErD,CAAC,CAACxC,SAAU;IAC3B8F,WAAW,EAAEtD,CAAC,CAACvC,OAAQ;IACvB8F,SAAS,EAAEvD,CAAC,CAACtC,KAAM;IACnB8F,SAAS,EAAExD,CAAC,CAACrC,KAAM;IACnB8F,QAAQ,EAAEzD,CAAC,CAACpC,IAAK;IACjB8F,IAAI,EAAC,OAAO;IACZC,UAAU,EAAE,SAAAA,WAACC,MAAsB,EAAEC,WAA0C;MAAA,OAC7ED,MAAM,CAACxD,GAAG,CAAC,UAACmC,MAAoB,EAAEuB,KAAa,EAAK;QAClD,IAAMC,MAAM,GACVxD,OAAA,CAAOgC,MAAM,MAAK,QAAQ,IAAIA,MAAM,KAAK,IAAI,GAAGA,MAAM,CAACvE,KAAK,GAAGuE,MAAM;QACvE,IAAMyB,MAAiB,GACrBD,MAAM,IAAI,IAAI,GAAGD,KAAK,GACpB,OAAOC,MAAM,KAAK,SAAS,GAAGhD,MAAM,CAACgD,MAAM,CAAC,GAC5CA,MAAM;QACV,oBACE5G,cAAA,CAACX,OAAO,EAAAkG,aAAA,CAAAA,aAAA,KACFmB,WAAW,CAAC;UAAEC,KAAK,EAALA;QAAM,CAAC,CAAC;UAC1BnB,GAAG,EAAEqB,MAAO;UACZN,IAAI,EAAC,OAAO;UACZzF,KAAK,EAAEyC,OAAO,CAAC6B,MAAM,CAAE;UACvB9C,EAAE,EAAE;YACFwE,MAAM,EAAE,EAAE;YACV,kBAAkB,EAAE;cAAEC,aAAa,EAAE,CAAC;cAAEhB,QAAQ,EAAE;YAAG;UACvD;QAAE,EACH,CAAC;MAEN,CAAC,CAAC;IAAA,CACH;IACDiB,WAAW,EAAE,SAAAA,YAACC,MAAM,EAAK;MAAA,IAAAC,iBAAA,EAAAC,qBAAA,EAAAC,kBAAA,EAAAC,qBAAA,EAAAC,kBAAA;MACvB;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA,IAAMC,eAAe,IAAAL,iBAAA,GAAGD,MAAM,CAACO,SAAS,cAAAN,iBAAA,cAAAA,iBAAA,GAAI,CAAC,CAAC;MAC9C,IAAMO,SAA6C,IAAAN,qBAAA,IAAAC,kBAAA,GACjDH,MAAM,CAACO,SAAS,cAAAJ,kBAAA,uBAAhBA,kBAAA,CAAkBM,KAAK,cAAAP,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;MAC/B,oBACEzH,IAAA,CAACN,SAAS,EAAAmG,aAAA,CAAAA,aAAA,KACJ0B,MAAM;QACVvG,WAAW,EAAEoC,oBAAqB;QAClCnB,KAAK,EAAE,CAAC,CAACA,KAAM;QACf6F,SAAS,EAAAjC,aAAA,CAAAA,aAAA,KACJgC,eAAe;UAClB;UACA;UACA;UACA;UACAI,SAAS,EAAApC,aAAA,CAAAA,aAAA,CAAAA,aAAA,CAAAA,aAAA,MAAA8B,qBAAA,IAAAC,kBAAA,GACHL,MAAM,CAACO,SAAS,cAAAF,kBAAA,uBAAhBA,kBAAA,CAAkBK,SAAS,cAAAN,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC,GACjC9E,eAAe,IAAI,IAAI,GAAG;YAAE,kBAAkB,EAAEA;UAAgB,CAAC,GAAG,CAAC,CAAC,GACtEC,WAAW,IAAI,IAAI,GAAG;YAAE,cAAc,EAAEA;UAAY,CAAC,GAAG,CAAC,CAAC,GAC1DC,YAAY,IAAI,IAAI,GAAG;YAAE,eAAe,EAAEA;UAAa,CAAC,GAAG,CAAC,CAAC,CAClE;UACDiF,KAAK,EAAAnC,aAAA,CAAAA,aAAA,KACAkC,SAAS;YACZG,YAAY,eACVhI,KAAA,CAAAE,SAAA;cAAA+F,QAAA,GAKGvF,OAAO,gBACNZ,IAAA,CAACJ,gBAAgB;gBACfiH,IAAI,EAAE,EAAG;gBACT,eAAY,MAAM;gBAClBsB,IAAI,EAAC,cAAc;gBACnBvF,EAAE,EAAE;kBAAEwF,WAAW,EAAE;gBAAI;cAAE,CAC1B,CAAC,GACA,IAAI,EACPL,SAAS,CAACG,YAAY;YAAA,CACvB;UACH;QACF;MACD,EACH,CAAC;IAEN,CAAE;IACFtF,EAAE,EAAEA;EAAG,GACHI,IAAI,CACT,CAAC;AAEN,CAAC,CAAC;AAEF,eAAe3B,QAAQ","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Combobox.js","names":["React","MuiAutocomplete","TextField","MuiChip","CircularProgress","Box","mergeLabels","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","createElement","_createElement","AutocompleteWithTags","DEFAULT_LABELS","Object","freeze","noOptions","loading","clear","close","open","placeholder","normaliseOption","o","value","label","Combobox","forwardRef","onChange","options","multiple","freeSolo","disabled","error","fullWidth","groupBy","getOptionLabel","isOptionEqualToValue","filterOptions","renderOption","onInputChange","labels","sx","ariaDescribedBy","ariaInvalid","ariaRequired","rest","ref","L","effectivePlaceholder","normalised","useMemo","map","autoGroupBy","some","group","undefined","labelOf","useCallback","obj","String","eqOf","opt","val","a","b","handleChange","_event","next","arr","Array","isArray","out","n","single","resolvedValue","v","find","anyHelper","helper","effectiveRenderOption","props","option","optValue","optionKey","key","display","flexDirection","paddingY","minWidth","children","component","fontSize","color","lineHeight","noOptionsText","loadingText","clearText","closeText","openText","size","renderTags","values","getTagProps","index","rawVal","tagKey","height","paddingInline","renderInput","params","paramsSlotProps","slotProps","inputSlot","input","htmlInput","endAdornment","role","marginRight"],"sources":["../../../../src/lib/v2/components/Combobox.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport MuiAutocomplete from \"@mui/material/Autocomplete\";\r\nimport type { AutocompleteProps, AutocompleteRenderGetTagProps } from \"@mui/material/Autocomplete\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport MuiChip from \"@mui/material/Chip\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * Combobox — Portnet UI v2\r\n *\r\n * Charter §03 · Component \"Combobox / Autocomplete\". Required by R-Sel.1\r\n * for any Select with > 30 options.\r\n *\r\n * Single:\r\n * <Field label=\"Pays\">\r\n * <Combobox\r\n * value={country}\r\n * onChange={setCountry}\r\n * options={countries} // strings or {value,label}\r\n * />\r\n * </Field>\r\n *\r\n * Multi (with helper text per option):\r\n * <Field label=\"Régime\">\r\n * <Combobox\r\n * value={regime}\r\n * onChange={setRegime}\r\n * options={[\r\n * { value: \"atpa\", label: \"ATPA\",\r\n * helper: \"Admission Temporaire avec Paiement\" },\r\n * { value: \"atpf\", label: \"ATPF\",\r\n * helper: \"Admission Temporaire en Franchise\" },\r\n * ]}\r\n * />\r\n * </Field>\r\n *\r\n * Async (server-side filter):\r\n * const [input, setInput] = useState(\"\");\r\n * const [opts, setOpts] = useState([]);\r\n * const [loading, setLoading] = useState(false);\r\n * useEffect(() => {\r\n * const t = setTimeout(() => {\r\n * setLoading(true);\r\n * fetch(`/api/companies?q=${input}`)\r\n * .then(r => r.json()).then(setOpts)\r\n * .finally(() => setLoading(false));\r\n * }, 250);\r\n * return () => clearTimeout(t);\r\n * }, [input]);\r\n *\r\n * <Combobox\r\n * value={company}\r\n * onChange={setCompany}\r\n * onInputChange={(_, v) => setInput(v)}\r\n * options={opts}\r\n * loading={loading}\r\n * filterOptions={(x) => x} // disable client-side filter\r\n * />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <Combobox labels={{\r\n * noOptions: \"No results\",\r\n * loading: \"Loading…\",\r\n * clear: \"Clear\",\r\n * close: \"Close\",\r\n * open: \"Open\",\r\n * placeholder: \"Select…\",\r\n * }} />\r\n *\r\n * Defaults are French; partial overrides are merged onto the defaults.\r\n *\r\n * A11y:\r\n * - Built on MuiAutocomplete (full WAI-ARIA combobox pattern).\r\n * - When option.helper is present, it is rendered visually AND\r\n * becomes part of the option's accessible name (so screen-reader\r\n * users hear \"ATPA, Admission Temporaire avec Paiement\" when\r\n * navigating).\r\n * - Loading spinner is decorative (aria-hidden); the listbox already\r\n * announces \"Chargement…\" via the loadingText prop.\r\n * - COMBO-1: Field-injected aria-describedby / aria-invalid / aria-required\r\n * are threaded onto the native <input> via renderInput's htmlInput slot.\r\n * MUI spreads unknown top-level props onto the Autocomplete ROOT, so\r\n * without this the error association / invalid state would never reach\r\n * the combobox input for screen-reader users.\r\n */\r\n\r\nexport type ComboboxOptionValue = string | number | boolean;\r\n\r\nexport interface ComboboxOption {\r\n value: ComboboxOptionValue;\r\n label?: React.ReactNode | undefined;\r\n group?: string | undefined;\r\n helper?: React.ReactNode | undefined;\r\n}\r\n\r\n/**\r\n * Loose-but-honest value union used for BOTH the `value` input and the\r\n * `onChange` output, matching the any-based JS: callers may pass bare\r\n * values or option objects (single or array), and onChange re-emits bare\r\n * values (objects unwrapped to their `.value`).\r\n */\r\nexport type ComboboxValue =\r\n | ComboboxOptionValue\r\n | ComboboxOption\r\n | null\r\n | Array<ComboboxOptionValue | ComboboxOption>;\r\n\r\nexport interface ComboboxLabels {\r\n noOptions?: string | undefined;\r\n loading?: string | undefined;\r\n clear?: string | undefined;\r\n close?: string | undefined;\r\n open?: string | undefined;\r\n placeholder?: string | undefined;\r\n}\r\n\r\n/**\r\n * The option generic handed to MUI Autocomplete. It must admit raw\r\n * primitive values (not just option objects) because resolvedValue and\r\n * handleChange deliberately round-trip bare values (a numeric id stored\r\n * by FormikCombobox, a freeSolo string, etc.).\r\n */\r\ntype ComboboxItem = ComboboxOption | ComboboxOptionValue;\r\ntype MuiACProps = AutocompleteProps<ComboboxItem, boolean, false, boolean>;\r\n\r\n/**\r\n * MuiAutocomplete instantiated with `Multiple: boolean` (not a literal) lets\r\n * value/onChange's conditional types distribute naturally into `T | T[]`,\r\n * which is exactly what this component needs to handle both modes at\r\n * runtime from one implementation. MUI's `renderTags`, however, disappears\r\n * from the props type entirely under this instantiation (TS2339) — and,\r\n * per this MUI version, doesn't reappear even when explicitly instantiated\r\n * with the literal `Multiple = true` (TS2344: \"renderTags\" doesn't satisfy\r\n * `keyof AutocompleteProps<..., true, ...>` either). Rather than depend on\r\n * MUI's exact (apparently unstable across instantiations) type surface for\r\n * this one field, declare its shape ourselves — it matches exactly how the\r\n * callback is invoked below (values.map + getTagProps({ index })), and the\r\n * real runtime Autocomplete accepts renderTags regardless of the Multiple\r\n * type param.\r\n *\r\n * Defined once at module scope (not inside the component) so the cast\r\n * doesn't mint a new component identity on every render — that would make\r\n * React unmount/remount the Autocomplete on every parent re-render and drop\r\n * focus/open-state.\r\n */\r\nconst AutocompleteWithTags = MuiAutocomplete as unknown as React.ForwardRefExoticComponent<\r\n MuiACProps & {\r\n renderTags?: (\r\n value: ComboboxItem[],\r\n getTagProps: AutocompleteRenderGetTagProps\r\n ) => React.ReactNode;\r\n } & React.RefAttributes<HTMLDivElement>\r\n>;\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n noOptions: \"Aucun résultat\",\r\n loading: \"Chargement…\",\r\n clear: \"Effacer\",\r\n close: \"Fermer\",\r\n open: \"Ouvrir\",\r\n placeholder: \"Sélectionner…\",\r\n});\r\n\r\nconst normaliseOption = (o: string | ComboboxOption): ComboboxOption =>\r\n typeof o === \"string\" ? { value: o, label: o } : o;\r\n\r\nexport interface ComboboxProps\r\n extends Omit<\r\n MuiACProps,\r\n | \"value\"\r\n | \"onChange\"\r\n | \"options\"\r\n | \"multiple\"\r\n | \"freeSolo\"\r\n | \"renderInput\"\r\n | \"renderTags\"\r\n | \"renderOption\"\r\n | \"getOptionLabel\"\r\n | \"isOptionEqualToValue\"\r\n | \"groupBy\"\r\n | \"filterOptions\"\r\n | \"onInputChange\"\r\n | \"loading\"\r\n | \"disabled\"\r\n | \"fullWidth\"\r\n | \"sx\"\r\n // AutocompleteProps carries its own loosely-typed `ref` (Ref<unknown>,\r\n // for its polymorphic root support) that isn't the \"real\" ref for this\r\n // component. Exclude it here so it never enters ComboboxProps as an\r\n // inherited field — the actual ref (RefAttributes<HTMLDivElement>) comes\r\n // from this component's own React.forwardRef below. Without this,\r\n // Omit<ComboboxProps, ...>-based prop types (e.g. FormikComboboxProps)\r\n // silently carry the stray ref through into their ...rest spreads.\r\n | \"ref\"\r\n > {\r\n value?: ComboboxValue | undefined;\r\n onChange?: ((value: ComboboxValue) => void) | undefined;\r\n options?: Array<string | ComboboxOption> | undefined;\r\n multiple?: boolean | undefined;\r\n freeSolo?: boolean | undefined;\r\n placeholder?: string | undefined;\r\n disabled?: boolean | undefined;\r\n error?: boolean | undefined;\r\n fullWidth?: boolean | undefined;\r\n loading?: boolean | undefined;\r\n groupBy?: ((option: ComboboxItem) => string) | undefined;\r\n getOptionLabel?: ((option: ComboboxItem) => string) | undefined;\r\n isOptionEqualToValue?: ((option: ComboboxItem, value: ComboboxItem) => boolean) | undefined;\r\n filterOptions?: MuiACProps[\"filterOptions\"] | undefined;\r\n renderOption?: MuiACProps[\"renderOption\"] | undefined;\r\n onInputChange?: MuiACProps[\"onInputChange\"] | undefined;\r\n labels?: ComboboxLabels | undefined;\r\n sx?: SxProps<Theme> | undefined;\r\n}\r\n\r\nconst Combobox = React.forwardRef<HTMLDivElement, ComboboxProps>(function Combobox(\r\n {\r\n value,\r\n onChange,\r\n options = [],\r\n multiple = false,\r\n freeSolo = false,\r\n placeholder,\r\n disabled,\r\n error,\r\n fullWidth = true,\r\n loading = false,\r\n groupBy,\r\n getOptionLabel,\r\n isOptionEqualToValue,\r\n filterOptions,\r\n renderOption,\r\n onInputChange,\r\n labels,\r\n sx,\r\n // COMBO-1 — pulled out of ...rest so they DON'T land on the Autocomplete\r\n // root; threaded onto the native <input> in renderInput below.\r\n \"aria-describedby\": ariaDescribedBy,\r\n \"aria-invalid\": ariaInvalid,\r\n \"aria-required\": ariaRequired,\r\n ...rest\r\n },\r\n ref\r\n) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n // Legacy `placeholder` prop wins over labels.placeholder.\r\n const effectivePlaceholder = placeholder ?? L.placeholder;\r\n\r\n const normalised = React.useMemo(() => options.map(normaliseOption), [options]);\r\n\r\n // Default groupBy — uses option.group if any option has one.\r\n const autoGroupBy = React.useMemo((): ((option: ComboboxItem) => string) | undefined => {\r\n if (groupBy) return groupBy;\r\n if (normalised.some((o) => o && typeof o === \"object\" && o.group)) {\r\n return (o: ComboboxItem): string => (o && typeof o === \"object\" ? o.group || \"\" : \"\");\r\n }\r\n return undefined;\r\n }, [normalised, groupBy]);\r\n\r\n const labelOf = React.useCallback(\r\n (o: ComboboxItem): string => {\r\n if (getOptionLabel) return getOptionLabel(o);\r\n if (o == null) return \"\";\r\n if (typeof o === \"string\") return o;\r\n const obj = o as ComboboxOption;\r\n return String(obj.label ?? obj.value ?? \"\");\r\n },\r\n [getOptionLabel]\r\n );\r\n\r\n const eqOf = React.useCallback(\r\n (opt: ComboboxItem, val: unknown): boolean => {\r\n if (isOptionEqualToValue) return isOptionEqualToValue(opt, val as ComboboxItem);\r\n if (opt == null || val == null) return opt === val;\r\n const a = typeof opt === \"string\" ? opt : (opt as ComboboxOption).value;\r\n // B-eq: primitives (numbers, booleans) are compared as-is.\r\n // Previously `val.value` for a non-string, non-object value\r\n // (e.g. a numeric id stored by FormikCombobox via setFieldValue)\r\n // resolved to undefined, so the lookup never matched and the\r\n // selected option was never visually reflected after picking.\r\n const b =\r\n typeof val === \"string\" ? val\r\n : (val !== null && typeof val === \"object\") ? (val as { value?: unknown }).value\r\n : val; // number, boolean, etc. — use the primitive directly\r\n return a === b;\r\n },\r\n [isOptionEqualToValue]\r\n );\r\n\r\n const handleChange = (\r\n _event: React.SyntheticEvent,\r\n next: ComboboxItem | ComboboxItem[] | null\r\n ): void => {\r\n if (!onChange) return;\r\n // Re-emit raw value(s) — strings stay strings, objects get unwrapped to\r\n // their `.value` so callers don't have to deal with the option shape.\r\n if (multiple) {\r\n const arr = Array.isArray(next) ? next : [];\r\n const out = arr.map((n) => (typeof n === \"string\" ? n : (n as ComboboxOption).value ?? n));\r\n onChange(out);\r\n return;\r\n }\r\n if (next == null) {\r\n onChange(null);\r\n } else {\r\n const single = next as ComboboxItem;\r\n onChange(typeof single === \"string\" ? single : (single as ComboboxOption).value ?? single);\r\n }\r\n };\r\n\r\n // Resolve raw value(s) back to option objects so MUI Autocomplete can\r\n // display labels properly.\r\n const resolvedValue = React.useMemo(() => {\r\n if (multiple) {\r\n const arr = Array.isArray(value) ? value : [];\r\n return arr.map(\r\n (v) =>\r\n normalised.find((o) => eqOf(o, v)) ||\r\n (typeof v === \"string\" ? { value: v, label: v } : v)\r\n );\r\n }\r\n if (value == null || value === \"\") return null;\r\n return (\r\n normalised.find((o) => eqOf(o, value)) ||\r\n (typeof value === \"string\" ? { value, label: value } : (value as ComboboxItem))\r\n );\r\n }, [value, normalised, multiple, eqOf]);\r\n\r\n // Auto-render helper text when at least one option has one. Hosts can\r\n // override entirely by passing their own renderOption.\r\n const anyHelper = normalised.some(\r\n (o) => o && typeof o === \"object\" && o.helper != null && o.helper !== \"\"\r\n );\r\n const effectiveRenderOption: MuiACProps[\"renderOption\"] = React.useMemo(() => {\r\n if (renderOption) return renderOption;\r\n if (!anyHelper) return undefined;\r\n // MUI Autocomplete passes (props, option, state) — `props` already\r\n // carries the correct <li> role/id/aria-selected. We render the\r\n // option content inside it; the helper line is in-flow text so it\r\n // becomes part of the option's accessible name automatically.\r\n return (props: React.HTMLAttributes<HTMLLIElement>, option: ComboboxItem): React.ReactNode => {\r\n const label = labelOf(option);\r\n const helper = option && typeof option === \"object\" ? option.helper : null;\r\n const optValue = typeof option === \"object\" && option !== null ? option.value : undefined;\r\n const optionKey: React.Key =\r\n optValue == null ? label\r\n : typeof optValue === \"boolean\" ? String(optValue)\r\n : optValue;\r\n return (\r\n <li {...props} key={optionKey}>\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", paddingY: 0.25, minWidth: 0 }}>\r\n <Box component=\"span\" sx={{ fontSize: \"var(--text-sm)\", color: \"var(--fg)\" }}>\r\n {label}\r\n </Box>\r\n {helper && (\r\n <Box\r\n component=\"span\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n lineHeight: \"var(--lh-snug)\",\r\n }}\r\n >\r\n {helper}\r\n </Box>\r\n )}\r\n </Box>\r\n </li>\r\n );\r\n };\r\n }, [renderOption, anyHelper, labelOf]);\r\n\r\n return (\r\n <AutocompleteWithTags\r\n ref={ref}\r\n multiple={multiple}\r\n freeSolo={freeSolo}\r\n disabled={disabled}\r\n fullWidth={fullWidth}\r\n value={resolvedValue}\r\n onChange={handleChange}\r\n onInputChange={onInputChange}\r\n options={normalised}\r\n loading={loading}\r\n groupBy={autoGroupBy}\r\n getOptionLabel={labelOf}\r\n isOptionEqualToValue={eqOf}\r\n filterOptions={filterOptions}\r\n renderOption={effectiveRenderOption}\r\n noOptionsText={L.noOptions}\r\n loadingText={L.loading}\r\n clearText={L.clear}\r\n closeText={L.close}\r\n openText={L.open}\r\n size=\"small\"\r\n renderTags={(values: ComboboxItem[], getTagProps: AutocompleteRenderGetTagProps) =>\r\n values.map((option: ComboboxItem, index: number) => {\r\n const rawVal =\r\n typeof option === \"object\" && option !== null ? option.value : option;\r\n const tagKey: React.Key =\r\n rawVal == null ? index\r\n : typeof rawVal === \"boolean\" ? String(rawVal)\r\n : rawVal;\r\n return (\r\n <MuiChip\r\n {...getTagProps({ index })}\r\n key={tagKey}\r\n size=\"small\"\r\n label={labelOf(option)}\r\n sx={{\r\n height: 22,\r\n \"& .MuiChip-label\": { paddingInline: 1, fontSize: 12 },\r\n }}\r\n />\r\n );\r\n })\r\n }\r\n renderInput={(params) => {\r\n // MUI v9: the bag passed to renderInput carries the input slot props\r\n // at `params.slotProps.input` AND — crucially — the input element ref\r\n // at `params.slotProps.htmlInput.ref`, which MUI's Autocomplete\r\n // focuses on click. We must NOT rebuild slotProps from scratch (that\r\n // drops htmlInput → MUI focuses null → \"Cannot read properties of null\r\n // (reading 'focus')\"). Instead, spread the whole params.slotProps and\r\n // only override the input slot's endAdornment. inputSlot is annotated\r\n // as { endAdornment? } so the runtime spread still forwards htmlInput.\r\n // params.InputProps was the pre-v9 TextField prop, fully replaced by\r\n // params.slotProps.input — no longer exists on AutocompleteRenderInputParams.\r\n const paramsSlotProps = params.slotProps ?? {};\r\n const inputSlot: { endAdornment?: React.ReactNode } =\r\n params.slotProps?.input ?? {};\r\n return (\r\n <TextField\r\n {...params}\r\n placeholder={effectivePlaceholder}\r\n error={!!error}\r\n slotProps={{\r\n ...paramsSlotProps,\r\n // COMBO-1 — merge Field's aria onto the native <input>. Spread\r\n // MUI's existing htmlInput FIRST to keep its ref + combobox aria\r\n // (role/aria-expanded/aria-controls/aria-activedescendant); add\r\n // ours only when defined (exactOptionalPropertyTypes-safe).\r\n htmlInput: {\r\n ...(params.slotProps?.htmlInput ?? {}),\r\n ...(ariaDescribedBy != null ? { \"aria-describedby\": ariaDescribedBy } : {}),\r\n ...(ariaInvalid != null ? { \"aria-invalid\": ariaInvalid } : {}),\r\n ...(ariaRequired != null ? { \"aria-required\": ariaRequired } : {}),\r\n },\r\n input: {\r\n ...inputSlot,\r\n endAdornment: (\r\n <>\r\n {/* R-Ar.3 — decorative spinner. The listbox already announces\r\n via the loadingText prop; making the spinner a second\r\n progressbar in the AT tree would just create duplicate\r\n noise. */}\r\n {loading ? (\r\n <CircularProgress\r\n size={14}\r\n aria-hidden=\"true\"\r\n role=\"presentation\"\r\n sx={{ marginRight: 0.5 }}\r\n />\r\n ) : null}\r\n {inputSlot.endAdornment}\r\n </>\r\n ),\r\n },\r\n }}\r\n />\r\n );\r\n }}\r\n sx={sx}\r\n {...rest}\r\n />\r\n );\r\n});\r\n\r\nexport default Combobox;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,eAAe,MAAM,4BAA4B;AAExD,OAAOC,SAAS,MAAM,yBAAyB;AAC/C,OAAOC,OAAO,MAAM,oBAAoB;AACxC,OAAOC,gBAAgB,MAAM,gCAAgC;AAC7D,OAAOC,GAAG,MAAM,mBAAmB;AAEnC,SAASC,WAAW,QAAQ,sBAAsB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAWA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AALA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAAA,SAAAC,aAAA,IAAAC,cAAA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,oBAAoB,GAAGd,eAO5B;AAED,MAAMe,cAAc,GAAGC,MAAM,CAACC,MAAM,CAAC;EACnCC,SAAS,EAAI,gBAAgB;EAC7BC,OAAO,EAAM,aAAa;EAC1BC,KAAK,EAAQ,SAAS;EACtBC,KAAK,EAAQ,QAAQ;EACrBC,IAAI,EAAS,QAAQ;EACrBC,WAAW,EAAE;AACf,CAAC,CAAC;AAEF,MAAMC,eAAe,GAAIC,CAA0B,IACjD,OAAOA,CAAC,KAAK,QAAQ,GAAG;EAAEC,KAAK,EAAED,CAAC;EAAEE,KAAK,EAAEF;AAAE,CAAC,GAAGA,CAAC;AAm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","ignoreList":[]}
|