@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,15 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
-
function _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); }
|
|
10
|
-
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; }
|
|
11
|
-
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; } }
|
|
12
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
1
|
import * as React from "react";
|
|
14
2
|
import Tooltip from "@mui/material/Tooltip";
|
|
15
3
|
import IconButton from "@mui/material/IconButton";
|
|
@@ -52,8 +40,8 @@ import InfoOutlinedIcon from "@mui/icons-material/InfoOutlined";
|
|
|
52
40
|
* Tooltip's automatic aria-describedby plumbing on the wrapped child.
|
|
53
41
|
*/
|
|
54
42
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
55
|
-
|
|
56
|
-
|
|
43
|
+
const HELP_THRESHOLD_CHARS = 80;
|
|
44
|
+
const HELP_ICON_SX = Object.freeze({
|
|
57
45
|
padding: "2px",
|
|
58
46
|
color: "var(--fg-subtle)",
|
|
59
47
|
marginInlineStart: "var(--s-1)",
|
|
@@ -62,7 +50,7 @@ var HELP_ICON_SX = Object.freeze({
|
|
|
62
50
|
background: "var(--bg-hover)"
|
|
63
51
|
}
|
|
64
52
|
});
|
|
65
|
-
|
|
53
|
+
const POPOVER_PAPER_SX = Object.freeze({
|
|
66
54
|
// Cap at 360 on desktop, but never exceed the viewport on small
|
|
67
55
|
// phones (320–392px): MUI Popover positions the anchor but does NOT
|
|
68
56
|
// shrink the paper width to the viewport, so a bare maxWidth:360
|
|
@@ -75,13 +63,13 @@ var POPOVER_PAPER_SX = Object.freeze({
|
|
|
75
63
|
border: "1px solid var(--border)",
|
|
76
64
|
boxShadow: "var(--shadow-md)"
|
|
77
65
|
});
|
|
78
|
-
|
|
66
|
+
const POPOVER_TITLE_SX = Object.freeze({
|
|
79
67
|
fontSize: "var(--text-sm)",
|
|
80
68
|
fontWeight: "var(--fw-semibold)",
|
|
81
69
|
color: "var(--fg)",
|
|
82
70
|
marginBottom: "var(--s-1)"
|
|
83
71
|
});
|
|
84
|
-
|
|
72
|
+
const POPOVER_BODY_SX = Object.freeze({
|
|
85
73
|
fontSize: "var(--text-sm)",
|
|
86
74
|
color: "var(--fg-muted)",
|
|
87
75
|
// --lh-loose = 1.6 (typography.js). Was `var(--lh-relaxed, 1.6)` —
|
|
@@ -99,26 +87,20 @@ function resolveVariant(variant, content, title) {
|
|
|
99
87
|
}
|
|
100
88
|
return "tooltip";
|
|
101
89
|
}
|
|
102
|
-
function FieldHelp(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
_ref$ariaLabel = _ref.ariaLabel,
|
|
112
|
-
ariaLabel = _ref$ariaLabel === void 0 ? "Aide" : _ref$ariaLabel;
|
|
113
|
-
var _React$useState = React.useState(null),
|
|
114
|
-
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
115
|
-
anchorEl = _React$useState2[0],
|
|
116
|
-
setAnchorEl = _React$useState2[1];
|
|
90
|
+
function FieldHelp({
|
|
91
|
+
content,
|
|
92
|
+
title,
|
|
93
|
+
variant = "auto",
|
|
94
|
+
icon = "help",
|
|
95
|
+
placement = "top",
|
|
96
|
+
ariaLabel = "Aide"
|
|
97
|
+
}) {
|
|
98
|
+
const [anchorEl, setAnchorEl] = React.useState(null);
|
|
117
99
|
// FH-1 — stable id so the dialog paper can be labelled by its visible
|
|
118
100
|
// title (used only when a title is rendered; see slotProps below).
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
101
|
+
const titleId = React.useId();
|
|
102
|
+
const effectiveVariant = resolveVariant(variant, content, title);
|
|
103
|
+
const IconComponent = icon === "info" ? InfoOutlinedIcon : HelpOutlineIcon;
|
|
122
104
|
if (effectiveVariant === "tooltip") {
|
|
123
105
|
return /*#__PURE__*/_jsx(Tooltip, {
|
|
124
106
|
title: content,
|
|
@@ -137,13 +119,9 @@ function FieldHelp(_ref) {
|
|
|
137
119
|
})
|
|
138
120
|
});
|
|
139
121
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
var handleClose = function handleClose() {
|
|
144
|
-
return setAnchorEl(null);
|
|
145
|
-
};
|
|
146
|
-
var open = !!anchorEl;
|
|
122
|
+
const handleOpen = e => setAnchorEl(e.currentTarget);
|
|
123
|
+
const handleClose = () => setAnchorEl(null);
|
|
124
|
+
const open = !!anchorEl;
|
|
147
125
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
148
126
|
children: [/*#__PURE__*/_jsx(IconButton, {
|
|
149
127
|
size: "small",
|
|
@@ -175,17 +153,18 @@ function FieldHelp(_ref) {
|
|
|
175
153
|
horizontal: "left"
|
|
176
154
|
},
|
|
177
155
|
slotProps: {
|
|
178
|
-
paper:
|
|
156
|
+
paper: {
|
|
179
157
|
sx: POPOVER_PAPER_SX,
|
|
180
158
|
// FH-1 — the trigger promises a dialog; make the paper one and
|
|
181
159
|
// name it. Prefer the visible title (aria-labelledby, avoids a
|
|
182
160
|
// Label-in-Name mismatch); fall back to the ariaLabel prop.
|
|
183
|
-
role: "dialog"
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
161
|
+
role: "dialog",
|
|
162
|
+
...(title ? {
|
|
163
|
+
"aria-labelledby": titleId
|
|
164
|
+
} : {
|
|
165
|
+
"aria-label": ariaLabel
|
|
166
|
+
})
|
|
167
|
+
}
|
|
189
168
|
},
|
|
190
169
|
children: [title && /*#__PURE__*/_jsx(Box, {
|
|
191
170
|
id: titleId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldHelp.js","names":["React","Tooltip","IconButton","Box","Popover","HelpOutlineIcon","InfoOutlinedIcon","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","HELP_THRESHOLD_CHARS","HELP_ICON_SX","Object","freeze","padding","color","marginInlineStart","background","POPOVER_PAPER_SX","maxWidth","borderRadius","border","boxShadow","POPOVER_TITLE_SX","fontSize","fontWeight","marginBottom","POPOVER_BODY_SX","lineHeight","resolveVariant","variant","content","title","length","FieldHelp","_ref","_ref$variant","_ref$icon","icon","_ref$placement","placement","_ref$ariaLabel","ariaLabel","_React$useState","useState","_React$useState2","_slicedToArray","anchorEl","setAnchorEl","titleId","useId","effectiveVariant","IconComponent","arrow","children","size","sx","tabIndex","handleOpen","e","currentTarget","handleClose","open","onClick","onClose","anchorOrigin","vertical","horizontal","transformOrigin","slotProps","paper","_objectSpread","role","id"],"sources":["../../../../src/lib/v2/components/FieldHelp.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Tooltip from \"@mui/material/Tooltip\";\r\nimport type { TooltipProps } from \"@mui/material/Tooltip\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Popover from \"@mui/material/Popover\";\r\nimport HelpOutlineIcon from \"@mui/icons-material/HelpOutlineOutlined\";\r\nimport InfoOutlinedIcon from \"@mui/icons-material/InfoOutlined\";\r\n\r\n/**\r\n * FieldHelp - Portnet UI v2 (component)\r\n *\r\n * Charter §03 · Component \"FieldHelp · Contextual help\".\r\n *\r\n * A small icon-button affordance that hosts drop next to labels,\r\n * section titles, or anywhere a user might benefit from just-in-\r\n * time guidance without cluttering the primary visual hierarchy.\r\n *\r\n * Behaviour modes:\r\n * - tooltip: MUI Tooltip (default for short string content).\r\n * - popover: MUI Popover, click to open. Used when content is\r\n * long (>80 chars) or when a distinct `title` is provided.\r\n * - auto: Picks tooltip vs popover via the heuristic above.\r\n *\r\n * Usage:\r\n * <FieldHelp content=\"Référence unique de l'autorisation\" />\r\n * <FieldHelp\r\n * title=\"Détails\"\r\n * content={<>Texte long avec <b>JSX</b>.</>}\r\n * variant=\"popover\"\r\n * />\r\n *\r\n * A11y (audit Batch 5, finding B5-1; Batch 19, FH-1):\r\n * Popover variant trigger carries aria-haspopup=\"dialog\" +\r\n * aria-expanded reflecting the open state — WAI-ARIA disclosure\r\n * pattern. The Popover paper itself carries role=\"dialog\" and an\r\n * accessible name (FH-1): aria-labelledby the visible title when\r\n * one is rendered, else aria-label from the ariaLabel prop — so\r\n * the region the trigger promises actually resolves as a named\r\n * dialog to assistive tech. Tooltip variant relies on MUI\r\n * Tooltip's automatic aria-describedby plumbing on the wrapped child.\r\n */\r\n\r\nexport type FieldHelpVariant = \"auto\" | \"tooltip\" | \"popover\";\r\nexport type FieldHelpIcon = \"help\" | \"info\";\r\n\r\nexport interface FieldHelpProps {\r\n /** Help content (tooltip title or popover body). */\r\n content: React.ReactNode;\r\n /** Optional popover title. When present, forces the popover variant. */\r\n title?: React.ReactNode | undefined;\r\n /** @default \"auto\" */\r\n variant?: FieldHelpVariant | undefined;\r\n /** @default \"help\" */\r\n icon?: FieldHelpIcon | undefined;\r\n /** Tooltip placement. @default \"top\" */\r\n placement?: TooltipProps[\"placement\"] | undefined;\r\n /** @default \"Aide\" */\r\n ariaLabel?: string | undefined;\r\n}\r\n\r\nconst HELP_THRESHOLD_CHARS = 80;\r\n\r\nconst HELP_ICON_SX = Object.freeze({\r\n padding: \"2px\",\r\n color: \"var(--fg-subtle)\",\r\n marginInlineStart: \"var(--s-1)\",\r\n \"&:hover, &:focus-visible\": {\r\n color: \"var(--accent)\",\r\n background: \"var(--bg-hover)\",\r\n },\r\n});\r\n\r\nconst POPOVER_PAPER_SX = Object.freeze({\r\n // Cap at 360 on desktop, but never exceed the viewport on small\r\n // phones (320–392px): MUI Popover positions the anchor but does NOT\r\n // shrink the paper width to the viewport, so a bare maxWidth:360\r\n // overflows the screen edge and forces horizontal scroll (WCAG 1.4.10\r\n // Reflow). The min() inset keeps the paper on screen with a single\r\n // --s-4 gutter on either side.\r\n maxWidth: \"min(360px, calc(100vw - var(--s-4) * 2))\",\r\n padding: \"var(--s-4)\",\r\n borderRadius: \"var(--r-md)\",\r\n border: \"1px solid var(--border)\",\r\n boxShadow: \"var(--shadow-md)\",\r\n});\r\n\r\nconst POPOVER_TITLE_SX = Object.freeze({\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg)\",\r\n marginBottom: \"var(--s-1)\",\r\n});\r\n\r\nconst POPOVER_BODY_SX = Object.freeze({\r\n fontSize: \"var(--text-sm)\",\r\n color: \"var(--fg-muted)\",\r\n // --lh-loose = 1.6 (typography.js). Was `var(--lh-relaxed, 1.6)` —\r\n // a dangling reference to a token that doesn't exist in the v2\r\n // lineHeight scale (only tight/snug/normal/loose are emitted). The\r\n // fallback `1.6` happened to match --lh-loose by coincidence; this\r\n // makes the dependency explicit and lets future retuning flow.\r\n lineHeight: \"var(--lh-loose)\",\r\n});\r\n\r\nfunction resolveVariant(\r\n variant: FieldHelpVariant,\r\n content: React.ReactNode,\r\n title: React.ReactNode,\r\n): \"tooltip\" | \"popover\" {\r\n if (variant !== \"auto\") return variant;\r\n if (title) return \"popover\";\r\n if (typeof content === \"string\" && content.length > HELP_THRESHOLD_CHARS) {\r\n return \"popover\";\r\n }\r\n return \"tooltip\";\r\n}\r\n\r\nfunction FieldHelp({\r\n content,\r\n title,\r\n variant = \"auto\",\r\n icon = \"help\",\r\n placement = \"top\",\r\n ariaLabel = \"Aide\",\r\n}: FieldHelpProps) {\r\n const [anchorEl, setAnchorEl] = React.useState<HTMLElement | null>(null);\r\n // FH-1 — stable id so the dialog paper can be labelled by its visible\r\n // title (used only when a title is rendered; see slotProps below).\r\n const titleId = React.useId();\r\n\r\n const effectiveVariant = resolveVariant(variant, content, title);\r\n const IconComponent = icon === \"info\" ? InfoOutlinedIcon : HelpOutlineIcon;\r\n\r\n if (effectiveVariant === \"tooltip\") {\r\n return (\r\n <Tooltip title={content} arrow placement={placement}>\r\n <IconButton\r\n size=\"small\"\r\n aria-label={ariaLabel}\r\n sx={HELP_ICON_SX}\r\n tabIndex={0}\r\n >\r\n <IconComponent sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </Tooltip>\r\n );\r\n }\r\n\r\n const handleOpen = (e: React.MouseEvent<HTMLElement>) => setAnchorEl(e.currentTarget);\r\n const handleClose = () => setAnchorEl(null);\r\n const open = !!anchorEl;\r\n\r\n return (\r\n <>\r\n <IconButton\r\n size=\"small\"\r\n aria-label={ariaLabel}\r\n // R-Ar.6 / WAI-ARIA disclosure pattern — surfaces the\r\n // overlay nature of the trigger to assistive tech. Without\r\n // these attrs SR users hear a generic \"Aide button\" with\r\n // no indication that activation opens content.\r\n aria-haspopup=\"dialog\"\r\n aria-expanded={open}\r\n onClick={handleOpen}\r\n sx={HELP_ICON_SX}\r\n >\r\n <IconComponent sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n <Popover\r\n open={open}\r\n anchorEl={anchorEl}\r\n onClose={handleClose}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n transformOrigin={{ vertical: \"top\", horizontal: \"left\" }}\r\n slotProps={{\r\n paper: {\r\n sx: POPOVER_PAPER_SX,\r\n // FH-1 — the trigger promises a dialog; make the paper one and\r\n // name it. Prefer the visible title (aria-labelledby, avoids a\r\n // Label-in-Name mismatch); fall back to the ariaLabel prop.\r\n role: \"dialog\",\r\n ...(title\r\n ? { \"aria-labelledby\": titleId }\r\n : { \"aria-label\": ariaLabel }),\r\n },\r\n }}\r\n >\r\n {title && (\r\n <Box id={titleId} sx={POPOVER_TITLE_SX}>\r\n {title}\r\n </Box>\r\n )}\r\n <Box sx={POPOVER_BODY_SX}>{content}</Box>\r\n </Popover>\r\n </>\r\n );\r\n}\r\n\r\nexport default FieldHelp;\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FieldHelp.js","names":["React","Tooltip","IconButton","Box","Popover","HelpOutlineIcon","InfoOutlinedIcon","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","HELP_THRESHOLD_CHARS","HELP_ICON_SX","Object","freeze","padding","color","marginInlineStart","background","POPOVER_PAPER_SX","maxWidth","borderRadius","border","boxShadow","POPOVER_TITLE_SX","fontSize","fontWeight","marginBottom","POPOVER_BODY_SX","lineHeight","resolveVariant","variant","content","title","length","FieldHelp","icon","placement","ariaLabel","anchorEl","setAnchorEl","useState","titleId","useId","effectiveVariant","IconComponent","arrow","children","size","sx","tabIndex","handleOpen","e","currentTarget","handleClose","open","onClick","onClose","anchorOrigin","vertical","horizontal","transformOrigin","slotProps","paper","role","id"],"sources":["../../../../src/lib/v2/components/FieldHelp.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Tooltip from \"@mui/material/Tooltip\";\r\nimport type { TooltipProps } from \"@mui/material/Tooltip\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Popover from \"@mui/material/Popover\";\r\nimport HelpOutlineIcon from \"@mui/icons-material/HelpOutlineOutlined\";\r\nimport InfoOutlinedIcon from \"@mui/icons-material/InfoOutlined\";\r\n\r\n/**\r\n * FieldHelp - Portnet UI v2 (component)\r\n *\r\n * Charter §03 · Component \"FieldHelp · Contextual help\".\r\n *\r\n * A small icon-button affordance that hosts drop next to labels,\r\n * section titles, or anywhere a user might benefit from just-in-\r\n * time guidance without cluttering the primary visual hierarchy.\r\n *\r\n * Behaviour modes:\r\n * - tooltip: MUI Tooltip (default for short string content).\r\n * - popover: MUI Popover, click to open. Used when content is\r\n * long (>80 chars) or when a distinct `title` is provided.\r\n * - auto: Picks tooltip vs popover via the heuristic above.\r\n *\r\n * Usage:\r\n * <FieldHelp content=\"Référence unique de l'autorisation\" />\r\n * <FieldHelp\r\n * title=\"Détails\"\r\n * content={<>Texte long avec <b>JSX</b>.</>}\r\n * variant=\"popover\"\r\n * />\r\n *\r\n * A11y (audit Batch 5, finding B5-1; Batch 19, FH-1):\r\n * Popover variant trigger carries aria-haspopup=\"dialog\" +\r\n * aria-expanded reflecting the open state — WAI-ARIA disclosure\r\n * pattern. The Popover paper itself carries role=\"dialog\" and an\r\n * accessible name (FH-1): aria-labelledby the visible title when\r\n * one is rendered, else aria-label from the ariaLabel prop — so\r\n * the region the trigger promises actually resolves as a named\r\n * dialog to assistive tech. Tooltip variant relies on MUI\r\n * Tooltip's automatic aria-describedby plumbing on the wrapped child.\r\n */\r\n\r\nexport type FieldHelpVariant = \"auto\" | \"tooltip\" | \"popover\";\r\nexport type FieldHelpIcon = \"help\" | \"info\";\r\n\r\nexport interface FieldHelpProps {\r\n /** Help content (tooltip title or popover body). */\r\n content: React.ReactNode;\r\n /** Optional popover title. When present, forces the popover variant. */\r\n title?: React.ReactNode | undefined;\r\n /** @default \"auto\" */\r\n variant?: FieldHelpVariant | undefined;\r\n /** @default \"help\" */\r\n icon?: FieldHelpIcon | undefined;\r\n /** Tooltip placement. @default \"top\" */\r\n placement?: TooltipProps[\"placement\"] | undefined;\r\n /** @default \"Aide\" */\r\n ariaLabel?: string | undefined;\r\n}\r\n\r\nconst HELP_THRESHOLD_CHARS = 80;\r\n\r\nconst HELP_ICON_SX = Object.freeze({\r\n padding: \"2px\",\r\n color: \"var(--fg-subtle)\",\r\n marginInlineStart: \"var(--s-1)\",\r\n \"&:hover, &:focus-visible\": {\r\n color: \"var(--accent)\",\r\n background: \"var(--bg-hover)\",\r\n },\r\n});\r\n\r\nconst POPOVER_PAPER_SX = Object.freeze({\r\n // Cap at 360 on desktop, but never exceed the viewport on small\r\n // phones (320–392px): MUI Popover positions the anchor but does NOT\r\n // shrink the paper width to the viewport, so a bare maxWidth:360\r\n // overflows the screen edge and forces horizontal scroll (WCAG 1.4.10\r\n // Reflow). The min() inset keeps the paper on screen with a single\r\n // --s-4 gutter on either side.\r\n maxWidth: \"min(360px, calc(100vw - var(--s-4) * 2))\",\r\n padding: \"var(--s-4)\",\r\n borderRadius: \"var(--r-md)\",\r\n border: \"1px solid var(--border)\",\r\n boxShadow: \"var(--shadow-md)\",\r\n});\r\n\r\nconst POPOVER_TITLE_SX = Object.freeze({\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg)\",\r\n marginBottom: \"var(--s-1)\",\r\n});\r\n\r\nconst POPOVER_BODY_SX = Object.freeze({\r\n fontSize: \"var(--text-sm)\",\r\n color: \"var(--fg-muted)\",\r\n // --lh-loose = 1.6 (typography.js). Was `var(--lh-relaxed, 1.6)` —\r\n // a dangling reference to a token that doesn't exist in the v2\r\n // lineHeight scale (only tight/snug/normal/loose are emitted). The\r\n // fallback `1.6` happened to match --lh-loose by coincidence; this\r\n // makes the dependency explicit and lets future retuning flow.\r\n lineHeight: \"var(--lh-loose)\",\r\n});\r\n\r\nfunction resolveVariant(\r\n variant: FieldHelpVariant,\r\n content: React.ReactNode,\r\n title: React.ReactNode,\r\n): \"tooltip\" | \"popover\" {\r\n if (variant !== \"auto\") return variant;\r\n if (title) return \"popover\";\r\n if (typeof content === \"string\" && content.length > HELP_THRESHOLD_CHARS) {\r\n return \"popover\";\r\n }\r\n return \"tooltip\";\r\n}\r\n\r\nfunction FieldHelp({\r\n content,\r\n title,\r\n variant = \"auto\",\r\n icon = \"help\",\r\n placement = \"top\",\r\n ariaLabel = \"Aide\",\r\n}: FieldHelpProps) {\r\n const [anchorEl, setAnchorEl] = React.useState<HTMLElement | null>(null);\r\n // FH-1 — stable id so the dialog paper can be labelled by its visible\r\n // title (used only when a title is rendered; see slotProps below).\r\n const titleId = React.useId();\r\n\r\n const effectiveVariant = resolveVariant(variant, content, title);\r\n const IconComponent = icon === \"info\" ? InfoOutlinedIcon : HelpOutlineIcon;\r\n\r\n if (effectiveVariant === \"tooltip\") {\r\n return (\r\n <Tooltip title={content} arrow placement={placement}>\r\n <IconButton\r\n size=\"small\"\r\n aria-label={ariaLabel}\r\n sx={HELP_ICON_SX}\r\n tabIndex={0}\r\n >\r\n <IconComponent sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </Tooltip>\r\n );\r\n }\r\n\r\n const handleOpen = (e: React.MouseEvent<HTMLElement>) => setAnchorEl(e.currentTarget);\r\n const handleClose = () => setAnchorEl(null);\r\n const open = !!anchorEl;\r\n\r\n return (\r\n <>\r\n <IconButton\r\n size=\"small\"\r\n aria-label={ariaLabel}\r\n // R-Ar.6 / WAI-ARIA disclosure pattern — surfaces the\r\n // overlay nature of the trigger to assistive tech. Without\r\n // these attrs SR users hear a generic \"Aide button\" with\r\n // no indication that activation opens content.\r\n aria-haspopup=\"dialog\"\r\n aria-expanded={open}\r\n onClick={handleOpen}\r\n sx={HELP_ICON_SX}\r\n >\r\n <IconComponent sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n <Popover\r\n open={open}\r\n anchorEl={anchorEl}\r\n onClose={handleClose}\r\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\r\n transformOrigin={{ vertical: \"top\", horizontal: \"left\" }}\r\n slotProps={{\r\n paper: {\r\n sx: POPOVER_PAPER_SX,\r\n // FH-1 — the trigger promises a dialog; make the paper one and\r\n // name it. Prefer the visible title (aria-labelledby, avoids a\r\n // Label-in-Name mismatch); fall back to the ariaLabel prop.\r\n role: \"dialog\",\r\n ...(title\r\n ? { \"aria-labelledby\": titleId }\r\n : { \"aria-label\": ariaLabel }),\r\n },\r\n }}\r\n >\r\n {title && (\r\n <Box id={titleId} sx={POPOVER_TITLE_SX}>\r\n {title}\r\n </Box>\r\n )}\r\n <Box sx={POPOVER_BODY_SX}>{content}</Box>\r\n </Popover>\r\n </>\r\n );\r\n}\r\n\r\nexport default FieldHelp;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
1
|
import * as React from "react";
|
|
8
2
|
import Box from "@mui/material/Box";
|
|
9
3
|
import InsertDriveFileIcon from "@mui/icons-material/InsertDriveFileOutlined";
|
|
@@ -62,19 +56,20 @@ import Surface from "./Surface";
|
|
|
62
56
|
* reachable on hover once it is ellipsized.
|
|
63
57
|
*/
|
|
64
58
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
65
|
-
function FileCard(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
59
|
+
function FileCard({
|
|
60
|
+
name,
|
|
61
|
+
meta,
|
|
62
|
+
icon,
|
|
63
|
+
actions,
|
|
64
|
+
sx
|
|
65
|
+
}) {
|
|
66
|
+
return /*#__PURE__*/_jsx(Surface, {
|
|
72
67
|
tone: "subtle",
|
|
73
68
|
radius: "md",
|
|
74
|
-
padding: "compact"
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
69
|
+
padding: "compact",
|
|
70
|
+
...(sx !== undefined ? {
|
|
71
|
+
sx
|
|
72
|
+
} : {}),
|
|
78
73
|
children: /*#__PURE__*/_jsxs(Box, {
|
|
79
74
|
sx: {
|
|
80
75
|
display: "flex",
|
|
@@ -110,7 +105,7 @@ function FileCard(_ref) {
|
|
|
110
105
|
fontSize: "var(--text-display)"
|
|
111
106
|
}
|
|
112
107
|
},
|
|
113
|
-
children: icon
|
|
108
|
+
children: icon ?? /*#__PURE__*/_jsx(InsertDriveFileIcon, {})
|
|
114
109
|
}), /*#__PURE__*/_jsxs(Box, {
|
|
115
110
|
sx: {
|
|
116
111
|
minWidth: 0
|
|
@@ -156,7 +151,7 @@ function FileCard(_ref) {
|
|
|
156
151
|
children: actions
|
|
157
152
|
})]
|
|
158
153
|
})
|
|
159
|
-
})
|
|
154
|
+
});
|
|
160
155
|
}
|
|
161
156
|
export default FileCard;
|
|
162
157
|
//# sourceMappingURL=FileCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileCard.js","names":["React","Box","InsertDriveFileIcon","Surface","jsx","_jsx","jsxs","_jsxs","FileCard","_ref","name","meta","icon","actions","sx","_objectSpread","tone","radius","padding","undefined","children","display","alignItems","justifyContent","gap","minWidth","flex","component","flexShrink","color","fontSize","title","fontWeight","whiteSpace","overflow","textOverflow","fontVariantNumeric"],"sources":["../../../../src/lib/v2/components/FileCard.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 InsertDriveFileIcon from \"@mui/icons-material/InsertDriveFileOutlined\";\r\nimport Surface from \"./Surface\";\r\n\r\n/**\r\n * FileCard — Portnet UI v2\r\n *\r\n * A single attached document, as a row: leading icon, filename, optional meta\r\n * line, action cluster on the trailing edge.\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n * WHY THIS BELONGS IN THE LIBRARY (capability gap G-12)\r\n *\r\n * The library shipped `Dropzone` — the UPLOAD affordance — and nothing for the\r\n * state right after it: the file, once attached, being displayed. So every\r\n * screen that shows an attachment rebuilt the same row. In addpe-fe it exists\r\n * THREE times, in three files, written by hand each time:\r\n *\r\n * - Attachment (uploaded state) padding --s-3 --s-4\r\n * - AutorisationPreviewDrawer (tab) padding --s-4\r\n * - AutorisationDetail (tab) padding --s-4 --s-5\r\n *\r\n * Read that padding column: three values for ONE concept. Nobody decided that —\r\n * it is what happens when a recipe is retyped from memory three times, and it is\r\n * exactly what Charter R-2.1 forbids (« un même concept = un même composant +\r\n * un même libellé partout »). This component standardises on the compact\r\n * `Surface` padding; the divergence was accidental, not intentional.\r\n *\r\n * The ellipsis logic is the other reason to own this. A filename is\r\n * user-supplied, arbitrarily long, and must truncate without pushing the action\r\n * buttons off the card — which needs `minWidth: 0` on the right ancestors and\r\n * `flexShrink: 0` on the wrong ones. Two of the three local copies had it; the\r\n * third relied on its container being wide enough.\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n *\r\n * <FileCard\r\n * name={doc.documentName || \"Document.pdf\"}\r\n * meta=\"248,50 Ko\"\r\n * actions={\r\n * <Button variant=\"secondary\" size=\"sm\" icon={<CloudDownload />} onClick={dl}>\r\n * Télécharger\r\n * </Button>\r\n * }\r\n * />\r\n *\r\n * Presentational by design: no href, no fetching, no delete confirmation. Hosts\r\n * own those (a blob URL, an API call, a `ConfirmDialog`) and pass the resulting\r\n * buttons through `actions`.\r\n *\r\n * `name` is REQUIRED and typed `string`, deliberately. A filename fallback\r\n * (\"Document.pdf\") is French copy and a business decision about what an unnamed\r\n * attachment is called — that belongs to the host, not to the design system, and\r\n * defaulting it here would silently hide a missing backend field. The `string`\r\n * type also lets the component set `title={name}` so the full filename stays\r\n * reachable on hover once it is ellipsized.\r\n */\r\n\r\nexport interface FileCardProps {\r\n /** Filename. Ellipsized when it overflows; mirrored into `title`. */\r\n name: string;\r\n /**\r\n * Secondary line — size, date, content type. Rendered with tabular numerals\r\n * so a column of file sizes aligns (R-T.3).\r\n */\r\n meta?: React.ReactNode | undefined;\r\n /**\r\n * Leading icon. Defaults to a generic document glyph; pass a specific one when\r\n * the card's primary action is what identifies it (a download cloud, say).\r\n * Rendered `aria-hidden` — the filename is the accessible name (R-Ar.2).\r\n */\r\n icon?: React.ReactNode | undefined;\r\n /** Trailing action cluster. Pass `Button`s; the card does not invent any. */\r\n actions?: React.ReactNode | undefined;\r\n sx?: SxProps<Theme> | undefined;\r\n}\r\n\r\nfunction FileCard({ name, meta, icon, actions, sx }: FileCardProps) {\r\n return (\r\n <Surface\r\n tone=\"subtle\"\r\n radius=\"md\"\r\n padding=\"compact\"\r\n {...(sx !== undefined ? { sx } : {})}\r\n >\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: \"var(--s-3)\",\r\n }}\r\n >\r\n {/* Identity block. `minWidth: 0` is load-bearing: without it a flex item\r\n refuses to shrink below its content width and the filename pushes the\r\n action cluster out of the card instead of truncating. */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-3)\",\r\n minWidth: 0,\r\n flex: 1,\r\n }}\r\n >\r\n <Box\r\n component=\"span\"\r\n aria-hidden=\"true\"\r\n /* Test hook. The icon wrapper carries no role and no accessible\r\n * name — by design — so there is no semantic query that can reach\r\n * it, and the repo's eslint config rightly forbids container\r\n * queries and direct node access in tests. A stable testid is the\r\n * sanctioned escape hatch, and the contract it guards (R-Ar.2: a\r\n * decorative glyph must NOT be announced) is worth a hook. */\r\n data-testid=\"filecard-icon\"\r\n sx={{\r\n display: \"inline-flex\",\r\n flexShrink: 0,\r\n color: \"var(--accent)\",\r\n // --text-display is the 26px token; the glyph sits at the optical\r\n // scale the three local copies had converged on.\r\n \"& > *\": { fontSize: \"var(--text-display)\" },\r\n }}\r\n >\r\n {icon ?? <InsertDriveFileIcon />}\r\n </Box>\r\n\r\n <Box sx={{ minWidth: 0 }}>\r\n <Box\r\n title={name}\r\n sx={{\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg)\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n }}\r\n >\r\n {name}\r\n </Box>\r\n {meta != null && meta !== \"\" && (\r\n <Box\r\n /* Test hook — same rationale as filecard-icon. The contract is\r\n * that this line is ABSENT rather than empty: a blank second\r\n * line reads as missing data and changes the row height, which\r\n * breaks the alignment of a list of files. \"Absent, not empty\"\r\n * cannot be expressed by a text query. */\r\n data-testid=\"filecard-meta\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n // R-T.3 — tabular numerals on any numeric run.\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {meta}\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n {actions != null && (\r\n /* `flexShrink: 0` — the buttons keep their intrinsic width; it is the\r\n filename that yields. The inverse produced squashed labels. */\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n flexShrink: 0,\r\n }}\r\n >\r\n {actions}\r\n </Box>\r\n )}\r\n </Box>\r\n </Surface>\r\n );\r\n}\r\n\r\nexport default FileCard;\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FileCard.js","names":["React","Box","InsertDriveFileIcon","Surface","jsx","_jsx","jsxs","_jsxs","FileCard","name","meta","icon","actions","sx","tone","radius","padding","undefined","children","display","alignItems","justifyContent","gap","minWidth","flex","component","flexShrink","color","fontSize","title","fontWeight","whiteSpace","overflow","textOverflow","fontVariantNumeric"],"sources":["../../../../src/lib/v2/components/FileCard.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 InsertDriveFileIcon from \"@mui/icons-material/InsertDriveFileOutlined\";\r\nimport Surface from \"./Surface\";\r\n\r\n/**\r\n * FileCard — Portnet UI v2\r\n *\r\n * A single attached document, as a row: leading icon, filename, optional meta\r\n * line, action cluster on the trailing edge.\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n * WHY THIS BELONGS IN THE LIBRARY (capability gap G-12)\r\n *\r\n * The library shipped `Dropzone` — the UPLOAD affordance — and nothing for the\r\n * state right after it: the file, once attached, being displayed. So every\r\n * screen that shows an attachment rebuilt the same row. In addpe-fe it exists\r\n * THREE times, in three files, written by hand each time:\r\n *\r\n * - Attachment (uploaded state) padding --s-3 --s-4\r\n * - AutorisationPreviewDrawer (tab) padding --s-4\r\n * - AutorisationDetail (tab) padding --s-4 --s-5\r\n *\r\n * Read that padding column: three values for ONE concept. Nobody decided that —\r\n * it is what happens when a recipe is retyped from memory three times, and it is\r\n * exactly what Charter R-2.1 forbids (« un même concept = un même composant +\r\n * un même libellé partout »). This component standardises on the compact\r\n * `Surface` padding; the divergence was accidental, not intentional.\r\n *\r\n * The ellipsis logic is the other reason to own this. A filename is\r\n * user-supplied, arbitrarily long, and must truncate without pushing the action\r\n * buttons off the card — which needs `minWidth: 0` on the right ancestors and\r\n * `flexShrink: 0` on the wrong ones. Two of the three local copies had it; the\r\n * third relied on its container being wide enough.\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n *\r\n * <FileCard\r\n * name={doc.documentName || \"Document.pdf\"}\r\n * meta=\"248,50 Ko\"\r\n * actions={\r\n * <Button variant=\"secondary\" size=\"sm\" icon={<CloudDownload />} onClick={dl}>\r\n * Télécharger\r\n * </Button>\r\n * }\r\n * />\r\n *\r\n * Presentational by design: no href, no fetching, no delete confirmation. Hosts\r\n * own those (a blob URL, an API call, a `ConfirmDialog`) and pass the resulting\r\n * buttons through `actions`.\r\n *\r\n * `name` is REQUIRED and typed `string`, deliberately. A filename fallback\r\n * (\"Document.pdf\") is French copy and a business decision about what an unnamed\r\n * attachment is called — that belongs to the host, not to the design system, and\r\n * defaulting it here would silently hide a missing backend field. The `string`\r\n * type also lets the component set `title={name}` so the full filename stays\r\n * reachable on hover once it is ellipsized.\r\n */\r\n\r\nexport interface FileCardProps {\r\n /** Filename. Ellipsized when it overflows; mirrored into `title`. */\r\n name: string;\r\n /**\r\n * Secondary line — size, date, content type. Rendered with tabular numerals\r\n * so a column of file sizes aligns (R-T.3).\r\n */\r\n meta?: React.ReactNode | undefined;\r\n /**\r\n * Leading icon. Defaults to a generic document glyph; pass a specific one when\r\n * the card's primary action is what identifies it (a download cloud, say).\r\n * Rendered `aria-hidden` — the filename is the accessible name (R-Ar.2).\r\n */\r\n icon?: React.ReactNode | undefined;\r\n /** Trailing action cluster. Pass `Button`s; the card does not invent any. */\r\n actions?: React.ReactNode | undefined;\r\n sx?: SxProps<Theme> | undefined;\r\n}\r\n\r\nfunction FileCard({ name, meta, icon, actions, sx }: FileCardProps) {\r\n return (\r\n <Surface\r\n tone=\"subtle\"\r\n radius=\"md\"\r\n padding=\"compact\"\r\n {...(sx !== undefined ? { sx } : {})}\r\n >\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: \"var(--s-3)\",\r\n }}\r\n >\r\n {/* Identity block. `minWidth: 0` is load-bearing: without it a flex item\r\n refuses to shrink below its content width and the filename pushes the\r\n action cluster out of the card instead of truncating. */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-3)\",\r\n minWidth: 0,\r\n flex: 1,\r\n }}\r\n >\r\n <Box\r\n component=\"span\"\r\n aria-hidden=\"true\"\r\n /* Test hook. The icon wrapper carries no role and no accessible\r\n * name — by design — so there is no semantic query that can reach\r\n * it, and the repo's eslint config rightly forbids container\r\n * queries and direct node access in tests. A stable testid is the\r\n * sanctioned escape hatch, and the contract it guards (R-Ar.2: a\r\n * decorative glyph must NOT be announced) is worth a hook. */\r\n data-testid=\"filecard-icon\"\r\n sx={{\r\n display: \"inline-flex\",\r\n flexShrink: 0,\r\n color: \"var(--accent)\",\r\n // --text-display is the 26px token; the glyph sits at the optical\r\n // scale the three local copies had converged on.\r\n \"& > *\": { fontSize: \"var(--text-display)\" },\r\n }}\r\n >\r\n {icon ?? <InsertDriveFileIcon />}\r\n </Box>\r\n\r\n <Box sx={{ minWidth: 0 }}>\r\n <Box\r\n title={name}\r\n sx={{\r\n fontSize: \"var(--text-sm)\",\r\n fontWeight: \"var(--fw-semibold)\",\r\n color: \"var(--fg)\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n }}\r\n >\r\n {name}\r\n </Box>\r\n {meta != null && meta !== \"\" && (\r\n <Box\r\n /* Test hook — same rationale as filecard-icon. The contract is\r\n * that this line is ABSENT rather than empty: a blank second\r\n * line reads as missing data and changes the row height, which\r\n * breaks the alignment of a list of files. \"Absent, not empty\"\r\n * cannot be expressed by a text query. */\r\n data-testid=\"filecard-meta\"\r\n sx={{\r\n fontSize: \"var(--text-xs)\",\r\n color: \"var(--fg-subtle)\",\r\n // R-T.3 — tabular numerals on any numeric run.\r\n fontVariantNumeric: \"tabular-nums\",\r\n }}\r\n >\r\n {meta}\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n {actions != null && (\r\n /* `flexShrink: 0` — the buttons keep their intrinsic width; it is the\r\n filename that yields. The inverse produced squashed labels. */\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n flexShrink: 0,\r\n }}\r\n >\r\n {actions}\r\n </Box>\r\n )}\r\n </Box>\r\n </Surface>\r\n );\r\n}\r\n\r\nexport default FileCard;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
1
|
import * as React from "react";
|
|
8
2
|
import Box from "@mui/material/Box";
|
|
9
3
|
import { mergeLabels } from "../utils/mergeLabels";
|
|
@@ -28,12 +22,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
28
22
|
// Module-scoped to avoid Temporal Dead Zone when an invalid `variant` is
|
|
29
23
|
// passed: a local-const initialiser referencing palette.neutral before
|
|
30
24
|
// palette finished initialising would throw ReferenceError.
|
|
31
|
-
|
|
25
|
+
const PALETTES = {
|
|
32
26
|
neutral: {
|
|
33
27
|
activeBg: "var(--accent-soft)",
|
|
34
28
|
activeFg: "var(--accent)"
|
|
35
29
|
},
|
|
36
|
-
|
|
30
|
+
new: {
|
|
37
31
|
activeBg: "var(--status-new-soft)",
|
|
38
32
|
activeFg: "var(--status-new-fg)"
|
|
39
33
|
},
|
|
@@ -54,26 +48,21 @@ var PALETTES = {
|
|
|
54
48
|
activeFg: "var(--status-rejected-fg)"
|
|
55
49
|
}
|
|
56
50
|
};
|
|
57
|
-
|
|
58
|
-
countLabel:
|
|
59
|
-
|
|
60
|
-
},
|
|
61
|
-
shortcutHint: function shortcutHint(s) {
|
|
62
|
-
return "Raccourci : ".concat(s);
|
|
63
|
-
}
|
|
51
|
+
const DEFAULT_LABELS = Object.freeze({
|
|
52
|
+
countLabel: n => `${n} éléments`,
|
|
53
|
+
shortcutHint: s => `Raccourci : ${s}`
|
|
64
54
|
});
|
|
65
|
-
function FilterTab(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
var L = mergeLabels(DEFAULT_LABELS, labels);
|
|
55
|
+
function FilterTab({
|
|
56
|
+
active = false,
|
|
57
|
+
count,
|
|
58
|
+
variant = "neutral",
|
|
59
|
+
onClick,
|
|
60
|
+
shortcut,
|
|
61
|
+
labels,
|
|
62
|
+
children
|
|
63
|
+
}) {
|
|
64
|
+
const palette = PALETTES[variant] || PALETTES.neutral;
|
|
65
|
+
const L = mergeLabels(DEFAULT_LABELS, labels);
|
|
77
66
|
return /*#__PURE__*/_jsxs(Box, {
|
|
78
67
|
component: "button",
|
|
79
68
|
type: "button",
|
|
@@ -88,7 +77,7 @@ function FilterTab(_ref) {
|
|
|
88
77
|
// the spacing scale so any future rescale propagates.
|
|
89
78
|
padding: "calc(var(--s-1) + 1px) var(--s-3)",
|
|
90
79
|
borderRadius: "var(--r-full)",
|
|
91
|
-
border:
|
|
80
|
+
border: `1px solid ${active ? "var(--accent)" : "var(--border)"}`,
|
|
92
81
|
background: active ? palette.activeBg : "var(--surface)",
|
|
93
82
|
color: active ? palette.activeFg : "var(--fg-muted)",
|
|
94
83
|
fontSize: "var(--text-xs)",
|
|
@@ -105,9 +94,11 @@ function FilterTab(_ref) {
|
|
|
105
94
|
outline: "2px solid var(--accent)",
|
|
106
95
|
outlineOffset: "var(--pui-outline-offset)"
|
|
107
96
|
},
|
|
108
|
-
"&:hover":
|
|
109
|
-
|
|
110
|
-
|
|
97
|
+
"&:hover": {
|
|
98
|
+
...(!active ? {
|
|
99
|
+
background: "var(--bg-hover)"
|
|
100
|
+
} : {})
|
|
101
|
+
}
|
|
111
102
|
},
|
|
112
103
|
children: [/*#__PURE__*/_jsx("span", {
|
|
113
104
|
children: children
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterTab.js","names":["React","Box","mergeLabels","jsx","_jsx","jsxs","_jsxs","PALETTES","neutral","activeBg","activeFg","sent","pending","approved","rejected","DEFAULT_LABELS","Object","freeze","countLabel","n","
|
|
1
|
+
{"version":3,"file":"FilterTab.js","names":["React","Box","mergeLabels","jsx","_jsx","jsxs","_jsxs","PALETTES","neutral","activeBg","activeFg","new","sent","pending","approved","rejected","DEFAULT_LABELS","Object","freeze","countLabel","n","shortcutHint","s","FilterTab","active","count","variant","onClick","shortcut","labels","children","palette","L","component","type","title","undefined","sx","display","alignItems","gap","padding","borderRadius","border","background","color","fontSize","fontWeight","cursor","fontFamily","transition","outline","outlineOffset","minWidth","lineHeight","textAlign"],"sources":["../../../../src/lib/v2/components/FilterTab.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * FilterTab - Portnet UI v2\r\n *\r\n * Charter §03 · Component \"FilterTabs\". Pills used to quickly filter a list\r\n * by status, with an active-state count and pop animation on update.\r\n *\r\n * <FilterTab active={filter === \"all\"} count={42} onClick={() => setFilter(\"all\")}>\r\n * Tous\r\n * </FilterTab>\r\n *\r\n * Localisation (FR / EN / AR):\r\n * <FilterTab labels={{\r\n * countLabel: (n) => `${n} items`,\r\n * shortcutHint: (s) => `Shortcut: ${s}`,\r\n * }} ... />\r\n */\r\n\r\nexport type FilterTabVariant =\r\n | \"neutral\"\r\n | \"new\"\r\n | \"sent\"\r\n | \"pending\"\r\n | \"approved\"\r\n | \"rejected\";\r\n\r\ninterface PaletteEntry {\r\n activeBg: string;\r\n activeFg: string;\r\n}\r\n\r\n// Module-scoped to avoid Temporal Dead Zone when an invalid `variant` is\r\n// passed: a local-const initialiser referencing palette.neutral before\r\n// palette finished initialising would throw ReferenceError.\r\nconst PALETTES: Record<FilterTabVariant, PaletteEntry> = {\r\n neutral: { activeBg: \"var(--accent-soft)\", activeFg: \"var(--accent)\" },\r\n new: { activeBg: \"var(--status-new-soft)\", activeFg: \"var(--status-new-fg)\" },\r\n sent: { activeBg: \"var(--status-sent-soft)\", activeFg: \"var(--status-sent-fg)\" },\r\n pending: { activeBg: \"var(--status-pending-soft)\", activeFg: \"var(--status-pending-fg)\" },\r\n approved: { activeBg: \"var(--status-approved-soft)\", activeFg: \"var(--status-approved-fg)\" },\r\n rejected: { activeBg: \"var(--status-rejected-soft)\", activeFg: \"var(--status-rejected-fg)\" },\r\n};\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n countLabel: (n: number): string => `${n} éléments`,\r\n shortcutHint: (s: string): string => `Raccourci : ${s}`,\r\n});\r\n\r\nexport interface FilterTabLabels {\r\n countLabel?: ((n: number) => string) | undefined;\r\n shortcutHint?: ((s: string) => string) | undefined;\r\n}\r\n\r\nexport interface FilterTabProps {\r\n active?: boolean | undefined;\r\n count?: number | undefined;\r\n /** neutral | new | sent | pending | approved | rejected */\r\n variant?: FilterTabVariant | undefined;\r\n onClick?: React.MouseEventHandler<HTMLButtonElement> | undefined;\r\n shortcut?: string | undefined;\r\n labels?: FilterTabLabels | undefined;\r\n children?: React.ReactNode | undefined;\r\n}\r\n\r\nfunction FilterTab({\r\n active = false,\r\n count,\r\n variant = \"neutral\",\r\n onClick,\r\n shortcut,\r\n labels,\r\n children,\r\n}: FilterTabProps) {\r\n const palette = PALETTES[variant] || PALETTES.neutral;\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n return (\r\n <Box\r\n component=\"button\"\r\n type=\"button\"\r\n aria-pressed={active}\r\n onClick={onClick}\r\n title={shortcut ? L.shortcutHint(shortcut) : undefined}\r\n sx={{\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n gap: \"var(--s-2)\",\r\n // Compact pill: 5/12 px in literal terms, expressed against\r\n // the spacing scale so any future rescale propagates.\r\n padding: \"calc(var(--s-1) + 1px) var(--s-3)\",\r\n borderRadius: \"var(--r-full)\",\r\n border: `1px solid ${active ? \"var(--accent)\" : \"var(--border)\"}`,\r\n background: active ? palette.activeBg : \"var(--surface)\",\r\n color: active ? palette.activeFg : \"var(--fg-muted)\",\r\n fontSize: \"var(--text-xs)\",\r\n // Was 650 (banned) / 500. var(--fw-semibold) is the canonical\r\n // emphasised weight; var(--fw-medium) the resting one.\r\n fontWeight: active ? \"var(--fw-semibold)\" : \"var(--fw-medium)\",\r\n cursor: \"pointer\",\r\n fontFamily: \"inherit\",\r\n transition:\r\n \"background var(--duration-fast, 120ms) ease, \" +\r\n \"color var(--duration-fast, 120ms) ease, \" +\r\n \"border-color var(--duration-fast, 120ms) ease\",\r\n // R-F.1 - focus-visible required, charter §05. The previous\r\n // implementation had NO focus style; keyboard users got no\r\n // feedback when tabbing through filter chips.\r\n \"&:focus-visible\": {\r\n outline: \"2px solid var(--accent)\",\r\n outlineOffset: \"var(--pui-outline-offset)\",\r\n },\r\n \"&:hover\": {\r\n ...(!active ? { background: \"var(--bg-hover)\" } : {}),\r\n },\r\n }}\r\n >\r\n <span>{children}</span>\r\n {count != null && (\r\n <Box\r\n component=\"span\"\r\n aria-label={L.countLabel(count)}\r\n sx={{\r\n display: \"inline-block\",\r\n minWidth: 16,\r\n padding: \"0 var(--s-1)\",\r\n fontSize: \"var(--text-xs)\",\r\n fontWeight: \"var(--fw-bold)\",\r\n // Active keeps the accent emphasis (unchanged). Inactive now\r\n // takes the variant palette (soft bg + status fg) so status\r\n // counts stay colour-coded instead of greying out; neutral\r\n // resolves to accent-soft / accent.\r\n background: active ? \"var(--accent)\" : palette.activeBg,\r\n color: active ? \"var(--accent-fg)\" : palette.activeFg,\r\n borderRadius: \"var(--r-full)\",\r\n lineHeight: \"var(--lh-snug)\",\r\n textAlign: \"center\",\r\n }}\r\n >\r\n {count}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default FilterTab;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ import LockOutlined from "@mui/icons-material/LockOutlined";
|
|
|
4
4
|
import ActionBar from "../patterns/ActionBar";
|
|
5
5
|
import Button from "./Button";
|
|
6
6
|
import ErrorPageBody from "./_ErrorPageBody";
|
|
7
|
+
import { mergeLabels } from "../utils/mergeLabels";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* ForbiddenPage — Portnet UI v2 (component)
|
|
@@ -30,6 +31,14 @@ import ErrorPageBody from "./_ErrorPageBody";
|
|
|
30
31
|
* );
|
|
31
32
|
* }
|
|
32
33
|
*
|
|
34
|
+
* Localisation (P-4):
|
|
35
|
+
* Every visible string is overridable through `labels`, defaulting
|
|
36
|
+
* to French. The shape is shared across the four error pages, so a
|
|
37
|
+
* host can build one translation object and spread it into each:
|
|
38
|
+
*
|
|
39
|
+
* const t = { breadcrumbRoot: "Error", home: "Back to home", … };
|
|
40
|
+
* <ForbiddenPage labels={{ ...t, title: "Access denied", … }} … />
|
|
41
|
+
*
|
|
33
42
|
* Charter rules satisfied:
|
|
34
43
|
* R-2.1 no local UI primitive (composes ActionBar + Button only).
|
|
35
44
|
* R-Tg.1 44 px tactile floor enforced by v2.Button.
|
|
@@ -37,14 +46,25 @@ import ErrorPageBody from "./_ErrorPageBody";
|
|
|
37
46
|
* R-T.2 contrast verified for var(--fg) on var(--bg).
|
|
38
47
|
*/
|
|
39
48
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
const DEFAULT_LABELS = Object.freeze({
|
|
50
|
+
breadcrumbRoot: "Erreur",
|
|
51
|
+
breadcrumbCurrent: "Accès refusé",
|
|
52
|
+
title: "Accès refusé",
|
|
53
|
+
heading: "Vous n'avez pas accès à cette page",
|
|
54
|
+
description: "Votre profil ne dispose pas des autorisations nécessaires pour consulter cette page. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur, puis revenez à l'accueil.",
|
|
55
|
+
home: "Retour à l'accueil"
|
|
56
|
+
});
|
|
57
|
+
function ForbiddenPage({
|
|
58
|
+
onBack,
|
|
59
|
+
onHome,
|
|
60
|
+
labels
|
|
61
|
+
}) {
|
|
62
|
+
const L = mergeLabels(DEFAULT_LABELS, labels);
|
|
43
63
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
44
64
|
children: [/*#__PURE__*/_jsx(ActionBar, {
|
|
45
65
|
back: onBack,
|
|
46
|
-
breadcrumb: [
|
|
47
|
-
title:
|
|
66
|
+
breadcrumb: [L.breadcrumbRoot, L.breadcrumbCurrent],
|
|
67
|
+
title: L.title
|
|
48
68
|
}), /*#__PURE__*/_jsx(ErrorPageBody, {
|
|
49
69
|
icon: /*#__PURE__*/_jsx(LockOutlined, {
|
|
50
70
|
sx: {
|
|
@@ -53,8 +73,8 @@ function ForbiddenPage(_ref) {
|
|
|
53
73
|
}
|
|
54
74
|
}),
|
|
55
75
|
code: "403",
|
|
56
|
-
title:
|
|
57
|
-
description:
|
|
76
|
+
title: L.heading,
|
|
77
|
+
description: L.description
|
|
58
78
|
}), /*#__PURE__*/_jsx(Box, {
|
|
59
79
|
sx: {
|
|
60
80
|
display: "flex",
|
|
@@ -65,7 +85,7 @@ function ForbiddenPage(_ref) {
|
|
|
65
85
|
variant: "primary",
|
|
66
86
|
icon: /*#__PURE__*/_jsx(ArrowBack, {}),
|
|
67
87
|
onClick: onHome,
|
|
68
|
-
children:
|
|
88
|
+
children: L.home
|
|
69
89
|
})
|
|
70
90
|
})]
|
|
71
91
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForbiddenPage.js","names":["Box","ArrowBack","LockOutlined","ActionBar","Button","ErrorPageBody","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","
|
|
1
|
+
{"version":3,"file":"ForbiddenPage.js","names":["Box","ArrowBack","LockOutlined","ActionBar","Button","ErrorPageBody","mergeLabels","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_LABELS","Object","freeze","breadcrumbRoot","breadcrumbCurrent","title","heading","description","home","ForbiddenPage","onBack","onHome","labels","L","children","back","breadcrumb","icon","sx","fontSize","color","code","display","justifyContent","paddingBottom","variant","onClick"],"sources":["../../../../src/lib/v2/components/ForbiddenPage.tsx"],"sourcesContent":["import Box from \"@mui/material/Box\";\r\nimport ArrowBack from \"@mui/icons-material/ArrowBack\";\r\nimport LockOutlined from \"@mui/icons-material/LockOutlined\";\r\nimport ActionBar from \"../patterns/ActionBar\";\r\nimport Button from \"./Button\";\r\nimport ErrorPageBody from \"./_ErrorPageBody\";\r\nimport { mergeLabels } from \"../utils/mergeLabels\";\r\n\r\n/**\r\n * ForbiddenPage — Portnet UI v2 (component)\r\n *\r\n * Charter §07 · 403 / Accès refusé.\r\n *\r\n * Router-agnostic by design: the page accepts `onBack` and `onHome`\r\n * callback props rather than calling a router hook itself. This\r\n * keeps the design system independent of any specific routing lib\r\n * (react-router, TanStack Router, Next.js, …).\r\n *\r\n * Usage:\r\n *\r\n * import { ForbiddenPage } from \"@portnet/ui/lib/v2\";\r\n * import { useNavigate } from \"react-router-dom\";\r\n *\r\n * function ForbiddenRoute() {\r\n * const navigate = useNavigate();\r\n * return (\r\n * <ForbiddenPage\r\n * onBack={() => navigate(-1)}\r\n * onHome={() => navigate(\"/\")}\r\n * />\r\n * );\r\n * }\r\n *\r\n * Localisation (P-4):\r\n * Every visible string is overridable through `labels`, defaulting\r\n * to French. The shape is shared across the four error pages, so a\r\n * host can build one translation object and spread it into each:\r\n *\r\n * const t = { breadcrumbRoot: \"Error\", home: \"Back to home\", … };\r\n * <ForbiddenPage labels={{ ...t, title: \"Access denied\", … }} … />\r\n *\r\n * Charter rules satisfied:\r\n * R-2.1 no local UI primitive (composes ActionBar + Button only).\r\n * R-Tg.1 44 px tactile floor enforced by v2.Button.\r\n * R-A.1 ARIA landmarks via ActionBar's <header role=\"banner\">.\r\n * R-T.2 contrast verified for var(--fg) on var(--bg).\r\n */\r\n\r\nexport interface ForbiddenPageLabels {\r\n /** First breadcrumb crumb. */\r\n breadcrumbRoot?: string | undefined;\r\n /** Last breadcrumb crumb — aria-current=\"page\". */\r\n breadcrumbCurrent?: string | undefined;\r\n /** ActionBar heading (the page's <h1>). */\r\n title?: string | undefined;\r\n /** Descriptive sentence under the code ornament (the <h2>). */\r\n heading?: string | undefined;\r\n /** Body paragraph — the only text telling the user what to do. */\r\n description?: string | undefined;\r\n /** Primary CTA label. */\r\n home?: string | undefined;\r\n}\r\n\r\nconst DEFAULT_LABELS = Object.freeze({\r\n breadcrumbRoot: \"Erreur\",\r\n breadcrumbCurrent: \"Accès refusé\",\r\n title: \"Accès refusé\",\r\n heading: \"Vous n'avez pas accès à cette page\",\r\n description:\r\n \"Votre profil ne dispose pas des autorisations nécessaires pour consulter cette page. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur, puis revenez à l'accueil.\",\r\n home: \"Retour à l'accueil\",\r\n});\r\n\r\nexport interface ForbiddenPageProps {\r\n /** Callback for the back button (top-bar arrow). */\r\n onBack: () => void;\r\n /** Callback for the primary \"Retour à l'accueil\" CTA. */\r\n onHome: () => void;\r\n /** Overrides for the page's French defaults (P-4). */\r\n labels?: ForbiddenPageLabels | undefined;\r\n}\r\n\r\nfunction ForbiddenPage({ onBack, onHome, labels }: ForbiddenPageProps) {\r\n const L = mergeLabels(DEFAULT_LABELS, labels);\r\n\r\n return (\r\n <>\r\n <ActionBar\r\n back={onBack}\r\n breadcrumb={[L.breadcrumbRoot, L.breadcrumbCurrent]}\r\n title={L.title}\r\n />\r\n <ErrorPageBody\r\n icon={<LockOutlined sx={{ fontSize: 64, color: \"var(--warning)\" }} />}\r\n code=\"403\"\r\n title={L.heading}\r\n description={L.description}\r\n />\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", paddingBottom: \"var(--s-7)\" }}>\r\n <Button variant=\"primary\" icon={<ArrowBack />} onClick={onHome}>\r\n {L.home}\r\n </Button>\r\n </Box>\r\n </>\r\n );\r\n}\r\n\r\nexport default ForbiddenPage;\r\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,mBAAmB;AACnC,OAAOC,SAAS,MAAM,+BAA+B;AACrD,OAAOC,YAAY,MAAM,kCAAkC;AAC3D,OAAOC,SAAS,MAAM,uBAAuB;AAC7C,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAOC,aAAa,MAAM,kBAAkB;AAC5C,SAASC,WAAW,QAAQ,sBAAsB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAtCA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAuDA,MAAMC,cAAc,GAAGC,MAAM,CAACC,MAAM,CAAC;EACnCC,cAAc,EAAK,QAAQ;EAC3BC,iBAAiB,EAAE,cAAc;EACjCC,KAAK,EAAc,cAAc;EACjCC,OAAO,EAAY,oCAAoC;EACvDC,WAAW,EACT,yLAAyL;EAC3LC,IAAI,EAAe;AACrB,CAAC,CAAC;AAWF,SAASC,aAAaA,CAAC;EAAEC,MAAM;EAAEC,MAAM;EAAEC;AAA2B,CAAC,EAAE;EACrE,MAAMC,CAAC,GAAGpB,WAAW,CAACO,cAAc,EAAEY,MAAM,CAAC;EAE7C,oBACEb,KAAA,CAAAF,SAAA;IAAAiB,QAAA,gBACEnB,IAAA,CAACL,SAAS;MACRyB,IAAI,EAAEL,MAAO;MACbM,UAAU,EAAE,CAACH,CAAC,CAACV,cAAc,EAAEU,CAAC,CAACT,iBAAiB,CAAE;MACpDC,KAAK,EAAEQ,CAAC,CAACR;IAAM,CAChB,CAAC,eACFV,IAAA,CAACH,aAAa;MACZyB,IAAI,eAAEtB,IAAA,CAACN,YAAY;QAAC6B,EAAE,EAAE;UAAEC,QAAQ,EAAE,EAAE;UAAEC,KAAK,EAAE;QAAiB;MAAE,CAAE,CAAE;MACtEC,IAAI,EAAC,KAAK;MACVhB,KAAK,EAAEQ,CAAC,CAACP,OAAQ;MACjBC,WAAW,EAAEM,CAAC,CAACN;IAAY,CAC5B,CAAC,eACFZ,IAAA,CAACR,GAAG;MAAC+B,EAAE,EAAE;QAAEI,OAAO,EAAE,MAAM;QAAEC,cAAc,EAAE,QAAQ;QAAEC,aAAa,EAAE;MAAa,CAAE;MAAAV,QAAA,eAClFnB,IAAA,CAACJ,MAAM;QAACkC,OAAO,EAAC,SAAS;QAACR,IAAI,eAAEtB,IAAA,CAACP,SAAS,IAAE,CAAE;QAACsC,OAAO,EAAEf,MAAO;QAAAG,QAAA,EAC5DD,CAAC,CAACL;MAAI,CACD;IAAC,CACN,CAAC;EAAA,CACN,CAAC;AAEP;AAEA,eAAeC,aAAa","ignoreList":[]}
|