@portnet/ui 6.0.1 → 6.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +737 -0
- package/dist/esm/index.js +90 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
- package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldError.test.js +71 -39
- package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
- package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldWidth.test.js +146 -0
- package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FileCard.test.js +18 -18
- package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js +173 -0
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +236 -0
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +299 -0
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
- package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -43
- package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/esm/v2/__tests__/apiError.test.js +50 -69
- package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
- package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
- package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
- package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/esm/v2/__tests__/labels-merge.test.js +17 -22
- package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
- package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
- package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
- package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/esm/v2/components/Accordion.js +48 -70
- package/dist/esm/v2/components/Accordion.js.map +1 -1
- package/dist/esm/v2/components/ActionStrip.js +31 -43
- package/dist/esm/v2/components/ActionStrip.js.map +1 -1
- package/dist/esm/v2/components/Banner.js +25 -22
- package/dist/esm/v2/components/Banner.js.map +1 -1
- package/dist/esm/v2/components/Busy.js +14 -19
- package/dist/esm/v2/components/Busy.js.map +1 -1
- package/dist/esm/v2/components/Button.js +34 -45
- package/dist/esm/v2/components/Button.js.map +1 -1
- package/dist/esm/v2/components/CategoryTag.js +44 -27
- package/dist/esm/v2/components/CategoryTag.js.map +1 -1
- package/dist/esm/v2/components/Checkbox.js +32 -38
- package/dist/esm/v2/components/Checkbox.js.map +1 -1
- package/dist/esm/v2/components/Chip.js +23 -36
- package/dist/esm/v2/components/Chip.js.map +1 -1
- package/dist/esm/v2/components/Combobox.js +112 -136
- package/dist/esm/v2/components/Combobox.js.map +1 -1
- package/dist/esm/v2/components/CommandPalette.js +113 -198
- package/dist/esm/v2/components/CommandPalette.js.map +1 -1
- package/dist/esm/v2/components/ConfirmDialog.js +36 -45
- package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/esm/v2/components/DatePicker.js +78 -81
- package/dist/esm/v2/components/DatePicker.js.map +1 -1
- package/dist/esm/v2/components/DateRangePicker.js +63 -74
- package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
- package/dist/esm/v2/components/DateTimePicker.js +118 -90
- package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
- package/dist/esm/v2/components/Drawer.js +71 -65
- package/dist/esm/v2/components/Drawer.js.map +1 -1
- package/dist/esm/v2/components/Dropzone.js +130 -177
- package/dist/esm/v2/components/Dropzone.js.map +1 -1
- package/dist/esm/v2/components/EmptyState.js +9 -9
- package/dist/esm/v2/components/EmptyState.js.map +1 -1
- package/dist/esm/v2/components/FavoriteToggle.js +24 -33
- package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/esm/v2/components/Field.js +210 -52
- package/dist/esm/v2/components/Field.js.map +1 -1
- package/dist/esm/v2/components/FieldError.js +9 -13
- package/dist/esm/v2/components/FieldError.js.map +1 -1
- package/dist/esm/v2/components/FieldHelp.js +28 -49
- package/dist/esm/v2/components/FieldHelp.js.map +1 -1
- package/dist/esm/v2/components/FileCard.js +14 -19
- package/dist/esm/v2/components/FileCard.js.map +1 -1
- package/dist/esm/v2/components/FilterTab.js +22 -31
- package/dist/esm/v2/components/FilterTab.js.map +1 -1
- package/dist/esm/v2/components/ForbiddenPage.js +28 -8
- package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/esm/v2/components/FormGrid.js +48 -54
- package/dist/esm/v2/components/FormGrid.js.map +1 -1
- package/dist/esm/v2/components/FormikDisplay.js +98 -24
- package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
- package/dist/esm/v2/components/Input.js +75 -34
- package/dist/esm/v2/components/Input.js.map +1 -1
- package/dist/esm/v2/components/KPICard.js +42 -51
- package/dist/esm/v2/components/KPICard.js.map +1 -1
- package/dist/esm/v2/components/KPIStrip.js +9 -15
- package/dist/esm/v2/components/KPIStrip.js.map +1 -1
- package/dist/esm/v2/components/KV.js +16 -23
- package/dist/esm/v2/components/KV.js.map +1 -1
- package/dist/esm/v2/components/KVGrid.js +15 -23
- package/dist/esm/v2/components/KVGrid.js.map +1 -1
- package/dist/esm/v2/components/Layout.js +81 -117
- package/dist/esm/v2/components/Layout.js.map +1 -1
- package/dist/esm/v2/components/MobileRowCard.js +64 -75
- package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
- package/dist/esm/v2/components/Modal.js +44 -53
- package/dist/esm/v2/components/Modal.js.map +1 -1
- package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
- package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/esm/v2/components/NotFoundPage.js +28 -9
- package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
- package/dist/esm/v2/components/NumberInput.js +77 -107
- package/dist/esm/v2/components/NumberInput.js.map +1 -1
- package/dist/esm/v2/components/OverflowMenu.js +24 -42
- package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
- package/dist/esm/v2/components/PdfViewer.js +24 -33
- package/dist/esm/v2/components/PdfViewer.js.map +1 -1
- package/dist/esm/v2/components/ProgressBar.js +28 -36
- package/dist/esm/v2/components/ProgressBar.js.map +1 -1
- package/dist/esm/v2/components/Radio.js +49 -57
- package/dist/esm/v2/components/Radio.js.map +1 -1
- package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
- package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/esm/v2/components/SectionHeader.js +24 -31
- package/dist/esm/v2/components/SectionHeader.js.map +1 -1
- package/dist/esm/v2/components/Segmented.js +59 -84
- package/dist/esm/v2/components/Segmented.js.map +1 -1
- package/dist/esm/v2/components/Select.js +100 -138
- package/dist/esm/v2/components/Select.js.map +1 -1
- package/dist/esm/v2/components/ServerErrorPage.js +27 -10
- package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/esm/v2/components/Skeleton.js +81 -96
- package/dist/esm/v2/components/Skeleton.js.map +1 -1
- package/dist/esm/v2/components/SkipLink.js +6 -7
- package/dist/esm/v2/components/SkipLink.js.map +1 -1
- package/dist/esm/v2/components/Spinner.js +13 -22
- package/dist/esm/v2/components/Spinner.js.map +1 -1
- package/dist/esm/v2/components/Status.js +14 -25
- package/dist/esm/v2/components/Status.js.map +1 -1
- package/dist/esm/v2/components/Stepper.js +68 -71
- package/dist/esm/v2/components/Stepper.js.map +1 -1
- package/dist/esm/v2/components/Surface.js +25 -44
- package/dist/esm/v2/components/Surface.js.map +1 -1
- package/dist/esm/v2/components/Switch.js +21 -29
- package/dist/esm/v2/components/Switch.js.map +1 -1
- package/dist/esm/v2/components/TabPanel.js +84 -0
- package/dist/esm/v2/components/TabPanel.js.map +1 -0
- package/dist/esm/v2/components/Tabs.js +43 -19
- package/dist/esm/v2/components/Tabs.js.map +1 -1
- package/dist/esm/v2/components/TelInput.js +75 -108
- package/dist/esm/v2/components/TelInput.js.map +1 -1
- package/dist/esm/v2/components/Textarea.js +21 -30
- package/dist/esm/v2/components/Textarea.js.map +1 -1
- package/dist/esm/v2/components/TimePicker.js +59 -69
- package/dist/esm/v2/components/TimePicker.js.map +1 -1
- package/dist/esm/v2/components/Toast.js +109 -163
- package/dist/esm/v2/components/Toast.js.map +1 -1
- package/dist/esm/v2/components/Tooltip.js +18 -31
- package/dist/esm/v2/components/Tooltip.js.map +1 -1
- package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
- package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/esm/v2/components/_pickerShared.js +2 -2
- package/dist/esm/v2/components/_pickerShared.js.map +1 -1
- package/dist/esm/v2/components/index.js +64 -0
- package/dist/esm/v2/components/index.js.map +1 -1
- package/dist/esm/v2/hooks/index.js +62 -0
- package/dist/esm/v2/hooks/index.js.map +1 -1
- package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
- package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
- package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/esm/v2/hooks/useDensity.js +13 -17
- package/dist/esm/v2/hooks/useDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
- package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
- package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
- package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
- package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
- package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useSortedRows.js +3 -5
- package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/esm/v2/hooks/useTabLoading.js +6 -21
- package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/esm/v2/index.js +14 -4
- package/dist/esm/v2/index.js.map +1 -1
- package/dist/esm/v2/modalContext.js +2 -2
- package/dist/esm/v2/modalContext.js.map +1 -1
- package/dist/esm/v2/models/favorite.js.map +1 -1
- package/dist/esm/v2/models/personalization.js.map +1 -1
- package/dist/esm/v2/models/referentiel.js.map +1 -1
- package/dist/esm/v2/models/savedFilter.js.map +1 -1
- package/dist/esm/v2/patterns/ActionBar.js +115 -159
- package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/AppMain.js +108 -0
- package/dist/esm/v2/patterns/AppMain.js.map +1 -0
- package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
- package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/ChartFigure.js +151 -0
- package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
- package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/esm/v2/patterns/DataGrid.js +221 -255
- package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
- package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
- package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/esm/v2/patterns/DetailSplit.js +108 -0
- package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/esm/v2/patterns/FavoriteColumn.js +26 -75
- package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
- package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
- package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
- package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/esm/v2/patterns/FormPageShell.js +43 -41
- package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/FormSection.js +30 -38
- package/dist/esm/v2/patterns/FormSection.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCheckbox.js +130 -0
- package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -0
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCombobox.js +51 -66
- package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDatePicker.js +51 -99
- package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDateTimePicker.js +136 -0
- package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -0
- package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
- package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
- package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/esm/v2/patterns/FormikFile.js +94 -78
- package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
- package/dist/esm/v2/patterns/FormikInput.js +40 -50
- package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
- package/dist/esm/v2/patterns/FormikRadioGroup.js +129 -0
- package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -0
- package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
- package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/FormikSelect.js +64 -84
- package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/esm/v2/patterns/FormikTextarea.js +30 -43
- package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +64 -65
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
- package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/esm/v2/patterns/PageContent.js +10 -14
- package/dist/esm/v2/patterns/PageContent.js.map +1 -1
- package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
- package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/esm/v2/patterns/ReferentielField.js +327 -312
- package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/RowFavoriteToggle.js +127 -0
- package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -0
- package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
- package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
- package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
- package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/SortableHeader.js +22 -45
- package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/esm/v2/patterns/Tour.js +94 -120
- package/dist/esm/v2/patterns/Tour.js.map +1 -1
- package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
- package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/esm/v2/patterns/_pickerSerialisation.js +72 -0
- package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -0
- package/dist/esm/v2/patterns/_sort.js +17 -33
- package/dist/esm/v2/patterns/_sort.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
- package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
- package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/esm/v2/patterns/filterCriteria.js +102 -0
- package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/esm/v2/patterns/index.js +235 -0
- package/dist/esm/v2/patterns/index.js.map +1 -1
- package/dist/esm/v2/patterns/rowActions.js +223 -0
- package/dist/esm/v2/patterns/rowActions.js.map +1 -0
- package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
- package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
- package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
- package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js +203 -0
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/index.js +5 -0
- package/dist/esm/v2/personalization/capabilities/index.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
- package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
- package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/esm/v2/personalization/index.js +35 -0
- package/dist/esm/v2/personalization/index.js.map +1 -1
- package/dist/esm/v2/personalization/personalizationContext.js +9 -9
- package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/esm/v2/personalization/schema.js +8 -9
- package/dist/esm/v2/personalization/schema.js.map +1 -1
- package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
- package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/esm/v2/referentiel/types.js +2 -0
- package/dist/esm/v2/referentiel/types.js.map +1 -0
- package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
- package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
- package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
- package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/esm/v2/theme/_brand.js +8 -24
- package/dist/esm/v2/theme/_brand.js.map +1 -1
- package/dist/esm/v2/theme/_brandSecondary.js +8 -24
- package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
- package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/esm/v2/theme/cssVariables.js +62 -69
- package/dist/esm/v2/theme/cssVariables.js.map +1 -1
- package/dist/esm/v2/theme/index.js +5 -5
- package/dist/esm/v2/theme/index.js.map +1 -1
- package/dist/esm/v2/tokens/breakpoints.js +14 -14
- package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
- package/dist/esm/v2/tokens/chart.js +261 -0
- package/dist/esm/v2/tokens/chart.js.map +1 -0
- package/dist/esm/v2/tokens/colors.js +22 -22
- package/dist/esm/v2/tokens/colors.js.map +1 -1
- package/dist/esm/v2/tokens/density.js +62 -7
- package/dist/esm/v2/tokens/density.js.map +1 -1
- package/dist/esm/v2/tokens/index.js +49 -34
- package/dist/esm/v2/tokens/index.js.map +1 -1
- package/dist/esm/v2/tokens/motion.js +12 -20
- package/dist/esm/v2/tokens/motion.js.map +1 -1
- package/dist/esm/v2/tokens/radius.js +1 -1
- package/dist/esm/v2/tokens/radius.js.map +1 -1
- package/dist/esm/v2/tokens/shadows.js +6 -6
- package/dist/esm/v2/tokens/shadows.js.map +1 -1
- package/dist/esm/v2/tokens/spacing.js +2 -2
- package/dist/esm/v2/tokens/spacing.js.map +1 -1
- package/dist/esm/v2/tokens/state.js +1 -1
- package/dist/esm/v2/tokens/state.js.map +1 -1
- package/dist/esm/v2/tokens/statusPalette.js +17 -21
- package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
- package/dist/esm/v2/tokens/tokens.json +6 -1
- package/dist/esm/v2/tokens/typography.js +13 -13
- package/dist/esm/v2/tokens/typography.js.map +1 -1
- package/dist/esm/v2/tokens/zIndex.js +1 -1
- package/dist/esm/v2/tokens/zIndex.js.map +1 -1
- package/dist/esm/v2/types/datagrid.js.map +1 -1
- package/dist/esm/v2/utils/apiError.js +16 -37
- package/dist/esm/v2/utils/apiError.js.map +1 -1
- package/dist/esm/v2/utils/contrast.js +31 -32
- package/dist/esm/v2/utils/contrast.js.map +1 -1
- package/dist/esm/v2/utils/cx.js +5 -25
- package/dist/esm/v2/utils/cx.js.map +1 -1
- package/dist/esm/v2/utils/fileDownload.js +23 -26
- package/dist/esm/v2/utils/fileDownload.js.map +1 -1
- package/dist/esm/v2/utils/fileValidation.js +209 -0
- package/dist/esm/v2/utils/fileValidation.js.map +1 -0
- package/dist/esm/v2/utils/fmtDate.js +111 -0
- package/dist/esm/v2/utils/fmtDate.js.map +1 -0
- package/dist/esm/v2/utils/fmtMoney.js +8 -10
- package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
- package/dist/esm/v2/utils/formikErrors.js +78 -0
- package/dist/esm/v2/utils/formikErrors.js.map +1 -0
- package/dist/esm/v2/utils/index.js +35 -2
- package/dist/esm/v2/utils/index.js.map +1 -1
- package/dist/esm/v2/utils/mergeLabels.js +7 -12
- package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
- package/dist/esm/v2/utils/networkStatus.js +12 -12
- package/dist/esm/v2/utils/networkStatus.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +122 -47
- package/dist/index.js.map +1 -1
- package/dist/v2/__tests__/AppMain.test.js +133 -0
- package/dist/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/v2/__tests__/ChartFigure.test.js +183 -0
- package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/v2/__tests__/FieldError.test.js +98 -69
- package/dist/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/v2/__tests__/FieldNaming.test.js +161 -0
- package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/v2/__tests__/FieldWidth.test.js +148 -0
- package/dist/v2/__tests__/FieldWidth.test.js.map +1 -0
- package/dist/v2/__tests__/FileCard.test.js +45 -48
- package/dist/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/v2/__tests__/FormikCheckbox.test.js +175 -0
- package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -0
- package/dist/v2/__tests__/FormikDateTimePicker.test.js +237 -0
- package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -0
- package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
- package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/v2/__tests__/FormikRadioGroup.test.js +300 -0
- package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -0
- package/dist/v2/__tests__/MobileRowCard.test.js +100 -102
- package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
- package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
- package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/v2/__tests__/apiError.test.js +50 -69
- package/dist/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/v2/__tests__/banned-patterns.test.js +42 -123
- package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/v2/__tests__/chart-palette.test.js +205 -0
- package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/v2/__tests__/fileValidation.test.js +136 -0
- package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/v2/__tests__/filterCriteria.test.js +324 -0
- package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/fmtDate.test.js +69 -0
- package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/v2/__tests__/labels-merge.test.js +38 -46
- package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/v2/__tests__/locale-fallback.test.js +47 -52
- package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
- package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/rowActions.test.js +186 -0
- package/dist/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
- package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/v2/components/Accordion.js +60 -82
- package/dist/v2/components/Accordion.js.map +1 -1
- package/dist/v2/components/ActionStrip.js +40 -52
- package/dist/v2/components/ActionStrip.js.map +1 -1
- package/dist/v2/components/Banner.js +42 -41
- package/dist/v2/components/Banner.js.map +1 -1
- package/dist/v2/components/Busy.js +22 -27
- package/dist/v2/components/Busy.js.map +1 -1
- package/dist/v2/components/Button.js +39 -50
- package/dist/v2/components/Button.js.map +1 -1
- package/dist/v2/components/CategoryTag.d.ts.map +1 -1
- package/dist/v2/components/CategoryTag.js +49 -32
- package/dist/v2/components/CategoryTag.js.map +1 -1
- package/dist/v2/components/Checkbox.js +39 -45
- package/dist/v2/components/Checkbox.js.map +1 -1
- package/dist/v2/components/Chip.js +29 -42
- package/dist/v2/components/Chip.js.map +1 -1
- package/dist/v2/components/Combobox.js +122 -144
- package/dist/v2/components/Combobox.js.map +1 -1
- package/dist/v2/components/CommandPalette.js +138 -225
- package/dist/v2/components/CommandPalette.js.map +1 -1
- package/dist/v2/components/ConfirmDialog.js +46 -56
- package/dist/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/v2/components/DatePicker.js +81 -86
- package/dist/v2/components/DatePicker.js.map +1 -1
- package/dist/v2/components/DateRangePicker.js +77 -87
- package/dist/v2/components/DateRangePicker.js.map +1 -1
- package/dist/v2/components/DateTimePicker.d.ts.map +1 -1
- package/dist/v2/components/DateTimePicker.js +121 -95
- package/dist/v2/components/DateTimePicker.js.map +1 -1
- package/dist/v2/components/Drawer.d.ts.map +1 -1
- package/dist/v2/components/Drawer.js +93 -88
- package/dist/v2/components/Drawer.js.map +1 -1
- package/dist/v2/components/Dropzone.js +150 -196
- package/dist/v2/components/Dropzone.js.map +1 -1
- package/dist/v2/components/EmptyState.js +18 -20
- package/dist/v2/components/EmptyState.js.map +1 -1
- package/dist/v2/components/FavoriteToggle.js +28 -39
- package/dist/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/v2/components/Field.d.ts +121 -5
- package/dist/v2/components/Field.d.ts.map +1 -1
- package/dist/v2/components/Field.js +221 -62
- package/dist/v2/components/Field.js.map +1 -1
- package/dist/v2/components/FieldError.js +18 -21
- package/dist/v2/components/FieldError.js.map +1 -1
- package/dist/v2/components/FieldHelp.js +40 -60
- package/dist/v2/components/FieldHelp.js.map +1 -1
- package/dist/v2/components/FileCard.js +27 -31
- package/dist/v2/components/FileCard.js.map +1 -1
- package/dist/v2/components/FilterTab.js +30 -38
- package/dist/v2/components/FilterTab.js.map +1 -1
- package/dist/v2/components/ForbiddenPage.d.ts +25 -1
- package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
- package/dist/v2/components/ForbiddenPage.js +37 -17
- package/dist/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/v2/components/FormGrid.js +53 -59
- package/dist/v2/components/FormGrid.js.map +1 -1
- package/dist/v2/components/FormikDisplay.d.ts +50 -1
- package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
- package/dist/v2/components/FormikDisplay.js +108 -33
- package/dist/v2/components/FormikDisplay.js.map +1 -1
- package/dist/v2/components/Input.d.ts +40 -0
- package/dist/v2/components/Input.d.ts.map +1 -1
- package/dist/v2/components/Input.js +81 -41
- package/dist/v2/components/Input.js.map +1 -1
- package/dist/v2/components/KPICard.js +57 -67
- package/dist/v2/components/KPICard.js.map +1 -1
- package/dist/v2/components/KPIStrip.js +16 -22
- package/dist/v2/components/KPIStrip.js.map +1 -1
- package/dist/v2/components/KV.js +25 -31
- package/dist/v2/components/KV.js.map +1 -1
- package/dist/v2/components/KVGrid.js +19 -26
- package/dist/v2/components/KVGrid.js.map +1 -1
- package/dist/v2/components/Layout.js +91 -120
- package/dist/v2/components/Layout.js.map +1 -1
- package/dist/v2/components/MobileRowCard.js +79 -91
- package/dist/v2/components/MobileRowCard.js.map +1 -1
- package/dist/v2/components/Modal.js +61 -69
- package/dist/v2/components/Modal.js.map +1 -1
- package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
- package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
- package/dist/v2/components/NetworkErrorPage.js +38 -21
- package/dist/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/v2/components/NotFoundPage.d.ts +17 -1
- package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
- package/dist/v2/components/NotFoundPage.js +37 -18
- package/dist/v2/components/NotFoundPage.js.map +1 -1
- package/dist/v2/components/NumberInput.js +88 -118
- package/dist/v2/components/NumberInput.js.map +1 -1
- package/dist/v2/components/OverflowMenu.js +38 -56
- package/dist/v2/components/OverflowMenu.js.map +1 -1
- package/dist/v2/components/PdfViewer.js +34 -45
- package/dist/v2/components/PdfViewer.js.map +1 -1
- package/dist/v2/components/ProgressBar.js +42 -49
- package/dist/v2/components/ProgressBar.js.map +1 -1
- package/dist/v2/components/Radio.js +59 -67
- package/dist/v2/components/Radio.js.map +1 -1
- package/dist/v2/components/SectionErrorBoundary.js +90 -135
- package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/v2/components/SectionHeader.js +34 -41
- package/dist/v2/components/SectionHeader.js.map +1 -1
- package/dist/v2/components/Segmented.js +69 -93
- package/dist/v2/components/Segmented.js.map +1 -1
- package/dist/v2/components/Select.d.ts +26 -2
- package/dist/v2/components/Select.d.ts.map +1 -1
- package/dist/v2/components/Select.js +120 -155
- package/dist/v2/components/Select.js.map +1 -1
- package/dist/v2/components/ServerErrorPage.d.ts +27 -1
- package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
- package/dist/v2/components/ServerErrorPage.js +37 -20
- package/dist/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/v2/components/Skeleton.js +86 -100
- package/dist/v2/components/Skeleton.js.map +1 -1
- package/dist/v2/components/SkipLink.js +9 -12
- package/dist/v2/components/SkipLink.js.map +1 -1
- package/dist/v2/components/Spinner.js +16 -25
- package/dist/v2/components/Spinner.js.map +1 -1
- package/dist/v2/components/Status.js +18 -29
- package/dist/v2/components/Status.js.map +1 -1
- package/dist/v2/components/Stepper.js +80 -82
- package/dist/v2/components/Stepper.js.map +1 -1
- package/dist/v2/components/Surface.js +34 -49
- package/dist/v2/components/Surface.js.map +1 -1
- package/dist/v2/components/Switch.js +29 -37
- package/dist/v2/components/Switch.js.map +1 -1
- package/dist/v2/components/TabPanel.d.ts +17 -0
- package/dist/v2/components/TabPanel.d.ts.map +1 -0
- package/dist/v2/components/TabPanel.js +90 -0
- package/dist/v2/components/TabPanel.js.map +1 -0
- package/dist/v2/components/Tabs.d.ts +25 -0
- package/dist/v2/components/Tabs.d.ts.map +1 -1
- package/dist/v2/components/Tabs.js +53 -29
- package/dist/v2/components/Tabs.js.map +1 -1
- package/dist/v2/components/TelInput.js +80 -115
- package/dist/v2/components/TelInput.js.map +1 -1
- package/dist/v2/components/Textarea.js +26 -35
- package/dist/v2/components/Textarea.js.map +1 -1
- package/dist/v2/components/TimePicker.js +62 -74
- package/dist/v2/components/TimePicker.js.map +1 -1
- package/dist/v2/components/Toast.js +119 -174
- package/dist/v2/components/Toast.js.map +1 -1
- package/dist/v2/components/Tooltip.js +23 -38
- package/dist/v2/components/Tooltip.js.map +1 -1
- package/dist/v2/components/_ErrorPageBody.js +15 -16
- package/dist/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/v2/components/_pickerShared.js +5 -5
- package/dist/v2/components/_pickerShared.js.map +1 -1
- package/dist/v2/components/index.d.ts +67 -1
- package/dist/v2/components/index.d.ts.map +1 -1
- package/dist/v2/components/index.js +153 -136
- package/dist/v2/components/index.js.map +1 -1
- package/dist/v2/hooks/index.d.ts +65 -0
- package/dist/v2/hooks/index.d.ts.map +1 -1
- package/dist/v2/hooks/index.js +63 -24
- package/dist/v2/hooks/index.js.map +1 -1
- package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
- package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
- package/dist/v2/hooks/useAppliedFilters.js +117 -0
- package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.js +87 -0
- package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/v2/hooks/useDelayedFlag.js +6 -20
- package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/v2/hooks/useDensity.d.ts.map +1 -1
- package/dist/v2/hooks/useDensity.js +14 -18
- package/dist/v2/hooks/useDensity.js.map +1 -1
- package/dist/v2/hooks/useFocusFirstError.js +26 -34
- package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/v2/hooks/useFocusTrap.js +20 -24
- package/dist/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
- package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.js +39 -54
- package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
- package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/v2/hooks/useResolvedDensity.js +5 -13
- package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/v2/hooks/useSortedRows.js +4 -6
- package/dist/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/v2/hooks/useTabLoading.js +7 -22
- package/dist/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/v2/index.d.ts.map +1 -1
- package/dist/v2/index.js +143 -145
- package/dist/v2/index.js.map +1 -1
- package/dist/v2/modalContext.js +2 -2
- package/dist/v2/modalContext.js.map +1 -1
- package/dist/v2/models/favorite.d.ts +8 -9
- package/dist/v2/models/favorite.d.ts.map +1 -1
- package/dist/v2/models/favorite.js.map +1 -1
- package/dist/v2/models/index.js +4 -4
- package/dist/v2/models/index.js.map +1 -1
- package/dist/v2/models/personalization.d.ts +44 -48
- package/dist/v2/models/personalization.d.ts.map +1 -1
- package/dist/v2/models/personalization.js.map +1 -1
- package/dist/v2/models/referentiel.d.ts +32 -50
- package/dist/v2/models/referentiel.d.ts.map +1 -1
- package/dist/v2/models/referentiel.js.map +1 -1
- package/dist/v2/models/savedFilter.d.ts +8 -17
- package/dist/v2/models/savedFilter.d.ts.map +1 -1
- package/dist/v2/models/savedFilter.js.map +1 -1
- package/dist/v2/patterns/ActionBar.js +152 -187
- package/dist/v2/patterns/ActionBar.js.map +1 -1
- package/dist/v2/patterns/AppMain.d.ts +109 -0
- package/dist/v2/patterns/AppMain.d.ts.map +1 -0
- package/dist/v2/patterns/AppMain.js +115 -0
- package/dist/v2/patterns/AppMain.js.map +1 -0
- package/dist/v2/patterns/BulkActionBar.js +40 -42
- package/dist/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/v2/patterns/ChartFigure.d.ts +124 -0
- package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
- package/dist/v2/patterns/ChartFigure.js +159 -0
- package/dist/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
- package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/v2/patterns/ColumnsToggle.js +60 -94
- package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
- package/dist/v2/patterns/DataGrid.js +262 -297
- package/dist/v2/patterns/DataGrid.js.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
- package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/v2/patterns/DataGridToolbar.js +103 -106
- package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/v2/patterns/DataGridVirtualized.js +179 -217
- package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/v2/patterns/DetailSplit.d.ts +87 -0
- package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
- package/dist/v2/patterns/DetailSplit.js +116 -0
- package/dist/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/v2/patterns/FavoriteColumn.d.ts +9 -9
- package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -1
- package/dist/v2/patterns/FavoriteColumn.js +32 -80
- package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/v2/patterns/FavoritesFilter.js +36 -44
- package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
- package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
- package/dist/v2/patterns/FilterTabBar.js +120 -0
- package/dist/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/v2/patterns/FormErrorSummary.js +20 -23
- package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/v2/patterns/FormPageShell.js +53 -50
- package/dist/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/v2/patterns/FormSection.d.ts +8 -3
- package/dist/v2/patterns/FormSection.d.ts.map +1 -1
- package/dist/v2/patterns/FormSection.js +44 -51
- package/dist/v2/patterns/FormSection.js.map +1 -1
- package/dist/v2/patterns/FormikCheckbox.d.ts +77 -0
- package/dist/v2/patterns/FormikCheckbox.d.ts.map +1 -0
- package/dist/v2/patterns/FormikCheckbox.js +138 -0
- package/dist/v2/patterns/FormikCheckbox.js.map +1 -0
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
- package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/v2/patterns/FormikCombobox.d.ts +7 -1
- package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCombobox.js +55 -69
- package/dist/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.d.ts +13 -1
- package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.js +59 -106
- package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/v2/patterns/FormikDateTimePicker.d.ts +111 -0
- package/dist/v2/patterns/FormikDateTimePicker.d.ts.map +1 -0
- package/dist/v2/patterns/FormikDateTimePicker.js +144 -0
- package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -0
- package/dist/v2/patterns/FormikErrorFocus.js +25 -26
- package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
- package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
- package/dist/v2/patterns/FormikErrorSummary.js +97 -0
- package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/v2/patterns/FormikFile.d.ts +14 -1
- package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
- package/dist/v2/patterns/FormikFile.js +99 -83
- package/dist/v2/patterns/FormikFile.js.map +1 -1
- package/dist/v2/patterns/FormikInput.d.ts +11 -1
- package/dist/v2/patterns/FormikInput.d.ts.map +1 -1
- package/dist/v2/patterns/FormikInput.js +45 -55
- package/dist/v2/patterns/FormikInput.js.map +1 -1
- package/dist/v2/patterns/FormikRadioGroup.d.ts +80 -0
- package/dist/v2/patterns/FormikRadioGroup.d.ts.map +1 -0
- package/dist/v2/patterns/FormikRadioGroup.js +137 -0
- package/dist/v2/patterns/FormikRadioGroup.js.map +1 -0
- package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
- package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.js +54 -64
- package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/v2/patterns/FormikSelect.d.ts +9 -1
- package/dist/v2/patterns/FormikSelect.d.ts.map +1 -1
- package/dist/v2/patterns/FormikSelect.js +70 -89
- package/dist/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/v2/patterns/FormikTextarea.d.ts +9 -1
- package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -1
- package/dist/v2/patterns/FormikTextarea.js +35 -48
- package/dist/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +14 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.js +71 -74
- package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
- package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/v2/patterns/PageContent.js +17 -20
- package/dist/v2/patterns/PageContent.js.map +1 -1
- package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
- package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
- package/dist/v2/patterns/PreviewDrawer.js +159 -0
- package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/v2/patterns/ReferentielField.d.ts +86 -2
- package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/ReferentielField.js +347 -327
- package/dist/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/v2/patterns/RowFavoriteToggle.d.ts +98 -0
- package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -0
- package/dist/v2/patterns/RowFavoriteToggle.js +135 -0
- package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -0
- package/dist/v2/patterns/SaveFilterDialog.js +50 -77
- package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
- package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/v2/patterns/SkeletonPageShell.js +122 -143
- package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/v2/patterns/SortableHeader.js +35 -57
- package/dist/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/v2/patterns/Tour.js +121 -142
- package/dist/v2/patterns/Tour.js.map +1 -1
- package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
- package/dist/v2/patterns/_dataGridShared.js +131 -147
- package/dist/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/v2/patterns/_pickerSerialisation.d.ts +44 -0
- package/dist/v2/patterns/_pickerSerialisation.d.ts.map +1 -0
- package/dist/v2/patterns/_pickerSerialisation.js +80 -0
- package/dist/v2/patterns/_pickerSerialisation.js.map +1 -0
- package/dist/v2/patterns/_sort.js +17 -33
- package/dist/v2/patterns/_sort.js.map +1 -1
- package/dist/v2/patterns/_useColumnReorder.js +124 -163
- package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/v2/patterns/_useColumnResize.js +80 -99
- package/dist/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/v2/patterns/filterCriteria.d.ts +78 -0
- package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
- package/dist/v2/patterns/filterCriteria.js +110 -0
- package/dist/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/v2/patterns/index.d.ts +247 -0
- package/dist/v2/patterns/index.d.ts.map +1 -1
- package/dist/v2/patterns/index.js +182 -70
- package/dist/v2/patterns/index.js.map +1 -1
- package/dist/v2/patterns/rowActions.d.ts +150 -0
- package/dist/v2/patterns/rowActions.d.ts.map +1 -0
- package/dist/v2/patterns/rowActions.js +232 -0
- package/dist/v2/patterns/rowActions.js.map +1 -0
- package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
- package/dist/v2/personalization/PersonalizationProvider.js +57 -53
- package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
- package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/index.js +5 -5
- package/dist/v2/personalization/adapters/index.js.map +1 -1
- package/dist/v2/personalization/capabilities/favorites.js +39 -62
- package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
- package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/v2/personalization/capabilities/gridPreferences.d.ts +100 -0
- package/dist/v2/personalization/capabilities/gridPreferences.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/gridPreferences.js +210 -0
- package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -0
- package/dist/v2/personalization/capabilities/index.d.ts +6 -0
- package/dist/v2/personalization/capabilities/index.d.ts.map +1 -1
- package/dist/v2/personalization/capabilities/index.js +23 -10
- package/dist/v2/personalization/capabilities/index.js.map +1 -1
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
- package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.js +81 -182
- package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/v2/personalization/index.d.ts +34 -0
- package/dist/v2/personalization/index.d.ts.map +1 -1
- package/dist/v2/personalization/index.js +41 -21
- package/dist/v2/personalization/index.js.map +1 -1
- package/dist/v2/personalization/personalizationContext.js +10 -12
- package/dist/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/v2/personalization/schema.js +8 -9
- package/dist/v2/personalization/schema.js.map +1 -1
- package/dist/v2/referentiel/ReferentielProvider.js +31 -45
- package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/v2/referentiel/index.js +11 -13
- package/dist/v2/referentiel/index.js.map +1 -1
- package/dist/v2/referentiel/types.d.ts +105 -0
- package/dist/v2/referentiel/types.d.ts.map +1 -0
- package/dist/v2/referentiel/types.js +6 -0
- package/dist/v2/referentiel/types.js.map +1 -0
- package/dist/v2/referentiel/useReferentielClient.js +13 -16
- package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
- package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.js +63 -120
- package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
- package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.js +40 -95
- package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/v2/theme/_brand.js +12 -26
- package/dist/v2/theme/_brand.js.map +1 -1
- package/dist/v2/theme/_brandSecondary.js +12 -26
- package/dist/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/v2/theme/createPortnetTheme.js +41 -49
- package/dist/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/v2/theme/cssVariables.d.ts +3 -3
- package/dist/v2/theme/cssVariables.d.ts.map +1 -1
- package/dist/v2/theme/cssVariables.js +65 -70
- package/dist/v2/theme/cssVariables.js.map +1 -1
- package/dist/v2/theme/index.js +10 -10
- package/dist/v2/theme/index.js.map +1 -1
- package/dist/v2/tokens/breakpoints.js +16 -16
- package/dist/v2/tokens/breakpoints.js.map +1 -1
- package/dist/v2/tokens/chart.d.ts +103 -0
- package/dist/v2/tokens/chart.d.ts.map +1 -0
- package/dist/v2/tokens/chart.js +270 -0
- package/dist/v2/tokens/chart.js.map +1 -0
- package/dist/v2/tokens/colors.js +24 -24
- package/dist/v2/tokens/colors.js.map +1 -1
- package/dist/v2/tokens/density.d.ts +104 -0
- package/dist/v2/tokens/density.d.ts.map +1 -1
- package/dist/v2/tokens/density.js +67 -12
- package/dist/v2/tokens/density.js.map +1 -1
- package/dist/v2/tokens/index.d.ts +50 -1
- package/dist/v2/tokens/index.d.ts.map +1 -1
- package/dist/v2/tokens/index.js +116 -68
- package/dist/v2/tokens/index.js.map +1 -1
- package/dist/v2/tokens/motion.js +16 -22
- package/dist/v2/tokens/motion.js.map +1 -1
- package/dist/v2/tokens/radius.js +3 -3
- package/dist/v2/tokens/radius.js.map +1 -1
- package/dist/v2/tokens/shadows.js +8 -8
- package/dist/v2/tokens/shadows.js.map +1 -1
- package/dist/v2/tokens/spacing.js +4 -4
- package/dist/v2/tokens/spacing.js.map +1 -1
- package/dist/v2/tokens/state.js +3 -3
- package/dist/v2/tokens/state.js.map +1 -1
- package/dist/v2/tokens/statusPalette.js +21 -23
- package/dist/v2/tokens/statusPalette.js.map +1 -1
- package/dist/v2/tokens/tokens.json +6 -1
- package/dist/v2/tokens/typography.js +15 -15
- package/dist/v2/tokens/typography.js.map +1 -1
- package/dist/v2/tokens/zIndex.js +3 -3
- package/dist/v2/tokens/zIndex.js.map +1 -1
- package/dist/v2/types/datagrid.d.ts +9 -1
- package/dist/v2/types/datagrid.d.ts.map +1 -1
- package/dist/v2/types/datagrid.js.map +1 -1
- package/dist/v2/types/index.js +2 -2
- package/dist/v2/types/index.js.map +1 -1
- package/dist/v2/utils/apiError.js +16 -37
- package/dist/v2/utils/apiError.js.map +1 -1
- package/dist/v2/utils/contrast.js +31 -32
- package/dist/v2/utils/contrast.js.map +1 -1
- package/dist/v2/utils/cx.js +7 -27
- package/dist/v2/utils/cx.js.map +1 -1
- package/dist/v2/utils/fileDownload.js +25 -28
- package/dist/v2/utils/fileDownload.js.map +1 -1
- package/dist/v2/utils/fileValidation.d.ts +116 -0
- package/dist/v2/utils/fileValidation.d.ts.map +1 -0
- package/dist/v2/utils/fileValidation.js +220 -0
- package/dist/v2/utils/fileValidation.js.map +1 -0
- package/dist/v2/utils/fmtDate.d.ts +103 -0
- package/dist/v2/utils/fmtDate.d.ts.map +1 -0
- package/dist/v2/utils/fmtDate.js +119 -0
- package/dist/v2/utils/fmtDate.js.map +1 -0
- package/dist/v2/utils/fmtMoney.d.ts +3 -3
- package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
- package/dist/v2/utils/fmtMoney.js +9 -11
- package/dist/v2/utils/fmtMoney.js.map +1 -1
- package/dist/v2/utils/formikErrors.d.ts +67 -0
- package/dist/v2/utils/formikErrors.d.ts.map +1 -0
- package/dist/v2/utils/formikErrors.js +85 -0
- package/dist/v2/utils/formikErrors.js.map +1 -0
- package/dist/v2/utils/index.d.ts +5 -0
- package/dist/v2/utils/index.d.ts.map +1 -1
- package/dist/v2/utils/index.js +67 -18
- package/dist/v2/utils/index.js.map +1 -1
- package/dist/v2/utils/mergeLabels.js +9 -14
- package/dist/v2/utils/mergeLabels.js.map +1 -1
- package/dist/v2/utils/networkStatus.js +14 -14
- package/dist/v2/utils/networkStatus.js.map +1 -1
- package/package.json +26 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormikSelect.js","names":["React","useField","useFormikContext","Field","Select","FormikDisplay","labelFromValue","sameOptionValue","jsx","_jsx","defaultGetOptionValue","opt","_typeof","rec","undefined","defaultGetOptionLabel","String","FormikSelect","_ref","_field$value","name","label","required","hint","_ref$options","options","_ref$getOptionValue","getOptionValue","_ref$getOptionLabel","getOptionLabel","_ref$loading","loading","_ref$disabled","disabled","_ref$readOnly","readOnly","mono","placeholder","htmlFor","onSelectionChange","rest","_objectWithoutProperties","_excluded","_useField","_useField2","_slicedToArray","field","meta","_useFormikContext","setFieldValue","setFieldTouched","hasError","Boolean","touched","error","v2Options","map","raw","value","__raw","handleChange","e","next","target","found","find","o","picked","resolvedPlaceholder","_objectSpread","format","match","children","onChange","onBlur"],"sources":["../../../../src/lib/v2/patterns/FormikSelect.tsx"],"sourcesContent":["/**\r\n * FormikSelect — bridge between Formik state and v2.Field + v2.Select.\r\n *\r\n * Charter §03 · R-Sel.1 → R-Sel.5. Peer dependency: formik >= 2.x.\r\n *\r\n * Use for short / medium option lists. For large referential lists that\r\n * need free-text filtering, prefer FormikCombobox, or pass `searchThreshold`\r\n * straight through to the underlying v2.Select.\r\n *\r\n * Maps caller-supplied raw options to v2.Select's {value, label} shape and\r\n * exposes onSelectionChange(rawOption) for consumers that need cross-field\r\n * side effects on pick.\r\n *\r\n * <FormikSelect\r\n * name=\"bureau\"\r\n * label=\"Bureau douanier\"\r\n * options={bureaux}\r\n * getOptionValue={(b) => b.id}\r\n * getOptionLabel={(b) => b.libelle}\r\n * />\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { useField, useFormikContext } from \"formik\";\r\nimport Field from \"../components/Field\";\r\nimport Select from \"../components/Select\";\r\nimport FormikDisplay from \"../components/FormikDisplay\";\r\nimport { labelFromValue, sameOptionValue } from \"../components/Select\";\r\nimport type {\r\n SelectOptionValue,\r\n SelectProps,\r\n SelectValue,\r\n SelectChangeLike,\r\n} from \"../components/Select\";\r\n\r\nfunction defaultGetOptionValue(opt: unknown): SelectOptionValue {\r\n if (opt == null || typeof opt !== \"object\") return opt as SelectOptionValue;\r\n const rec = opt as Record<string, unknown>;\r\n if (rec[\"value\"] !== undefined && rec[\"value\"] !== null) return rec[\"value\"] as SelectOptionValue;\r\n if (rec[\"id\"] !== undefined && rec[\"id\"] !== null) return rec[\"id\"] as SelectOptionValue;\r\n // Unreachable for well-formed options: an object exposing neither value nor\r\n // id can never be a valid Select value/key, so collapse to empty selection.\r\n return \"\";\r\n}\r\n\r\nfunction defaultGetOptionLabel(opt: unknown): string {\r\n if (opt == null) return \"\";\r\n if (typeof opt !== \"object\") return String(opt);\r\n const rec = opt as Record<string, unknown>;\r\n if (rec[\"description\"]) return String(rec[\"description\"]);\r\n if (rec[\"label\"]) return String(rec[\"label\"]);\r\n if (rec[\"code\"]) return String(rec[\"code\"]);\r\n return String(opt);\r\n}\r\n\r\nexport interface FormikSelectProps<TOption = unknown>\r\n extends Omit<\r\n SelectProps,\r\n | \"value\"\r\n | \"onChange\"\r\n | \"onBlur\"\r\n | \"options\"\r\n | \"disabled\"\r\n | \"placeholder\"\r\n | \"label\"\r\n | \"required\"\r\n | \"error\"\r\n // SelectProps carries its own loosely-typed `ref` (Ref<unknown>, likely\r\n // inherited from its underlying MUI base) that isn't the real ref for\r\n // this wrapper. Excluding it here stops it leaking into ...rest below\r\n // and colliding with <Select>'s real RefAttributes<HTMLInputElement>.\r\n | \"ref\"\r\n > {\r\n name: string;\r\n label?: React.ReactNode | undefined;\r\n required?: boolean | undefined;\r\n hint?: React.ReactNode | undefined;\r\n options?: TOption[] | undefined;\r\n getOptionValue?: ((opt: TOption) => SelectOptionValue) | undefined;\r\n getOptionLabel?: ((opt: TOption) => React.ReactNode) | undefined;\r\n loading?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n /**\r\n * Render the RESOLVED OPTION LABEL as read-only text via FormikDisplay,\r\n * instead of a Select.\r\n *\r\n * Resolution matters here in a way it does not for FormikInput: the Formik\r\n * value is whatever `getOptionValue` produced — often a code, sometimes a\r\n * whole referentiel object — and printing it raw would show\r\n * \"DOMAIN_ACTIVITE_1\" where the user expects \"Domaine médical\". So the value is\r\n * matched back against `options` and `getOptionLabel` supplies the text.\r\n *\r\n * Matching goes through the same `sameOptionValue` the Select itself uses, so\r\n * a value seeded from an API payload still matches a separately-fetched\r\n * option (structural comparison, not reference identity). When nothing\r\n * matches, `labelFromValue` derives something readable from the value rather\r\n * than showing a code.\r\n *\r\n * `disabled` wins when both are passed — same rule as FormikInput.\r\n */\r\n readOnly?: boolean | undefined;\r\n /** Tabular-nums monospace in read-only mode. */\r\n mono?: boolean | undefined;\r\n placeholder?: string | undefined;\r\n htmlFor?: string | undefined;\r\n onSelectionChange?: ((picked: TOption | null) => void) | undefined;\r\n}\r\n\r\nconst FormikSelect = <TOption,>({\r\n name,\r\n label,\r\n required,\r\n hint,\r\n options = [],\r\n getOptionValue = defaultGetOptionValue,\r\n getOptionLabel = defaultGetOptionLabel,\r\n loading = false,\r\n disabled = false,\r\n readOnly = false,\r\n mono,\r\n placeholder,\r\n htmlFor,\r\n onSelectionChange,\r\n ...rest\r\n}: FormikSelectProps<TOption>) => {\r\n const [field, meta] = useField<SelectValue>(name);\r\n const { setFieldValue, setFieldTouched } = useFormikContext();\r\n const hasError = Boolean(meta.touched && meta.error);\r\n\r\n const v2Options = options.map(\r\n (opt): string | { value: SelectOptionValue; label: React.ReactNode; __raw: TOption } => {\r\n const raw: unknown = opt;\r\n if (raw == null || typeof raw !== \"object\") return raw as string;\r\n return {\r\n value: getOptionValue(opt),\r\n label: getOptionLabel(opt),\r\n __raw: opt,\r\n };\r\n },\r\n );\r\n\r\n const handleChange = (e: SelectChangeLike) => {\r\n const next = e && e.target ? e.target.value : e;\r\n setFieldValue(name, next === \"\" ? null : next);\r\n setFieldTouched(name, true, false);\r\n if (typeof onSelectionChange === \"function\") {\r\n const found = v2Options.find(\r\n (o) => typeof o === \"object\" && o !== null && o.value === next,\r\n );\r\n const picked = found && typeof found === \"object\" ? found.__raw : null;\r\n onSelectionChange(picked);\r\n }\r\n };\r\n\r\n const resolvedPlaceholder = loading ? \"Chargement…\" : placeholder;\r\n\r\n /* Lecture seule : on résout le libellé de l'option avant de déléguer, sinon\r\n * FormikDisplay afficherait la VALEUR brute (un code, ou un objet dont il ne\r\n * lirait que `.description`). */\r\n if (readOnly && !disabled) {\r\n return (\r\n <FormikDisplay\r\n name={name}\r\n label={label}\r\n {...(hint !== undefined ? { hint } : {})}\r\n {...(mono !== undefined ? { mono } : {})}\r\n format={(raw) => {\r\n const match = options.find((opt) =>\r\n sameOptionValue(getOptionValue(opt), raw),\r\n );\r\n if (match !== undefined) return getOptionLabel(match);\r\n return labelFromValue(raw);\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <Field\r\n label={label}\r\n error={hasError ? meta.error : null}\r\n hint={!hasError ? hint : undefined}\r\n htmlFor={htmlFor || name}\r\n disabled={disabled}\r\n {...(required !== undefined ? { required } : {})}\r\n >\r\n <Select\r\n value={field.value ?? \"\"}\r\n onChange={handleChange}\r\n onBlur={field.onBlur}\r\n options={v2Options}\r\n disabled={Boolean(disabled || loading)}\r\n {...rest}\r\n {...(resolvedPlaceholder !== undefined ? { placeholder: resolvedPlaceholder } : {})}\r\n />\r\n </Field>\r\n );\r\n};\r\n\r\nexport default FormikSelect;\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FormikSelect.js","names":["React","useField","useFormikContext","Field","Select","FormikDisplay","labelFromValue","sameOptionValue","jsx","_jsx","defaultGetOptionValue","opt","rec","undefined","defaultGetOptionLabel","String","FormikSelect","name","label","required","hint","options","getOptionValue","getOptionLabel","loading","disabled","readOnly","mono","placeholder","htmlFor","width","onSelectionChange","rest","field","meta","setFieldValue","setFieldTouched","hasError","Boolean","touched","error","v2Options","map","raw","value","__raw","handleChange","e","next","target","found","find","o","picked","resolvedPlaceholder","format","match","children","onChange","onBlur"],"sources":["../../../../src/lib/v2/patterns/FormikSelect.tsx"],"sourcesContent":["/**\r\n * FormikSelect — bridge between Formik state and v2.Field + v2.Select.\r\n *\r\n * Charter §03 · R-Sel.1 → R-Sel.5. Peer dependency: formik >= 2.x.\r\n *\r\n * Use for short / medium option lists. For large referential lists that\r\n * need free-text filtering, prefer FormikCombobox, or pass `searchThreshold`\r\n * straight through to the underlying v2.Select.\r\n *\r\n * Maps caller-supplied raw options to v2.Select's {value, label} shape and\r\n * exposes onSelectionChange(rawOption) for consumers that need cross-field\r\n * side effects on pick.\r\n *\r\n * <FormikSelect\r\n * name=\"bureau\"\r\n * label=\"Bureau douanier\"\r\n * options={bureaux}\r\n * getOptionValue={(b) => b.id}\r\n * getOptionLabel={(b) => b.libelle}\r\n * />\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { useField, useFormikContext } from \"formik\";\r\nimport Field from \"../components/Field\";\r\nimport Select from \"../components/Select\";\r\nimport FormikDisplay from \"../components/FormikDisplay\";\r\nimport { labelFromValue, sameOptionValue } from \"../components/Select\";\r\nimport type { FieldWidth } from \"../components/Field\";\r\nimport type {\r\n SelectOptionValue,\r\n SelectProps,\r\n SelectValue,\r\n SelectChangeLike,\r\n} from \"../components/Select\";\r\n\r\nfunction defaultGetOptionValue(opt: unknown): SelectOptionValue {\r\n if (opt == null || typeof opt !== \"object\") return opt as SelectOptionValue;\r\n const rec = opt as Record<string, unknown>;\r\n if (rec[\"value\"] !== undefined && rec[\"value\"] !== null) return rec[\"value\"] as SelectOptionValue;\r\n if (rec[\"id\"] !== undefined && rec[\"id\"] !== null) return rec[\"id\"] as SelectOptionValue;\r\n // Unreachable for well-formed options: an object exposing neither value nor\r\n // id can never be a valid Select value/key, so collapse to empty selection.\r\n return \"\";\r\n}\r\n\r\nfunction defaultGetOptionLabel(opt: unknown): string {\r\n if (opt == null) return \"\";\r\n if (typeof opt !== \"object\") return String(opt);\r\n const rec = opt as Record<string, unknown>;\r\n if (rec[\"description\"]) return String(rec[\"description\"]);\r\n if (rec[\"label\"]) return String(rec[\"label\"]);\r\n if (rec[\"code\"]) return String(rec[\"code\"]);\r\n return String(opt);\r\n}\r\n\r\nexport interface FormikSelectProps<TOption = unknown>\r\n extends Omit<\r\n SelectProps,\r\n | \"value\"\r\n | \"onChange\"\r\n | \"onBlur\"\r\n | \"options\"\r\n | \"disabled\"\r\n | \"placeholder\"\r\n | \"label\"\r\n | \"required\"\r\n | \"error\"\r\n // SelectProps carries its own loosely-typed `ref` (Ref<unknown>, likely\r\n // inherited from its underlying MUI base) that isn't the real ref for\r\n // this wrapper. Excluding it here stops it leaking into ...rest below\r\n // and colliding with <Select>'s real RefAttributes<HTMLInputElement>.\r\n | \"ref\"\r\n > {\r\n name: string;\r\n label?: React.ReactNode | undefined;\r\n required?: boolean | undefined;\r\n hint?: React.ReactNode | undefined;\r\n options?: TOption[] | undefined;\r\n getOptionValue?: ((opt: TOption) => SelectOptionValue) | undefined;\r\n getOptionLabel?: ((opt: TOption) => React.ReactNode) | undefined;\r\n loading?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n /**\r\n * Render the RESOLVED OPTION LABEL as read-only text via FormikDisplay,\r\n * instead of a Select.\r\n *\r\n * Resolution matters here in a way it does not for FormikInput: the Formik\r\n * value is whatever `getOptionValue` produced — often a code, sometimes a\r\n * whole referentiel object — and printing it raw would show\r\n * \"DOMAIN_ACTIVITE_1\" where the user expects \"Domaine médical\". So the value is\r\n * matched back against `options` and `getOptionLabel` supplies the text.\r\n *\r\n * Matching goes through the same `sameOptionValue` the Select itself uses, so\r\n * a value seeded from an API payload still matches a separately-fetched\r\n * option (structural comparison, not reference identity). When nothing\r\n * matches, `labelFromValue` derives something readable from the value rather\r\n * than showing a code.\r\n *\r\n * `disabled` wins when both are passed — same rule as FormikInput.\r\n */\r\n readOnly?: boolean | undefined;\r\n /** Tabular-nums monospace in read-only mode. */\r\n mono?: boolean | undefined;\r\n placeholder?: string | undefined;\r\n htmlFor?: string | undefined;\r\n /**\r\n * Gabarit de largeur semantique (G-H). Sur un select, le gabarit se choisit\r\n * d'apres la longueur des LIBELLES d'options, pas d'une contrainte de\r\n * saisie : le standard range les « simple dropdowns » en `m` et les « long\r\n * dropdowns » en `l`. Ne s'applique pas en mode `readOnly`.\r\n */\r\n width?: FieldWidth | undefined;\r\n onSelectionChange?: ((picked: TOption | null) => void) | undefined;\r\n}\r\n\r\nconst FormikSelect = <TOption,>({\r\n name,\r\n label,\r\n required,\r\n hint,\r\n options = [],\r\n getOptionValue = defaultGetOptionValue,\r\n getOptionLabel = defaultGetOptionLabel,\r\n loading = false,\r\n disabled = false,\r\n readOnly = false,\r\n mono,\r\n placeholder,\r\n htmlFor,\r\n width,\r\n onSelectionChange,\r\n ...rest\r\n}: FormikSelectProps<TOption>) => {\r\n const [field, meta] = useField<SelectValue>(name);\r\n const { setFieldValue, setFieldTouched } = useFormikContext();\r\n const hasError = Boolean(meta.touched && meta.error);\r\n\r\n const v2Options = options.map(\r\n (opt): string | { value: SelectOptionValue; label: React.ReactNode; __raw: TOption } => {\r\n const raw: unknown = opt;\r\n if (raw == null || typeof raw !== \"object\") return raw as string;\r\n return {\r\n value: getOptionValue(opt),\r\n label: getOptionLabel(opt),\r\n __raw: opt,\r\n };\r\n },\r\n );\r\n\r\n const handleChange = (e: SelectChangeLike) => {\r\n const next = e && e.target ? e.target.value : e;\r\n setFieldValue(name, next === \"\" ? null : next);\r\n setFieldTouched(name, true, false);\r\n if (typeof onSelectionChange === \"function\") {\r\n const found = v2Options.find(\r\n (o) => typeof o === \"object\" && o !== null && o.value === next,\r\n );\r\n const picked = found && typeof found === \"object\" ? found.__raw : null;\r\n onSelectionChange(picked);\r\n }\r\n };\r\n\r\n const resolvedPlaceholder = loading ? \"Chargement…\" : placeholder;\r\n\r\n /* Lecture seule : on résout le libellé de l'option avant de déléguer, sinon\r\n * FormikDisplay afficherait la VALEUR brute (un code, ou un objet dont il ne\r\n * lirait que `.description`). */\r\n if (readOnly && !disabled) {\r\n return (\r\n <FormikDisplay\r\n name={name}\r\n label={label}\r\n {...(hint !== undefined ? { hint } : {})}\r\n {...(mono !== undefined ? { mono } : {})}\r\n format={(raw) => {\r\n const match = options.find((opt) =>\r\n sameOptionValue(getOptionValue(opt), raw),\r\n );\r\n if (match !== undefined) return getOptionLabel(match);\r\n return labelFromValue(raw);\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <Field\r\n label={label}\r\n error={hasError ? meta.error : null}\r\n hint={!hasError ? hint : undefined}\r\n htmlFor={htmlFor || name}\r\n disabled={disabled}\r\n {...(required !== undefined ? { required } : {})}\r\n {...(width !== undefined ? { width } : {})}\r\n >\r\n <Select\r\n value={field.value ?? \"\"}\r\n onChange={handleChange}\r\n onBlur={field.onBlur}\r\n options={v2Options}\r\n disabled={Boolean(disabled || loading)}\r\n {...rest}\r\n {...(resolvedPlaceholder !== undefined ? { placeholder: resolvedPlaceholder } : {})}\r\n />\r\n </Field>\r\n );\r\n};\r\n\r\nexport default FormikSelect;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
var _excluded = ["name", "label", "required", "rows", "htmlFor", "hint", "disabled"];
|
|
3
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
5
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
8
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
9
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
12
|
-
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
13
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
|
-
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
15
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
16
1
|
/**
|
|
17
2
|
* FormikTextarea — bridge between Formik state and v2.Field + v2.Textarea.
|
|
18
3
|
*
|
|
@@ -37,40 +22,42 @@ import { useField } from "formik";
|
|
|
37
22
|
import Field from "../components/Field";
|
|
38
23
|
import Textarea from "../components/Textarea";
|
|
39
24
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
meta = _useField2[1];
|
|
55
|
-
var hasError = Boolean(meta.touched && meta.error);
|
|
56
|
-
return /*#__PURE__*/_jsx(Field, _objectSpread(_objectSpread(_objectSpread({
|
|
25
|
+
const FormikTextarea = ({
|
|
26
|
+
name,
|
|
27
|
+
label,
|
|
28
|
+
required,
|
|
29
|
+
rows = 4,
|
|
30
|
+
htmlFor,
|
|
31
|
+
hint,
|
|
32
|
+
disabled,
|
|
33
|
+
width,
|
|
34
|
+
...rest
|
|
35
|
+
}) => {
|
|
36
|
+
const [field, meta] = useField(name);
|
|
37
|
+
const hasError = Boolean(meta.touched && meta.error);
|
|
38
|
+
return /*#__PURE__*/_jsx(Field, {
|
|
57
39
|
label: label,
|
|
58
40
|
error: hasError ? meta.error : null,
|
|
59
41
|
hint: !hasError ? hint : undefined,
|
|
60
|
-
htmlFor: htmlFor || name
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
disabled
|
|
65
|
-
|
|
66
|
-
|
|
42
|
+
htmlFor: htmlFor || name,
|
|
43
|
+
...(required !== undefined ? {
|
|
44
|
+
required
|
|
45
|
+
} : {}),
|
|
46
|
+
...(disabled !== undefined ? {
|
|
47
|
+
disabled
|
|
48
|
+
} : {}),
|
|
49
|
+
...(width !== undefined ? {
|
|
50
|
+
width
|
|
51
|
+
} : {}),
|
|
52
|
+
children: /*#__PURE__*/_jsx(Textarea, {
|
|
67
53
|
name: field.name,
|
|
68
|
-
value:
|
|
54
|
+
value: field.value ?? "",
|
|
69
55
|
onChange: field.onChange,
|
|
70
56
|
onBlur: field.onBlur,
|
|
71
|
-
rows: rows
|
|
72
|
-
|
|
73
|
-
|
|
57
|
+
rows: rows,
|
|
58
|
+
...rest
|
|
59
|
+
})
|
|
60
|
+
});
|
|
74
61
|
};
|
|
75
62
|
export default FormikTextarea;
|
|
76
63
|
//# sourceMappingURL=FormikTextarea.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormikTextarea.js","names":["React","useField","Field","Textarea","jsx","_jsx","FormikTextarea","
|
|
1
|
+
{"version":3,"file":"FormikTextarea.js","names":["React","useField","Field","Textarea","jsx","_jsx","FormikTextarea","name","label","required","rows","htmlFor","hint","disabled","width","rest","field","meta","hasError","Boolean","touched","error","undefined","children","value","onChange","onBlur"],"sources":["../../../../src/lib/v2/patterns/FormikTextarea.tsx"],"sourcesContent":["/**\r\n * FormikTextarea — bridge between Formik state and v2.Field + v2.Textarea.\r\n *\r\n * Default rows = 4 (matches the legacy Pui multiline default\r\n * across ms-ti-fe / addpe-fe usage).\r\n *\r\n * Usage:\r\n *\r\n * import { FormikTextarea } from \"@portnet/ui/lib/v2\";\r\n *\r\n * <FormikTextarea\r\n * name=\"observation\"\r\n * label=\"Observations\"\r\n * rows={4}\r\n * />\r\n *\r\n * Charter §03 / R-I.1 → R-I.6. Peer dependency: `formik` >= 2.x.\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { useField } from \"formik\";\r\nimport Field from \"../components/Field\";\r\nimport Textarea from \"../components/Textarea\";\r\nimport type { FieldWidth } from \"../components/Field\";\r\nimport type { TextareaProps } from \"../components/Textarea\";\r\n\r\nexport interface FormikTextareaProps\r\n extends Omit<\r\n TextareaProps,\r\n \"name\" | \"value\" | \"onChange\" | \"onBlur\" | \"label\" | \"required\" | \"disabled\" | \"error\"\r\n > {\r\n name: string;\r\n label?: React.ReactNode | undefined;\r\n required?: boolean | undefined;\r\n disabled?: boolean | undefined;\r\n htmlFor?: string | undefined;\r\n hint?: React.ReactNode | undefined;\r\n /**\r\n * Gabarit de largeur semantique (G-H). Sur une zone de texte, le standard\r\n * range les descriptions et les editeurs en `xl` (pleine largeur du bloc) :\r\n * c'est donc rarement autre chose, mais la prop existe pour les cas ou la\r\n * zone est courte et bornee.\r\n */\r\n width?: FieldWidth | undefined;\r\n}\r\n\r\nconst FormikTextarea = ({\r\n name,\r\n label,\r\n required,\r\n rows = 4,\r\n htmlFor,\r\n hint,\r\n disabled,\r\n width,\r\n ...rest\r\n}: FormikTextareaProps) => {\r\n const [field, meta] = useField<string>(name);\r\n const hasError = Boolean(meta.touched && meta.error);\r\n\r\n return (\r\n <Field\r\n label={label}\r\n error={hasError ? meta.error : null}\r\n hint={!hasError ? hint : undefined}\r\n htmlFor={htmlFor || name}\r\n {...(required !== undefined ? { required } : {})}\r\n {...(disabled !== undefined ? { disabled } : {})}\r\n {...(width !== undefined ? { width } : {})}\r\n >\r\n <Textarea\r\n name={field.name}\r\n value={field.value ?? \"\"}\r\n onChange={field.onChange}\r\n onBlur={field.onBlur}\r\n rows={rows}\r\n {...rest}\r\n />\r\n </Field>\r\n );\r\n};\r\n\r\nexport default FormikTextarea;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,QAAQ,QAAQ,QAAQ;AACjC,OAAOC,KAAK,MAAM,qBAAqB;AACvC,OAAOC,QAAQ,MAAM,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAwB9C,MAAMC,cAAc,GAAGA,CAAC;EACtBC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC,IAAI,GAAG,CAAC;EACRC,OAAO;EACPC,IAAI;EACJC,QAAQ;EACRC,KAAK;EACL,GAAGC;AACgB,CAAC,KAAK;EACzB,MAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGhB,QAAQ,CAASM,IAAI,CAAC;EAC5C,MAAMW,QAAQ,GAAGC,OAAO,CAACF,IAAI,CAACG,OAAO,IAAIH,IAAI,CAACI,KAAK,CAAC;EAEpD,oBACEhB,IAAA,CAACH,KAAK;IACJM,KAAK,EAAEA,KAAM;IACba,KAAK,EAAEH,QAAQ,GAAGD,IAAI,CAACI,KAAK,GAAG,IAAK;IACpCT,IAAI,EAAE,CAACM,QAAQ,GAAGN,IAAI,GAAGU,SAAU;IACnCX,OAAO,EAAEA,OAAO,IAAIJ,IAAK;IAAA,IACpBE,QAAQ,KAAKa,SAAS,GAAG;MAAEb;IAAS,CAAC,GAAG,CAAC,CAAC;IAAA,IAC1CI,QAAQ,KAAKS,SAAS,GAAG;MAAET;IAAS,CAAC,GAAG,CAAC,CAAC;IAAA,IAC1CC,KAAK,KAAKQ,SAAS,GAAG;MAAER;IAAM,CAAC,GAAG,CAAC,CAAC;IAAAS,QAAA,eAEzClB,IAAA,CAACF,QAAQ;MACPI,IAAI,EAAES,KAAK,CAACT,IAAK;MACjBiB,KAAK,EAAER,KAAK,CAACQ,KAAK,IAAI,EAAG;MACzBC,QAAQ,EAAET,KAAK,CAACS,QAAS;MACzBC,MAAM,EAAEV,KAAK,CAACU,MAAO;MACrBhB,IAAI,EAAEA,IAAK;MAAA,GACPK;IAAI,CACT;EAAC,CACG,CAAC;AAEZ,CAAC;AAED,eAAeT,cAAc","ignoreList":[]}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
5
|
-
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
6
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
1
|
import * as React from "react";
|
|
8
2
|
import Modal from "../components/Modal";
|
|
9
3
|
import { mergeLabels } from "../utils/mergeLabels";
|
|
@@ -19,15 +13,16 @@ import { mergeLabels } from "../utils/mergeLabels";
|
|
|
19
13
|
*/
|
|
20
14
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
21
15
|
function isFocusOnTextEntry() {
|
|
22
|
-
|
|
16
|
+
const el = typeof document !== "undefined" ? document.activeElement : null;
|
|
23
17
|
if (!el) return false;
|
|
24
|
-
|
|
18
|
+
const tag = el.tagName;
|
|
25
19
|
if (tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT") return true;
|
|
26
20
|
if (el instanceof HTMLElement && el.isContentEditable) return true;
|
|
27
21
|
return false;
|
|
28
22
|
}
|
|
29
|
-
function ShortcutKey(
|
|
30
|
-
|
|
23
|
+
function ShortcutKey({
|
|
24
|
+
children
|
|
25
|
+
}) {
|
|
31
26
|
return /*#__PURE__*/_jsx("kbd", {
|
|
32
27
|
style: {
|
|
33
28
|
display: "inline-block",
|
|
@@ -47,7 +42,7 @@ function ShortcutKey(_ref) {
|
|
|
47
42
|
children: children
|
|
48
43
|
});
|
|
49
44
|
}
|
|
50
|
-
|
|
45
|
+
const SHORTCUT_ROW_SX = {
|
|
51
46
|
display: "grid",
|
|
52
47
|
gridTemplateColumns: "auto 1fr",
|
|
53
48
|
gap: "var(--s-4)",
|
|
@@ -55,13 +50,13 @@ var SHORTCUT_ROW_SX = {
|
|
|
55
50
|
padding: "var(--s-2) 0",
|
|
56
51
|
borderBottom: "1px solid var(--border-subtle, var(--border))"
|
|
57
52
|
};
|
|
58
|
-
|
|
53
|
+
const SHORTCUT_KEYS_SX = {
|
|
59
54
|
display: "flex",
|
|
60
55
|
gap: "var(--s-1)",
|
|
61
56
|
alignItems: "center",
|
|
62
57
|
flexWrap: "wrap"
|
|
63
58
|
};
|
|
64
|
-
|
|
59
|
+
const HELP_FOOTNOTE_SX = {
|
|
65
60
|
marginTop: "var(--s-4)",
|
|
66
61
|
paddingTop: "var(--s-3)",
|
|
67
62
|
borderTop: "1px solid var(--border)",
|
|
@@ -69,7 +64,7 @@ var HELP_FOOTNOTE_SX = {
|
|
|
69
64
|
color: "var(--fg-subtle)",
|
|
70
65
|
lineHeight: 1.5
|
|
71
66
|
};
|
|
72
|
-
|
|
67
|
+
const DEFAULT_LABELS = Object.freeze({
|
|
73
68
|
/* Footnote rendered below the shortcut list. Split into two parts so the
|
|
74
69
|
* keycap can be embedded in the middle without forcing the i18n string to
|
|
75
70
|
* carry HTML tags. */
|
|
@@ -107,19 +102,33 @@ var DEFAULT_LABELS = Object.freeze({
|
|
|
107
102
|
* reachable) + R-M.* (modal focus trap inherited from v2.Modal).
|
|
108
103
|
*/
|
|
109
104
|
|
|
110
|
-
function KeyboardShortcutsHelp(
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
105
|
+
function KeyboardShortcutsHelp({
|
|
106
|
+
shortcuts = [],
|
|
107
|
+
title = "Raccourcis clavier",
|
|
108
|
+
labels,
|
|
109
|
+
open,
|
|
110
|
+
onOpenChange
|
|
111
|
+
}) {
|
|
112
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);
|
|
113
|
+
const isControlled = open !== undefined;
|
|
114
|
+
const isOpen = isControlled ? open : uncontrolledOpen;
|
|
115
|
+
const L = mergeLabels(DEFAULT_LABELS, labels);
|
|
116
|
+
|
|
117
|
+
/* Refs so the "?" listener can stay on a `[]` dependency list — it must not
|
|
118
|
+
* be torn down and re-added on every open/close, and in controlled mode there
|
|
119
|
+
* is no functional-update form to fall back on. */
|
|
120
|
+
const isOpenRef = React.useRef(isOpen);
|
|
121
|
+
isOpenRef.current = isOpen;
|
|
122
|
+
const onOpenChangeRef = React.useRef(onOpenChange);
|
|
123
|
+
onOpenChangeRef.current = onOpenChange;
|
|
124
|
+
const isControlledRef = React.useRef(isControlled);
|
|
125
|
+
isControlledRef.current = isControlled;
|
|
126
|
+
const requestOpen = React.useCallback(next => {
|
|
127
|
+
if (!isControlledRef.current) setUncontrolledOpen(next);
|
|
128
|
+
onOpenChangeRef.current?.(next);
|
|
129
|
+
}, []);
|
|
130
|
+
React.useEffect(() => {
|
|
131
|
+
const handler = event => {
|
|
123
132
|
// Only react to "?" (Shift+/ on US, AltGr+, on many AZERTY layouts).
|
|
124
133
|
// event.key gives us the resolved character regardless of physical key.
|
|
125
134
|
if (event.key !== "?") return;
|
|
@@ -130,24 +139,18 @@ function KeyboardShortcutsHelp(_ref2) {
|
|
|
130
139
|
// User is typing in a text field — let "?" through.
|
|
131
140
|
if (isFocusOnTextEntry()) return;
|
|
132
141
|
event.preventDefault();
|
|
133
|
-
|
|
134
|
-
return !prev;
|
|
135
|
-
});
|
|
142
|
+
requestOpen(!isOpenRef.current);
|
|
136
143
|
};
|
|
137
144
|
window.addEventListener("keydown", handler);
|
|
138
|
-
return
|
|
139
|
-
|
|
140
|
-
};
|
|
141
|
-
}, []);
|
|
145
|
+
return () => window.removeEventListener("keydown", handler);
|
|
146
|
+
}, [requestOpen]);
|
|
142
147
|
if (!Array.isArray(shortcuts) || shortcuts.length === 0) {
|
|
143
148
|
return null;
|
|
144
149
|
}
|
|
145
150
|
return /*#__PURE__*/_jsxs(Modal, {
|
|
146
151
|
open: isOpen,
|
|
147
152
|
title: title,
|
|
148
|
-
onClose:
|
|
149
|
-
return setIsOpen(false);
|
|
150
|
-
},
|
|
153
|
+
onClose: () => requestOpen(false),
|
|
151
154
|
size: "md",
|
|
152
155
|
children: [/*#__PURE__*/_jsx("dl", {
|
|
153
156
|
style: {
|
|
@@ -155,34 +158,30 @@ function KeyboardShortcutsHelp(_ref2) {
|
|
|
155
158
|
padding: 0
|
|
156
159
|
},
|
|
157
160
|
"aria-label": L.listAriaLabel,
|
|
158
|
-
children: shortcuts.map(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
children:
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
children: sc.description
|
|
183
|
-
})]
|
|
184
|
-
}, i);
|
|
185
|
-
})
|
|
161
|
+
children: shortcuts.map((sc, i) => /*#__PURE__*/_jsxs("div", {
|
|
162
|
+
style: SHORTCUT_ROW_SX,
|
|
163
|
+
children: [/*#__PURE__*/_jsx("dt", {
|
|
164
|
+
style: SHORTCUT_KEYS_SX,
|
|
165
|
+
children: sc.keys.map((k, j) => /*#__PURE__*/_jsxs(React.Fragment, {
|
|
166
|
+
children: [/*#__PURE__*/_jsx(ShortcutKey, {
|
|
167
|
+
children: k
|
|
168
|
+
}), j < sc.keys.length - 1 && /*#__PURE__*/_jsx("span", {
|
|
169
|
+
"aria-hidden": "true",
|
|
170
|
+
style: {
|
|
171
|
+
color: "var(--fg-subtle)",
|
|
172
|
+
fontSize: "var(--text-xs)"
|
|
173
|
+
},
|
|
174
|
+
children: L.keyJoiner
|
|
175
|
+
})]
|
|
176
|
+
}, j))
|
|
177
|
+
}), /*#__PURE__*/_jsx("dd", {
|
|
178
|
+
style: {
|
|
179
|
+
margin: 0,
|
|
180
|
+
fontSize: "var(--text-body)"
|
|
181
|
+
},
|
|
182
|
+
children: sc.description
|
|
183
|
+
})]
|
|
184
|
+
}, i))
|
|
186
185
|
}), /*#__PURE__*/_jsxs("div", {
|
|
187
186
|
style: HELP_FOOTNOTE_SX,
|
|
188
187
|
children: [L.footnoteIntro, " ", /*#__PURE__*/_jsx(ShortcutKey, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyboardShortcutsHelp.js","names":["React","Modal","mergeLabels","jsx","_jsx","jsxs","_jsxs","isFocusOnTextEntry","el","document","activeElement","tag","tagName","HTMLElement","isContentEditable","ShortcutKey","_ref","children","style","display","minWidth","padding","background","border","borderBottomColor","borderRadius","boxShadow","fontFamily","fontSize","textAlign","lineHeight","color","SHORTCUT_ROW_SX","gridTemplateColumns","gap","alignItems","borderBottom","SHORTCUT_KEYS_SX","flexWrap","HELP_FOOTNOTE_SX","marginTop","paddingTop","borderTop","DEFAULT_LABELS","Object","freeze","footnoteIntro","footnoteOutro","listAriaLabel","keyJoiner","KeyboardShortcutsHelp","_ref2","_ref2$shortcuts","shortcuts","_ref2$title","title","labels","_React$useState","useState","_React$useState2","_slicedToArray","isOpen","setIsOpen","L","useEffect","handler","event","key","ctrlKey","metaKey","altKey","preventDefault","prev","window","addEventListener","removeEventListener","Array","isArray","length","open","onClose","size","margin","map","sc","i","keys","k","j","Fragment","description"],"sources":["../../../../src/lib/v2/patterns/KeyboardShortcutsHelp.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Modal from \"../components/Modal\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/* ── Body-only focus guard ────────────────────────────────────────\r\n * The \"?\" key is a printable character. If a user types \"?\" inside an\r\n * Input / Textarea / contentEditable element we must NOT hijack the\r\n * keypress to open the help — they're trying to type a question mark.\r\n *\r\n * BUTTON / A focus is NOT blocking by design: when the user has tabbed\r\n * onto an interactive non-text element, hitting \"?\" makes sense as a\r\n * help affordance (navigation mode, not text-entry mode).\r\n */\r\nfunction isFocusOnTextEntry(): boolean {\r\n const el = typeof document !== \"undefined\" ? document.activeElement : null;\r\n if (!el) return false;\r\n const tag = el.tagName;\r\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") return true;\r\n if (el instanceof HTMLElement && el.isContentEditable) return true;\r\n return false;\r\n}\r\n\r\nfunction ShortcutKey({ children }: { children?: React.ReactNode }) {\r\n return (\r\n <kbd\r\n style={{\r\n display: \"inline-block\",\r\n minWidth: \"1.75em\",\r\n padding: \"0.15em 0.5em\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderBottomColor: \"var(--border-strong, var(--border))\",\r\n borderRadius: \"var(--r-sm)\",\r\n boxShadow: \"inset 0 -1px 0 var(--border)\",\r\n fontFamily: \"var(--font-mono, monospace)\",\r\n fontSize: \"var(--text-sm)\",\r\n textAlign: \"center\",\r\n lineHeight: 1.4,\r\n color: \"var(--fg)\",\r\n }}\r\n >\r\n {children}\r\n </kbd>\r\n );\r\n}\r\n\r\nconst SHORTCUT_ROW_SX: React.CSSProperties = {\r\n display: \"grid\",\r\n gridTemplateColumns: \"auto 1fr\",\r\n gap: \"var(--s-4)\",\r\n alignItems: \"center\",\r\n padding: \"var(--s-2) 0\",\r\n borderBottom: \"1px solid var(--border-subtle, var(--border))\",\r\n};\r\n\r\nconst SHORTCUT_KEYS_SX: React.CSSProperties = {\r\n display: \"flex\",\r\n gap: \"var(--s-1)\",\r\n alignItems: \"center\",\r\n flexWrap: \"wrap\",\r\n};\r\n\r\nconst HELP_FOOTNOTE_SX: React.CSSProperties = {\r\n marginTop: \"var(--s-4)\",\r\n paddingTop: \"var(--s-3)\",\r\n borderTop: \"1px solid var(--border)\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n lineHeight: 1.5,\r\n};\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n /* Footnote rendered below the shortcut list. Split into two parts so the\r\n * keycap can be embedded in the middle without forcing the i18n string to\r\n * carry HTML tags. */\r\n footnoteIntro: \"Astuce : appuyez sur\",\r\n footnoteOutro:\r\n \"à tout moment pour ouvrir ou fermer cette aide. Les raccourcis s'activent uniquement quand votre curseur n'est pas dans un champ de saisie.\",\r\n /* aria-label on the <dl> listing every shortcut. */\r\n listAriaLabel: \"Liste des raccourcis clavier disponibles sur cette page\",\r\n /* Joiner rendered between alternative keys for the same shortcut. */\r\n keyJoiner: \"ou\",\r\n});\r\n\r\n/**\r\n * KeyboardShortcutsHelp — Portnet UI v2\r\n *\r\n * Charter §5.2 SHOULD — discoverable help overlay for page-level keyboard\r\n * shortcuts. Listens globally for \"?\" and opens a v2.Modal listing every\r\n * shortcut as <kbd> elements (WCAG 1.3.1 semantic).\r\n *\r\n * Self-contained: the host page only declares the shortcuts array and renders\r\n * <KeyboardShortcutsHelp shortcuts={…} /> once.\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <KeyboardShortcutsHelp\r\n * title=\"Keyboard shortcuts\"\r\n * labels={{\r\n * footnoteIntro: \"Tip: press\",\r\n * footnoteOutro: \"anytime to toggle this help…\",\r\n * listAriaLabel: \"List of keyboard shortcuts available on this page\",\r\n * keyJoiner: \"or\",\r\n * }}\r\n * shortcuts={…}\r\n * />\r\n *\r\n * Charter §5.2 SHOULD + WCAG 1.3.1 (semantic <kbd>) + 2.1.1 (keyboard\r\n * reachable) + R-M.* (modal focus trap inherited from v2.Modal).\r\n */\r\n\r\nexport interface KeyboardShortcut {\r\n keys: string[];\r\n description: React.ReactNode;\r\n}\r\n\r\nexport interface KeyboardShortcutsHelpLabels {\r\n footnoteIntro?: string | undefined;\r\n footnoteOutro?: string | undefined;\r\n listAriaLabel?: string | undefined;\r\n keyJoiner?: string | undefined;\r\n}\r\n\r\nexport interface KeyboardShortcutsHelpProps {\r\n shortcuts?: KeyboardShortcut[] | undefined;\r\n title?: React.ReactNode | undefined;\r\n labels?: KeyboardShortcutsHelpLabels | undefined;\r\n}\r\n\r\nfunction KeyboardShortcutsHelp({\r\n shortcuts = [],\r\n title = \"Raccourcis clavier\",\r\n labels,\r\n}: KeyboardShortcutsHelpProps) {\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n React.useEffect(() => {\r\n const handler = (event: KeyboardEvent) => {\r\n // Only react to \"?\" (Shift+/ on US, AltGr+, on many AZERTY layouts).\r\n // event.key gives us the resolved character regardless of physical key.\r\n if (event.key !== \"?\") return;\r\n\r\n // Modifier keys (Ctrl, Meta, Alt) reserved for browser / OS shortcuts.\r\n if (event.ctrlKey || event.metaKey || event.altKey) return;\r\n\r\n // User is typing in a text field — let \"?\" through.\r\n if (isFocusOnTextEntry()) return;\r\n\r\n event.preventDefault();\r\n setIsOpen((prev) => !prev);\r\n };\r\n\r\n window.addEventListener(\"keydown\", handler);\r\n return () => window.removeEventListener(\"keydown\", handler);\r\n }, []);\r\n\r\n if (!Array.isArray(shortcuts) || shortcuts.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Modal open={isOpen} title={title} onClose={() => setIsOpen(false)} size=\"md\">\r\n <dl style={{ margin: 0, padding: 0 }} aria-label={L.listAriaLabel}>\r\n {shortcuts.map((sc, i) => (\r\n <div key={i} style={SHORTCUT_ROW_SX}>\r\n <dt style={SHORTCUT_KEYS_SX}>\r\n {sc.keys.map((k, j) => (\r\n <React.Fragment key={j}>\r\n <ShortcutKey>{k}</ShortcutKey>\r\n {j < sc.keys.length - 1 && (\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n color: \"var(--fg-subtle)\",\r\n fontSize: \"var(--text-xs)\",\r\n }}\r\n >\r\n {L.keyJoiner}\r\n </span>\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </dt>\r\n <dd style={{ margin: 0, fontSize: \"var(--text-body)\" }}>\r\n {sc.description}\r\n </dd>\r\n </div>\r\n ))}\r\n </dl>\r\n <div style={HELP_FOOTNOTE_SX}>\r\n {L.footnoteIntro}{\" \"}\r\n <ShortcutKey>?</ShortcutKey>{\" \"}\r\n {L.footnoteOutro}\r\n </div>\r\n </Modal>\r\n );\r\n}\r\n\r\nexport default KeyboardShortcutsHelp;\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"KeyboardShortcutsHelp.js","names":["React","Modal","mergeLabels","jsx","_jsx","jsxs","_jsxs","isFocusOnTextEntry","el","document","activeElement","tag","tagName","HTMLElement","isContentEditable","ShortcutKey","children","style","display","minWidth","padding","background","border","borderBottomColor","borderRadius","boxShadow","fontFamily","fontSize","textAlign","lineHeight","color","SHORTCUT_ROW_SX","gridTemplateColumns","gap","alignItems","borderBottom","SHORTCUT_KEYS_SX","flexWrap","HELP_FOOTNOTE_SX","marginTop","paddingTop","borderTop","DEFAULT_LABELS","Object","freeze","footnoteIntro","footnoteOutro","listAriaLabel","keyJoiner","KeyboardShortcutsHelp","shortcuts","title","labels","open","onOpenChange","uncontrolledOpen","setUncontrolledOpen","useState","isControlled","undefined","isOpen","L","isOpenRef","useRef","current","onOpenChangeRef","isControlledRef","requestOpen","useCallback","next","useEffect","handler","event","key","ctrlKey","metaKey","altKey","preventDefault","window","addEventListener","removeEventListener","Array","isArray","length","onClose","size","margin","map","sc","i","keys","k","j","Fragment","description"],"sources":["../../../../src/lib/v2/patterns/KeyboardShortcutsHelp.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Modal from \"../components/Modal\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/* ── Body-only focus guard ────────────────────────────────────────\r\n * The \"?\" key is a printable character. If a user types \"?\" inside an\r\n * Input / Textarea / contentEditable element we must NOT hijack the\r\n * keypress to open the help — they're trying to type a question mark.\r\n *\r\n * BUTTON / A focus is NOT blocking by design: when the user has tabbed\r\n * onto an interactive non-text element, hitting \"?\" makes sense as a\r\n * help affordance (navigation mode, not text-entry mode).\r\n */\r\nfunction isFocusOnTextEntry(): boolean {\r\n const el = typeof document !== \"undefined\" ? document.activeElement : null;\r\n if (!el) return false;\r\n const tag = el.tagName;\r\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") return true;\r\n if (el instanceof HTMLElement && el.isContentEditable) return true;\r\n return false;\r\n}\r\n\r\nfunction ShortcutKey({ children }: { children?: React.ReactNode }) {\r\n return (\r\n <kbd\r\n style={{\r\n display: \"inline-block\",\r\n minWidth: \"1.75em\",\r\n padding: \"0.15em 0.5em\",\r\n background: \"var(--bg-subtle)\",\r\n border: \"1px solid var(--border)\",\r\n borderBottomColor: \"var(--border-strong, var(--border))\",\r\n borderRadius: \"var(--r-sm)\",\r\n boxShadow: \"inset 0 -1px 0 var(--border)\",\r\n fontFamily: \"var(--font-mono, monospace)\",\r\n fontSize: \"var(--text-sm)\",\r\n textAlign: \"center\",\r\n lineHeight: 1.4,\r\n color: \"var(--fg)\",\r\n }}\r\n >\r\n {children}\r\n </kbd>\r\n );\r\n}\r\n\r\nconst SHORTCUT_ROW_SX: React.CSSProperties = {\r\n display: \"grid\",\r\n gridTemplateColumns: \"auto 1fr\",\r\n gap: \"var(--s-4)\",\r\n alignItems: \"center\",\r\n padding: \"var(--s-2) 0\",\r\n borderBottom: \"1px solid var(--border-subtle, var(--border))\",\r\n};\r\n\r\nconst SHORTCUT_KEYS_SX: React.CSSProperties = {\r\n display: \"flex\",\r\n gap: \"var(--s-1)\",\r\n alignItems: \"center\",\r\n flexWrap: \"wrap\",\r\n};\r\n\r\nconst HELP_FOOTNOTE_SX: React.CSSProperties = {\r\n marginTop: \"var(--s-4)\",\r\n paddingTop: \"var(--s-3)\",\r\n borderTop: \"1px solid var(--border)\",\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n lineHeight: 1.5,\r\n};\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n /* Footnote rendered below the shortcut list. Split into two parts so the\r\n * keycap can be embedded in the middle without forcing the i18n string to\r\n * carry HTML tags. */\r\n footnoteIntro: \"Astuce : appuyez sur\",\r\n footnoteOutro:\r\n \"à tout moment pour ouvrir ou fermer cette aide. Les raccourcis s'activent uniquement quand votre curseur n'est pas dans un champ de saisie.\",\r\n /* aria-label on the <dl> listing every shortcut. */\r\n listAriaLabel: \"Liste des raccourcis clavier disponibles sur cette page\",\r\n /* Joiner rendered between alternative keys for the same shortcut. */\r\n keyJoiner: \"ou\",\r\n});\r\n\r\n/**\r\n * KeyboardShortcutsHelp — Portnet UI v2\r\n *\r\n * Charter §5.2 SHOULD — discoverable help overlay for page-level keyboard\r\n * shortcuts. Listens globally for \"?\" and opens a v2.Modal listing every\r\n * shortcut as <kbd> elements (WCAG 1.3.1 semantic).\r\n *\r\n * Self-contained: the host page only declares the shortcuts array and renders\r\n * <KeyboardShortcutsHelp shortcuts={…} /> once.\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <KeyboardShortcutsHelp\r\n * title=\"Keyboard shortcuts\"\r\n * labels={{\r\n * footnoteIntro: \"Tip: press\",\r\n * footnoteOutro: \"anytime to toggle this help…\",\r\n * listAriaLabel: \"List of keyboard shortcuts available on this page\",\r\n * keyJoiner: \"or\",\r\n * }}\r\n * shortcuts={…}\r\n * />\r\n *\r\n * Charter §5.2 SHOULD + WCAG 1.3.1 (semantic <kbd>) + 2.1.1 (keyboard\r\n * reachable) + R-M.* (modal focus trap inherited from v2.Modal).\r\n */\r\n\r\nexport interface KeyboardShortcut {\r\n keys: string[];\r\n description: React.ReactNode;\r\n}\r\n\r\nexport interface KeyboardShortcutsHelpLabels {\r\n footnoteIntro?: string | undefined;\r\n footnoteOutro?: string | undefined;\r\n listAriaLabel?: string | undefined;\r\n keyJoiner?: string | undefined;\r\n}\r\n\r\nexport interface KeyboardShortcutsHelpProps {\r\n shortcuts?: KeyboardShortcut[] | undefined;\r\n title?: React.ReactNode | undefined;\r\n labels?: KeyboardShortcutsHelpLabels | undefined;\r\n /**\r\n * Optional CONTROLLED open state. Omit for the original self-contained\r\n * behaviour (the \"?\" listener owns the state).\r\n *\r\n * Added because the panel had no trigger but the keystroke. Hosts wired it\r\n * correctly and users still reported the shortcuts \"missing\" — they are, in\r\n * every practical sense, if the only affordance is a key you have to already\r\n * know about. Charter §05.2 asks for DISCOVERABLE help, and a host cannot add\r\n * a menu item or button without being able to open this.\r\n */\r\n open?: boolean | undefined;\r\n /** Called with the requested next state, for both \"?\" and the close button. */\r\n onOpenChange?: ((open: boolean) => void) | undefined;\r\n}\r\n\r\nfunction KeyboardShortcutsHelp({\r\n shortcuts = [],\r\n title = \"Raccourcis clavier\",\r\n labels,\r\n open,\r\n onOpenChange,\r\n}: KeyboardShortcutsHelpProps) {\r\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\r\n const isControlled = open !== undefined;\r\n const isOpen = isControlled ? open : uncontrolledOpen;\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n /* Refs so the \"?\" listener can stay on a `[]` dependency list — it must not\r\n * be torn down and re-added on every open/close, and in controlled mode there\r\n * is no functional-update form to fall back on. */\r\n const isOpenRef = React.useRef(isOpen);\r\n isOpenRef.current = isOpen;\r\n const onOpenChangeRef = React.useRef(onOpenChange);\r\n onOpenChangeRef.current = onOpenChange;\r\n const isControlledRef = React.useRef(isControlled);\r\n isControlledRef.current = isControlled;\r\n\r\n const requestOpen = React.useCallback((next: boolean) => {\r\n if (!isControlledRef.current) setUncontrolledOpen(next);\r\n onOpenChangeRef.current?.(next);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n const handler = (event: KeyboardEvent) => {\r\n // Only react to \"?\" (Shift+/ on US, AltGr+, on many AZERTY layouts).\r\n // event.key gives us the resolved character regardless of physical key.\r\n if (event.key !== \"?\") return;\r\n\r\n // Modifier keys (Ctrl, Meta, Alt) reserved for browser / OS shortcuts.\r\n if (event.ctrlKey || event.metaKey || event.altKey) return;\r\n\r\n // User is typing in a text field — let \"?\" through.\r\n if (isFocusOnTextEntry()) return;\r\n\r\n event.preventDefault();\r\n requestOpen(!isOpenRef.current);\r\n };\r\n\r\n window.addEventListener(\"keydown\", handler);\r\n return () => window.removeEventListener(\"keydown\", handler);\r\n }, [requestOpen]);\r\n\r\n if (!Array.isArray(shortcuts) || shortcuts.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Modal\r\n open={isOpen}\r\n title={title}\r\n onClose={() => requestOpen(false)}\r\n size=\"md\"\r\n >\r\n <dl style={{ margin: 0, padding: 0 }} aria-label={L.listAriaLabel}>\r\n {shortcuts.map((sc, i) => (\r\n <div key={i} style={SHORTCUT_ROW_SX}>\r\n <dt style={SHORTCUT_KEYS_SX}>\r\n {sc.keys.map((k, j) => (\r\n <React.Fragment key={j}>\r\n <ShortcutKey>{k}</ShortcutKey>\r\n {j < sc.keys.length - 1 && (\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n color: \"var(--fg-subtle)\",\r\n fontSize: \"var(--text-xs)\",\r\n }}\r\n >\r\n {L.keyJoiner}\r\n </span>\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </dt>\r\n <dd style={{ margin: 0, fontSize: \"var(--text-body)\" }}>\r\n {sc.description}\r\n </dd>\r\n </div>\r\n ))}\r\n </dl>\r\n <div style={HELP_FOOTNOTE_SX}>\r\n {L.footnoteIntro}{\" \"}\r\n <ShortcutKey>?</ShortcutKey>{\" \"}\r\n {L.footnoteOutro}\r\n </div>\r\n </Modal>\r\n );\r\n}\r\n\r\nexport default KeyboardShortcutsHelp;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -19,13 +19,12 @@ import ErrorIcon from "@mui/icons-material/ErrorOutlined";
|
|
|
19
19
|
* Defaults stay French for back-compat.
|
|
20
20
|
*/
|
|
21
21
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
-
function NetworkErrorBanner(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
retryLabel = _ref$retryLabel === void 0 ? "Réessayer" : _ref$retryLabel;
|
|
22
|
+
function NetworkErrorBanner({
|
|
23
|
+
visible,
|
|
24
|
+
message = "Connexion perdue.",
|
|
25
|
+
onRetry,
|
|
26
|
+
retryLabel = "Réessayer"
|
|
27
|
+
}) {
|
|
29
28
|
if (!visible) return null;
|
|
30
29
|
return /*#__PURE__*/_jsxs(Box, {
|
|
31
30
|
role: "alert",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkErrorBanner.js","names":["React","Box","ErrorIcon","jsx","_jsx","jsxs","_jsxs","NetworkErrorBanner","
|
|
1
|
+
{"version":3,"file":"NetworkErrorBanner.js","names":["React","Box","ErrorIcon","jsx","_jsx","jsxs","_jsxs","NetworkErrorBanner","visible","message","onRetry","retryLabel","role","className","children","fontSize","component","type","onClick","sx","background","border","color","borderRadius","padding","fontWeight","cursor","fontFamily","marginInlineStart","transition","outline","outlineOffset"],"sources":["../../../../src/lib/v2/patterns/NetworkErrorBanner.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport ErrorIcon from \"@mui/icons-material/ErrorOutlined\";\r\n\r\n/**\r\n * NetworkErrorBanner - Portnet UI v2 (pattern)\r\n *\r\n * Charter R-4.3 - erreur réseau globale = bandeau persistant top, \"Réessayer\".\r\n * Z-index 2000 (above modals).\r\n *\r\n * <NetworkErrorBanner\r\n * visible={!online}\r\n * message=\"Connexion perdue.\"\r\n * onRetry={refresh}\r\n * />\r\n *\r\n * Localisation (FR / EN / AR):\r\n * `message` and `retryLabel` are direct overrides on the props.\r\n * Defaults stay French for back-compat.\r\n */\r\n\r\nexport interface NetworkErrorBannerProps {\r\n visible?: boolean | undefined;\r\n message?: React.ReactNode | undefined;\r\n onRetry?: (() => void) | undefined;\r\n retryLabel?: React.ReactNode | undefined;\r\n}\r\n\r\nfunction NetworkErrorBanner({\r\n visible,\r\n message = \"Connexion perdue.\",\r\n onRetry,\r\n retryLabel = \"Réessayer\",\r\n}: NetworkErrorBannerProps) {\r\n if (!visible) return null;\r\n return (\r\n <Box role=\"alert\" aria-live=\"assertive\" className=\"pui-net-error-banner\">\r\n <ErrorIcon fontSize=\"small\" aria-hidden=\"true\" />\r\n <span>{message}</span>\r\n {onRetry && (\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n onClick={onRetry}\r\n className=\"pui-net-error-banner-retry\"\r\n sx={{\r\n // R-AI.1 - tokenised inverse colour mix (was rgba(255,255,255,...))\r\n background: \"color-mix(in srgb, var(--fg-inverse) 20%, transparent)\",\r\n border:\r\n \"1px solid color-mix(in srgb, var(--fg-inverse) 35%, transparent)\",\r\n color: \"inherit\",\r\n borderRadius: \"var(--r-sm)\",\r\n padding: \"var(--s-1) var(--s-3)\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n cursor: \"pointer\",\r\n fontFamily: \"inherit\",\r\n // NEB-1 - logical inline-start margin so it sits correctly under RTL.\r\n marginInlineStart: 0.5,\r\n transition: \"background var(--duration-fast, 80ms) ease\",\r\n \"&:hover\": {\r\n background:\r\n \"color-mix(in srgb, var(--fg-inverse) 30%, transparent)\",\r\n },\r\n // R-F.1 - focus visible required, charter §05.\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--fg-inverse)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n }}\r\n >\r\n {retryLabel}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default NetworkErrorBanner;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,GAAG,MAAM,mBAAmB;AACnC,OAAOC,SAAS,MAAM,mCAAmC;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAfA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAwBA,SAASC,kBAAkBA,CAAC;EAC1BC,OAAO;EACPC,OAAO,GAAG,mBAAmB;EAC7BC,OAAO;EACPC,UAAU,GAAG;AACU,CAAC,EAAE;EAC1B,IAAI,CAACH,OAAO,EAAE,OAAO,IAAI;EACzB,oBACEF,KAAA,CAACL,GAAG;IAACW,IAAI,EAAC,OAAO;IAAC,aAAU,WAAW;IAACC,SAAS,EAAC,sBAAsB;IAAAC,QAAA,gBACtEV,IAAA,CAACF,SAAS;MAACa,QAAQ,EAAC,OAAO;MAAC,eAAY;IAAM,CAAE,CAAC,eACjDX,IAAA;MAAAU,QAAA,EAAOL;IAAO,CAAO,CAAC,EACrBC,OAAO,iBACNN,IAAA,CAACH,GAAG;MACFe,SAAS,EAAC,QAAQ;MAClBC,IAAI,EAAC,QAAQ;MACbC,OAAO,EAAER,OAAQ;MACjBG,SAAS,EAAC,4BAA4B;MACtCM,EAAE,EAAE;QACF;QACAC,UAAU,EAAE,wDAAwD;QACpEC,MAAM,EACJ,kEAAkE;QACpEC,KAAK,EAAE,SAAS;QAChBC,YAAY,EAAE,aAAa;QAC3BC,OAAO,EAAE,uBAAuB;QAChCT,QAAQ,EAAE,gBAAgB;QAC1BU,UAAU,EAAE,oBAAoB;QAChCC,MAAM,EAAE,SAAS;QACjBC,UAAU,EAAE,SAAS;QACrB;QACAC,iBAAiB,EAAE,GAAG;QACtBC,UAAU,EAAE,4CAA4C;QACxD,SAAS,EAAE;UACTT,UAAU,EACR;QACJ,CAAC;QACD;QACA,iBAAiB,EAAE;UACjBU,OAAO,EAAE,6BAA6B;UACtCC,aAAa,EAAE;QACjB;MACF,CAAE;MAAAjB,QAAA,EAEDH;IAAU,CACR,CACN;EAAA,CACE,CAAC;AAEV;AAEA,eAAeJ,kBAAkB","ignoreList":[]}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
1
|
import * as React from "react";
|
|
8
2
|
import Box from "@mui/material/Box";
|
|
9
3
|
|
|
@@ -35,12 +29,13 @@ import Box from "@mui/material/Box";
|
|
|
35
29
|
* </PageContent>
|
|
36
30
|
*/
|
|
37
31
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
38
|
-
function PageContent(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
function PageContent({
|
|
33
|
+
children,
|
|
34
|
+
gap,
|
|
35
|
+
sx
|
|
36
|
+
}) {
|
|
42
37
|
return /*#__PURE__*/_jsx(Box, {
|
|
43
|
-
sx:
|
|
38
|
+
sx: {
|
|
44
39
|
/* Responsive padding — charter §7.1 bis */
|
|
45
40
|
padding: {
|
|
46
41
|
xs: "var(--s-3)" /* 12 px — mobile */,
|
|
@@ -50,11 +45,12 @@ function PageContent(_ref) {
|
|
|
50
45
|
/* Section layout */
|
|
51
46
|
display: "flex",
|
|
52
47
|
flexDirection: "column",
|
|
53
|
-
gap: gap
|
|
48
|
+
gap: gap ?? "var(--s-4)",
|
|
54
49
|
/* Prevent content from overflowing the viewport on narrow screens
|
|
55
50
|
while still allowing inner scroll containers (DataGrid) to work. */
|
|
56
|
-
minWidth: 0
|
|
57
|
-
|
|
51
|
+
minWidth: 0,
|
|
52
|
+
...sx
|
|
53
|
+
},
|
|
58
54
|
children: children
|
|
59
55
|
});
|
|
60
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageContent.js","names":["React","Box","jsx","_jsx","PageContent","
|
|
1
|
+
{"version":3,"file":"PageContent.js","names":["React","Box","jsx","_jsx","PageContent","children","gap","sx","padding","xs","sm","lg","display","flexDirection","minWidth"],"sources":["../../../../src/lib/v2/patterns/PageContent.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport type { SystemStyleObject } from \"@mui/system\";\r\n\r\n/**\r\n * PageContent — Portnet UI v2 (pattern)\r\n *\r\n * Charter §07 · Template canonique — zone contenu (§7.1 bis).\r\n *\r\n * Wraps the main content zone inside the shell applicatif with the\r\n * canonical responsive padding and vertical gap defined in §7.1 bis:\r\n *\r\n * xs ( 0 – 480 px ) → padding 12 px (--s-3)\r\n * sm ( 481 – 1023 px) → padding 16 px (--s-4)\r\n * lg ( 1024 px + ) → padding 24 px (--s-6)\r\n *\r\n * Usage:\r\n * import { PageContent } from \"@portnet/ui\";\r\n *\r\n * <PageContent>\r\n * <FilterCard />\r\n * <DataGrid ... />\r\n * </PageContent>\r\n *\r\n * Override gap or add extra sx when the default section gap\r\n * (var(--s-4) = 16 px) is not appropriate for the context.\r\n *\r\n * <PageContent gap=\"var(--s-6)\" sx={{ maxWidth: 720 }}>\r\n * ...\r\n * </PageContent>\r\n */\r\n\r\nexport interface PageContentProps {\r\n /** Page sections / content */\r\n children?: React.ReactNode | undefined;\r\n /** Override the vertical gap between direct children (default var(--s-4)) */\r\n gap?: string | undefined;\r\n /** MUI sx overrides applied to the root Box */\r\n sx?: SxProps<Theme> | undefined;\r\n}\r\n\r\nfunction PageContent({ children, gap, sx }: PageContentProps) {\r\n return (\r\n <Box\r\n sx={{\r\n /* Responsive padding — charter §7.1 bis */\r\n padding: {\r\n xs: \"var(--s-3)\" /* 12 px — mobile */,\r\n sm: \"var(--s-4)\" /* 16 px — tablet */,\r\n lg: \"var(--s-6)\" /* 24 px — desktop */,\r\n },\r\n /* Section layout */\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: gap ?? \"var(--s-4)\",\r\n /* Prevent content from overflowing the viewport on narrow screens\r\n while still allowing inner scroll containers (DataGrid) to work. */\r\n minWidth: 0,\r\n ...(sx as SystemStyleObject<Theme>),\r\n }}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default PageContent;\r\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,GAAG,MAAM,mBAAmB;;AAInC;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;AA1BA,SAAAC,GAAA,IAAAC,IAAA;AAqCA,SAASC,WAAWA,CAAC;EAAEC,QAAQ;EAAEC,GAAG;EAAEC;AAAqB,CAAC,EAAE;EAC5D,oBACEJ,IAAA,CAACF,GAAG;IACFM,EAAE,EAAE;MACF;MACAC,OAAO,EAAE;QACPC,EAAE,EAAE,YAAY,CAAC;QACjBC,EAAE,EAAE,YAAY,CAAC;QACjBC,EAAE,EAAE,YAAY,CAAC;MACnB,CAAC;MACD;MACAC,OAAO,EAAE,MAAM;MACfC,aAAa,EAAE,QAAQ;MACvBP,GAAG,EAAEA,GAAG,IAAI,YAAY;MACxB;AACR;MACQQ,QAAQ,EAAE,CAAC;MACX,GAAIP;IACN,CAAE;IAAAF,QAAA,EAEDA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeD,WAAW","ignoreList":[]}
|